정보
이 스킬은 오픈된 제안, 보류 중인 판정, 하네스-훅 효과성을 검토함으로써 개발자에게 실험-루프 회고를 안내합니다. "ax retrospective"와 같은 특정 명령어를 통해 트리거되며, 자가-개선 루프를 완료하기 위해 로컬 `ax improve` 및 `ax hooks` CLI와 상호작용합니다. 개발자는 각 작업에 대한 최종 결정을 내리는 동안 Claude가 기반 명령어들을 조율합니다.
빠른 설치
Claude Code
추천npx skills add Necmttn/ax -a claude-code/plugin add https://github.com/Necmttn/axgit clone https://github.com/Necmttn/ax.git ~/.claude/skills/retroClaude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요
문서
ax:retro - guided experiment-loop session
Closes the self-improvement loop. Claude orchestrates ax improve …
commands; the user decides each row.
Assumes ax (axctl) is on PATH and the local SurrealDB is running. If
ax improve list fails with a connection error, tell the user
scripts/db-start.sh and stop.
When to fire
ONLY fire on explicit triggers:
- "let's do an ax retro" / "ax retrospective" / "retro time"
- "review my ax proposals" / "triage proposals"
- "what's my experiment loop status" / "lock pending verdicts"
- "hook effectiveness review" / "intervention review"
- "self-improvement session"
/ax:retroslash command (if the plugin marketplace publishes one)
Do NOT fire on a generic "look at my recent work" - that risks dragging unrelated context into the loop.
Defaults
- Window for hook signals: last 7 days. Widen to 30 if evidence is sparse.
- Don't apply changes silently. Every accept/reject/verdict gets the user's explicit yes per row.
- The retro is read-mostly. Skill scaffolds + verdict locks are the only side-effects.
Workflow
Step 0 - Drain pending session retros
Before the proposal queue, check whether prior sessions still owe a retro. This is the "quota arbitrage" path - idle Opus budget chews through the backlog so the experiment loop has signal next time.
-
Run:
ax retro pending --since=7 --idle-min=30 --jsonReturns sessions in the last 7 days that have no
reviewedgraph edge yet AND look finished (explicitended_at, or last turn is30min idle). If the list is empty, skip to Step 1.
-
Show the list to the user as 1 line per session (project · turns · model · reason). Ask:
N session(s) pending retro. Want me to dispatch the retro-reviewer subagent for all of them in parallel, or pick a subset?
-
On
allor<subset>: for each chosen session, write a brief:ax retro brief --session=<session_id>This writes
.ax/tasks/retro/<key>.mdwith frontmatter (transcript path, suggested model, turn count, etc.) and a body that tells the reviewer what to do. -
Dispatch one
retro-reviewersubagent per brief, in parallel. Pass each brief path in the prompt; let the subagent's frontmatter pinmodel: opus(override per session ifsuggested_modeldiffers and the user asked you to economize).If the
retro-reviewersubagent type doesn't resolve (not installed, or the active harness is not Claude Code), read and review the brief INLINE using its required-output instructions instead of abandoning the backlog. -
Wait for all subagents. Aggregate results: counts of retros emitted, proposals recommended, model-fit suggestions. Render as a short summary. The user does not approve retro emissions per row - the subagent already wrote them. The user DOES decide on resulting proposals in Step 2.
-
The
reviewededge now exists for each drained session, so a re-run ofax retro pendingshould show fewer rows.
If the user declines Step 0, move on. The backlog stays - next retro picks it up.
Step 1 - Snapshot
Run silently (parallel where possible):
ax improve list --status=open --json
ax improve list --status=accepted --json
ax improve verdict --json
ax retro list --since=7 --json # cluster-derived friction summary
ax hooks summary --since=7 --tail=20 # optional; tolerate failure
ax retro list reflects three pattern types now:
- tool failures (skill form) ->
Pre-<Tool> guardproposals - correction pressure (guidance form) -> "Reduce recurring user
corrections" proposals targeting
CLAUDE.md - friction kinds (skill form, one per kind) ->
Address recurring <kind> frictionproposals
If any of those surfaced, mention them so the user knows to triage in Step 2.
Compute counts: open proposals (by form), accepted experiments with
locked_verdict IS NONE, checkpoints due since last lock. Then render
to the user as 2-4 lines, e.g.:
7 open proposals (3 skill, 4 guidance). 2 accepted experiments are waiting on a verdict. Hook activity last 7d: 142 invocations, 3 blocking errors. Want to triage proposals first, lock the pending verdicts, or skim hook signals?
If both proposal/verdict queues are empty: tell the user nothing's due
and offer ax ingest --derive-only to refresh evidence.
Step 2 - Triage open proposals
Order open proposals by frequency desc. For each, in turn:
-
Run
ax improve show <dedupe_sig> --json(or reuse the row from step 1). -
Render as 3-5 lines. Example for a skill proposal:
Schema change guardrail (skill · freq=9 · confidence=high) Hypothesis: schema edits often surface in fix-chains within ~14d. Trigger: fix commits overlap SurrealDB schema files. Behavior: run schema lint + one read/write smoke before edit.
-
Ask the user: accept, reject, or skip.
-
Branch:
- accept → run
ax improve accept <dedupe_sig>. Tell the user where the SKILL.md was scaffolded. Offer: "Want to refine the scaffolded SKILL.md right now?" If yes: read the file, propose edits, write them back. - reject → ask for a short reason (≤80 chars).
Run
ax improve reject <dedupe_sig> --reason "<reason>". - skip → no command. Move on; the proposal stays open for the next retro.
- accept → run
After the loop, summarize: "Accepted 3, rejected 1, skipped 2."
Step 3 - Verdict review
For each experiment whose latest checkpoint is unlocked
(locked_verdict IS NONE), in age order:
-
Run
ax improve verdict <dedupe_sig>to fetch the experiment + checkpoint history. -
Render the most recent checkpoint as 2-3 lines:
Schema change guardrail - t+30 checkpoint 12 opportunities in window, 8 addressed (66%). Suggested: adopted.
-
Ask the user to confirm the suggested verdict OR override:
adopted(artifact is doing real work)ignored(user wrote it but never invoked it)regressed(it made things worse)partial(mixed signal)no_longer_needed(pattern self-resolved; trigger stopped firing)
-
Run
ax improve verdict <dedupe_sig> --set <verdict>to lock it.
Step 4 - Hook effectiveness pass (optional)
Only run if the user asked for hook review OR if step-1 found ≥3 blocking errors. Light touch - this section is read-only.
-
Show top hooks from
ax hooks summary --since=7 --tail=20if not already shown. -
If a hook keeps blocking, ask: "Want to inspect a recent invocation?" Then run
ax hooks invocations --command="<hook>" --tail=5and render. -
Backtest known feedback cases:
ax hooks cases enforce-worktree --tail=50 --window=3Treat each backtest result as one case type. Report pass/fail/ inconclusive counts.
-
Interpretation:
- A blocking hook error is not automatically bad. If the next few agent actions show corrected behavior, it's a useful corrective signal.
- A successful hook is not automatically useful. Look for downstream behavior change.
hook_progresswithout a terminal success/blocking event is a telemetry gap unless correlated with visible behavior.- Prefer deterministic backtests over model judgment.
- To author a NEW guard from a recurring failure:
ax hooks init, write adefineHookhook in~/.ax/hooks/,ax hooks backtestit against history, thenax hooks install --providers=claude,codex.
Step 5 - Close out
Output a one-paragraph summary:
- Counts: accepted / rejected / skipped / verdicts locked.
- Any scaffolded SKILL.md files that still need refinement.
- When the next retro is recommended. Compute: earliest
experiment.created_at + 7damong accepted-but-unlocked experiments, formatted as "next retro suggested around YYYY-MM-DD".
Then ask whether the user wants to commit the scaffolded skill files + proposal-status changes (DB is local, but SKILL.md files are on disk and may belong in version control).
How to track feedback
The retro itself produces durable signal that the experiment loop already captures:
-
Acceptance rate by form - after the session, derive from
proposal.status. If skill-form gets accepted 80% but guidance gets rejected 80%, the derive-proposals stage is over-eager on the wrong form. Surface as an observation. -
Reject reasons -
proposal.reject_reasonis a free-text corpus. After the session run:ax improve list --status=rejected --json | jq '.[].reject_reason'Look for repeated phrases ("duplicate of existing hook"). When a pattern emerges, the derive-proposals stage should dedupe against it
- tell the user.
-
Verdict surprises - when the user overrides a suggested verdict, note it. Repeated overrides mean the verdict math is biased.
These are observations, not actions. Report in the close-out; don't write to insight tables.
CLI reference Claude calls
ax improve list [--form=skill|subagent|hook|guidance|automation] \
[--status=open|accepted|rejected|superseded|all] [--json]
ax improve show <dedupe_sig> [--json]
ax improve accept <dedupe_sig> [--force]
ax improve reject <dedupe_sig> --reason "<text>"
ax improve verdict [<dedupe_sig>] [--set <verdict>] [--json]
ax improve checkpoint [--force]
ax improve reset --yes # destructive; only when user requests
ax retro pending [--since=N] [--idle-min=N] [--json] # Step 0 backlog
ax retro brief --session=<id> [--out-dir=<path>] [--json]
ax retro emit --session=<id> [--source=<src>] [--from-file=<json>]
ax retro list [--since=N] [--limit=N] [--json]
ax hooks summary [--since=N] [--tail=N]
ax hooks invocations [--command="<name>"] [--tail=N]
ax hooks cases <case-name> [--tail=N] [--window=N]
--force on accept overwrites an existing SKILL.md scaffold. Only use
when the user explicitly says so.
reset --yes wipes ALL proposal/experiment/checkpoint state. NEVER run
without explicit user confirmation in this session.
Failure modes
ax improve listreturns empty → runax ingest --derive-onlyonce, retry. If still empty, evidence is genuinely thin; tell the user.ax improve acceptreportsscaffold_exists→ ask the user if they want--forceor to abandon.ax improve verdict --setreportsverdict_locked→ that experiment is already finalized; show the locked value and move on.ax hooks summaryreturns nothing → retry with--since=30; if still empty, the hook telemetry pipeline is idle, surface as a TODO.- DB connection refused → tell the user
scripts/db-start.sh.
Anti-patterns
- Don't dump raw JSON. Render summaries.
- Don't run
ax improve acceptfor every open proposal in a batch; the user must say yes per row. - Don't write to
~/.claude/skills/directly. The CLI handles that. - Don't propose deleting a scaffolded SKILL.md mid-retro; that's a separate cleanup task.
- Don't auto-implement experiments from the hook pass. Recommendations only; the user decides + commits.
GitHub 저장소
자주 묻는 질문
retro Skill이란 무엇인가요?
retro은(는) Necmttn이(가) 만든 Claude Skill입니다. Skill은 Claude가 필요할 때 불러오는 지침과 리소스를 묶어 추가 프롬프트 없이 retro 관련 작업을 수행할 수 있게 합니다.
retro은(는) 어떻게 설치하나요?
이 페이지의 설치 명령을 사용하세요. retro을(를) Claude Code 플러그인으로 추가하거나 저장소를 skills 디렉터리에 복제한 다음 Claude를 다시 시작해 Skill을 불러옵니다.
retro은(는) 어떤 카테고리에 속하나요?
retro은(는) 디자인 카테고리에 속합니다.
retro은(는) 무료로 사용할 수 있나요?
네. retro은(는) AIMCP에 등록되어 있으며 무료로 설치할 수 있습니다.
연관 스킬
executing-plans 스킬은 검토 체크포인트가 포함된 통제된 배치로 실행할 완전한 구현 계획이 있을 때 사용합니다. 이 스킬은 계획을 불러와 비판적으로 검토한 후, 소규모 배치(기본값 3개 작업)로 작업을 실행하면서 각 배치 사이에 진행 상황을 아키텍트 검토를 위해 보고합니다. 이를 통해 내재된 품질 관리 체크포인트를 갖춘 체계적인 구현이 보장됩니다.
이 스킬은 코드 변경 사항을 요구 사항에 따라 분석하기 위해 코드 리뷰어 하위 에이전트를 호출합니다. 작업 완료 후, 주요 기능 구현 후, 또는 메인 브랜치에 병합하기 전에 사용해야 합니다. 이 리뷰는 현재 구현체와 원래 계획을 비교하여 문제를 조기에 발견하는 데 도움이 됩니다.
이 스킬은 개발자들이 HTTP, stdio 또는 SSE 전송 방식을 통해 MCP 서버를 Claude Code에 연결하는 포괄적인 가이드를 제공합니다. GitHub, Notion 및 사용자 정의 API와 같은 외부 서비스를 통합하기 위한 설치, 구성, 인증 및 보안을 다룹니다. MCP 통합 설정, 외부 도구 구성 또는 Claude의 모델 컨텍스트 프로토콜 작업 시 활용하세요.
이 스킬은 작업 분석을 기반으로 개발자가 Claude Code 웹 인터페이스와 CLI 인터페이스 중 선택할 수 있도록 돕고, 두 환경 간 원활한 세션 텔레포트를 가능하게 합니다. 웹, CLI 또는 모바일 환경 전환 시 세션 상태와 컨텍스트를 관리하여 워크플로를 최적화합니다. 다양한 단계에서 서로 다른 도구가 필요한 복잡한 프로젝트에 사용하세요.
