From mutils
This skill should be used when the user asks for 'N回連続レビュー', '3回連続成功', 'サブエージェントで連続レビュー', 'streak review', 'consecutive review', 'review until N passes', 'レビューが連続成功するまで', or wants iterative subagent review where past feedback is blocked from leaking into the next review. Runs a subagent review-and-fix loop until N consecutive passes are achieved, resetting the streak on any failure and invoking each subagent review with a flat, history-free prompt.
How this skill is triggered — by the user, by Claude, or both
Slash command
/mutils:consecutive-review-loopThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
サブエージェントによるレビュー&修正ループを、N 回**連続** PASS が達成されるまで繰り返す。途中で FAIL が発生した場合、streak カウンタは 0 にフルリセットされる。各サブエージェントレビューは、過去のフィードバックを一切含まないフラットプロンプトで起動しなければならない。
サブエージェントによるレビュー&修正ループを、N 回連続 PASS が達成されるまで繰り返す。途中で FAIL が発生した場合、streak カウンタは 0 にフルリセットされる。各サブエージェントレビューは、過去のフィードバックを一切含まないフラットプロンプトで起動しなければならない。
$ARGUMENTS
単発の PASS は弱い証拠である。サブエージェントが問題を見落とした可能性や、直前の修正が新たな問題を持ち込んだ可能性がある。N 回連続の独立した PASS は、成果物が健全であることのはるかに強い証拠になる。
連続 PASS を独立した証拠として数えるには、各レビューが過去のレビューについて一切知らないサブエージェントによって実施されなければならない。「これは 3 回目の試行で、前回のフィードバックは X, Y, Z でした」と伝えると、サブエージェントは過去の指摘にアンカリングし、新鮮な目で見ることをやめる。ループの意義が崩壊する。
ループ開始前に確定する。$ARGUMENTS で指定されていればその値を使い、なければデフォルト値を使用する。
レビュー対象(必須)
レビュー観点(必須)
N(連続回数)
PASS 基準
IF: 必須パラメータが不足 AND $ARGUMENTS から推論できない; THEN MUST: ループ開始前に AskUserQuestion でユーザーに確認する
function consecutiveReviewLoop(target, focus, N = 3, passCriterion = "指摘事項なし"):
flatPrompt := buildFlatPrompt(target, focus, passCriterion) # 1回だけ構築、byte-frozen
findingsLog := createFindingsLog(target) # append-only Markdown ファイル
streak := 0
attempts := 0
while streak < N:
attempts += 1
result := spawnSubagent(prompt = flatPrompt, model = "sonnet")
# 渡してはならないもの: streak, attempts, 過去の指摘, 過去の修正,
# "これは N 回目", "X に注意して" 等
if result is malformed or subagent crashed:
report("attempt #" + attempts + ": MALFORMED — 同一フラットプロンプトで再実行")
continue # PASS にも FAIL にもカウントしない
# 次のイテレーションで同じ flatPrompt を再実行
verdict := classify(result, passCriterion) # → PASS | FAIL
if verdict == PASS:
streak += 1
report("attempt #" + attempts + ": PASS — streak " + streak + "/" + N)
else:
previousStreak := streak
streak := 0 # フルリセット — streak -= 1 ではない
report("attempt #" + attempts + ": FAIL — streak reset "
+ previousStreak + " → 0")
for finding in result.findings:
valid := triageFinding(finding) # 妥当性判断: yes / no / partial
fix := if valid then applyFix(finding) # メインエージェントが直接修正
else "no fix applied"
appendToLog(findingsLog, attempts, finding, valid, fix)
reverifyArtifactValid() # compile / lint / preview 等
report("DONE — " + N + " consecutive passes in " + attempts + " attempts")
実装が保持すべき 2 つの不変条件:
flatPrompt は 1 回だけ構築され、すべての spawnSubagent 呼び出しで byte-for-byte 同一のまま再利用されるstreak / attempts / 指摘事項を保持し、サブエージェントは成果物と観点だけを見るTodoWrite リストで以下の 3 項目を追跡する。すべてのイテレーションで更新する:
streak: <current>/<N>
attempts: <total>
last result: <pass | fail | n/a>
MUST: サブエージェント呼び出し後と修正完了後の両方で TodoWrite を更新する
すべてのサブエージェントレビューに送信するプロンプトを正確に記述する。
スケルトン例(対象に合わせて調整する):
"以下の [成果物タイプ] をレビューしてください。正確 / 整形 / 一貫性があるかチェックしてください。判定を返してください: 指摘事項がなければ PASS、あれば FAIL。FAIL の場合、各指摘を箇条書きで列挙してください。"
"[成果物の内容またはパス]"
すべてのイテレーションにわたる指摘事項のトリアージと修正記録を蓄積する単一の Markdown ファイルを作成する。レビュー対象と同じ場所か .local-agents/ に配置する。
ファイル名規約: <review-target-basename>-findings-log.md
ファイルはヘッダーで始まり append-only で運用する。FAIL イテレーションごとにセクションを追記する。PASS イテレーションは記録しない。
テンプレート:
# Findings Log — <レビュー対象>
<!-- FAIL イテレーションごとに 1 セクション追記 -->
各 FAIL イテレーションで以下の形式のセクションを追記する:
## Attempt #<n>
- **Finding**: <サブエージェントからの指摘文>
- **Valid?**: yes / no / partial — <妥当性判断の根拠を 1 行で>
- **Fix**: <何をどこで変更したか(file:line または Edit の要約)>
- **Verify**: <妥当性をどう確認したか(compile / lint / preview の結果)>
Valid? フィールドに判断理由を記録し、Fix フィールドに「no fix applied」と記載する。指摘を黙って無視してはならないstreak == N になるまで繰り返す:
Step 2 のフラットプロンプトをそのまま使い、新しいサブエージェントを起動する
Agent(サブエージェント)を使用する。メインエージェントのインライン推論で代替しないmodel: sonnet を使用するPASS 基準に基づいて結果を PASS または FAIL に分類する
streak を更新する:
streak += 1streak = 0(フルリセット。直前に PASS があっても 0 に戻す)IF: FAIL; THEN: サブエージェントが挙げたすべての指摘を修正してからループを続行する
IF: 結果が malformed(明確な PASS/FAIL 判定なし、サブエージェントのクラッシュ、タイムアウト); THEN:
attempt #<n>: MALFORMED — 同一フラットプロンプトで再実行各イテレーション後に進捗を 1 行で報告する:
attempt #<n>: <PASS|FAIL> — streak <current>/<N>streak reset 2 → 0)停止条件: streak == N → 成功を宣言し、総試行回数を報告する
streak == N に達した時点で:
streak = 1 とカウント → リセットセマンティクスの誤り。FAIL が発生した時点で streak は 0 に戻るnpx claudepluginhub masseater/claude-code-plugin --plugin mutilsGuides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
Implements work from a spec or tickets using TDD at agreed seams, with regular typechecking and test runs, followed by code review.