本文へ移動
cccskills
無料GitHub で公開

reflection-in-and-on-action

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.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md10.7 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Reflection-in-and-on-action

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: <event>. 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.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Fix Elixir/Erlang AST processing bugs in Grafema beam-analyzer. Use when: (1) Elixir parser returns MODULE node but 0 functions/calls — body nesting issue, (2) Erlang parser crashes with "cannot convert list to string" on OTP 26+ — location format changed from integer to keyword list, (3) pipe operator |> creates spurious CALL nodes instead of desugared function calls — clause ordering bug, (4) multi-module .ex files return only the first module — missing __block__ handler, (5) installing Erlang/Elixir on macOS with outdated Xcode/Clang.

日本語の概要は準備中です。原文の説明を表示しています。

Disentinel/grafema362026年8月24日 更新

Fires after fixing any non-trivial bug or regression. Asks: could the graph have caught this as a guarantee? Pairs with reflection-in-and-on-action — picks up after "earliest catchable signal" and asks the next question: was that signal expressible in graph? Triggers: (1) after any non-trivial bug fix is verified working, (2) after a regression report (something used to work, broke), (3) during step 6 (knowledge extraction) of the workflow, (4) when reflection-on-action surfaces a "would have been catchable" signal. Outcome is a triage decision (graph-reachable? rule expressible? rule sound?) and either a draft Linear issue + guarantee proposal, or a recorded "graph capability gap" note. Never auto-creates guarantees.

日本語の概要は準備中です。原文の説明を表示しています。

Disentinel/grafema362026年8月24日 更新

Fix Playwright automation failures against code-server (VS Code in browser). Use when: (1) trust dialog blocks all clicks — "monaco-dialog-modal-block intercepts pointer events", (2) button:has-text() finds wrong buttons behind modal dialog, (3) keyboard shortcuts don't work — Meta vs Control inconsistency, (4) VS Code extension activity bar icon not found by aria-label, (5) panels show placeholder text despite extension being "Connected". Covers trust dialog dismissal, keyboard shortcut hybrid mode, extension panel selectors, and database connection verification for Grafema extension.

日本語の概要は準備中です。原文の説明を表示しています。

Disentinel/grafema362026年8月24日 更新

Systematic methodology for achieving 100% backward dataflow reachability in a new language. Create gauntlet fixture, write trace, diagnose gaps, fix analyzer/algorithm, iterate to 100%. Language-agnostic process. Use when: (1) adding a new language to Grafema, (2) auditing dataflow coverage for existing language, (3) user says "/dataflow-gauntlet".

日本語の概要は準備中です。原文の説明を表示しています。

Disentinel/grafema362026年8月24日 更新

Fix docker exec hanging when starting background processes (servers, daemons) inside containers. Use when: (1) docker exec never returns despite using & or nohup, (2) background server started in container causes docker exec to hang indefinitely, (3) env_startup_command in SWE-bench or similar frameworks times out, (4) setsid/disown needed for proper process detachment in Docker. Root cause: docker exec tracks ALL processes in the exec session, not just the top-level PID.

日本語の概要は準備中です。原文の説明を表示しています。

Disentinel/grafema362026年8月24日 更新

Fix Node.js CLI tools crashing inside Docker containers when host-installed node_modules require a newer Node version than the container provides. Use when: (1) "SyntaxError: Invalid regular expression flags" with /v flag in string-width or similar packages, (2) node_modules installed on host with Node 20+ but container has Node 18, (3) `npm install` with file: protocol creates symlinks that break inside Docker, (4) pnpm workspace packages become broken symlinks in containers. Covers version detection, Node binary mounting, and npm install strategies for cross-version compatibility.

日本語の概要は準備中です。原文の説明を表示しています。

Disentinel/grafema362026年8月24日 更新

Disentinel のスキルをすべて見る

このスキルの問題を報告する