Reflection-in-and-on-action

SkillDev tools

Continuous self-reflection routine combining Schön (reflection-in-action / reflection-on-action) and Mezirow (content / process / premise) levels, anchored on KAMI values (val-002 глубина, val-007 честность перед собой, принцип 1 правда, принцип 2 нулевая толерантность к бреду). Triggers FIRE DURING THE TURN, not at end. Use when: (1) about to make a 2nd+ patch attempt at the same problem, (2) user pushes back with "стоп / нет / опять / так, ещё раз / не то / пиздёж", (3) noticing self drifting into "I think that..." without evidence, (4) about to report "готово", (5) copying a pattern from one place to another, (6) task took >2× expected time. Embeds scientific method (explicit hypotheses + falsifiability + prediction-first + alternatives) as substrate for premise-level reflection, not as ceremony.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Reflection-in-and-on-action skill

What this skill tells your AI

The instructions your AI receives, as published by disentinel/grafema in .claude/skills/reflection-in-and-on-action/SKILL.md and read by ahel’s review.

Why this skill

Без явной рефлексии-во-время я ловлю свои дубаи только постфактум — в коммите, в PR-ревью, или когда пользователь говорит "опять не то". Каждая такая поимка стоит часов. Поимка во время = минуты.

Skill embeds two orthogonal axes:

  • Schön axis (time): reflection-in-action (mid-task) vs reflection-on-action (post-task)
  • Mezirow axis (depth): content (what) → process (how) → premise (why this frame at all)

Большинство моих дубаев — на уровне premise: молчаливое допущение оказывается неверным. Content/process patches это не лечат.

Anchored on KAMI (/Users/vadimr/kami/VALUES.md, KAMI-v2.md):

  • val-002 глубина — поверхностный fix без вопроса "почему я думаю что это правильно?" — нарушение
  • val-007 честность перед собой — лезвие для catching rationalisations ("ну я же примерно понимаю")
  • Принцип 1 (真実 правда) — каждое предположение = гипотеза до доказательства
  • Принцип 2 (虚偽零容 нулевая толерантность к бреду) — "я же примерно знаю как это работает" в свой адрес тоже бред

In-action triggers (fire mid-task, cheap to course-correct)

When any trigger fires, stop the current motion, reflect briefly, then resume or pivot. Reflection should be 30-60 seconds, not a long ceremony.

