본문으로 건너뛰기
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.

리뷰

아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.

댓글

로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.

아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.

보내면 바로 공개됩니다. 이메일 주소나 전화번호 같은 개인 정보는 쓰지 마세요. URL은 2개까지입니다.

0 / 1,000자

이 양식은 reCAPTCHA로 보호되며 Google 개인정보처리방침 및 서비스 약관이 적용됩니다.

같은 저장소의 스킬

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/grafema352026년 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/grafema352026년 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/grafema352026년 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/grafema352026년 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/grafema352026년 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/grafema352026년 8월 24일 업데이트

Disentinel의 스킬 모두 보기

이 스킬의 문제 신고