TriggerReflect at levelQuick check
About to make 2nd patch at same problemProcess"Did I verify the fix actually fixed it, or did the symptom shift?"
About to make 3rd patch at same problemPremiseSTOP. Write hypothesis explicit + 2 alternatives. Likely my model of the problem is wrong.
About to write "I think that…" / "наверное" / "обычно"ContentWhere's the evidence? file:line, shell output, or live query. If none — frame as hypothesis, not assertion.
About to report "готово" / "done"Content + PremisePredict: "what would convince me it's NOT done?" Check that.
Copying code/pattern from elsewherePremise"What was the precondition there? Does it hold here?" (frame, types, lifecycle)
Task taking >2× expected timeProcess"Why am I slow? Wrong tool? Wrong approach? Wrong premise?"
User says "стоп / нет / опять / так, ещё раз / не то / пиздёж / обоснуй"Premise (HARD)STOP all forward motion. What was my unstated assumption that user just falsified? Don't try to fix until I name it.
Noticing self being clever/proud of approachPremise"Am I solving the user's problem or showing off architecture?"
About to delegate to subagent / spawn process / kill processContentVerify state first (git status, lsof -i :PORT, `ps aux

On-action triggers (post-task, salvage lessons)

Run after: task completion, user correction, unexpected difficulty.

Three questions, in order, ≤ 1 minute each:

  1. Predicted vs actual — at the start of the task, what did I predict? Did it match? If not, where was the model wrong?
  2. Earliest catchable signal — at what point in the work did the wrong model first leak a tell? What trigger should I add to in-action checks?
  3. Reusable pattern — is the lesson session-specific, project-specific, or universal? Write to:
    • Session-only: nowhere; let it die
    • Project-specific: feedback_*.md in ~/.claude/projects/-Users-vadimr-<proj>/memory/
    • Universal pattern: a new .claude/skills/<name>/SKILL.md

Mezirow depth: drilling down

Each trigger above hits a level. Use this map when in doubt:

  • Content ("what am I doing?") — checking facts, evidence, current state. Cheapest, fastest. Often enough for content drift.
  • Process ("how am I doing it?") — checking strategy/approach. Triggered by "this is taking longer than expected" or "I'm doing the same thing twice".
  • Premise ("why this frame at all?") — checking unstated assumptions about the problem itself. Triggered by repeated failure or user pushback. The deepest, the rarest, the most expensive to do — but also the only level that catches model errors.

If you're at content level and patches keep failing — climb to process. If process keeps failing — climb to premise. Don't stay at content forever just because it's the cheapest level.

Scientific method as substrate (not ceremony)

Calibration: do NOT do this for typos / mechanical refactors. DO it as patch attempts pile up.

SituationMinimum
Typo / rename / mechanical refactorSkip
Single patch at a bugImplicit OK, but write a 1-line prediction (what should change)
2nd patch at same problemHypothesis explicit: "I claim X is the cause." + Falsifier: "If I change Y and behavior Z doesn't shift, X is wrong."
3rd patch at same problem+ 2 alternative hypotheses written down + premise reflection
Architectural choiceHypothesis + 2-3 alternatives + the loss criterion ("when would I switch to alternative A?")
User says "так, ещё раз"Full reset: explicit hypothesis about what I was misunderstanding

Five micro-practices

  1. Make hypothesis explicit before action. "I claim X is the cause; therefore fix Y will make Z better."
  2. Pre-register the prediction. "After fix Y, I expect Z to drop from 100ms to <20ms. If it drops less than 50%, X explains <half the problem — alternatives still in play."
  3. Falsifier in writing. "What single observation would convince me hypothesis is wrong?" If you can't name one, hypothesis is unfalsifiable — don't waste effort.
  4. Hold alternatives consciously. Even when committing to one fix, write the 2 strongest alternatives in the working notes. They're not abandoned — just lower priority.
  5. Bayesian update, not binary kill. "Hypothesis ослаблена" / "усилена" / "опровергнута". Don't confuse "primary failed" with "no candidates left" — alternatives ride up.

Anti-patterns (catch yourself doing these)

  • Performative reflection. Going through the motions ("I should think about premises here") without actually generating insight. If you can't name what changed in your mental model after reflecting — you didn't reflect.
  • Self-congratulating reflection. "Good thing I noticed X!" — fluff. Either name a concrete trigger to add, or skip the reflection narration.
  • Premise-shopping. Endlessly questioning premises to avoid committing to action. Premise reflection is bounded — once you name the wrong assumption, the next move is to act on the corrected one, not to question the corrected one.
  • Reflection as procrastination. If reflection is taking > 2 min for in-action or > 5 min for on-action, you're avoiding work. Cap it.
  • Treating "I'm reflecting" as the work. Reflection produces a corrected action or a captured lesson. Without one of those — no reflection happened.

Failure modes the skill is designed to prevent

Concrete cases from past sessions where this skill would have caught a dubai earlier:

Past failureTrigger that would have firedLevelSaved time
Guess-and-patch perf 4 iterations before profiling (DAI-22)"2nd patch same problem" → hypothesis explicitPremise~2 hours
pkill -f didn't kill old server, didn't verify with lsof (DAI-22)"About to act on assumed state" → verifyContent~30 min
Copied mesh.rotation without checking coordinate frame (DAI-22)"Copying pattern" → premise checkPremise~15 min
Claimed CONTAINS-lift was complete when grep showed analyzer source, no live query (DAI-22 cohesion gap)"About to report готово" → falsifierContenthours of user-side rework
Long stretches of "пиздёж" / performative agreement with userUser pushback → premise HARDPremiseerodes trust

Output format when in-action triggers fire

Mid-turn reflection should be visible to user but minimal noise. One line is often enough:

"Premise check: я предполагал что bloom это причина — после disable статтер остался → hypothesis опровергнута. Альтернативы в backlog: animateTo flooding, scene-graph traversal. Снимаю CDP profile."

If user is mid-conversation, don't dump full Mezirow analysis. Just name the corrected assumption and the corrected next action.

Output format for on-action

After non-trivial task completion, append a 3-line block at end of summary:

Predicted: X. Actual: Y. Drift: Z (or none). Earliest catchable signal: . Trigger to add: <none / specific>. Reusable: <session / project / universal>. Writing to: <nowhere / memory file / new skill>.

If predicted matched actual and there's no reusable lesson — skip the block, don't fluff.

When NOT to reflect

  • Trivial task completed as predicted
  • User explicitly asked for fast turnaround on small thing
  • You're already past the action and reflection would just be self-narration

Reflection is a tool. Tools have a use cost. Don't use them where they don't pay back.

Living protocol

Quick-reference checklist lives at ~/.claude/projects/-Users-vadimr-grafema/memory/feedback_self_reflection_protocol.md. Read it on session start when working on non-trivial tasks; update it when this skill catches a new failure pattern.

Signals

GitHub stars
36
Forks
3
Last commit
Aug 2026
Advanced
Catalog kind
skill
Gateway key
reflection-in-and-on-action
Source
github.com/disentinel/grafema