Agent Skills › Chachamaru127/claude-code-harness

Chachamaru127/claude-code-harness

GitHub

基于agent-browser CLI的浏览器自动化工具,支持页面导航、表单填写、截图及UI调试。通过AI快照工作流实现元素定位与交互,适用于网页自动化操作、状态验证及多会话管理。

119 skills 2,931

Install All Skills

npx skills add Chachamaru127/claude-code-harness --all -g -y
More Options

List skills in collection

npx skills add Chachamaru127/claude-code-harness --list

Skills in Collection (119)

基于agent-browser CLI的浏览器自动化工具,支持页面导航、表单填写、截图及UI调试。通过AI快照工作流实现元素定位与交互,适用于网页自动化操作、状态验证及多会话管理。
打开页面或确认URL 点击元素或进行表单输入 截取屏幕截图 检查UI界面或测试页面
codex/.codex/skills/agent-browser/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill agent-browser -g -y
SKILL.md
Frontmatter
{
    "name": "agent-browser",
    "context": "fork",
    "description": "Browser automation through the repo agent-browser CLI. Explicit helper for navigation, forms, screenshots, scraping, and web-app checks. Prefer Browser Use or Playwright when available. Do NOT load for: sharing URLs, embedding links, or editing screenshot files.",
    "allowed-tools": [
        "Bash",
        "Read"
    ],
    "argument-hint": "[url] [--headless]",
    "description-en": "Browser automation through the repo agent-browser CLI. Explicit helper for navigation, forms, screenshots, scraping, and web-app checks. Prefer Browser Use or Playwright when available. Do NOT load for: sharing URLs, embedding links, or editing screenshot files.",
    "description-ja": "repo の agent-browser CLI でブラウザ操作を行う明示補助スキル。ページ遷移、フォーム、スクショ、スクレイピング、Webアプリ確認向け。利用可能なら Browser Use \/ Playwright を優先。URL共有、リンク埋め込み、スクショ画像編集には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Agent Browser Skill

ブラウザ自動化を行うスキル。agent-browser CLI を使用して、UI デバッグ・検証・自動操作を実行します。


トリガーフレーズ

このスキルは以下のフレーズで自動起動します:

  • 「ページを開いて」「URLを確認して」
  • 「クリックして」「入力して」「フォームに」
  • 「スクリーンショットを撮って」
  • 「UIを確認して」「画面をテストして」
  • "open this page", "click on", "fill the form", "screenshot"

機能詳細

機能 詳細
ブラウザ自動化 See references/browser-automation.md
AI スナップショットワークフロー See references/ai-snapshot-workflow.md

実行手順

Step 0: agent-browser の確認

# インストール確認
which agent-browser

# 未インストールの場合
npm install -g agent-browser
agent-browser install

Step 1: ユーザーのリクエストを分類

リクエストタイプ 対応アクション
URL を開く agent-browser open <url>
要素をクリック スナップショット → agent-browser click @ref
フォーム入力 スナップショット → agent-browser fill @ref "text"
状態確認 agent-browser snapshot -i -c
スクリーンショット agent-browser screenshot <path>
デバッグ agent-browser --headed open <url>

Step 2: AI スナップショットワークフロー(推奨)

ほとんどの操作で、まずスナップショットを取得してから要素参照で操作します:

# 1. ページを開く
agent-browser open https://example.com

# 2. スナップショット取得(AI 向け、インタラクティブ要素のみ)
agent-browser snapshot -i -c

# 出力例:
# - link "Home" [ref=e1]
# - button "Login" [ref=e2]
# - input "Email" [ref=e3]
# - input "Password" [ref=e4]
# - button "Submit" [ref=e5]

# 3. 要素参照で操作
agent-browser click @e2           # Login ボタンをクリック
agent-browser fill @e3 "user@example.com"
agent-browser fill @e4 "password123"
agent-browser click @e5           # Submit

Step 3: 結果の確認

# 現在の状態をスナップショットで確認
agent-browser snapshot -i -c

# または URL を確認
agent-browser get url

# スクリーンショットを取得
agent-browser screenshot result.png

クイックリファレンス

基本操作

コマンド 説明
open <url> URL を開く
snapshot -i -c AI 向けスナップショット
click @e1 要素をクリック
fill @e1 "text" フォームに入力
type @e1 "text" テキストを入力
press Enter キーを押す
screenshot [path] スクリーンショット
close ブラウザを閉じる

ナビゲーション

コマンド 説明
back 戻る
forward 進む
reload リロード

情報取得

コマンド 説明
get text @e1 テキスト取得
get html @e1 HTML 取得
get url 現在の URL
get title ページタイトル

待機

コマンド 説明
wait @e1 要素を待機
wait 1000 1秒待機

デバッグ

コマンド 説明
--headed ブラウザを表示
console コンソールログ
errors ページエラー
highlight @e1 要素をハイライト

セッション管理

複数のタブ/セッションを並列管理:

# セッションを指定
agent-browser --session admin open https://admin.example.com
agent-browser --session user open https://example.com

# セッション一覧
agent-browser session list

# 特定セッションで操作
agent-browser --session admin snapshot -i -c

MCP ブラウザツールとの使い分け

ツール 推奨度 用途
agent-browser ★★★ 第一選択。AI 向けスナップショットが強力
chrome-devtools MCP ★★☆ Chrome が既に開いている場合
playwright MCP ★★☆ 複雑な E2E テスト

原則: まず agent-browser を試し、うまくいかない場合のみ MCP ツールを使用。


注意事項

  • agent-browser はヘッドレスモードがデフォルト
  • --headed オプションでブラウザを表示可能
  • セッションは明示的に close するまで維持される
  • 認証が必要なサイトはセッションを活用
用于实现基于Clerk、Supabase或Stripe的认证与支付功能。执行前需通过严格的安全检查清单,防范数据泄露和欺诈风险,确保密码哈希、会话安全及金额防篡改。
用户请求实现登录注册功能 用户请求集成Stripe支付网关 涉及用户身份验证逻辑开发 需要处理敏感支付数据
codex/.codex/skills/auth/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill auth -g -y
SKILL.md
Frontmatter
{
    "name": "auth",
    "description": "Explicit helper for authentication and payment implementation with Clerk, Supabase Auth, or Stripe. Do NOT load for: general UI work, database design, or non-auth features.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "description-en": "Explicit helper for authentication and payment implementation with Clerk, Supabase Auth, or Stripe. Do NOT load for: general UI work, database design, or non-auth features.",
    "description-ja": "Clerk、Supabase Auth、Stripe を使う認証・決済実装の明示補助スキル。一般的なUI作業、データベース設計、認証以外の機能には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Auth Skills

認証と決済機能の実装を担当するスキル群です。

機能詳細

機能 詳細
認証機能 See references/authentication.md
決済機能 See references/payments.md

実行手順

  1. 品質判定ゲート(Step 0)
  2. ユーザーのリクエストを分類(認証 or 決済)
  3. 上記の「機能詳細」から適切な参照ファイルを読む
  4. その内容に従って実装

Step 0: 品質判定ゲート(セキュリティチェックリスト)

認証・決済機能は常にセキュリティリスクが高いため、作業開始前に必ず以下を表示:

🔐 セキュリティチェックリスト

この作業はセキュリティ上重要です。以下を確認してください:

### 認証関連
- [ ] パスワードはハッシュ化(bcrypt/argon2)
- [ ] セッション管理は安全か(HTTPOnly Cookie)
- [ ] CSRF 対策は実装されているか
- [ ] レート制限(ブルートフォース対策)

### 決済関連
- [ ] 機密情報(カード番号等)をサーバーに保存しない
- [ ] Stripe/決済プロバイダの SDK を正しく使用
- [ ] Webhook の署名検証
- [ ] 金額改ざん防止(サーバー側で金額を確定)

### 共通
- [ ] エラーメッセージが詳細すぎないか(情報漏洩防止)
- [ ] ログに機密情報を出力していないか

セキュリティ重要度表示

⚠️ 注意レベル: 🔴 高

この機能は以下のリスクがあります:
- 認証情報の漏洩
- 不正アクセス
- 決済の不正操作

専門家によるレビューを推奨します。

VibeCoder 向け

🔐 安全にログイン・決済機能を作るために

1. **パスワードは「ハッシュ化」する**
   - 元のパスワードを復元できない形で保存
   - 万が一データが漏れても安全

2. **カード情報はサーバーに保存しない**
   - Stripe などの専用サービスに任せる
   - 自分のサーバーには一切保存しない

3. **エラーメッセージは曖昧に**
   - 「パスワードが違います」ではなく「認証に失敗しました」
   - 悪意ある人にヒントを与えない
Breezing是团队执行模式的后向兼容别名,用于在Codex Host中协调任务执行。支持通过CLI参数或环境变量选择Claude、Codex或Cursor后端,管理并行Worker数量,并强制Lead与Worker分离的协作流程。
需要以团队模式执行多个代码任务 指定使用Cursor或Codex作为工作后端 控制并发Worker数量进行批量处理 Composer/2.5等自然语言触发团队协作
codex/.codex/skills/breezing/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill breezing -g -y
SKILL.md
Frontmatter
{
    "base": "harness-work",
    "kind": "workflow",
    "name": "breezing",
    "pair": "harness-review",
    "role": "orchestrator",
    "owner": "harness-core",
    "shape": "wrap",
    "since": "2026-05-05",
    "effort": "high",
    "purpose": "Wrap harness-work with Codex-host team execution orchestration",
    "trigger": "breezing, team execution, do everything, cursor worker, composer, composer 2.5, composer mode, コンポーザー",
    "description": "Team execution mode (Codex host) — backward-compatible alias for harness-work with backend selection, including opt-in Cursor worker delegation. Composer\/composer 2.5 maps to the cursor backend.",
    "allowed-tools": [
        "Read",
        "Bash",
        "spawn_agent",
        "send_input",
        "wait_agent",
        "close_agent"
    ],
    "argument-hint": "[all|N-M|--backend claude|codex|cursor|--cursor|--codex|--max-workers N|--no-discuss]",
    "description-en": "Team execution mode (Codex host) — backward-compatible alias for harness-work with backend selection, including opt-in Cursor worker delegation. Composer\/composer 2.5 maps to the cursor backend.",
    "description-ja": "チーム実行モード(Codex ホスト版)— harness-work のチーム協調エイリアス。Codex からも opt-in で Cursor worker backend に委譲できる。breezing, チーム実行, 全部やって, composer, コンポーザー, composer 2.5 でトリガー。",
    "user-invocable": true
}

Breezing — Team Execution Mode (Codex Host)

この SKILL.md は Codex host 版です。 Claude Code 版は skills/breezing/SKILL.md を参照してください。 backend は resolver で選びます。配布 plugin のフラグなし既定は claude 互換のままです。 --cursor / --backend cursor、または HARNESS_IMPL_BACKEND=cursor を設定した環境では Cursor worker backend を使います。 frontmatter の allowed-tools も、この4つの Codex native tool 名に合わせます。

後方互換エイリアス: harness-work --breezing をチーム実行モードで動かします。

Quick Reference

breezing                        # スコープを聞いてから実行
breezing all                    # resolved backend で ready task を完走(配布既定は claude、現環境は user config で cursor 可)
breezing 3-6                    # resolved backend でタスク3〜6を完走
breezing composer 2.5 all       # 自然言語 trigger: cursor backend として扱う
breezing --backend cursor all    # Cursor worker backend を明示
breezing --backend claude all    # Codex native spawn_agent worker を明示
breezing --codex all             # Codex CLI worker backend を明示
breezing --cursor all            # Cursor worker backend を明示
breezing --max-workers 2 all     # ready task の同時 spawn 上限を2に
breezing --max-workers 1 all     # 旧来の直列挙動に戻す
breezing --no-discuss all       # 計画議論スキップで全タスク完走

Options

Option Description Default
all 全未完了タスクを対象 -
N or N-M タスク番号/範囲指定 -
--backend <claude|codex|cursor> worker backend を明示選択 resolver result(配布既定は claude)
--cursor --backend cursor の別名 false
--codex --backend codex の別名 false
--max-workers N ready task の同時 spawn 数上限(breezing 固有オプション)。1 で旧来の直列挙動 max
--no-commit 非対応(Breezing では Worker の一時 commit と Lead の cherry-pick が必須) -
--no-discuss 計画議論スキップ false

Execution

このスキルは harness-work --breezing に委譲します。 以下の設定で実行してください:

  1. 引数を harness-work --breezing に渡す--max-workers N は breezing 固有オプションとして解釈し、harness-work--parallel とは別概念)
  2. チーム実行モードを強制 — Lead → Worker spawn → 必要時 Advisor → companion review Reviewer の四者分離
  3. Lead は delegate 専念 — コードを直接書かない

Execution Backend (persistent)

バックエンド選択(worker を claude / codex / cursor のどれで実装するか)の正本は harness-work の「Execution Backend Selection(実装バックエンド選択)」を参照する。 そこに precedence、role-scope(review / advisor は Opus 固定)、self_review スキップ、cursor banner が定義されている。 backend 判定は 必ず resolver 経由にし、HARNESS_IMPL_BACKEND env だけを直読みしない。

Codex Breezing も配布 plugin では call-site default を変えない:

bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh"

precedence は --backend / --cursor / --codex > HARNESS_IMPL_BACKEND env > project env.local > user ~/.config/claude-harness/impl-backend.env > call-site default claude。 つまり配布 plugin のフラグなし breezing all は互換性のため claude のまま。 この環境のように user/project config で HARNESS_IMPL_BACKEND=cursor が設定されている場合だけ、 フラグなしで Cursor worker backend になる。Codex native subagent worker を明示する時は --backend claude を指定する。

composer / コンポーザー / Composer で / composer 2.5 / composer モード は、正式に cursor backend の trigger として扱う。 これは --cursor 相当の intent であり、Lead は resolve-impl-backend.sh を経由して backend を確定する。 解決時は明示 override として --backend cursor を渡し、env / project / user file / default より優先させる。 composer は Codex native Worker の内側に spawn する追加 agent ではなく、非 claude backend の規約どおり Lead が cursor-companion.sh を直接呼ぶ。

既定の worker 数は max。 ここでの max は「対象スコープ内で Depends が満たされ、今すぐ実行できる ready task の最大数」を意味する。 無制限に Worker を spawn する意味ではない。 依存待ちのタスクは、前段タスクが完了して ready になるまで spawn しない。 旧来の 1 件ずつ進める直列挙動に戻したい場合は --max-workers 1 を指定する。

Worker の実装は並列化できるが、レビューと main への cherry-pick は直列で行う。 これは同じ main worktree への書き込み競合を避けるため。

harness-work との違い

特徴 harness-work breezing (このスキル)
デフォルトモード Solo / Sequential Breezing(チーム実行)
並列手段 companion task Bash 並列 spawn_agent によるサブエージェント委譲
Lead の役割 調整+実装 delegate (調整専念)
レビュー Lead 自己レビュー companion review 独立レビュー
デフォルトスコープ 次のタスク 全部

Team Composition(Codex Native)

Role 実行方式 権限 責務
Lead (self) 現セッション継承 調整・指揮・タスク分配・cherry-pick
Worker ×N resolver result: spawn_agent / codex-companion.sh / cursor-companion.sh task --write --workspace <worktree> セッション権限継承 実装(git worktree 分離)
Advisor claude-code-harness:advisor 読み取り専用 方針助言 (PLAN / CORRECTION / STOP)
Reviewer companion review --base read-only 独立レビュー

Flow Summary

breezing [scope] [--backend claude|codex|cursor] [--max-workers N] [--no-discuss]
    │
    ↓ Load harness-work --breezing
    │
Phase 0: Planning Discussion (--no-discuss でスキップ)
Phase A: Pre-delegate(チーム初期化 + worktree 準備)
Phase B: Delegate(resolver-selected worker + 必要時 Advisor + companion review レビュー)
Phase C: Post-delegate(統合検証 + Plans.md 更新 + commit)

Advisor Protocol

Worker は generic な subagent を増やさない。 迷った時は構造化 JSON で相談要求だけ返し、Lead が advisor を呼ぶ。

  1. Worker → advisor-request.v1
  2. Lead → Advisor
  3. Advisor → advisor-response.v1
  4. Lead → 同じ Worker に advice を返して続行
  5. Reviewer は最後の成果物だけを見る

相談条件は loop / solo とそろえる。

  • 高リスク task(needs-spike / security-sensitive / state-migration)の初回実行前
  • 同じ原因の失敗が 2 回続いた後
  • plateau により PIVOT_REQUIRED を返す直前
  • 同じ trigger_hash は 1 回だけ。task ごとの相談回数は最大 3 回

Realtime Handoff / Silence Policy

Codex 0.123.0 以降では、background agent が realtime handoff の transcript delta を受け取れる。 Breezing ではこの仕組みを「余計な通知を増やす入口」ではなく、「必要な時だけ判断を更新するための入力」として扱う。

ひとことで: Worker / Advisor / Reviewer は、状態が変わらない transcript delta には反応せず、Lead への報告は material state change に絞る。

たとえると、複数人の作業部屋で全員が独り言を実況するのではなく、担当作業が終わった時、詰まった時、判断待ちの時だけ声をかける形。

報告するもの:

  • Worker の完了 JSON、blocked 理由、必要な advisor-request.v1
  • Advisor の PLAN / CORRECTION / STOP
  • Reviewer の APPROVE / REQUEST_CHANGES
  • validation failure、contract readiness failure、plateau、drift 検知
  • Lead が出す task 完了単位の progress feed

沈黙してよいもの:

  • transcript delta を受け取っただけで、task status、review verdict、advisor decision が変わっていない場合
  • tool stdout の細かな増分で、job log に残っていれば十分なもの
  • parallel spawn 中の待機 heartbeat。待機は wait_agent / job status に任せる

途中報告の頻度:

  • Lead の progress feed は task 完了ごとに 1 回を基本にする。
  • Worker / Reviewer は「完了・差し戻し・ブロック」の結果だけを返し、delta ごとの小報告は避ける。
  • user が明示的に status を求めた場合だけ、Lead がまとめて現在地を返す。

Advisor / Reviewer drift との関係:

  • silence policy は Advisor / Reviewer を黙らせる免除ではない。
  • advisor-request.v1 送信後に response が返らない、reviewer profile に必要な result がない、review loop が plateau した場合は drift として扱う。
  • Advisor は方針助言、Reviewer は品質判定という役割分離を維持し、沈黙は「不要な通知を出さない」ためだけに使う。

Phase 0: Planning Discussion(構造化 3 問チェック)

全タスク実行前に、以下の 3 問で計画の健全性を確認する。 --no-discuss 指定時は全スキップ。

Q1. スコープ確認:

「{{N}} 件のタスクを実行します。スコープは適切ですか?」

Q2. 依存関係確認(Plans.md に Depends カラムがある場合のみ):

「タスク {{X}} は {{Y}} に依存しています。実行順序は合っていますか?」

Q3. リスクフラグ[needs-spike] タスクがある場合のみ):

「タスク {{Z}} は [needs-spike] です。先に spike しますか?」

Phase A: Pre-delegate

  1. Plans.md を読み込み、対象タスクを特定
  2. 依存グラフを解析し、実行順序を決定
  3. 各タスク用に git worktree を作成

Phase B: Delegate(Codex Host Orchestration)

for task in execution_order:
    # B-0. 作業ディレクトリ分離
    worktree_path = "/tmp/worker-{task.number}-$$"
    branch_name = "worker-{task.number}-$$"
    git worktree add -b {branch_name} {worktree_path}
    TASK_BASE_REF = git rev-parse HEAD

    # B-1. sprint-contract を生成
    contract_path = bash("node \"${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js\" {task.number}")
    contract_path = bash("scripts/enrich-sprint-contract.sh {contract_path} --check \"DoD を reviewer 観点で確認\" --approve")
    bash("scripts/ensure-sprint-contract-ready.sh {contract_path}")

    # B-2. Worker 委託
    Plans.md: task.status = "cc:WIP"

    resolver_backend_arg = ""
    if explicit_backend_value in ["claude", "codex", "cursor"]:
        resolver_backend_arg = "--backend {explicit_backend_value}"
    backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
    if explicit_flag == "--cursor":
        backend = "cursor"
    if explicit_flag == "--codex":
        backend = "codex"

    if backend == "cursor":
        print("🚀 cursor / $(bash \"${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh\" --host cursor --role worker --field model) / {branch_name} / {task.ID}")
        companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
        companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if git("-C", worktree_path, "status", "--porcelain") != "":
            git("-C", worktree_path, "add", "-A")
            git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: breezing delegated change")
            latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if latest_commit == TASK_BASE_REF:
            raise EscalationError("cursor companion produced no commit")
        worker_result = {type: "companion-result.v1", baseCommit: TASK_BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: branch_name, files_changed: git("-C", worktree_path, "diff", "--name-only", "{TASK_BASE_REF}..HEAD"), summary: companion_output}
        worker_id = null
    elif backend == "codex":
        companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
        companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
        companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if latest_commit == TASK_BASE_REF:
            raise EscalationError("codex companion produced no commit")
        worker_result = {type: "companion-result.v1", baseCommit: TASK_BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: branch_name, files_changed: git("-C", worktree_path, "diff", "--name-only", "{TASK_BASE_REF}..HEAD"), summary: companion_output}
        worker_id = null
    else:
        print("🚀 claude / native-subagent / {branch_name} / {task.ID}")
        worker_id = spawn_agent({
            message: "作業ディレクトリ: {worktree_path} で作業してください。\n\nタスク: {task.内容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\n\n実装してください。完了後 git commit してください。\n\n完了時、以下の JSON を返してください:\n{\"commit\": \"<hash>\", \"files_changed\": [...], \"summary\": \"...\"}",
            fork_context: true
        })
        worker_result = wait_agent({ targets: [worker_id] })

    # B-3. Worker が advice request を返した時だけ、Lead が Advisor を呼ぶ
    if backend == "claude" and worker_result.type == "advisor-request.v1":
        advisor_id = spawn_agent({
            agent_type: "default",
            message: worker_result.request_json,
            fork_context: true
        })
        advisor_result = wait_agent({ targets: [advisor_id] })
        close_agent({ target: advisor_id })
        send_input({
            target: worker_id,
            message: "advisor-response.v1: {advisor_result}"
        })
        worker_result = wait_agent({ targets: [worker_id] })

    # B-4. Lead がレビュー実行(TASK_BASE_REF 起点)
    # 公式プラグイン companion review を使用(harness-work の「レビューループ」参照):
    #   bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" review --base {TASK_BASE_REF}
    #   → verdict マッピング: approve→APPROVE, needs-attention→REQUEST_CHANGES
    VERDICT = review_task(worktree_path, TASK_BASE_REF)  # static review(harness-work 参照)
    PROFILE = jq(contract_path, ".review.reviewer_profile")
    BROWSER_MODE = jq(contract_path, ".review.browser_mode // \"scripted\"")
    REVIEW_INPUT = "review-output.json"
    if PROFILE == "runtime":
        # worktree 内で runtime checks を実行
        REVIEW_INPUT = bash("cd {worktree_path} && scripts/run-contract-review-checks.sh {contract_path}")
        RUNTIME_VERDICT = jq(REVIEW_INPUT, ".verdict")
        if RUNTIME_VERDICT == "REQUEST_CHANGES":
            VERDICT = "REQUEST_CHANGES"
        elif RUNTIME_VERDICT == "DOWNGRADE_TO_STATIC":
            REVIEW_INPUT = "review-output.json"  # static review にフォールバック
    if PROFILE == "browser":
        # browser artifact は PENDING_BROWSER scaffold。reviewer agent が後続で実行。
        BROWSER_ARTIFACT = bash("scripts/generate-browser-review-artifact.sh {contract_path}")
        # REVIEW_INPUT は static review のまま維持
    if REVIEW_INPUT != "review-output.json" and jq(REVIEW_INPUT, ".verdict") == "DOWNGRADE_TO_STATIC":
        REVIEW_INPUT = "review-output.json"
    bash("scripts/write-review-result.sh {REVIEW_INPUT} {commit_hash}")

    # B-5. 修正ループ(REQUEST_CHANGES 時、contract の max_iterations まで)
    review_count = 0
    # sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
    MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    while VERDICT == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
        if backend == "claude":
            send_input({
                target: worker_id,
                message: "指摘内容: {issues}\n修正して git commit --amend してください。修正後 JSON を再出力してください。"
            })
            wait_agent({ targets: [worker_id] })
        elif backend == "cursor":
            previous_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"Review findings:\n{issues}\n\nFix the findings and create one new git commit before returning.\"")
            latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            if git("-C", worktree_path, "status", "--porcelain") != "":
                git("-C", worktree_path, "add", "-A")
                git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: breezing review fix")
                latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            if latest_commit == previous_commit:
                raise EscalationError("cursor companion retry produced no new commit")
        else:
            previous_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
            bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"Review findings:\n{issues}\n\nFix the findings and create one new git commit before returning.\"")
            latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            if latest_commit == previous_commit:
                raise EscalationError("codex companion retry produced no new commit")
        VERDICT = review_task(worktree_path, TASK_BASE_REF)
        review_count++

    # B-6. Worker 終了
    if backend == "claude":
        close_agent({ target: worker_id })

    # B-7. 結果処理
    if VERDICT == "APPROVE":
        commit_hash = git("-C", worktree_path, "rev-parse", "HEAD")
        git cherry-pick --no-commit {TASK_BASE_REF}..{commit_hash}
        git commit -m "{task.内容}"
        Plans.md: task.status = "cc:完了 [{short_hash}]"
    else:
        → ユーザーにエスカレーション(Plans.md は cc:WIP のまま)
        → 後続タスクも停止

    # B-8. Worktree クリーンアップ
    git worktree remove {worktree_path}
    git branch -D {branch_name}

    # B-9. Progress feed
    print("📊 Progress: Task {completed}/{total} 完了 — {task.内容}")

ready task の並列 spawn(既定 max / --max-workers N 指定時)

Depends が満たされた ready task が複数ある場合、既定では ready task の数まで同時 spawn する。 --max-workers N を指定すると、同時 spawn 数を N 件までに制限する。 --max-workers 1 は旧来の直列挙動に戻す escape hatch。

wait_agent のセマンティクス: wait_agent({targets: [a, b]}) は最初に完了した1つを返す(全完了待ちではない)。 したがって、全 Worker の完了を待つにはループで個別に wait_agent を呼ぶ。

# 独立タスク A, B を並列 spawn(各自 worktree 分離済み)
worker_a = spawn_agent({ message: "作業ディレクトリ: /tmp/worker-a-$$ ...", fork_context: true })
worker_b = spawn_agent({ message: "作業ディレクトリ: /tmp/worker-b-$$ ...", fork_context: true })

# 各 Worker の完了を個別に待ち → レビュー → cherry-pick(直列)
# wait_agent は最初の1つを返すので、残りの Worker はまだ動作中
for worker_id in [worker_a, worker_b]:
    wait_agent({ targets: [worker_id] })    # この Worker の完了を待つ
    VERDICT = review_task(worktree_path, TASK_BASE_REF)  # harness-work 参照
    # 修正ループ(必要なら)...
    close_agent({ target: worker_id })
    if VERDICT == "APPROVE":
        cherry-pick → Plans.md 更新

制約: 並列化できるのは Depends が満たされた ready task のみ。 max は ready task 数の上限であり、無制限 spawn ではない。 レビュー → cherry-pick は直列実行(main への書き込みが競合するため)。

Worker の出力契約

Worker プロンプトには、完了時に以下の JSON を返すことを明示する:

{
  "commit": "a1b2c3d",
  "files_changed": ["src/foo.ts", "tests/foo.test.ts"],
  "summary": "foo モジュールに bar 機能を追加"
}

Lead はこの JSON を解析して commit hash とファイル一覧を取得する。

Progress Feed(Phase B 中の進捗通知)

📊 Progress: Task 1/5 完了 — "harness-work に失敗再チケット化を追加"
📊 Progress: Task 2/5 完了 — "harness-sync に --snapshot を追加"

完了報告(Phase C)

全タスク完了後、Lead が以下の手順でリッチ完了報告を生成:

  1. git log --oneline {session_base_ref}..HEAD で全 cherry-pick コミットを収集
  2. git diff --stat {session_base_ref}..HEAD で全体の変更規模を取得
  3. Plans.md の残タスクを抽出
  4. Breezing テンプレートに従い出力

Claude Code 版との差分

項目 Claude Code 版 Codex ネイティブ版(本ファイル)
Worker spawn Claude Code Agent tool + worktree isolation resolver result: spawn_agent, codex-companion.sh, or cursor-companion.sh + git worktree add
完了待ち Agent の戻り値 wait_agent({targets: [id]})
修正指示 Claude Code message tool send_input({target, message})
Worker 終了 自動 close_agent({target})
レビュー Codex exec → Reviewer agent fallback companion review --base(構造化出力)
権限 bypassPermissions + hooks companion task --write / spawn_agent: セッション権限継承
Agent Teams CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 環境変数 Codex native(標準機能)
Worktree isolation="worktree" 自動管理 git worktree add/remove 手動管理
モード昇格 タスク4件以上で自動 --breezing 明示時のみ

Related Skills

  • harness-work — 単一タスクからチーム実行まで(本体)
  • harness-sync — 進捗同期
  • harness-review — コードレビュー
支持双Agent工作流,将头脑风暴内容发送至Cursor PM进行可行性验证与任务拆解。通过提取上下文、生成验证请求并引导交互,实现从规划到实现的闭环协作,适用于多Agent计划校验场景。
向Cursor PM发送头脑风暴内容进行可行性验证 双Agent模式下的计划校验与交接
codex/.codex/skills/cc-cursor-cc/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cc-cursor-cc -g -y
SKILL.md
Frontmatter
{
    "name": "cc-cursor-cc",
    "description": "Validate brainstorm with Cursor PM, update Plans.md, handoff back. Cursor↔CC 2-agent workflow. Triggers: Cursor PM handoff, 2-agent plan validation, brainstorm review. Skip for: implementation, single-agent.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "description-en": "Validate brainstorm with Cursor PM, update Plans.md, handoff back. Cursor↔CC 2-agent workflow. Triggers: Cursor PM handoff, 2-agent plan validation, brainstorm review. Skip for: implementation, single-agent.",
    "description-ja": "Cursor PM でアイデアを検証し Plans.md を更新してバトンタッチ。Cursor ↔ Claude Code 2-Agent ワークフロー対応。Use when user mentions Cursor PM handoff, 2-agent plan validation, CC-Cursor round trip, or brainstorm review. Do NOT load for: implementation work, single-agent tasks, or direct coding.",
    "user-invocable": false,
    "disable-model-invocation": true
}

CC-Cursor-CC Skill (Plan Validation Round Trip)

Supports the flow of sending brainstormed content from Claude Code to Cursor (PM) for feasibility validation.

Prerequisites

This skill assumes 2-agent operation.

Role Agent Description
PM Cursor Validate plans, update Plans.md
Impl Claude Code Brainstorming, implementation

Execution Flow

Step 1: Extract Brainstorming Context

Extract from recent conversation:

  1. Goal (feature/purpose)
  2. Technology choices
  3. Decisions made
  4. Undecided items
  5. Concerns

Step 2: Add Provisional Tasks to Plans.md

## 🟠 Under Validation: {{Project}} `pm:awaiting-validation`

### Provisional Tasks (To Validate)
- [ ] {{task1}} `awaiting-validation`
- [ ] {{task2}} `awaiting-validation`

### Undecided Items
- {{item1}} → **Requesting PM decision**

Step 3: Generate Validation Request for Cursor

Generate text to copy-paste to Cursor:

## 📋 Plan Validation Request

**Goal**: {{summary}}

**Provisional tasks**:
1. {{task1}}
2. {{task2}}

### ✅ Requesting Cursor (PM) to:
1. Validate feasibility
2. Break down tasks
3. Decide undecided items
4. Update Plans.md (awaiting → cc:TODO)

Step 4: Guide Next Action

  1. Copy & paste request to Cursor
  2. Run /plan-with-cc in Cursor
  3. Cursor updates Plans.md
  4. Cursor runs /handoff-to-claude
  5. Copy & paste back to Claude Code

Overall Flow

Claude Code (Brainstorm)
    ↓ /cc-cursor-cc
Cursor (PM validates & breaks down)
    ↓ /handoff-to-claude
Claude Code (/work implements)
用于审查Claude/Codex更新PR,防止Feature Table仅文档化而无实现。自动检测diff并分类为已实现(A)、仅文档(B)或上游继承(C),强制要求B类补充实现方案。
审查Claude Code或Codex上游更新集成PR时 检测到docs/CLAUDE-feature-table.md有新行增加时 /harness-review判定为上游更新集成PR的内部调用时
codex/.codex/skills/cc-update-review/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cc-update-review -g -y
SKILL.md
Frontmatter
{
    "name": "cc-update-review",
    "description": "Quality guardrail for Claude\/Codex update integration. Detects doc-only Feature Table additions and requires implementation or explicit planning. Internal use only.",
    "allowed-tools": [
        "Read",
        "Grep",
        "Glob",
        "Bash"
    ],
    "description-en": "Quality guardrail for Claude\/Codex update integration. Detects doc-only Feature Table additions and requires implementation or explicit planning. Internal use only.",
    "description-ja": "Claude\/Codex upstream update 統合の品質ガードレール。Feature Table 追加時に「書いただけ」を検出し、実装または Plans 化を強制する。内部専用。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Claude/Codex Update Review ガードレール

Claude Code / OpenAI Codex のアップデート統合時に「Feature Table に書いただけ」を防止する品質ガードレール。 Feature Table への追加が実装・検証・明示的な将来タスク化を伴っているかを分類し、不足があれば実装案を強制出力する。

Quick Reference

以下の状況でこのスキルがトリガーされる:

  • Claude Code / Codex upstream update 統合 PR のレビュー時
  • docs/CLAUDE-feature-table.md に新行が追加された diff を検出した時
  • /harness-review が upstream update 統合 PR と判定した場合の内部呼び出し
  • claude-codex-upstream-update スキル更新のレビュー時

トリガーしない状況:

  • 通常の実装作業
  • Feature Table / upstream 追従に関係しない変更
  • セットアップ・初期化作業

差分入力の取得

このスキルは diff-aware review 専用のため、必ず以下のどちらかでレビュー対象差分を確定する。

  1. 呼び出し元の /harness-review が PR diff / changed files / Feature Table 追加行を渡す
  2. このスキル自身が read-only Bash で git status --short, git diff --name-only, git diff -- docs/CLAUDE-feature-table.md, git show --stat --name-only などを実行して確認する

Bash は read-only git inspection のみに使う。テスト実行、format、生成、network access、ファイル変更を伴うコマンドは実行しない。 diff が取得できない場合は B: 書いただけ 0 件 と推定せず、「差分未提供のため分類不能」としてレビューを止める。

前提チェック

レビュー冒頭で必ず確認する:

  • diff source が呼び出し元提供または read-only git inspection のどちらかで確定しているか
  • skills/hooks/ を編集した PR の場合、直後に /reload-plugins を実行して runtime cache を更新したか({skills,hooks}/** ガイドライン準拠)
  • upstream のバージョン別分解表があるか
  • Claude Code の一次情報 URL が anthropics/claude-code または公式 docs になっているか
  • Codex の一次情報 URL が openai/codex/releases または OpenAI 公式記事になっているか
  • B: 書いただけ が残っていないか
  • skill mirror を触る場合、skills/, codex/.codex/skills/, .agents/skills/ の差分が意図通りか

禁止する古い参照:

  • 旧 TypeScript guardrail path
  • 旧 TypeScript implementation glob
  • 旧 Codex feature-table path
  • 旧 Codex plugin directory
  • 旧 Codex state directory を現行正本として扱う記述
  • 存在しない Anthropic 側 Codex repo URL

A/B/C/P 分類

Feature Table に追加された各項目を、以下の A/B/C/P のいずれかに分類する。

(A) 実装あり

定義: Feature Table の追加に対応する hooks / settings / Go / scripts / agents / skills / tests の変更が同じ PR に含まれている。

判定条件:

  • Feature Table の行で言及されている機能に関連するファイルが変更されている
  • hooks/hooks.json, .claude-plugin/hooks.json, .claude-plugin/settings.json, go/internal/guardrail/, go/internal/hookhandler/, scripts/, agents/, skills/, tests/ のいずれかに実体差分がある
  • 対象テストまたは検証スクリプトで固定されている

例:

Feature Table 追加 対応する実装変更 判定
AskUserQuestion updatedInput Go handler + hooks wiring + upstream integration test A
sandbox.network.deniedDomains .claude-plugin/settings.json + jq test A
find -delete hardening go/internal/guardrail/ + unit test A

結果: OK。追加のアクション不要。


(B) 書いただけ

定義: Feature Table にのみ行が追加され、Harness 側の実装変更も Plans 化もない。かつ upstream 自動継承にも該当しない。

判定条件:

  • Feature Table に新行がある
  • 同じ PR 内で関連する実装 / test / skill / Plans の変更がない
  • Harness が独自の付加価値を提供すべき機能である

例:

Feature Table 追加 対応する実装変更 判定
PreCompact hook なし B
permission hardening settings / guardrail / tests の確認なし B
Codex marketplace Plans への切り出しなし B

結果: NG。PR をブロックし、実装案または Plans 化を要求する。


(C) upstream 自動継承

定義: Claude Code / Codex 本体のパフォーマンス改善・バグ修正・内部最適化等で、Harness 側の変更が不要な項目。

判定条件:

  • upstream 本体の修正であり、Harness がラップ・拡張する余地がない
  • Harness の settings / hooks / guardrail / workflow / tests に影響しない
  • Feature Table に「upstream 自動継承」または「CC 自動継承 / Codex 側自動継承」と明記されている

注意:

  • permission / sandbox / security / Bash allowlist / MCP trust boundary は安易に C にしない
  • その項目が Harness の独自 guardrail や settings に影響しないことを確認してから C にする
  • Claude Code 2.1.113 の hardening は、sandbox.network.deniedDomains, wrapper Bash deny, find -exec/-delete, macOS dangerous rm paths を確認するまで C 判定しない

例:

Feature Table 追加 理由 判定
Agent Teams permission dialog crash fix CC 本体の crash fix。Harness 側変更不要 C
Codex Guardian timeout wording Codex 側 UX 修正。Harness surface なし C

結果: OK。ただし理由を明記する。


(P) Plans 化

定義: 今回は直接実装しないが、Harness に取り込む価値があるため Plans.md に明示タスクとして残す項目。

判定条件:

  • Feature Table の付加価値列が A: 将来タスク化 または P: Plans 化 として読める
  • Plans.md に対応タスクがあり、setup / guardrails / memory / Codex workflow など実装面が明記されている
  • alpha release や大規模設計変更など、即実装しない理由が書かれている

例:

Feature Table 追加 Plans への切り出し 判定
Codex marketplace / MCP Apps Codex workflow 比較軸タスク P
Codex 0.122.0-alpha stable 化後の compare 調査タスク P

結果: OK。次回 cycle で拾える。

Upstream update PR チェックリスト

## Claude/Codex update 統合チェックリスト

### 1. 一次情報と分解表
- [ ] diff source が呼び出し元提供または read-only git inspection のどちらかで確定している
- [ ] Claude / Codex の公式 URL を確認した
- [ ] Version / Upstream item / Category / Harness surface / Action の表がある
- [ ] alpha / stable / docs-only の区別がある

### 2. Feature Table 差分
- [ ] `docs/CLAUDE-feature-table.md` の追加行を列挙した
- [ ] 各行に A / C / P のいずれかが付いている
- [ ] B が 0 件である

### 3. カテゴリ別の確認
- [ ] (A) 実装あり: 対応する実装ファイルとテストがある
- [ ] (B) 書いただけ: 0 件。残る場合は PR ブロック
- [ ] (C) 自動継承: permission / sandbox / security / workflow 影響を確認済み
- [ ] (P) Plans 化: `Plans.md` に将来タスクがある

### 4. Mirror と stale path
- [ ] `skills/` と `codex/.codex/skills/` の意図しない drift がない
- [ ] `.agents/skills/` が存在する場合、Claude/Codex 表記が壊れていない
- [ ] 旧 TypeScript guardrail path、旧 Codex plugin directory、旧 Codex feature-table path などの旧参照がない

### 5. CHANGELOG / tests
- [ ] CHANGELOG に「今まで / 今後」または相当する user-facing 説明がある
- [ ] upstream integration test または対象 unit test が追加 / 更新されている

カテゴリ B 検出時の出力フォーマット

カテゴリ B が 1 件以上検出された場合、以下のフォーマットで実装案を出力する。 このフォーマットの出力は必須であり、省略は許可されない。

## カテゴリ B 検出: 実装案

### B-{番号}. {Feature Table の項目名}

**現状**: Feature Table に記載のみ。Harness 側の実装 / 検証 / Plans 化なし。

**Harness ならではの付加価値**:
{この機能を Harness がどう活用すべきかの具体的な説明}

**実装案**:

| 対象ファイル | 変更内容 |
|------------|---------|
| `{ファイルパス}` | {具体的な変更内容} |
| `{ファイルパス}` | {具体的な変更内容} |

**ユーザー体験の改善**:
- 今まで: {現在のユーザー体験}
- 今後: {実装後のユーザー体験}

**実装の優先度**: {高 / 中 / 低}
**推定工数**: {小 / 中 / 大}

関連スキル

  • claude-codex-upstream-update - upstream 差分調査と実装 cycle
  • harness-review - コードレビュー
  • harness-work - カテゴリ B / P の実装
  • memory - 分類基準の SSOT 化
用于诊断和修复CI/CD流水线失败。涵盖构建错误、测试失败等场景,通过日志分析定位原因,严格禁止跳过测试或篡改断言。支持复杂情况调用子代理自动修复。
CIが落ちた GitHub Actionsが失敗 ビルドエラー テストが通らない パイプラインを直して
codex/.codex/skills/ci/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill ci -g -y
SKILL.md
Frontmatter
{
    "name": "ci",
    "context": "fork",
    "description": "CI red? Call us. Pipeline fire brigade deploys. Use when user mentions CI failures, build errors, test failures, or pipeline issues. Do NOT load for: local builds, standard implementation work, reviews, or setup.",
    "allowed-tools": [
        "Read",
        "Grep",
        "Bash",
        "Task",
        "Monitor"
    ],
    "argument-hint": "[analyze|fix|run]",
    "description-en": "CI red? Call us. Pipeline fire brigade deploys. Use when user mentions CI failures, build errors, test failures, or pipeline issues. Do NOT load for: local builds, standard implementation work, reviews, or setup.",
    "description-ja": "CIが赤くなったら呼んで。パイプライン消防隊、出動します。Use when user mentions CI failures, build errors, test failures, or pipeline issues. Do NOT load for: local builds, standard implementation work, reviews, or setup.",
    "user-invocable": true
}

CI/CD Skills

CI/CD パイプラインに関する問題を解決するスキル群です。


発動条件

  • 「CIが落ちた」「GitHub Actionsが失敗」
  • 「ビルドエラー」「テストが通らない」
  • 「パイプラインを直して」

機能詳細

機能 詳細 トリガー
失敗分析 See references/analyzing-failures.md 「ログを見て」「原因を調べて」
テスト修正 See references/fixing-tests.md 「テストを直して」「修正案を出して」

実行手順

  1. テスト vs 実装判定(Step 0)
  2. ユーザーの意図を分類(分析 or 修正)
  3. 複雑度を判定(下記参照)
  4. 上記の「機能詳細」から適切な参照ファイルを読む、または ci-cd-fixer サブエージェント起動
  5. 結果を確認し、必要に応じて再実行

Step 0: テスト vs 実装判定(品質判定ゲート)

CI 失敗時、まず原因の切り分けを行う:

CI 失敗報告
    ↓
┌─────────────────────────────────────────┐
│           テスト vs 実装判定             │
├─────────────────────────────────────────┤
│  エラーの原因を分析:                    │
│  ├── 実装が間違い → 実装を修正          │
│  ├── テストが古い → ユーザーに確認      │
│  └── 環境問題 → 環境修正                │
└─────────────────────────────────────────┘

禁止事項(改ざん防止)

⚠️ CI 失敗時の禁止事項

以下の「解決策」は禁止です:

| 禁止 | 例 | 正しい対応 |
|------|-----|-----------|
| テスト skip 化 | `it.skip(...)` | 実装を修正 |
| アサーション削除 | `expect()` を消す | 期待値を確認 |
| CI チェック迂回 | `continue-on-error` | 根本原因修正 |
| lint ルール緩和 | `eslint-disable` | コードを修正 |

判断フロー

🔴 CI が失敗しています

**判断が必要です**:

1. **実装が間違い** → 実装を修正 ✅
2. **テストの期待値が古い** → ユーザーに確認を求める
3. **環境の問題** → 環境設定を修正

⚠️ テストの改ざん(skip化、アサーション削除)は禁止です

どれに該当しますか?

承認が必要な場合

テスト/設定の変更がやむを得ない場合:

## 🚨 テスト/設定変更の承認リクエスト

### 理由
[なぜこの変更が必要か]

### 変更内容
[差分]

### 代替案の検討
- [ ] 実装の修正で解決できないか確認した

ユーザーの明示的な承認を待つ

Git log 拡張フラグの活用(CC 2.1.49+)

CI 失敗時の原因コミット特定に構造化ログを活用します。

原因コミットの特定

# 構造化フォーマットでコミット分析
git log --format="%h|%s|%an|%ad" --date=short -10

# トポロジカル順序で時系列分析
git log --topo-order --oneline -20

# 変更ファイルと原因の紐付け
git log --raw --oneline -5

主な活用場面

用途 フラグ 効果
失敗原因の特定 `--format="%h %s"`
時系列での追跡 --topo-order マージ順序を考慮した追跡
変更影響の把握 --raw ファイル変更の詳細表示
マージ除外分析 --cherry-pick --no-merges 実コミットのみを抽出

出力例

🔍 CI 失敗原因分析

最近のコミット(構造化):
| Hash | Subject | Author | Date |
|------|---------|--------|------|
| a1b2c3d | feat: update API | Alice | 2026-02-04 |
| e4f5g6h | test: add tests | Bob | 2026-02-03 |

変更ファイル(--raw):
├── src/api/endpoint.ts (Modified) ← 型エラー発生
├── tests/api.test.ts (Modified)
└── package.json (Modified)

→ a1b2c3d のコミットが原因の可能性大
  型エラー: src/api/endpoint.ts:42

サブエージェント連携

以下の条件を満たす場合、Task tool で ci-cd-fixer を起動:

  • 修正 → 再実行 → 失敗のループが 2回以上 発生
  • または、エラーが複数ファイルにまたがる複雑なケース

起動パターン:

Task tool:
  subagent_type="ci-cd-fixer"
  prompt="CI失敗を診断・修正してください。エラーログ: {error_log}"

ci-cd-fixer は安全第一で動作(デフォルト dry-run モード)。 詳細は agents/ci-cd-fixer.md を参照。


VibeCoder 向け

🔧 CI が壊れたときの言い方

1. **「CI が落ちた」「赤くなった」**
   - 自動テストが失敗している状態

2. **「なんで失敗してるの?」**
   - 原因を調べてほしい

3. **「直して」**
   - 自動で修正を試みる

💡 重要: テストを「ごまかす」修正は禁止です
   - ❌ テストを消す、スキップする
   - ⭕ コードを正しく直す

「テストが間違ってそう」と思ったら、
まず確認してから対応を決めましょう
用于自动生成生产级CRUD功能,涵盖API端点、Zod验证、RBS权限及测试用例。支持Next.js/Express等框架,需联动impl和verify技能完成实现与验证。
需要为指定实体生成完整的增删改查功能 要求包含搜索、分页或权限控制的CRUD接口 初始化数据库实体的后端逻辑代码
codex/.codex/skills/crud/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill crud -g -y
SKILL.md
Frontmatter
{
    "name": "crud",
    "description": "Explicit helper for CRUD scaffolding and API endpoint generation. Do NOT load for: UI components, form design, database schema discussion, or general implementation.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Grep",
        "Glob"
    ],
    "argument-hint": "<entity-name>",
    "description-en": "Explicit helper for CRUD scaffolding and API endpoint generation. Do NOT load for: UI components, form design, database schema discussion, or general implementation.",
    "description-ja": "CRUD足場作成とAPIエンドポイント生成の明示補助スキル。UIコンポーネント、フォーム設計、データベース設計相談、通常の実装には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

CRUD Skill

Auto-generates CRUD functionality for specified entities (tables) at production-ready level.

Quick Reference

  • "Create CRUD for task management" → /crud tasks
  • "Want search and pagination too" → Includes all together
  • "Include permissions (who can view/edit)" → Sets up authorization/rules together

Deliverables

  • CRUD + validation + authorization + tests, complete production-safe set
  • Minimize diff to match existing DB/code

Features:

  • Validation (Zod) auto-add
  • Auth/authorization (Row Level Security) auto-config
  • Relations (one-to-many, many-to-many) support
  • Pagination, search, filters
  • Auto-generated test cases

Auto-invoke Skills

This skill must explicitly invoke the following skills with the Skill tool:

Skill Purpose When to Call
impl Implementation (parent skill) CRUD feature implementation
verify Verification (parent skill) Post-implementation verification

Execution Flow

Detailed steps are described in the phases below.

Phase 1: Entity Analysis

  1. Parse entity name from $ARGUMENTS
  2. Detect existing schema (Prisma, Drizzle, raw SQL)
  3. Infer field types and relations

Phase 2: CRUD Generation

  1. Generate model/schema if needed
  2. Create API endpoints (REST or tRPC)
  3. Add validation schemas (Zod)
  4. Configure authorization rules

Phase 3: Test Generation

  1. Create unit tests for each endpoint
  2. Add integration tests
  3. Generate test fixtures

Phase 4: Verification

  1. Run type check
  2. Run tests
  3. Verify build

Supported Frameworks

Framework Detection Generated Files
Next.js + Prisma prisma/schema.prisma API routes, Prisma client
Next.js + Drizzle drizzle.config.ts API routes, Drizzle queries
Express express in package.json Controllers, routes
Hono hono in package.json Route handlers

Output Structure

src/
├── lib/
│   └── validations/
│       └── {entity}.ts        # Zod schemas
├── app/api/{entity}/
│   ├── route.ts              # GET (list), POST (create)
│   └── [id]/
│       └── route.ts          # GET, PUT, DELETE
└── tests/
    └── {entity}.test.ts      # Test cases

Related Skills

  • impl - Feature implementation
  • verify - Build verification
  • auth - Authentication/authorization
Cursor代理的只读委托技能,用于提问、调查、设计咨询及敌对性审查。通过禁用写入确保操作安全隔离,无需额外配置即可快速获得第三方视角的分析与结论,适用于实现前的 sanity check。
ask cursor cursor:ask second opinion sanity check
codex/.codex/skills/cursor-ask/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-ask -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-ask",
    "description": "Read-only cursor-agent delegate for questions\/sanity checks (no writes). Triggers: ask cursor, cursor:ask, second opinion, sanity check. Skip for: implementation (use cursor:do).",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "argument-hint": "[question]",
    "description-en": "Read-only cursor-agent delegate for questions\/sanity checks (no writes). Triggers: ask cursor, cursor:ask, second opinion, sanity check. Skip for: implementation (use cursor:do).",
    "description-ja": "cursor-agent (Composer) への読み取り専用デリゲート。質問・調査・設計相談・敵対的視点(sanity check)用。worktree 不要、cherry-pick 不要、Lead diff review 不要。cursor は ask mode 固定で書き込み不可。Use when user says: cursor に聞いて, cursor に相談, セカンドオピニオン, 敵対的レビュー, 設計相談, cursor で調査, cursor:ask. Do NOT load for: 実装、リファクタ、ファイル編集、コミット\/プッシュ作業、書き込みが必要な作業 (代わりに cursor:do \/ breezing --cursor を使う)。",
    "user-invocable": true
}

cursor:ask — Read-Only Cursor Delegate

cursor-agent (Composer) に read-only で質問・調査・設計相談・敵対的レビューを委譲する軽量スキル。

cursor-companion.sh task は引数なしで --mode ask (hard read-only stop) が自動で付くため、--write を渡さない限り cursor 側は ファイル書き込み・コマンド実行ができない。これにより worktree 隔離・cherry-pick・Lead diff review がすべて不要になる。

Quick Reference

cursor:ask "この設計判断、Composer 視点でどう思う?"
cursor:ask "TASK_BASE_REF からの diff を読んで、見落としを 3 つ挙げて"
cursor:ask "harness-mem の cross-project N-call、楽観的すぎる前提はある?"

用途:

ケース
質問 "この型エラーの根本原因は?"
調査 "scripts/ 配下で curl を使ってる箇所を全部挙げて理由付きで"
設計相談 "この abstraction、3 年後に保守できる?"
敵対的視点 "この PR の最大の弱点を 1 つだけ挙げて"

Narration Rules (UX Contract)

敵は 冗長さ であって進捗報告ではない。起動時に何を聞くか・どう進めるかを簡潔に明示してから実行する。冗長な繰り返し・中身のない前置きだけを禁ずる。

起動時に必ず出すもの (banner + plan、3 行以内)

🚀 cursor / composer-2.5-fast / ask
これから: <質問の要点> を composer に投げて、結果を 3-5 行で要約

banner 1 行 + 計画 1-2 行。1 秒以内に出し、即 Step 2 へ。

進捗報告は出してよい

  • 委譲開始の 1 行 (→ composer に問い合わせ中)
  • 判断に必要な経緯を 1 行で

禁止 (= 冗長さ)

  • 同じ事実の 2 回言い換え: cursor-companion の結果を後段で再説明しない
  • 中身のない前置き: 「使い方を確認します」だけの行など tool call で自明な宣言
  • 3 行以上の経緯振り返り: 必要なら 1 行に圧縮
  • 起動シーケンス中の ★ Insight ブロック: Insight は最終要約で 1 回のみ

違反例 (冗長):

× 「cursor に質問を投げる準備をします」→ bash → 「投げます」(中身のない前置き + 言い換え)
× 「ask モードは読み取り専用なので安全です」と再説明(既知事実の繰り返し)
× ★ Insight ──── まず cursor の状態を確認します: ...

正常例 (簡潔 + 計画明示):

🚀 cursor / composer-2.5-fast / ask
これから: 設計の弱点を composer に問い、結果を 3-5 行で要約

Execution Flow

Step 0: 起動時 banner + plan

上記 Narration Rules に従い、banner + 計画 (3 行以内) を出してから Step 1 へ。

Step 1: banner 確認

Step 0 で banner + 計画 (3 行以内) は出し切っているので、ここでは banner 行が出ていることを確認する。banner は:

🚀 cursor / composer-2.5-fast / ask

以降は委譲開始の 1 行ステータス等で進捗を見せてよい。冗長な繰り返しのみ避ける。

composer-2.5-fastscripts/model-routing.sh --host cursor --role worker --field model で解決される値の代表表記。実際の resolved model は cursor-companion 側のログに出る。

Step 2: helper root 解決 + cursor-companion 直接実行

$ARGUMENTS を質問文として渡す。--write は絶対に付けないscripts/cursor-companion.sh を相対パスで呼ぶと consumer repo の cwd 直下に見えず exit するため、CLAUDE_PLUGIN_ROOT / HARNESS_PLUGIN_ROOT を hooks.json と同じ valid_root パターンで解決する (Issue #193 §2):

QUESTION="$ARGUMENTS"
if [ -z "$QUESTION" ]; then
  echo "ERROR: question required. Usage: cursor:ask \"<your question>\"" >&2
  exit 1
fi

bash -c '
  set -euo pipefail
  valid_root() {
    [ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
  }
  HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
  ROOT="$HARNESS_PLUGIN_ROOT"
  if ! valid_root "$ROOT"; then
    ROOT=""
    if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && ! valid_root "$probe"; do
        probe="$(cd "$probe/.." && pwd)"
      done
      valid_root "$probe" && ROOT="$probe"
    fi
  fi
  if ! valid_root "$ROOT"; then
    ROOT=""
    for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
             "$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
             "$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
      if valid_root "$c"; then ROOT="$c"; break; fi
    done
  fi
  if ! valid_root "$ROOT"; then
    echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
    exit 2
  fi
  HARNESS_PLUGIN_ROOT="$ROOT"
  bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task "$1"
' _ "$QUESTION"

これだけで cursor-agent 側は --mode ask (hard read-only stop) に locked される。--force / --yolo も付かない。

Step 3: 結果を host が 3-5 行で要約

cursor の出力をそのまま貼らない。host (Claude/Codex) が読んで 3-5 行に要約 する:

  • 結論
  • なぜそう言えるか (cursor が挙げた根拠の核)
  • 注意点 / 追加調査が必要な点
  • 次の一手 (もしあれば)

要約後、最後に literal で次の一文を出力する:

↑この結果は host が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。

Trust Boundary

cursor は不透明なサブプロセスであり、Harness のガードレール (R01-R13) は内部に適用されない。read-only 委譲でも以下の前提条件を満たすこと。

必須前提

項目 内容 設定場所
Secret 遮断 .cursorignore.env / *.pem / *.key / .ssh / .aws / .git を読取対象から除外 repo root .cursorignore
Egress allowlist ~/.claude/settings.jsonsandbox.network.allowedDomains*.cursor.sh を追加 user settings
Filesystem allowlist sandbox.filesystem.allowWrite~/.cursor を追加 (cursor-agent が状態書込を行うため) user settings
permissions.json ~/.cursor/permissions.jsonterminalAllowlist / mcpAllowlist は read mode でも有効 (allowlist は best-effort、security boundary ではない) user config

詳細は .claude/rules/cursor-cli-only.md を参照。

ask mode で省略できるもの

通常の cursor 委譲で必要 ask mode では不要 理由
隔離 worktree 不要 cursor は書き込みできない
Lead diff review 不要 差分が生まれない
cherry-pick 不要 同上
worker-report.v1 / self_review 5 件 不要 実装をしないため

それでも残るリスク

  • 読み取り漏洩: .cursorignore を怠ると秘密ファイルが cursor 推論に渡る
  • 誤った情報の鵜呑み: cursor 出力は untrusted。Step 3 の要約で必ず host が判断軸を残す
  • allowlist 過信: Cursor 公式は "Allowlists are best-effort convenience. They are not a security guarantee." と明言。allowlist に依存しない

Topology

Lead (Claude/Codex) ──[cursor-companion.sh task]──> cursor-agent (--mode ask, locked read-only)
       │
       └──[Step 3: 3-5 行要約]──> User

Worker 介在なし。Reviewer 介在なし。worker-report.v1 / review-result.v1 契約は発生しない。

Related Skills / Rules

  • cursor-do — 書込タスク委譲(worktree + Lead review + cherry-pick の full containment)
  • breezing --cursor — Reviewer のみ cursor に逃がす lean second-opinion レーン
  • harness-review --cursor — レビューを cursor (composer-2.5-fast) に second-opinion として依頼
  • .claude/rules/cursor-cli-only.md — Cursor backend governance (trust boundary, prohibited flags)
将单一实现任务委托给 Cursor Composer 在隔离 worktree 中执行。Lead 审查 diff 后 cherry-pick 至主分支。旨在通过最短路径完成单任务,避免 breezing 流程开销,确保输出可信。
cursor:do delegate to cursor composer write refactor with cursor
codex/.codex/skills/cursor-do/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-do -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-do",
    "description": "Delegate write task to Cursor Composer in isolated worktree, Lead-review + cherry-pick. Triggers: cursor:do, delegate to cursor, composer write, refactor with cursor. Skip for: planning, review-only, multi-task.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Glob",
        "Grep"
    ],
    "argument-hint": "[task-description]",
    "description-en": "Delegate write task to Cursor Composer in isolated worktree, Lead-review + cherry-pick. Triggers: cursor:do, delegate to cursor, composer write, refactor with cursor. Skip for: planning, review-only, multi-task.",
    "description-ja": "1 件の write タスクを Cursor Composer に委譲するスキル。専用 worktree (.claude\/worktrees\/cursor-do-<id>) を切って `cursor-companion.sh task --write --workspace <wt>` を直接呼び、Lead が diff レビュー → main へ cherry-pick → Plans.md `cc:done [hash]` 更新まで一気通貫する。Use when user mentions cursor:do, cursor で実装して, composer に書かせて, カーソルにやらせて, refactor を Cursor に, ファイル編集を Composer に. Do NOT load for: 計画 (harness-plan), レビューのみ (harness-review), 読み取り調査 (cursor:ask), 複数タスク並列 (breezing --cursor を使う).",
    "user-invocable": true
}

cursor:do — Single-Task Write Delegate to Cursor Composer

1 件の実装タスクを Cursor Composer (composer-2.5-fast) に専用 worktree 内で委譲し、Lead が diff をレビューしてから main へ cherry-pick する skill。breezing の team フローを起こさず、1 タスク 1 cherry-pick を最短経路で回す。

封じ込めは Cursor 側にはない (.claude/rules/cursor-cli-only.md)。専用 .git を持つ worktree + Lead diff review + cherry-pick (R01-R13 経路) の 3 点だけが実効的な境界。cursor の出力は Lead レビューまで untrusted として扱う。

Step 0 — NARRATION RULES (UX Contract)

敵は 冗長さ であって進捗報告ではない。breezing と同じ契約。起動時に banner + 実行計画を簡潔に明示してから実行する。見やすい進捗報告は歓迎、冗長な繰り返しのみ禁止。

起動時に必ず出すもの (banner + plan、合計 5 行以内)

🚀 cursor / composer-2.5-fast / feat/foo-bar / Add login form validation
これから:
1. pre-check (branch / cursor-agent) → 専用 worktree 作成
2. composer に実装委譲 (--write)
3. diff レビュー → cherry-pick → Plans.md 更新

banner 1 行 (🚀 cursor / composer-2.5-fast / <branch> / <task>) + 計画 2-4 行。1 秒以内に出し、即 Step 1 へ。

進捗報告は出してよい (見やすい範囲で)

  • 各ステップの開始・完了を 1 行ステータスで (✓ worktree 作成: .claude/worktrees/cursor-do-...)
  • pre-check / resolve の要点、cherry-pick した SHA
  • なぜこの分岐を取るかの理由を 1 行で

禁止 (= 冗長さ)

  • 同じ事実の 2 回言い換え: pre-check 結果を後段で再説明しない
  • 中身のない前置き: tool call で自明な宣言だけの行
  • 3 行以上の経緯振り返り: 必要なら 1 行に圧縮
  • 起動シーケンス中の ★ Insight ブロック: Insight は最終 report で 1 回のみ

違反例 (冗長):

× 「composer 2.5 で実装する流れですね、まず確認します」(中身のない前置き)
× 「Cursor を呼ぶ前に branch を見ます」 → bash → 「branch を確認しました」(言い換え)
× ★ Insight ──── Cursor の強みは…

正常例 (簡潔 + 計画明示):

🚀 cursor / composer-2.5-fast / feat/foo-bar / Add login form validation
これから: worktree 作成 → composer に実装委譲 → diff レビュー → cherry-pick

Step 1 — banner + plan を出し切る (1 秒以内)

引数 $ARGUMENTS をタスク説明として受ける。引数が空なら以下のマーカーを出力してユーザーに 1 行タスクを要求し、入力後に Step 2 へ進む:

CURSOR_DO_AWAITING_TASK: provide a one-line task description as $ARGUMENTS

引数があれば、即 1 行 echo:

🚀 cursor / composer-2.5-fast / <current-branch> / <task-first-60-chars>

<current-branch> は Step 2 で取得する値だが、Step 1 では未取得のため でも可。Step 2 直後に確定値を 1 行で再出力する。Step 0 の banner + 実行計画 (5 行以内) はここで出し切り、以降は各ステップの 1 行ステータスで進捗を見せる。冗長な繰り返しのみ避ける。

Step 2 — 並列 pre-check (1 bash)

1 つの bash 呼び出しで以下を並列に取り、結果だけを 1 ブロックで受ける。個別の説明は出さない。

bash -c '
  set +e
  echo "==BRANCH=="; git branch --show-current
  echo "==VERSION=="; cat VERSION 2>/dev/null
  echo "==PLANS_TAIL=="; tail -n 12 Plans.md 2>/dev/null
  echo "==CURSOR_AGENT=="
  CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
  if [ -z "$CURSOR_AGENT_BIN" ]; then
    if command -v cursor-agent >/dev/null 2>&1; then
      CURSOR_AGENT_BIN="$(command -v cursor-agent)"
    elif [ -x "$HOME/.local/bin/cursor-agent" ]; then
      CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
    fi
  fi
  if [ -z "$CURSOR_AGENT_BIN" ]; then
    echo "NOT_INSTALLED"
  else
    "$CURSOR_AGENT_BIN" --version 2>/dev/null || echo "NOT_INSTALLED"
  fi
'

判定:

  • CURSOR_AGENT=NOT_INSTALLEDERROR: cursor-agent not found (exit 3 expected from companion). Install via setup-cursor.sh. を出し終了。
  • BRANCHmain / masterWARN: on protected branch — cherry-pick target is HEAD of this branch. Confirm intent or switch. を出し継続。

Step 3 — plugin root + backend + model resolve (1 bash)

HARNESS_PLUGIN_ROOT / CLAUDE_PLUGIN_ROOT が未設定だと :-. fallback が consumer repo の cwd に解決し、scripts/cursor-companion.sh が見えず起動不能になる (Issue #193 §2)。hooks.json と同じ valid_root パターンで堅牢に解決する。

bash -c '
  set -euo pipefail
  valid_root() {
    [ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
  }
  HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
  ROOT="$HARNESS_PLUGIN_ROOT"
  if ! valid_root "$ROOT"; then
    ROOT=""
    if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && ! valid_root "$probe"; do
        probe="$(cd "$probe/.." && pwd)"
      done
      valid_root "$probe" && ROOT="$probe"
    fi
  fi
  if ! valid_root "$ROOT"; then
    ROOT=""
    for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
             "$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
             "$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
      if valid_root "$c"; then ROOT="$c"; break; fi
    done
  fi
  if ! valid_root "$ROOT"; then
    echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
    exit 2
  fi
  HARNESS_PLUGIN_ROOT="$ROOT"
  BACKEND=$(bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --backend cursor --role worker)
  MODEL=$(bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model)
  echo "PLUGIN_ROOT=${HARNESS_PLUGIN_ROOT}"
  echo "BACKEND=$BACKEND"
  echo "MODEL=$MODEL"
'

返却値: PLUGIN_ROOT (Step 5 で使う) / BACKEND (必ず cursor) / MODEL (通常 composer-2.5-fast)。BACKEND または MODEL が空なら ERROR: backend/model resolution failed を 1 行で出して終了。PLUGIN_ROOT 解決失敗は上記スクリプトが exit 2 で報告する。

Step 4 — 専用 worktree 作成

衝突しない id を作って worktree を切る。main tree や $HOME を指してはならない (companion 側 guard で exit 2 になる)。WT_DIR は絶対パスで作る (Step 5 の --workspace は companion の is not a directory ガードで相対パスを exit 2 にすることがあるため、Issue #193 §4)。

bash -c '
  set -euo pipefail
  REPO_ROOT="$(git rev-parse --show-toplevel)"
  cd "$REPO_ROOT"
  ID="$(date +%Y%m%d-%H%M%S)-$$"
  WT_DIR="$REPO_ROOT/.claude/worktrees/cursor-do-${ID}"
  BASE_REF="$(git rev-parse HEAD)"
  BASE_BRANCH="$(git branch --show-current)"
  WT_BRANCH="cursor-do/${ID}"
  mkdir -p "$REPO_ROOT/.claude/worktrees"
  git worktree add -b "${WT_BRANCH}" "${WT_DIR}" "${BASE_REF}"
  echo "REPO_ROOT=${REPO_ROOT}"
  echo "WT_DIR=${WT_DIR}"
  echo "WT_BRANCH=${WT_BRANCH}"
  echo "BASE_REF=${BASE_REF}"
  echo "BASE_BRANCH=${BASE_BRANCH}"
'

返却された WT_DIR / WT_BRANCH / BASE_REF / BASE_BRANCH を以降の Step で使う。失敗時 (branch 名衝突等) は ID を作り直して 1 回だけ retry。2 回連続失敗で ERROR: worktree creation failed を出し終了。

Step 5 — cursor-companion.sh task --write で委譲

Lead が直接 companion を呼ぶ (.claude/rules/cursor-cli-only.md Topology 節 — 非 claude backend では Worker 介在なし)。プロンプトは引数の task そのまま + 必要な追補のみ。冗長な前置きは付けない。

bash -c '
  set -euo pipefail
  valid_root() {
    [ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
  }
  HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
  ROOT="${PLUGIN_ROOT:-$HARNESS_PLUGIN_ROOT}"
  if ! valid_root "$ROOT"; then
    ROOT=""
    if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && ! valid_root "$probe"; do
        probe="$(cd "$probe/.." && pwd)"
      done
      valid_root "$probe" && ROOT="$probe"
    fi
  fi
  if ! valid_root "$ROOT"; then
    ROOT=""
    for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
             "$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
             "$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
      if valid_root "$c"; then ROOT="$c"; break; fi
    done
  fi
  if ! valid_root "$ROOT"; then
    echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
    exit 2
  fi
  HARNESS_PLUGIN_ROOT="$ROOT"
  PROMPT="<task-description>

Constraints:
- Modify only files relevant to the task.
- Keep existing tests green. Add tests when the task is verifiable.
- Match existing code style and naming.
- Create exactly one git commit if your environment supports it; otherwise leave one dirty changeset for Lead auto-commit.
- Do not touch .claude-plugin/settings*, .claude/settings*, .eslintrc*, biome.json, tsconfig*.json."
  bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task \
    --write \
    --workspace "${WT_DIR}" \
    "${PROMPT}"
' 2>&1

判定:

  • exit 0 + result text → Step 6 へ
  • exit 1 (result-error) → companion stderr を 1 行要約して ERROR: cursor returned is_error/empty result を出し終了。worktree は Step 8 のクリーンアップで削除
  • exit 2 (bad-guard) → 設定不備。原因 (workspace 指定誤り等) を 1 行で示し終了
  • exit 3 (not-found) → Step 2 で検出済みのはずだが、再度遭遇したら同様に終了

Step 6 — Lead diff review

worktree 内で Composer が作成した変更を読み、目視レビュー + contract grep の二段ゲートを通す (harness-work 「Lead の cherry-pick 前ゲート」と同じ契約)。

注意 (Issue #193 §1): Cursor Composer は --write でファイル編集を行うが commit は作らないことがある。worktree が dirty なまま放置すると Step 7 の cherry-pick 対象から漏れ、ユーザー視点で「完了したのに main に何も入らない」状態になる。本 Step 冒頭で dirty なら、既存 commit がある場合は amend、commit がない場合は Lead 側で 1 commit にまとめる。

bash -c '
  set -euo pipefail
  cd "${WT_DIR}"
  # Composer は dirty changeset を返すことがあるため、既存 commit に fold する
  if [ -n "$(git status --porcelain)" ]; then
    git add -A
    if [ "$(git rev-list --count "${BASE_REF}..HEAD")" -gt 0 ]; then
      git -c user.name="cursor-composer" -c user.email="cursor-composer@local" \
        commit --amend --no-edit --no-verify
      echo "==AUTO_AMENDED=="
    else
      git -c user.name="cursor-composer" -c user.email="cursor-composer@local" \
        commit --no-verify -m "cursor: ${TASK_SUMMARY:-cursor-do delegated change}"
      echo "==AUTO_COMMITTED=="
    fi
    git log -1 --oneline
  fi
  echo "==LOG=="
  git log --oneline "${BASE_REF}..HEAD"
  echo "==STAT=="
  git diff --stat "${BASE_REF}..HEAD"
  echo "==DIFF=="
  git diff "${BASE_REF}..HEAD"
'

TASK_SUMMARY は引数 task の先頭 60 文字以内に圧縮した文字列を Lead が事前に export しておく (例: TASK_SUMMARY="Add login form validation")。未設定なら fallback メッセージ cursor-do delegated change を使う。--no-verify を付けるのは worktree 内の編集を「Lead レビュー前の中間 commit」として扱うため (cherry-pick 後の main commit で R01-R13 と pre-commit hook を通す)。

Lead は diff 全文を Read し、以下を確認する:

  • 変更が依頼タスクの範囲内か (関係ないファイルを触っていないか)
  • protected path (.claude-plugin/settings*, .eslintrc*, etc.) を変更していないか
  • secret / .env / 認証情報を含まないか
  • 公開 support tier 表記を破壊していないか。contract gates は必ず candidate worktree (WT_DIR) 内で実行する:
    [ ! -f "${WT_DIR}/tests/test-support-claim-wording.sh" ] || (cd "${WT_DIR}" && bash tests/test-support-claim-wording.sh)
    [ ! -f "${WT_DIR}/scripts/ci/check-consistency.sh" ] || (cd "${WT_DIR}" && bash scripts/ci/check-consistency.sh)
    [ ! -f "${WT_DIR}/tests/validate-plugin.sh" ] || (cd "${WT_DIR}" && bash tests/validate-plugin.sh)
    

判定:

  • 問題なし → Step 7 へ
  • 範囲外変更あり → 該当 commit を git reset で巻き戻すか、Cursor に再委譲 (Step 5 を 1 回だけ retry)。2 回失敗で REQUEST_CHANGES: <理由> を出し、worktree を残したまま終了
  • protected path / secret 検出 → 即 abort。ABORT: protected path violation を出し worktree 削除

Step 7 — cherry-pick + Plans.md cc:done 更新

worktree から main tree に cherry-pick する。Cursor prompt は exactly one commit 契約だが、Composer は dirty changeset を返すことがあるため Step 6 で commit/amend する。複数 commit が残った場合は main tree を触る前に停止する。 さらに cherry-pick 前に Plans.md の staged / unstaged 差分がないことを確認する。理由: 既存差分がある状態で後続の git add Plans.md && git commit --amend を行うと、task と無関係な plan/status 編集を Cursor の code commit に巻き込むため。 SHA 直接指定 (branch 名経由ではない) で reviewer state drift を避ける (MEMORY: reviewer_state_drift)。

bash -c '
  set -euo pipefail
  COMMIT_COUNT="$(cd "${WT_DIR}" && git rev-list --count "${BASE_REF}..HEAD")"
  if [ "${COMMIT_COUNT}" -eq 0 ]; then
    echo "ERROR: no commits to cherry-pick"
    exit 1
  fi
  if [ "${COMMIT_COUNT}" -ne 1 ]; then
    echo "ERROR: cursor returned ${COMMIT_COUNT} commits; expected exactly one. Keep worktree for manual review: ${WT_DIR}"
    exit 1
  fi
  if ! git diff --quiet -- Plans.md || ! git diff --cached --quiet -- Plans.md; then
    echo "ERROR: Plans.md has pre-existing local edits; refusing to cherry-pick before the cursor:do marker amend"
    exit 1
  fi
  SHA="$(cd "${WT_DIR}" && git rev-parse HEAD)"
  git cherry-pick "${SHA}"
  echo "==CHERRY_PICKED=="
  git log --oneline -n 1
'

cherry-pick で conflict が出たら git cherry-pick --abort し、CHERRY_PICK_CONFLICT: <files> を 1 行で示して終了 (worktree は残す、ユーザー判断)。

cherry-pick 後、Plans.md に対応行があれば該当タスクのマーカーを更新する。 上記の clean precondition を通過しているため、ここで発生する Plans.md 差分は marker-only diff として扱う:

| <task> | ... | cc:done [<merged-sha>] |

該当行の特定: 引数 task 文字列の先頭 40 文字で grep し、ヒットした最初の cc:TODO / cc:WIP / cc:todo 行を cc:done [<sha>] に置換する。ヒットなしなら更新スキップ (Plans.md 外のタスクとして扱う)。

マーカーを更新した場合、その編集は cherry-pick commit に含める。未コミットの Plans.md を残して cleanup / 完了報告へ進んではならない。 以下の amend block は、上記 precondition 通過後に実行した marker-only diff だけを対象にする:

bash -c '
  set -euo pipefail
  if git diff --quiet -- Plans.md; then
    echo "PLANS_UPDATED=0"
  else
    git add Plans.md
    git commit --amend --no-edit
    echo "PLANS_UPDATED=1"
    echo "MERGED_SHA=$(git rev-parse HEAD)"
  fi
'

Step 8 — worktree cleanup + 完了報告 (1 ブロック)

cherry-pick 成功後、worktree を delete する。失敗 path では呼ばれない(worktree を残してユーザー判断)。

bash -c '
  set -euo pipefail
  git worktree remove --force "${WT_DIR}"
  git branch -D "${WT_BRANCH}" 2>/dev/null || true
  echo "==CLEANUP=="
  git worktree list | grep -v "cursor-do-" || true
'

完了報告は 1 ブロック で出す。中間ナレーションなし:

cursor:do completed
   task: <task-first-60-chars>
   commits: <count>
   base: <BASE_REF> → cherry-picked into <BASE_BRANCH>
   plans: <updated|skipped (no match)>
   files: <changed-file-count> changed, +<inserts> -<deletes>

Full Containment (write mode 必須)

役割 skip 可否
専用 .git worktree cursor の書込を main tree から隔離 不可(必須)
Lead diff review untrusted cursor 出力の品質ゲート 不可(必須)
contract-grep ゲート docs / locale / matrix 固定文字列の保護 不可(必須)
cherry-pick → main R01-R13 guard rail を通す唯一の経路 不可(必須)
Plans.md cc:done 更新 台帳との sync 該当行なければ skip 可

Prohibited

  • --force / --yolo を companion に渡す(Cursor 公式 "Never use")
  • cursor 出力を Lead レビュー前に main へ直接 commit する
  • protected path (.claude-plugin/settings*, .eslintrc*, tsconfig*.json, etc.) を Step 5 の prompt で許可する
  • $HOME / / / main tree を --workspace に指定する
  • Plans.md の cc:* マーカーを task と無関係に書き換える

Related Skills / Rules

  • cursor:ask — 読取専用の質問・調査・敵対的視点 (worktree 不要)
  • breezing --cursor — 複数タスクを team フローで cursor 委譲する場合
  • harness-work — claude backend の default フロー (Worker agent 経由)
  • .claude/rules/cursor-cli-only.md — Cursor backend governance + Topology
用于诊断和恢复 Cursor 后端故障的 Skill。当遇到 cursor:rescue 调用、Cursor 委托失败、cursor-agent 缺失、setup-cursor 失败或后端意外回退到 claude 时触发。通过标准化诊断流程定位根因并提供最小化修复方案。
用户显式调用 cursor:rescue Cursor 委托失败 cursor-agent 进程或服务缺失 setup-cursor 执行失败 后端解析意外回退至 claude
codex/.codex/skills/cursor-rescue/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-rescue -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-rescue",
    "description": "Diagnose and recover Cursor backend failures for Harness workflows. Use when user invokes cursor:rescue, Cursor delegation fails, cursor-agent is missing, setup-cursor fails, or backend resolution unexpectedly falls back to claude.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Grep"
    ],
    "argument-hint": "[failure summary]",
    "description-en": "Diagnose and recover Cursor backend failures for Harness workflows. Use when user invokes cursor:rescue, Cursor delegation fails, cursor-agent is missing, setup-cursor fails, or backend resolution unexpectedly falls back to claude.",
    "description-ja": "Harness の Cursor backend 失敗を診断・復旧するスキル。cursor:rescue、Cursor 委譲が失敗した、cursor-agent が見つからない、setup-cursor が失敗した、backend が想定外に claude fallback した時に使う。",
    "user-invocable": true
}

cursor:rescue - Cursor Backend Recovery

Cursor backend の failure path を短く切り分ける skill。変更は最小限にし、破壊的操作はしない。

Quick Reference

cursor:rescue "breezing fell back to claude"
cursor:rescue "cursor-agent not found"

Diagnosis Order

Run one compact diagnostic block:

set +e
HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi
if [ -z "$HARNESS_PLUGIN_ROOT" ]; then
  echo "ERROR: HARNESS_PLUGIN_ROOT is not set and could not be derived from CLAUDE_PLUGIN_ROOT or CLAUDE_SKILL_DIR" >&2
  exit 2
fi
echo "==RESOLVED_BACKEND=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --role worker
echo "==USER_OR_PROJECT_DEFAULT=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
echo "==CURSOR_MODEL=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model
echo "==CURSOR_AGENT=="
CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
if [ -z "$CURSOR_AGENT_BIN" ]; then
  if command -v cursor-agent >/dev/null 2>&1; then
    CURSOR_AGENT_BIN="$(command -v cursor-agent)"
  elif [ -x "$HOME/.local/bin/cursor-agent" ]; then
    CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
  fi
fi
if [ -z "$CURSOR_AGENT_BIN" ]; then
  echo "NOT_INSTALLED: cursor-agent not found in PATH or $HOME/.local/bin"
else
  "$CURSOR_AGENT_BIN" --version
fi
echo "==CURSOR_PACKAGE_CHECK=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/setup-cursor.sh" --check

Common Fixes

Symptom Fix
cursor-agent missing Install / sign in to Cursor CLI, then rerun cursor:setup --check.
backend resolves to claude unexpectedly Run bash scripts/set-impl-backend.sh --show; set user default with cursor:setup --user-default or project default with cursor:setup --project-default.
setup-cursor.sh --check fails Report the first failing [ERR] line and the missing file path.
companion exits 2 Workspace guard or forbidden path. Recreate an isolated worktree and retry.
companion exits 3 cursor-agent not found in PATH or $HOME/.local/bin.

Output

Return:

  • root cause candidate
  • exact failing command
  • minimal fix command
  • whether retrying the original workflow is safe
作为顾问性第二意见运行 Cursor Composer 审查。当用户触发 cursor:review、请求审查或希望校验 diff 时启用。Cursor 仅提供只读建议,最终批准或修改决定由主模型(Host Brain)做出,确保审查权归属明确。
用户显式调用 cursor:review 命令 用户要求 Cursor 进行代码审查 用户希望使用 Composer 对差异进行合理性检查
codex/.codex/skills/cursor-review/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-review -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-review",
    "description": "Run a Cursor Composer review as an advisory second opinion while keeping the primary review verdict on the host brain. Use when user invokes cursor:review, asks Cursor to review, or wants composer to sanity-check a diff. Cursor never owns APPROVE\/REQUEST_CHANGES.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Grep"
    ],
    "argument-hint": "[--base <ref>] [review-scope]",
    "description-en": "Run a Cursor Composer review as an advisory second opinion while keeping the primary review verdict on the host brain. Use when user invokes cursor:review, asks Cursor to review, or wants composer to sanity-check a diff. Cursor never owns APPROVE\/REQUEST_CHANGES.",
    "description-ja": "Cursor Composer に advisory second opinion としてレビューさせるスキル。cursor:review、Cursor にレビューして、composer で差分を sanity check して、という時に使う。primary verdict は常に host brain が持ち、Cursor は APPROVE\/REQUEST_CHANGES を所有しない。",
    "user-invocable": true
}

cursor:review - Advisory Cursor Review

Cursor Composer (composer-2.5-fast) を read-only second opinion として使う review skill。primary verdict は host brain (Opus / Claude role) が出す。

Quick Reference

cursor:review --base origin/main
cursor:review "Phase 88.5 command namespace diff"

Rules

  • Cursor review is advisory. The final verdict must come from the host reviewer.

  • Do not pass --write to cursor-companion.sh.

  • Use resolver/model routing, not direct env checks:

    bash scripts/resolve-impl-backend.sh --backend cursor --role reviewer
    bash scripts/model-routing.sh --host cursor --role worker --field model
    
  • Prefer the existing harness-review contract when a full review is requested. This command exists for users who explicitly ask for the Cursor lane.

Flow

  1. Resolve the Harness helper root:

    HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
    if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
        probe="$(cd "$probe/.." && pwd)"
      done
      [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
    fi
    if [ -z "$HARNESS_PLUGIN_ROOT" ]; then
      echo "ERROR: HARNESS_PLUGIN_ROOT is not set and could not be derived from CLAUDE_PLUGIN_ROOT or CLAUDE_SKILL_DIR" >&2
      exit 2
    fi
    
  2. Determine review scope:

    BASE_REF="${TASK_BASE_REF:-origin/main}"
    REVIEW_SCOPE="${ARGUMENTS:-}"
    if [ -n "${REVIEW_SCOPE}" ]; then
      set -- ${REVIEW_SCOPE}
      while [ "$#" -gt 0 ]; do
        case "$1" in
          --base)
            BASE_REF="${2:?--base requires a ref}"
            shift 2
            ;;
          --base=*)
            BASE_REF="${1#--base=}"
            shift
            ;;
          *)
            shift
            ;;
        esac
      done
    fi
    DIFF_STAT="$(git diff --stat "${BASE_REF}..HEAD")"
    DIFF_TEXT="$(git diff "${BASE_REF}..HEAD")"
    
  3. Ask Cursor in read-only mode:

    PROMPT="$(cat <<EOF
    

Review this diff as an advisory second opinion. Base ref: ${BASE_REF} Requested scope: ${ARGUMENTS:-full diff}

Focus on bugs, regressions, missing tests, and unsafe assumptions. Do not propose broad refactors.

Diff stat: ${DIFF_STAT}

Diff: ${DIFF_TEXT} EOF )" bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task "${PROMPT}"


4. Host reads Cursor's output and performs the primary review:

- Findings first, ordered by severity.
- Mark Cursor-originated points as advisory when used.
- `APPROVE` / `REQUEST_CHANGES` must be the host decision, not a copied Cursor verdict.

## Output

Use the standard review shape:

- findings
- open questions
- validation run
- final host verdict
用于配置和验证 Cursor 后端。支持检查环境就绪状态、设置用户或项目级默认后端为 Cursor,以及撤销设置。遵循规则,仅修改本地环境,不改变分发版默认值。
需要检查 Cursor 安装及配置状态 需要将当前环境的默认后端切换为 Cursor 需要将项目范围的默认后端设置为 Cursor 需要恢复默认后端设置
codex/.codex/skills/cursor-setup/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-setup -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-setup",
    "description": "Configure and verify Cursor backend for CCH. Triggers: cursor:setup, set Cursor as local default, check Cursor readiness. Distribution default stays opt-in; only local env changes on request.",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "argument-hint": "[--check | --user-default | --project-default | --unset]",
    "description-en": "Configure and verify Cursor backend for CCH. Triggers: cursor:setup, set Cursor as local default, check Cursor readiness. Distribution default stays opt-in; only local env changes on request.",
    "description-ja": "Claude Code Harness の Cursor backend を設定・検証するスキル。cursor:setup、Cursor を現環境の default 実装 backend にしたい、Cursor plugin\/agent readiness を確認したい時に使う。配布 plugin の default は opt-in のまま維持し、明示依頼がある場合だけ local env\/user 設定を変更する。",
    "user-invocable": true
}

cursor:setup - Cursor Backend Setup

Cursor backend の setup / verification 用 skill。配布 plugin の fallback は claude のままにし、現在の repo / user 環境だけ cursor default にする時に使う。

Quick Reference

cursor:setup --check
cursor:setup --user-default
cursor:setup --project-default
cursor:setup --unset

Rules

  • Do not change distribution defaults or plugin manifests to make Cursor the shipped fallback.
  • Use scripts/resolve-impl-backend.sh / scripts/set-impl-backend.sh; do not infer from HARNESS_IMPL_BACKEND alone.
  • Treat ~/.cursor/permissions.json, .cursorignore, and Claude sandbox allowlists as manual/user-owned setup surfaces unless the user explicitly asks to edit a local file.

Flow

First resolve the Harness helper root. Keep the current working directory as the target project so project-scoped env.local writes still land in the user's repo:

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi
if [ -z "$HARNESS_PLUGIN_ROOT" ]; then
  echo "ERROR: HARNESS_PLUGIN_ROOT is not set and could not be derived from CLAUDE_PLUGIN_ROOT or CLAUDE_SKILL_DIR" >&2
  exit 2
fi
  1. For --check, run:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/setup-cursor.sh" --check
    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
    bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --role worker
    CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
    if [ -z "$CURSOR_AGENT_BIN" ]; then
      if command -v cursor-agent >/dev/null 2>&1; then
        CURSOR_AGENT_BIN="$(command -v cursor-agent)"
      elif [ -x "$HOME/.local/bin/cursor-agent" ]; then
        CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
      fi
    fi
    if [ -z "$CURSOR_AGENT_BIN" ]; then
      echo "ERROR: cursor-agent not found in PATH or $HOME/.local/bin" >&2
      exit 3
    fi
    "$CURSOR_AGENT_BIN" --version
    
  2. For --user-default, run:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --user cursor
    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
    
  3. For --project-default, run:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" cursor
    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
    
  4. For --unset, ask whether the target is user or project scope if not clear from the request, then run exactly one matching unset command:

    Project scope:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --unset
    

    User scope:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --unset --user
    

Output

Report three facts only:

  • resolved backend (claude / codex / cursor)
  • Cursor package readiness (setup-cursor.sh --check)
  • next manual step if Cursor is not ready
负责部署到Vercel/Netlify、配置分析监控及环境健康检查。适用于涉及部署、平台、分析或健康检查的请求,不用于本地开发或代码实现。
用户提及部署相关需求 涉及Vercel或Netlify平台 需要配置分析工具 执行环境健康检查
codex/.codex/skills/deploy/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill deploy -g -y
SKILL.md
Frontmatter
{
    "name": "deploy",
    "context": "fork",
    "description": "Deploy to Vercel\/Netlify. One-way ticket to production arranged. Use when user mentions deployment, Vercel, Netlify, analytics, or health checks. Do NOT load for: implementation work, local development, reviews, or setup.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Monitor"
    ],
    "argument-hint": "[vercel|netlify|health]",
    "description-en": "Deploy to Vercel\/Netlify. One-way ticket to production arranged. Use when user mentions deployment, Vercel, Netlify, analytics, or health checks. Do NOT load for: implementation work, local development, reviews, or setup.",
    "description-ja": "VercelやNetlifyへいざ出陣。本番環境への片道切符を手配します。Use when user mentions deployment, Vercel, Netlify, analytics, or health checks. Do NOT load for: implementation work, local development, reviews, or setup.",
    "user-invocable": false,
    "disable-model-invocation": true
}

Deploy Skills

デプロイとモニタリングの設定を担当するスキル群です。

機能詳細

機能 詳細
デプロイ設定 See references/deployment-setup.md
アナリティクス See references/analytics.md
環境診断 See references/health-checking.md

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容に従って設定
通过Nano Banana Pro API自动生成项目介绍幻灯片。支持Minimalist、Infographic、Hero Visual三种风格,各生成2张候选图并自动进行质量评分与筛选,最终输出每类最佳1张共3张高质量图片及评估报告。
用户发送/generate-slide命令 父级媒体工作流内部调用
codex/.codex/skills/generate-slide/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill generate-slide -g -y
SKILL.md
Frontmatter
{
    "name": "generate-slide",
    "description": "Generate project intro slides with Nano Banana Pro. Internal\/manual workflow only; use from an explicit \/generate-slide command or a parent media workflow.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Glob",
        "Grep",
        "AskUserQuestion"
    ],
    "argument-hint": "[project-path|description]",
    "description-en": "Generate project intro slides with Nano Banana Pro. Internal\/manual workflow only; use from an explicit \/generate-slide command or a parent media workflow.",
    "description-ja": "Nano Banana Proでプロジェクト紹介スライドを自動生成。明示的な \/generate-slide または親メディアワークフローからのみ使う。通常発話からの自動起動はしない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Generate Slide Skill

プロジェクトの内容を紹介・説明する1枚スライド画像を、Nano Banana Pro(Gemini 3 Pro Image Preview)API で自動生成します。

起動契約

このスキルは user-invocable: false かつ disable-model-invocation: true です。 通常のユーザー発話(例: 「スライド作って」)から Claude が自動選択する前提ではありません。

  • 明示的な /generate-slide コマンド、または親メディアワークフローから内部的に起動される時だけ使います。
  • allowed-tools は Claude Code 用です。Claude ではユーザー確認に AskUserQuestion を使えます。
  • Codex mirror では同等の確認は request_user_input 相当の計画モード入力に読み替えます。通常実行でそのツールがない場合は、既定値を提示して停止せず進め、重要な未確定事項だけユーザーへ確認します。
  • disable-model-invocation: true は「説明文だけを見てモデルが勝手に起動しない」という意味です。slash や親 workflow から明示起動された場合は本文手順に従います。

概要

3パターン x 各2枚候補 = 計6枚生成 → パターンごとに品質チェック → NG ならリトライ → 各パターンの最良1枚、計3枚を出力。

前提条件

  • GOOGLE_AI_API_KEY 環境変数が設定済み
  • Google AI Studio で Nano Banana Pro(Gemini 3 Pro Image Preview)が有効化済み

機能詳細

機能 詳細
スライド画像生成 See references/slide-generator.md
品質判定 See references/slide-quality-check.md

実行フロー

/generate-slide
    |
    +--[Step 1] 情報収集
    |   +-- ユーザー指定テキスト or コードベース自動分析(README, package.json 等)
    |   +-- プロジェクト名・概要・主要機能・技術スタックを抽出
    |
    +--[Step 2] 仕様確認(AskUserQuestion)
    |   +-- サイズ・アスペクト比(デフォルト: 16:9 / 2K)
    |   +-- トーン(テック、カジュアル、コーポレート等)
    |   +-- 強調したいポイント(曖昧な場合のみ質問)
    |
    +--[Step 3] 3パターン x 2枚生成(Nano Banana Pro API x 6回)
    |   +-- Pattern A: Minimalist(2枚)
    |   +-- Pattern B: Infographic(2枚)
    |   +-- Pattern C: Hero Visual(2枚)
    |
    +--[Step 4] パターンごとに品質チェック
    |   +-- 各パターンの2枚を Claude が Read で読み込み
    |   +-- 5段階スコアリング → 高い方を採用候補
    |   +-- 両方スコア2以下 → プロンプト改善してリトライ(最大3回)
    |   +-- リトライ上限到達 → ユーザーに報告、続行 or スキップを選択
    |
    +--[Step 5] 最良3枚を出力
        +-- 各パターンのベスト1枚を selected/ にコピー
        +-- 結果一覧(パス + スコア + 評価コメント)をユーザーに提示

デザインパターン

パターン コンセプト 特徴
Minimalist 余白とタイポグラフィ主体 clean, whitespace, typography-driven, elegant
Infographic データ/フロー可視化 data visualization, metrics, flow diagram, structured
Hero Visual 大ビジュアル + キャッチコピー bold visual, impactful, hero image, catchy headline

出力先

out/slides/
+-- minimalist_1.png       # Pattern A 候補1
+-- minimalist_2.png       # Pattern A 候補2
+-- infographic_1.png      # Pattern B 候補1
+-- infographic_2.png      # Pattern B 候補2
+-- hero_1.png             # Pattern C 候補1
+-- hero_2.png             # Pattern C 候補2
+-- selected/
|   +-- minimalist.png     # Pattern A 最良
|   +-- infographic.png    # Pattern B 最良
|   +-- hero.png           # Pattern C 最良
+-- quality-report.md      # 品質チェック結果レポート

実行手順

Step 1: 情報収集

プロジェクト情報を以下の優先順位で収集:

  1. ユーザー指定テキスト: 引数でプロジェクト説明が渡された場合はそれを使用
  2. コードベース自動分析: 引数がない場合、以下を自動分析
    • README.md — プロジェクト概要
    • package.json / Cargo.toml / pyproject.toml — プロジェクト名・説明・依存関係
    • CLAUDE.md — プロジェクト構成・目的
    • Plans.md — 進行中のタスク(存在する場合)

抽出する情報:

項目
プロジェクト名 Claude Code Harness
概要(1-2文) Claude Code を Plan-Work-Review で自律運用するプラグイン
主要機能(3-5個) スキル管理、品質チェック、並列実行
技術スタック TypeScript, Node.js, Claude Code Plugin
カラー(あれば) ブランドカラー or 推測

Step 2: 仕様確認

AskUserQuestion で以下を確認(デフォルト値があるため、曖昧な場合のみ質問):

質問1: スライドのサイズ・アスペクト比は?
  - 16:9 / 2K(推奨)
  - 4:3 / 2K
  - 1:1 / 2K
  - カスタム

質問2: トーンは?
  - テック(ダークテーマ、コード感)
  - カジュアル(明るい、フレンドリー)
  - コーポレート(フォーマル、信頼感)
  - クリエイティブ(大胆、アート寄り)

Step 3: 画像生成

slide-generator.md の手順に従い、3パターン x 2枚 = 6枚を生成。

各パターンの生成は独立しているため、可能な限り並列で curl を実行:

# 並列実行例(3パターン x 2枚)
for pattern in minimalist infographic hero; do
  for i in 1 2; do
    # slide-generator.md の curl パターンを実行
    # → out/slides/${pattern}_${i}.png に保存
  done
done

Step 4: 品質チェック

slide-quality-check.md の基準に従い、各パターンの2枚を評価:

  1. 各画像を Read で読み込み
  2. 5段階スコアリング(情報伝達力、レイアウト、テキスト可読性、プロフェッショナル感、ブランド整合性)
  3. パターン内でスコアが高い方を採用候補
  4. 両方スコア2以下 → プロンプト改善して再生成(最大3回)

Step 5: 結果出力

# 最良画像を selected/ にコピー
mkdir -p out/slides/selected
cp out/slides/minimalist_best.png out/slides/selected/minimalist.png
cp out/slides/infographic_best.png out/slides/selected/infographic.png
cp out/slides/hero_best.png out/slides/selected/hero.png

品質レポート(out/slides/quality-report.md)を生成:

# Slide Quality Report

## 生成情報
- プロジェクト: {project_name}
- 生成日時: {datetime}
- アスペクト比: {aspect_ratio}
- トーン: {tone}

## 結果サマリー

| パターン | 候補1 | 候補2 | 採用 | スコア |
|---------|-------|-------|------|--------|
| Minimalist | 3/5 | 4/5 | 候補2 | 4/5 |
| Infographic | 4/5 | 3/5 | 候補1 | 4/5 |
| Hero Visual | 5/5 | 4/5 | 候補1 | 5/5 |

## 詳細評価
...

エラーハンドリング

GOOGLE_AI_API_KEY 未設定

GOOGLE_AI_API_KEY が設定されていません。

設定方法:
1. Google AI Studio でAPIキーを取得: https://ai.google.dev/aistudio
2. export GOOGLE_AI_API_KEY="your-api-key"

全パターンでリトライ上限到達

AskUserQuestion で選択肢を提示:

パターン {pattern} の画像が3回のリトライでも基準を満たしませんでした。

選択肢:
1. 最も高スコアの画像を採用して続行
2. このパターンをスキップ
3. プロンプトを手動で指定して再生成

関連スキル

  • generate-video — プロダクトデモ動画生成(画像生成エンジンを共有)
  • notebookLM — ドキュメント・スライド生成(別アプローチ)
通过显式命令或工作流内部调用,基于Remotion自动生成产品演示视频。流程涵盖代码分析、场景规划、AI素材生成及并行渲染,支持多种漏斗阶段的视频类型定制。
用户输入/generate-video命令 父级媒体工作流内部触发
codex/.codex/skills/generate-video/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill generate-video -g -y
SKILL.md
Frontmatter
{
    "name": "generate-video",
    "context": "fork",
    "description": "Auto-generate product demo videos. Internal\/manual workflow only; use from an explicit \/generate-video command or a parent media workflow. Requires Remotion setup.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Grep",
        "Glob",
        "Bash",
        "Task",
        "AskUserQuestion",
        "WebFetch"
    ],
    "argument-hint": "[demo|arch|release]",
    "description-en": "Auto-generate product demo videos. Internal\/manual workflow only; use from an explicit \/generate-video command or a parent media workflow. Requires Remotion setup.",
    "description-ja": "プロダクトデモ動画を自動生成。明示的な \/generate-video または親メディアワークフローからのみ使う。通常発話からの自動起動はしない。Remotion セットアップが必要。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Generate Video Skill

プロダクト説明動画の自動生成を担当するスキル群です。

起動契約

このスキルは user-invocable: false かつ disable-model-invocation: true です。 通常のユーザー発話(例: 「動画を作って」)で Claude が自動選択する前提にはしません。

  • 明示的な /generate-video コマンド、または親メディアワークフローから内部的に起動される時だけ使います。
  • allowed-tools は Claude Code 用です。Claude ではユーザー確認に AskUserQuestion を使えます。
  • Codex mirror では同等の確認は request_user_input 相当の計画モード入力に読み替えます。通常実行でそのツールがない場合は、既定値を提示して停止せず進め、重要な未確定事項だけユーザーへ確認します。
  • disable-model-invocation: true は「説明文だけを見てモデルが勝手に起動しない」という意味です。slash や親 workflow から明示起動された場合は本文手順に従います。

概要

/generate-video コマンドの内部で使用されるスキルです。 コードベース分析 → シナリオ提案 → 並列生成のフローを実行します。

機能詳細

機能 詳細
ベストプラクティス See references/best-practices.md
コードベース分析 See references/analyzer.md
シナリオプランニング See references/planner.md
並列シーン生成 See references/generator.md
視覚効果ライブラリ See references/visual-effects.md
AI画像生成 See references/image-generator.md
画像品質判定 See references/image-quality-check.md

Prerequisites

  • Remotion がセットアップ済み(/remotion-setup
  • Node.js 18+
  • (オプション)GOOGLE_AI_API_KEY - AI画像生成用

/generate-video フロー

/generate-video
    │
    ├─[Step 1] 分析(analyzer.md)
    │   ├─ フレームワーク検出
    │   ├─ 主要機能検出
    │   ├─ UIコンポーネント検出
    │   └─ プロジェクト資産解析(Plans.md, CHANGELOG等)
    │
    ├─[Step 2] シナリオ提案(planner.md)
    │   ├─ 動画タイプ自動判定
    │   ├─ シーン構成提案
    │   └─ ユーザー確認
    │
    ├─[Step 2.5] 素材生成(image-generator.md)← NEW
    │   ├─ 素材必要判定(イントロ、CTA等)
    │   ├─ Nano Banana Pro で2枚生成
    │   ├─ Claude が品質判定(image-quality-check.md)
    │   └─ OK → 採用 / NG → 再生成(最大3回)
    │
    └─[Step 3] 並列生成(generator.md)
        ├─ シーン並列生成(Task tool)
        ├─ 統合 + トランジション
        └─ 最終レンダリング

実行手順

  1. ユーザーが /generate-video を実行
  2. Remotion セットアップ確認
  3. analyzer.md でコードベース分析
  4. planner.md でシナリオ提案 + ユーザー確認
  5. generator.md で並列生成
  6. 完了報告

動画タイプ(ファネル別)

タイプ ファネル 長さ目安 自動判定条件 構成の芯
LP/広告ティザー 認知〜興味 30-90秒 新規プロジェクト 痛み→結果→CTA
Introデモ 興味→検討 2-3分 UI変更検出 1ユースケース完走
リリースノート 検討→確信 1-3分 CHANGELOG更新 Before/After重視
アーキテクチャ解説 確信→決裁 5-30分 大規模構造変更 実運用+証拠
オンボーディング 継続・活用 30秒-数分 初回セットアップ Aha体験への最短パス

詳細: references/best-practices.md

シーンテンプレート

90秒ティザー(LP/広告向け)

時間 シーン 内容
0-5秒 Hook 痛み or 望む結果
5-15秒 Problem+Promise 対象ユーザーと約束
15-55秒 Workflow 象徴ワークフロー
55-70秒 Differentiator 差別化の根拠
70-90秒 CTA 次の一手

3分Introデモ(検討向け)

時間 シーン 内容
0-10秒 Hook 結論+痛み
10-30秒 UseCase ユースケース宣言
30-140秒 Demo 実画面で完走
140-170秒 Objection よくある不安1つ潰す
170-180秒 CTA 行動喚起

共通シーン

シーン 推奨時間 内容
イントロ 3-5秒 ロゴ + タグライン
機能デモ 10-30秒 Playwrightキャプチャ
アーキテクチャ図 10-20秒 Mermaid → アニメーション
CTA 3-5秒 URL + 連絡先

詳細テンプレート: ${CLAUDE_SKILL_DIR}/references/best-practices.md

音声同期ルール(重要)

ナレーション付き動画では以下を厳守:

ルール
音声開始 シーン開始 + 30f(1秒待機)
シーン長さ 30f + 音声長さ + 20f余白
トランジション 15f(隣接シーンとオーバーラップ)
シーン開始計算 前シーン開始 + 前シーン長 - 15f

事前確認: ffprobe で音声長さを確認してからシーン設計

詳細: ${CLAUDE_SKILL_DIR}/references/generator.md

BGM サポート

項目 推奨値
ナレーションあり bgmVolume: 0.20 - 0.30
ナレーションなし bgmVolume: 0.50 - 0.80
ファイル配置 public/BGM/

詳細: ${CLAUDE_SKILL_DIR}/references/generator.md

字幕サポート

ルール
字幕開始 音声開始と同じ
字幕duration 音声長 + 10f
フォント Base64埋め込み推奨

詳細: ${CLAUDE_SKILL_DIR}/references/generator.md

視覚効果ライブラリ

インパクトのある動画向けエフェクト集:

エフェクト 用途
GlitchText Hook、タイトル
Particles 背景、CTA収束
ScanLine 解析中演出
ProgressBar 並列処理表示
3D Parallax カード表示

詳細: references/visual-effects.md

Notes

  • Remotion未セットアップの場合は /remotion-setup を案内
  • 並列生成数はシーン数に応じて自動調整(max 5)
  • 生成された動画は out/ ディレクトリに出力
  • AI生成画像は out/assets/generated/ に保存
  • GOOGLE_AI_API_KEY 未設定時は画像生成をスキップ(既存素材 or プレースホルダー使用)
规范使用gogcli操作Google Workspace(Drive/Sheets/Docs/Slides)。涵盖身份验证、URL转ID解析、只读元数据检查及写入操作,强调最小权限与安全确认。
用户需要管理或访问Google Drive文件 用户需读取或更新Google Sheets表格 用户需查看或导出Google Docs文档 用户需处理Google Slides幻灯片 用户提供Google资源URL需解析ID
codex/.codex/skills/gogcli-ops/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill gogcli-ops -g -y
SKILL.md
Frontmatter
{
    "name": "gogcli-ops",
    "description": "gogcli for Google Workspace ops (Drive\/Sheets\/Docs\/Slides). Triggers: list\/search\/export\/read\/update Google files, URL\/ID parsing, auth selection. Skip for: non-Google storage, generic shell.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Grep",
        "Glob"
    ],
    "description-en": "gogcli for Google Workspace ops (Drive\/Sheets\/Docs\/Slides). Triggers: list\/search\/export\/read\/update Google files, URL\/ID parsing, auth selection. Skip for: non-Google storage, generic shell.",
    "description-ja": "gogcli でGoogle Workspace操作(Drive\/Sheets\/Docs\/Slides)。ユーザーがGoogleファイルの確認・検索・エクスポート・読み取り・更新をgogcliで依頼する時に使用。Trigger when a user asks to check, list, search, export, read, or update Google files via gogcli; when a Google URL\/ID needs parsing; when auth\/account selection or safe read-only workflows are needed; or when troubleshooting gogcli access\/errors. Do NOT load for: general file operations, non-Google cloud storage, or standard shell commands.",
    "disable-model-invocation": true
}

Gogcli Ops

Overview

Standardize gogcli usage: verify auth, resolve IDs from URLs, default to read-only checks, then run the minimum command needed.

Quick start

  • Confirm gogcli is available: gog --version
  • List accounts and pick one explicitly if more than one: gog auth list
  • Resolve URL to ID with python3 scripts/gog_parse_url.py "<url-or-id>"
  • Run a read-only metadata command first (Drive/Sheets/Docs/Slides)

Workflow decision tree

  1. Identify target type: sheet | doc | slide | file | folder | id | unknown via scripts/gog_parse_url.py.
  2. Choose the smallest read-only command to confirm access:
    • Sheets: gog sheets metadata <spreadsheetId>
    • Docs: gog docs info <docId>
    • Slides: gog slides info <presentationId>
    • Drive file/folder: gog drive get <fileId> or gog drive permissions <fileId>
  3. Only proceed to write operations (update/append/move/share/delete) after explicit user confirmation.

Core tasks

Auth and account selection

  • Show stored accounts: gog auth list
  • Show auth configuration: gog auth status
  • Add/authorize account: gog auth add <email>
  • Always use --account <email> when multiple accounts exist.

Resolve IDs from URLs

  • Parse a URL or ID:
    • python3 scripts/gog_parse_url.py "<url-or-id>"
  • If output type is unknown, ask for a direct ID or a different URL.

Drive (files/folders)

  • List root or a folder: gog drive ls
  • Search by query: gog drive search "<query>"
  • Get metadata: gog drive get <fileId>
  • Download/export: gog drive download <fileId>
  • Permissions check: gog drive permissions <fileId>

Sheets

  • Metadata: gog sheets metadata <spreadsheetId>
  • Read values: gog sheets get <spreadsheetId> <range>
  • Export: gog sheets export <spreadsheetId>
  • Write operations (update/append/clear/format): require explicit confirmation and exact range.

Docs

  • Metadata: gog docs info <docId>
  • Read text: gog docs cat <docId>
  • Export: gog docs export <docId>

Slides

  • Metadata: gog slides info <presentationId>
  • Export: gog slides export <presentationId>

Output modes

  • Use --plain for stable TSV output.
  • Use --json when a caller wants structured output.
  • Use --no-input in non-interactive flows to avoid hanging.

Error handling

  • 403/404: verify account (gog auth list), check permissions (gog drive permissions <fileId>), and confirm the ID.
  • If access fails, request the user to share the file with the selected account or provide the correct account.

Resources

  • See ${CLAUDE_SKILL_DIR}/references/gogcli-cheatsheet.md for a compact command list.
  • Use scripts/gog_parse_url.py to normalize URLs into IDs before running commands.
面向非技术人员,通过生成单页HTML展示验收标准验证结果,辅助进行ship/wait/reject决策。仅读取当前项目数据,基于通过率自动计算推荐结论及证据。
受け入れ判断 ship/wait/reject 検収レビュー acceptance demo
codex/.codex/skills/harness-accept/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-accept -g -y
SKILL.md
Frontmatter
{
    "name": "harness-accept",
    "description": "Acceptance Demo HTML for ship\/wait\/reject decision — reads stored acceptance_criteria. Triggers: 受け入れ判断, ship\/wait\/reject, 検収レビュー, acceptance demo. Skip for: implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "argument-hint": "[task-description]",
    "description-en": "Acceptance Demo HTML for ship\/wait\/reject decision — reads stored acceptance_criteria. Triggers: 受け入れ判断, ship\/wait\/reject, 検収レビュー, acceptance demo. Skip for: implementation, review, release.",
    "description-ja": "実装完了直後の受け入れ判断 (ship \/ wait \/ reject) 前に Acceptance Demo HTML を生成する。harness-plan-brief が `personal-preference.v1` で書き込んだ acceptance_criteria を `user_request_hash` 経由で取得し、各基準ごとに verified \/ unverified を表示。`recommendation` を ship \/ wait \/ reject の 3 値で算出し、根拠を HTML 上で可視化する。Use when: 受け入れ判断, 受入レビュー, ship\/wait\/reject 判定, 検収レビュー。Do NOT load for: 実装作業, code review, release。",
    "user-invocable": true
}

harness-accept

非エンジニアの発注者・プロデューサー職向けに、実装完了タスクの受け入れ判断 (ship / wait / reject) を HTML 1 枚 で提示するスキル。 発注者の認知負荷ピーク (3) 受け入れ判断の段階で使う。

Phase 65.1.x (harness-plan-brief) の対構造として動作し、Plan Brief で承認した acceptance_criteria を read 側で取り戻して評価する。

Quick Reference

  • Acceptance Demo を作って」 → このスキル
  • 受け入れ判断したい」 → このスキル
  • ship/wait/reject 判定」 → このスキル

責任境界

範囲 このスキルの責務
検索 現プロジェクトのみ (project: <current>, strict_project: true を必ず指定)
クロスプロジェクト やらない (Phase 65.3 以降で --cross-project-group <name> flag で opt-in 解放)
Plan Brief 連携 user_request_hash を join key として personal-preference.v1 (Phase 65.1.4) を read
書き込み やらない (Acceptance 承認後の memory write は accept-record-decision.sh の責務)
recommendation 算出 verified / 全 criteria の比率で 0.8 / 0.5 閾値判定。ロジックは scripts/render-html.sh 直前で計算

入力

引数 [task-description] にユーザーの request を渡す (Plan Brief 時と同じ文を使う)。 引数なしの場合は対話形式で受け取る。

出力

出力 パス 形式
Acceptance Demo HTML .claude/state/views/accept-<timestamp>.html 単独で開ける HTML (no server, no JS framework)
Acceptance context JSON .claude/state/views/accept-<timestamp>.context.json acceptance-context.v1 schema

Schema: acceptance-context.v1

{
  "schema": "acceptance-context.v1",
  "user_request": "string",
  "user_request_hash": "sha256 hex (Plan Brief 側の personal-preference.v1 と join)",
  "demo_artifacts": [
    { "kind": "video|screenshot|text", "path": "string" }
  ],
  "verified_criteria": [
    { "name": "string", "passed": true, "evidence": "string" }
  ],
  "tdd_verified": "yes|no|not-required|skip:<reason>",
  "unverified_caveats": ["string"],
  "past_issue_patterns": [
    { "pattern_id": "P5", "title": "string", "verified_in_current_task": true }
  ],
  "recommendation": "ship|wait|reject",
  "recommendation_evidence": ["string"],
  "project": "string",
  "generated_at": "ISO8601"
}

完全 schema は schemas/acceptance-context.v1.schema.json を参照。

Recommendation 算出ロジック

verified_count    = count of verified_criteria where passed=true
total_criteria    = count of verified_criteria
ratio             = verified_count / total_criteria  (total=0 のときは 0)

  ratio >= 0.8 → "ship"
  ratio >= 0.5 → "wait"
  ratio <  0.5 → "reject"
  total = 0    → "reject" (criteria 0 件は判定不能、安全側 reject)

評価根拠は recommendation_evidence に literal な数値で残す。 例: "verified 4 件 / 全 5 件 (80%) → ship 閾値以上"

Execution Flow

スキル起動時、Claude は以下の手順で動作する。

Step 1: project name と user_request_hash を解決

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)")"
USER_REQUEST_HASH="$(printf '%s' "$USER_REQUEST" | sha256sum | awk '{print $1}')"

PROJECT_NAME が空 (git 外) の場合は current をデフォルトに使う。

Step 2: harness-mem を project-only で検索し、Plan Brief 側 record を取得 (default)

引数に --cross-project-group <name> flag がない場合 (default behavior):

mcp__harness__harness_mem_search を以下のパラメータで呼び出す:

project: <PROJECT_NAME>
strict_project: true
tags: ["personal-preference", "plan-brief-approval"]
limit: 10

重要: project パラメータは必須strict_project: true を指定し、cross-project な検索は絶対に行わない

取得した record を data.user_request_hash == <USER_REQUEST_HASH> でフィルタし、最も新しい 1 件を選ぶ。 これが Plan Brief 時の承認内容 (chosen_option / acceptance_criteria 等) を保持している。

Step 2 (alt): cross-project search (Phase 65.3.5 opt-in)

引数に --cross-project-group <name> flag がある場合のみ、横断 group 内の他プロジェクトでの 類似 plan-brief-approval / acceptance-decision 履歴を取得する (D43 Option α):

MEMBERS_JSON="$(bash scripts/load-cross-project-groups.sh --group "<name>" 2>/dev/null)" || {
  echo "ERROR: cross-project group not found: <name>" >&2
  exit 1
}

MEMBERS_JSON[] の場合は default の単一 project search に fallback。

MEMBERS_JSON が非空の場合、各 member project ごとに MCP search を 1 回発行:

for each project in MEMBERS_JSON:
  mcp__harness__harness_mem_search(
    project: <member>,
    strict_project: true,
    tags: ["personal-preference", "plan-brief-approval"],
    limit: 10
  )

結果を client 側でマージし、data.user_request_hash == <USER_REQUEST_HASH> でフィルタ。 hash 一致は基本的に同一 user request 由来のため複数 project での重複は稀だが、念のため id 単位で dedupe。

cross-project 由来の record を採用すると過去他案件の chosen_option / acceptance_criteria が混入する 可能性があるため、HTML 出力時は --with-redaction flag を必ず使用 すること:

bash scripts/render-html.sh --template accept ... --with-redaction

詳細は .claude/rules/cross-repo-handoff.md の「Phase 65.3 実装決定事項 (D43)」を参照。

Step 3: 過去の問題パターンを取得 (Phase 65.2.2 委譲)

bash scripts/accept-past-issues.sh --project "$PROJECT_NAME" --task "$USER_REQUEST" > "$PAST_ISSUES_JSON"

このスクリプトは patterns.md (P1-P33) と過去の acceptance-context.v1 record を semantic search し、 最大 3 件の past-issue.v1 を返す。各々 verified_in_current_task: bool 付き。

Step 4: verified_criteria を組み立てる

Plan Brief 時の acceptance_criteria 各項目について、現タスクの状態を評価する。 ユーザー (もしくは Claude) が「verify した evidence」を提示し、evidence 文字列を埋める。

evidence が空文字列の場合、HTML 上で警告表示される (DoD c)。

TDD が必要な task では、Acceptance Demo に TDD verified: yes|no の 1 行を必ず出す。 TDD 不要または skip の場合は TDD verified: not-required または TDD verified: skip:<reason> と表示する。 yes にできるのは .claude/state/tdd-red-log/<task-id>.jsonl の Red 証跡、または literal failing test output が確認できる時だけ。

Step 5: recommendation を算出する

上記「Recommendation 算出ロジック」に従って ship / wait / reject を決定する。

Step 6: HTML を生成する

scripts/render-html.sh (Phase 65.1.1) を templates/html/accept.html.template で呼ぶ:

bash scripts/render-html.sh \
  --template accept \
  --data "$CONTEXT_JSON" \
  --out "$HTML_OUT"

Step 7: ブラウザで自動 open する

scripts/plan-brief-open.sh (Phase 65.1.2 で導入された 汎用 OS dispatcher) を再利用:

bash scripts/plan-brief-open.sh "$HTML_OUT"

: スクリプト名に「plan-brief」が入っているが、実体は OS 別 browser open dispatcher で kind 中立。 Phase 65.1.2 で先に導入されたため historical name。Layer 3 (HTML 直前最終 scan) 等の他用途でも再利用される。 BROWSER=true の env が設定されている場合 (CI 環境)、open は skip され printf で path だけ出力する。

Step 8: ユーザー判断待ち

「ship / wait / reject の recommendation を採用するか、override するか」を確認する。 判断後の memory write は別スキル (accept-record-decision.sh、Phase 65.2.3) の責務。

失敗時の挙動

失敗 挙動
mcp__harness__harness_mem_search 不達 警告を表示し、verified_criteria を空配列で続行 (recommendation = reject)
Plan Brief 側 record が見つからない warning を出し、verified_criteria を空配列で続行
git rev-parse --show-toplevel 失敗 PROJECT_NAME=current で続行
accept-past-issues.sh 失敗 past_issue_patterns: [] で続行 (best-effort)
render-html.sh 失敗 エラーを stderr に出力し exit 1

Related

  • harness-plan-brief (Phase 65.1.2) — 計画段階の対構造スキル。本スキルは Plan Brief 時の personal-preference.v1user_request_hash で join して read
  • scripts/accept-past-issues.sh (Phase 65.2.2) — 過去の問題パターン取得 (read side)
  • scripts/accept-record-decision.sh (Phase 65.2.3) — 承認 memory write (acceptance-decision.v1)
  • scripts/render-html.sh (Phase 65.1.1) — HTML テンプレートエンジン
  • scripts/plan-brief-open.sh (Phase 65.1.2) — 汎用 OS browser dispatcher
  • harness-progress skill (Phase 65.4.1) — 進行管理スキル (3 surface のうち真ん中)
Codex版后台长期循环执行器,自动识别并批量运行就绪任务。支持状态监控、停止控制及并行度配置,适用于自动化持续集成与长时间后台处理场景。
需要启动长期运行的后台自动化任务 要求自主循环处理未完成的cc:TODO或cc:WIP任务 需要对后台执行进程进行状态监控或强制停止
codex/.codex/skills/harness-loop/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-loop -g -y
SKILL.md
Frontmatter
{
    "base": "harness-work",
    "kind": "workflow",
    "name": "harness-loop",
    "pair": "harness-sync",
    "role": "orchestrator",
    "owner": "harness-core",
    "shape": "delegate",
    "since": "2026-05-05",
    "purpose": "Run long-lived Codex ready-batch execution loops",
    "trigger": "long-running, loop, autonomous, background, Codex",
    "description": "HAR: Codex-native long-running loop runner. Uses a real background runner that executes one ready batch per cycle through Breezing by default, with status\/stop controls. Trigger: long-running, loop, autonomous, background, Codex. Do NOT load for: one-shot implementation, normal review, release.",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "argument-hint": "[all|TASK|START-END|START..END] [--max-cycles N] [--max-workers N|max] [--executor breezing|task] [--pacing worker|ci|plateau|night]",
    "description-en": "HAR: Codex-native long-running loop runner. Uses a real background runner that executes one ready batch per cycle through Breezing by default, with status\/stop controls. Trigger: long-running, loop, autonomous, background, Codex. Do NOT load for: one-shot implementation, normal review, release.",
    "description-ja": "HAR: Codex 専用の長時間ループ実行。実際のバックグラウンドランナーが ready batch を Breezing で進め、status \/ stop で監視できる。長時間、loop、ループ、autonomous、background、Codex で起動。",
    "disable-model-invocation": true
}

Harness Loop

Codex 版の harness-loop は、説明だけの擬似ループではなく、 実際にバックグラウンドで回るランナーを起動する。

ひとことで

$harness-loop は、1 回だけの実装依頼ではなく、 「今すぐ実行できる未完了タスクのまとまりを、Breezing で自動実行し続ける当番」を起動する入口。

ここでいう ready batch は、Depends が満たされていて、今すぐ並列実行できる cc:TODO / cc:WIP のまとまり。 1 cycle は 1 task ではなく、原則として 1 ready batch を処理する。

たとえると

人が横でずっと見張る代わりに、 「同時に進められる作業をまとめて見つける → Breezing に任せる → 結果を確認する → 次のまとまりへ進む」 を繰り返す監督係を、裏で常駐させるイメージ。

Quick Reference

入力 動作
$harness-loop all 未完了タスク全体を長時間ループで開始
$harness-loop 41.1-41.4 範囲を絞って開始
$harness-loop JLB3R-02..JLB3R-08 Plans.md の task ID 順で範囲を絞って開始
$harness-loop all --max-cycles 3 最大 3 サイクルで停止
$harness-loop all --max-workers 4 1 cycle の ready batch を最大 4 worker までに制限
$harness-loop all --max-workers max ready batch 内で実行可能なタスク数を上限として並列化
$harness-loop all --plan roadmap named Plans の roadmap を対象にループ実行
$harness-loop all --executor task 旧来の 1 task per cycle local worker 実行へ逃がす
$harness-loop all --pacing night サイクル間の待機を長めにする
$harness-loop status 現在の実行状況を確認
$harness-loop stop 進行中ジョブを止めてループ停止要求を出す

実行コマンド

開始

harness codex-loop start all

範囲指定:

harness codex-loop start 41.1-41.4 --max-cycles 5 --pacing worker
harness codex-loop start JLB3R-02..JLB3R-08 --max-cycles 5 --pacing worker
harness codex-loop start all --max-workers max --pacing worker
harness codex-loop start all --plan roadmap --max-cycles 5
harness codex-loop start all --executor task --max-cycles 5

START..END は、Plans.md に並んでいる task ID をそのまま使う範囲指定。 英字やハイフンを含む task ID は .. を優先する。 41.1-41.4 のような従来の数値レンジも引き続き使える。

--max-workers は、Breezing が 1 cycle で同時に動かす worker 数の上限。 max は、選択範囲内で Depends が満たされた ready task の数をそのまま上限にする。 --executor task は、Breezing ではなく local worker に 1 task だけ渡す互換用の逃げ道。 問題切り分けや、並列実行したくない危険な作業で使う。 複数 Plans.md がある repo では、長時間 run の起動時に --plan NAME を明示する。 runner は開始時に解決した Plans file を cycle 間で保持するため、途中で active plan を切り替えない。

状態確認

harness codex-loop status
harness codex-loop status --json

停止

harness codex-loop stop

どう動くか

  1. project root の .claude/state/codex-loop/ に Harness loop の実行状態を書き出す
  2. 受け取った selection を Plans.md から正規化する
  3. Plans.md から Depends が満たされた cc:TODO / cc:WIP を集め、ready batch を作る
  4. --max-workers で ready batch の同時実行数を制限する
  5. 既定では Breezing executor が ready batch を Lead / Worker / Reviewer 分離で実行する
  6. --executor task の時だけ、互換用 local worker が 1 task per cycle で codex exec を起動する(CODEX_LOOP_TASK_DRIVER=companion の時だけ bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --background --write ... を使う)
  7. 高リスク task / 2 回目失敗 / plateau 直前では advisor consult を挟む
  8. ready batch 完了後に review / checkpoint / plateau 判定を行う
  9. まだ対象タスクが残っていれば、待機後に次サイクルへ進む

Realtime Handoff / Silence Policy

Codex 0.123.0 以降の background agent は realtime handoff で transcript delta を受け取れる。 この delta は「状況把握用の追記」であり、毎回ユーザーへ返答する合図ではない。

ひとことで: background agent は、必要な時だけ報告し、何も判断が変わらない時は明示的に沈黙する。

たとえると、見張り役が廊下でずっと実況するのではなく、異常・完了・判断待ちだけを知らせる形。

報告してよいタイミング:

  • loop 開始、停止、already runningstop 受理など、ユーザー操作に関わる lifecycle 境界
  • 1 ready batch cycle の最終結果、commit、RESULT: APPROVED / RESULT: BLOCKED
  • Breezing Lead が task 完了を progress feed としてまとめて出す時
  • task が blocked、validation failure、review REQUEST_CHANGES、plateau、advisor STOP で止まる時
  • user が status を実行した時、または明示的に途中状況を聞いた時
  • advisor / reviewer drift、contract readiness failure など、放置すると品質判定がずれる時

沈黙するタイミング:

  • transcript delta を受け取っただけで、task / review / advisor の状態が変わっていない時
  • runner.log / jobs/*.log に既に残る細かな stdout だけが増えた時
  • pacing 待機中で、次 cycle まで新しい判断材料がない時

途中報告の頻度:

  • default は「1 ready batch cycle につき最終報告 1 回」。
  • Breezing の task-level progress feed は、batch 内の完了数が動いた時だけ出す。
  • 長い cycle でも、material state change がない限り heartbeat は出さない。
  • 詳細な流れは harness codex-loop status --json と project root の .claude/state/codex-loop/runner.log に寄せ、会話側には要点だけ出す。

Advisor / Reviewer drift との関係:

  • silence policy は drift 検知を弱めるためのものではない。
  • advisor-request.v1 に response がない、review-result.v1 が返らない、contract が未承認などの異常は必ず state / log に残し、必要ならユーザーへ報告する。
  • Advisor は PLAN / CORRECTION / STOP の相談役、Reviewer は最終品質判定役のまま分離する。

pacing

用途 待機秒数
worker 通常の開発ループ 270
ci 短めに確認したい時 270
plateau 行き詰まり気味の再試行 1200
night 長めの放置実行 3600

State Path Policy

Codex 版 harness-loop は、Codex native の会話・実行キャッシュと、Harness が共有する project state を分けて扱う。

  • Harness 共通 state: project root の .claude/state/ 配下に置く。Claude 側の advisor / review / checkpoint と共有するため、harness codex-loop status もここを読む。
  • Codex loop runner state: project root の .claude/state/codex-loop/ 配下に置く。これは「Codex 全体の正本」ではなく、Harness loop runner の job / cycle / log 用 state。
  • Codex native state: ${CODEX_HOME:-~/.codex} 配下に残る Codex 自身の thread / transcript / cache。Harness loop の task status、advisor history、review result の正本にはしない。
  • 禁止: .Codex/~/.Codex を正本 path として案内しない。大文字 Codex ディレクトリは historical drift と見なす。

つまり、.claude/state/codex-loop/ は「この project の Harness loop state」であり、Codex native state 全体の固定保存先ではない。

状態ファイル

以下はすべて project root 基準。

  • .claude/state/codex-loop/run.json
  • .claude/state/codex-loop/cycles.jsonl
  • .claude/state/codex-loop/runner.log
  • .claude/state/codex-loop/current-job.json
  • .claude/state/codex-loop/jobs/*.json
  • .claude/state/codex-loop/jobs/*.log
  • .claude/state/codex-loop/jobs/*.out
  • .claude/state/advisor/history.jsonl
  • .claude/state/advisor/last-request.json
  • .claude/state/advisor/last-response.json
  • .claude/state/locks/codex-loop.lock.d

Advisor Consult

Advisor は「代わりに実装する役」ではなく、「次の一手だけ返す相談役」。 loop では次の 3 箇所でだけ呼ぶ。

タイミング reason_code 何をするか
高リスク task の初回実行前 high-risk-preflight 先に固める観点を聞く
同じ原因の 2 回目失敗後 retry-threshold 方針変更か局所修正かを聞く
plateau による停止直前 plateau-pre-escalation 本当に止めるべきかを聞く

decision は 3 種だけ。

decision loop の扱い
PLAN advice を次の executor prompt 先頭に足して再実行
CORRECTION 局所修正の指示として再実行
STOP loop を停止し、理由を state と runner.log に残す

同じ trigger は trigger_hash = task_id + reason_code + normalized_error_signature で 1 回だけ相談する。 相談回数は task ごとに最大 3 回で、それ以上はユーザー判断に上げる。

注意点

  • これは 本当に裏で動く。説明だけ返して終わるスキルではない。
  • 同時に 2 本は起動できない。既に走っている場合は already running で止まる。
  • 既定 executor は Breezing。旧来の 1 task per cycle 挙動が必要な時だけ --executor task を使う。
  • 失敗したタスクを無理に飛ばして次へ進めるのではなく、基本はその場で止まって理由を残す。
  • statusrunner.log を見れば、今どこで止まっているか追いやすい。

具体例

「Phase 41 の残タスクを、今日の間は自動で回したい」なら:

harness codex-loop start 41.1-41.4 --max-cycles 8 --max-workers max --pacing worker

途中で様子を見る:

harness codex-loop status

夜になって止めたい:

harness codex-loop stop

なぜこの形か

Codex では Claude の /loop と同じ wake-up 機構をそのまま使えない。 その代わり、Codex loop runner を土台にして、 Harness 側で状態管理と再入制御を持ち、実作業は Breezing の batch 実行に寄せる。 そうすると、長時間タスクでも「止める」「再開する」「今の状態を見る」が素直になり、 依存関係を満たした作業だけを安全にまとめて進められる。

用于可视化分析 Claude/Codex/Cursor 等后端工具的委托使用情况。通过读取状态文件,生成 HTML 评分卡或终端摘要,展示各后端的调用次数、配置状态及累计数据,帮助用户了解项目中的 AI 工具使用效率。
查看后端使用统计 查询 Codex/Cursor 调用量 生成使用自夸报告
codex/.codex/skills/harness-orchestration/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-orchestration -g -y
SKILL.md
Frontmatter
{
    "name": "harness-orchestration",
    "description": "Backend orchestration scorecard (Claude\/Codex\/Cursor) — HTML + terminal summary. Triggers: scorecard, backend usage, 自慢. Skip for: implementation, review, planning, release.",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "argument-hint": "[--out <path>|--no-open|--terminal]",
    "description-en": "Backend orchestration scorecard (Claude\/Codex\/Cursor) — HTML + terminal summary. Triggers: scorecard, backend usage, 自慢. Skip for: implementation, review, planning, release.",
    "description-ja": "このセッション\/プロジェクトでどれだけマルチバックエンド (Claude \/ Codex \/ Cursor) を活用したかを見せる。ledger と累計から HTML スコアカード + ターミナルサマリを on-demand で生成する。「オーケストレーション活用」「scorecard」「どのバックエンド使った」「Codex\/Cursor どれだけ使った」「累計」「自慢」で発動。実装・レビュー・計画・リリースでは読み込まない。",
    "disallowed-tools": [
        "Write",
        "Edit",
        "MultiEdit"
    ]
}

Harness Orchestration Scorecard

このセッション/プロジェクトの backend 活用度(Claude=ホスト / Codex / Cursor への委譲)を可視化する read-only スキル。 記録の正本は .claude/state/orchestration-ledger.jsonl(companion が委譲ごとに追記、Phase 90.1.1)と .claude/state/orchestration-totals.json(セッション終了/完了時に冪等 roll up、Phase 90.1.2)。

表示は on-demand のみ。作業中は出さず、見たい時にこのスキルで出す。 全タスク完了時の 1 回だけは task-completed が自動でターミナルサマリを出す(このスキルとは別経路)。

Quick Reference

  • オーケストレーション活用度見せて」→ HTML スコアカードを生成して開く
  • どのバックエンド使った」「Codex/Cursor どれだけ」→ ターミナルサマリ
  • 累計見せて」「自慢できるやつ」→ HTML スコアカード(lifetime totals が主役)

Deliverables

出力 生成物
HTML スコアカード scripts/orchestration-scorecard.sh --format html-datascripts/render-html.sh --template orchestration で単一 HTML
ターミナルサマリ scripts/orchestration-scorecard.sh --format terminal(3-5 行)

tri-state: used(count>0)/ available(設定済み未使用)/ not-configured(binary 不在=中立、壊れではない)。 委譲ゼロなら "no delegations observed" に degrade。

Execution

helper script は plugin bundle root から呼ぶ:

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"

ターミナルサマリ(--terminal

bash "${HARNESS_PLUGIN_ROOT}/scripts/orchestration-scorecard.sh" --format terminal

3-5 行を要約してそのまま提示する。

HTML スコアカード(既定 / --out / --no-open

OUT="${1:-.claude/state/orchestration-scorecard.html}"   # --out <path> で上書き
bash "${HARNESS_PLUGIN_ROOT}/scripts/orchestration-scorecard.sh" --format html-data \
  | bash "${HARNESS_PLUGIN_ROOT}/scripts/render-html.sh" --template orchestration --data - --out "$OUT"
  • --no-open 指定がなければ生成後にパスを提示し、ブラウザで開くよう案内する(自動 open は環境依存なのでパス提示を基本とする)
  • redaction は使わない: scorecard データは構造的に非機密(カウント + backend 名 + repo basename + 時刻のみ)。no-secret 保証は上流の ledger 契約が担保する

Related Skills

  • harness-progress — 進捗ダッシュボード(タスク進捗。本スキルは backend 活用度に特化)
  • harness-work / breezing — 実装(backend を実際に使う側)
为非工程师生成计划预览HTML,基于当前项目历史决策与模式。用于实施前的计划理解,严格限制在项目内搜索,不执行跨项目检索或写入操作。
plan brief planning preview 計画概要 計画レビュー
codex/.codex/skills/harness-plan-brief/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-plan-brief -g -y
SKILL.md
Frontmatter
{
    "name": "harness-plan-brief",
    "description": "Plan Brief HTML for pre-implementation preview (searches harness-mem for past decisions\/patterns). Triggers: plan brief, planning preview, 計画概要, 計画レビュー. Skip for: implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "argument-hint": "[task-description]",
    "description-en": "Plan Brief HTML for pre-implementation preview (searches harness-mem for past decisions\/patterns). Triggers: plan brief, planning preview, 計画概要, 計画レビュー. Skip for: implementation, review, release.",
    "description-ja": "実装着手前に Plan Brief HTML を生成する。現プロジェクトのみで harness-mem を検索し (`strict_project: true`)、過去 decision \/ pattern \/ Plans archive から類似案件を抽出して `plan-brief-context.v1` schema に整形、`render-html.sh` で単独 HTML を生成しブラウザ自動 open する。Use when: 計画概要, 非エンジニア向け事前共有, 提案前 review。Do NOT load for: 実装作業, code review, release。",
    "user-invocable": true
}

harness-plan-brief

非エンジニアの発注者・プロデューサー職向けに、Claude が着手しようとしている計画を HTML 1 枚 で提示するスキル。 発注者の認知負荷ピーク (1) 計画理解の段階で使う。

Quick Reference

  • Plan Brief を作って」 → このスキル
  • 実装前にざっくり整理」 → このスキル
  • 非エンジニア向けに計画を見せて」 → このスキル

責任境界

範囲 このスキルの責務
検索 現プロジェクトのみ (project: <current>, strict_project: true を必ず指定)
クロスプロジェクト やらない (Phase 65.3 以降で --cross-project-group <name> flag で opt-in 解放)
書き込み やらない (Plan Brief 承認後の memory write は plan-brief-record-decision.sh の責務)
confidence 算出 65.1.3 で実装される scripts/plan-brief-compile.sh に委譲

入力

引数 [task-description] にユーザーの request を渡す。 引数なしの場合は対話形式で受け取る。

出力

出力 パス 形式
Plan Brief HTML .claude/state/views/plan-brief-<timestamp>.html 単独で開ける HTML (no server, no JS framework)
Plan Brief context JSON .claude/state/views/plan-brief-<timestamp>.context.json plan-brief-context.v1 schema

Schema: plan-brief-context.v1

{
  "schema": "plan-brief-context.v1",
  "user_request": "string (ユーザーの request 原文)",
  "my_understanding": "string (Claude の理解を 1-3 段落で)",
  "options": [
    { "name": "string", "summary": "string", "pros": ["string"], "cons": ["string"] }
  ],
  "risks": [
    { "kind": "string", "severity": "info|warn|critical", "description": "string", "mitigation": "string" }
  ],
  "acceptance_criteria": [
    { "id": "string", "description": "string", "verifiable_by": "string" }
  ],
  "tdd_required": "yes|no|skip:<reason>",
  "confidence": 0,
  "confidence_evidence": ["string"],
  "related_decisions": [
    { "id": "string", "title": "string", "relevance": "string" }
  ],
  "similar_past_plans": [
    { "archive_path": "string", "phase": "string", "outcome": "cc:完了|cc:WIP|cc:TODO|skipped", "relevance": "string" }
  ],
  "project": "string",
  "generated_at": "ISO8601"
}

完全 schema は schemas/plan-brief-context.v1.schema.json を参照。

Execution Flow

スキル起動時、Claude は以下の手順で動作する。

Step 1: project name を解決

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)")"

PROJECT_NAME が空 (git 外) の場合は current をデフォルトに使う。

Step 2: harness-mem を project-only で検索する (default)

引数に --cross-project-group <name> flag がない場合 (default behavior):

mcp__harness__harness_mem_search必ず 以下のパラメータで呼び出す:

project: <PROJECT_NAME>
strict_project: true
query: <user request>
expand_links: true
limit: 5

重要: project パラメータは必須。空文字列や null を渡してはならない。 strict_project: true を指定し、cross-project な検索は絶対に行わない。 必要なら tags filter で decision / pattern を絞ってもよいが、project は固定。

過去 decision (D1-D41) / pattern (P1-P33) / Plans archive 28 件から類似案件を最大 5 件取得する。

Step 2 (alt): cross-project search (Phase 65.3.5 opt-in)

引数に --cross-project-group <name> flag がある場合のみ:

D43 Option α (MCP N-call) に従い、以下の手順で cross-project 検索を行う。

# (a) group → member projects に解決 (yaml SSOT)
MEMBERS_JSON="$(bash scripts/load-cross-project-groups.sh --group "<name>" 2>/dev/null)" || {
  echo "ERROR: cross-project group not found: <name>" >&2
  exit 1
}
# MEMBERS_JSON は ["proj1","proj2",...] 形式の JSON 配列

MEMBERS_JSON[] (空配列) の場合は warning を出して default の単一 project search に fallback。

MEMBERS_JSON が非空の場合、各 member project に対して MCP search を 1 回ずつ発行 する:

for each project in MEMBERS_JSON:
  mcp__harness__harness_mem_search(
    project: <member>,
    strict_project: true,
    query: <user request>,
    expand_links: true,
    limit: 5
  )

各 search 結果を client 側でマージ・dedupe (id 単位)・relevance_score 降順 sort し、最大 5 件に絞る。 合計呼び出し数が多くなる (group が 5 project なら 5 回) ため、レイテンシは増える点に注意。

D43 判断 1 の根拠: MCP tool schema には projects: [array]strict_project: false も exposed されていないため、横断検索は client 側 N-call が唯一の選択肢。 詳細は .claude/rules/cross-repo-handoff.md の「Phase 65.3 実装決定事項 (D43)」参照。

cross-project 結果には Layer 2/3 (Phase 65.3.2-65.3.4) の redaction を必ず通すこと:

  • HTML レンダリング時に bash scripts/render-html.sh ... --with-redaction を使用
  • これにより辞書 + NER + final scan の 3 段で固有名詞が漏れない

Step 3: context JSON を組み立てる

scripts/plan-brief-compile.sh (Phase 65.1.3 で実装) を使って、 mem search 結果から plan-brief-context.v1 schema 準拠の JSON を構築する。

65.1.3 が未実装の段階では、Claude が直接 jq で以下を組み立てる:

jq -n \
  --arg req "$USER_REQUEST" \
  --arg proj "$PROJECT_NAME" \
  --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
  '{
    schema: "plan-brief-context.v1",
    user_request: $req,
    my_understanding: "(まだ未着手)",
    options: [],
    risks: [],
    acceptance_criteria: [],
    confidence: 0,
    confidence_evidence: ["(stub) 65.1.3 で算出ロジック実装"],
    tdd_required: "no",
    related_decisions: [],
    similar_past_plans: [],
    project: $proj,
    generated_at: $ts
  }' > "$CONTEXT_JSON"

Step 4: HTML を生成する

scripts/render-html.sh (Phase 65.1.1) を templates/html/plan-brief.html.template で呼ぶ:

HTML には TDD 判定を 1 行で表示する。 形式は tdd_required: yestdd_required: no、または tdd_required: skip:<reason> のいずれかにする。

bash scripts/render-html.sh \
  --template plan-brief \
  --data "$CONTEXT_JSON" \
  --out "$HTML_OUT"

Step 5: ブラウザで自動 open する

scripts/plan-brief-open.sh で OS 別 dispatch:

bash scripts/plan-brief-open.sh "$HTML_OUT"

BROWSER=true の env が設定されている場合 (CI 環境)、open は skip され printf で path だけ出力する。

Step 6: ユーザー承認待ち

「この理解で実装に進んでよいか」を確認する。 承認後の memory write は別スキル (Phase 65.1.4 の plan-brief-record-decision.sh) の責務。

失敗時の挙動

失敗 挙動
mcp__harness__harness_mem_search 不達 警告を表示し、related_decisions / similar_past_plans を空配列で続行
git rev-parse --show-toplevel 失敗 PROJECT_NAME=current で続行
render-html.sh 失敗 エラーを stderr に出力し exit 1
plan-brief-open.sh 失敗 HTML path を stdout に出力するだけで exit 0 (browser open は best-effort)

Related

  • scripts/render-html.sh (Phase 65.1.1) — HTML テンプレートエンジン
  • scripts/plan-brief-compile.sh (Phase 65.1.3) — context compilation
  • scripts/plan-brief-record-decision.sh (Phase 65.1.4) — 承認 memory write
  • harness-accept skill (Phase 65.2.1) — 受け入れ判断スキル (対構造)
  • harness-progress skill (Phase 65.4.1) — 進行管理スキル (対構造)
用于任务规划与进度同步。支持创建计划、添加/更新任务、检查进展,确保 Plans.md 与实现一致。适用于非 trivial 规划,需进行多维度验证。不用于代码实现、审查或发布阶段。
创建计划 添加任务 更新任务状态 标记完成 检查进度
codex/.codex/skills/harness-plan/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-plan -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-plan",
    "pair": "harness-sync",
    "role": "generator",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "medium",
    "purpose": "Maintain co-required planning output for the spec.md product contract and Plans.md task contract",
    "trigger": "create a plan, add tasks, update Plans.md, check progress",
    "description": "HAR: Research-backed, team-validated task planning, Plans.md management, progress sync. Trigger: create a plan, add tasks, update Plans.md, mark complete, check progress. Do NOT load for: implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Grep",
        "Glob",
        "WebSearch",
        "Task"
    ],
    "argument-hint": "[create|add|update|sync|sync --no-retro|--ci]",
    "description-en": "HAR: Research-backed, team-validated task planning, Plans.md management, progress sync. Trigger: create a plan, add tasks, update Plans.md, mark complete, check progress. Do NOT load for: implementation, review, release.",
    "description-ja": "HAR:調査・採点・記憶確認・TeamAgent\/サブエージェント検証つきのタスク計画、Plans.md管理、進捗同期を担当。計画作って、タスク追加、Plans.md更新、完了マーク、進捗確認で起動。実装・レビュー・リリースには使わない。",
    "user-invocable": true
}

Harness Plan

Harness の統合プランニングスキル。 以下の3つの旧スキルを統合:

  • planning (plan-with-agent) — アイデア → Plans.md への落とし込み
  • plans-management — タスク状態管理・マーカー更新
  • sync-status — Plans.md と実装の同期確認

Quick Reference

ユーザー入力 サブコマンド 動作
"計画を作って" / /harness-plan create create Spec delta / skip reason → Plans.md task 生成
"タスクを追加して" / /harness-plan add add Plans.md に新タスク追加
"完了にして" / /harness-plan update update タスクマーカーを cc:完了 に変更
"今どこ?" / /harness-plan sync sync 実装とPlans.mdを照合・同期
/harness-sync sync 進捗確認(独立 sync surface と同等)
/harness-plan create create spec.md / Plans.md 二正本の計画作成
/harness-plan list list plans/manifest.json の named Plans を一覧
/harness-plan switch <name> switch active plan を .claude/state/active-plan.json に保存

Literal companion commands(CC 2.1.108+)

  • /recap: 久しぶりに戻った時に要約を取り直してから sync へ入る
  • /undo: /rewind の別名。直前の plan 更新を即座に戻したい時にそのまま使う

サブコマンド詳細

標準の計画品質契約

See references/planning-quality.md

harness-plan は、spec.md product contract and Plans.md task contract の co-required planning output を作る planning surface である。 precedence は spec.md > sub-spec > Plans.md のまま維持する。 Plans.md は task ledger、root spec.md は product contract であり、上下関係は崩さない。 渡された情報をそのまま Plans.md に落とさない。 計画作成や大きな task 追加では、最新情報・既存仕様・記憶・TeamAgent / サブエージェントによる複数視点の議論を確認し、 このプロダクトに取り入れるべき要素だけを task contract に変換する。 /harness-plan createSpec delta または Spec skip reasonPlans.md task 生成をセットで返す。 出力には必ず Spec delta または Spec skip reason を含める。 Spec delta / Spec skip reason は Harness が生成し、consumer は承認・修正だけ行う。

Non-trivial planning gate:

単発・軽微タスクでない planning は、TeamAgent またはサブエージェント前提で扱う。 ここでの non-trivial は、複数 task / 複数 file / 複数 session / product behavior / API / data model / 権限 / 課金 / 外部連携 / 配布面 / セキュリティに影響する依頼を指す。 Task tool が使える場合は Product / Architecture / Security / QA / Skeptic の独立視点を走らせる。 使えない場合は サブエージェント未使用 と明示し、同じ観点を単独で分けて評価する。

non-trivial planning の出力には、次の検証を必ず含める。

  • team_validation_mode: not_required_lightweight / native / subagent / manual-pass / unavailable
  • spec.md / sub-spec / Plans.md の整合性
  • harness-mem / harness-recall / repo memory による車輪の再発明防止確認
  • プロダクト目的から外れていないか
  • セキュリティ、権限、秘密情報、サプライチェーンに問題がないか
  • lint / formatter baseline があるか。source code changes を含む plan で未設定なら、実装 task の前に setup task を置く
  • ちゃんと動く計画か。つまり test / smoke / CI / review / release gate が task DoD に落ちているか

軽量 task は team_validation_mode: not_required_lightweight でよい。 non-trivial planning は native / subagent / manual-pass のいずれかを使う。 unavailable のまま Required にしてはいけない。 Product / Architecture / Security / QA / Skeptic は検証 perspective であり、agent_type 名ではない。 利用可能な TeamAgent / Task サブエージェントに perspective として依頼し、任意 agent spawn を要求しない。 Security gate は秘密情報の実読取を要求しない。 .env や secret の read が必要になる場合は Risk Gate として止め、許可された既存 guard / evidence で確認する。

適用する場面:

  • create で新しい計画を作る
  • add で product behavior / API / 権限 / 課金 / 外部連携 / 配布面に影響する task を足す
  • ユーザーが外部プロダクト、競合、仕様案、改善案、比較材料を渡した
  • 既存仕様や過去判断との衝突リスクがある

軽く扱ってよい場面:

  • marker 更新だけの update
  • status 照合だけの sync
  • typo、format、README/CHANGELOG のみ
  • 既存 spec とテストで正解が固定されている狭い変更

品質フロー:

  1. 入力情報を分解し、評価対象・採点軸・不確かな事実を明示する
  2. 最新情報を取得する。外部事実は WebSearch / 公式ドキュメント / 一次情報を優先し、重要点は複数ソースでクロスチェックする
  3. 既存仕様・root spec.md・Plans.md・README・docs・CLAUDE.md・関連 skill を確認する
  4. harness-mem / harness-recall / .claude/agent-memory/ / .claude/state/ など、利用可能な記憶面を project-scoped で確認する
  5. non-trivial planning では TeamAgent / Task サブエージェントを使い、Product / Architecture / Security / QA / Skeptic など異なる視点で独立レビューする
  6. source code changes を含む plan では lint / formatter baseline を確認し、未設定なら setup task を先行させる
  7. 中立的な採点レビューを出し、Required / Recommended / Optional / Reject に分類する
  8. $easy 形式で、提案内容・理由・どうなるのかを報告する
  9. 採用する案だけを root spec.md / Plans.md / test task へ落とし込む

create — 計画作成

See references/create.md

アイデア・要件をヒアリングし、実行可能な Plans.md を生成する。

フロー:

  1. 会話コンテキスト確認(直前の議論から抽出 or 新規ヒアリング)
  2. 何を作るか聞く(max 3問)
  3. 計画品質チェック(最新情報、既存仕様、記憶、TeamAgent / サブエージェント複数視点レビュー、採点)
  4. 技術調査(WebSearch)
  5. 機能リスト抽出
  6. spec.md / Plans.md 二正本チェック(Spec delta または Spec skip reason + Plans.md task)
  7. 優先度マトリクス(Required / Recommended / Optional / Reject)
  8. TDD 採用判断(テスト設計)
  9. Plans.md 生成(cc:TODO マーカー付き)
  10. 次のアクション案内

spec.md / Plans.md 二正本チェック(デフォルト)

Plans.md は「やるべきこと」の task contract、root spec.md は「何が正しいか」の product contract として扱う。 co-required planning output は両方の出力を必須にするという意味であり、precedence は spec.md > sub-spec > Plans.md のまま維持する。 実装がぶれる可能性がある時は、Plans.md 生成前に root spec.md を更新する。 create と product-impacting add は毎回 root spec.md を読む。

優先する保存先:

  1. root spec.md
  2. consumer repo に root spec.md がない時だけ、既存の project spec / architecture / product compass
  3. consumer repo に root spec.md がない時だけ、docs/spec/00-project-spec.md
  4. 既存規約がある repo では、その規約に沿った spec path

作成/更新が必要な条件:

  • ユーザーに見える振る舞い、API、データモデル、権限、課金、外部連携を決める task
  • 複数の実装方針があり、選び方で product behavior が変わる task
  • 過去または今回の会話で「仕様が曖昧で実装がぶれた」兆候がある task
  • Plans.md には作業内容があるが、project としての正解条件が安定文書にない task

不要な条件:

  • typo、format、dependency bump、README/CHANGELOG のみ
  • 動作変更なしの狭い refactor
  • 既存 spec とテストで正解が十分に固定されている修正

出力契約:

  • Spec delta: product contract を更新する時に、対象 spec path と変更点を書く
  • Spec skip reason: product contract を更新しない時に、理由を書く
  • Spec delta / Spec skip reason は Harness が生成し、consumer は承認・修正だけ行う
  • docs-only / mechanical task でも Spec skip reason を task context / sprint contract に残す
  • missing search result、unavailable memory、未読ファイルを absent と断定しない。not_observed != absent
  • ユーザーに spec を一から書かせない。agent が既存 spec と入力から最小 delta を作り、曖昧な時だけ判断分岐を出す

参照:

  • docs/plans/spec-ssot.md

create 完了時のセッション起動案内(必須)

create が終わったら、説明だけで終わらせず、新しいセッションの起動コマンド起動後にそのまま入れる最初の指示プロンプト をセットで案内する。

優先順位は次の通り:

  1. 未完了タスクが 1 件だけ、または最初の 1 件だけ始めるのが自然
    • 起動コマンド: claude
    • 最初の入力: /harness-work <task番号>
  2. 依存の薄いタスクが複数あり、まとめて進めるのが自然
    • 起動コマンド: claude
    • 最初の入力: /breezing all
    • 代替: /harness-work all
  3. 長時間実行や再入が前提
    • 起動コマンド: ENABLE_PROMPT_CACHING_1H=1 claude
    • 最初の入力: /harness-loop all
    • 代替: /breezing all

最低でも次の 3 行を含める:

  • 新しいセッションの起動コマンド:
  • 起動後の最初の入力:
  • 向いている場面:

例:

新しいセッションの起動コマンド: claude
起動後の最初の入力: /breezing all
向いている場面: Phase 1 の task が複数あり、まとめて進めるほうが自然なため

長時間系を勧める場合は、Claude Code セッション起動コマンドも併記する:

新しいセッションの起動コマンド: ENABLE_PROMPT_CACHING_1H=1 claude
起動後の最初の入力: /harness-loop all
向いている場面: 5 分を超える待機や resume をまたぐ長時間タスクのため

補足:

  • scripts/claude-longrun.sh はこのリポジトリの開発補助スクリプトで、plugin install 後の consumer 環境には配布されない
  • そのため、consumer 向け案内では常に ENABLE_PROMPT_CACHING_1H=1 claude の 1 行コマンドを優先する
  • リポジトリ開発中だけ同等のラッパーを使いたい場合、bash scripts/claude-longrun.sh はローカル checkout 上では利用してよい

CI モード (--ci): ヒアリングなし。既存の Plans.md をそのまま利用してタスク分解のみ行う。

add — タスク追加

Plans.md に新しいタスクを追加する。 product-impacting な追加では、上の「spec.md / Plans.md 二正本チェック」に従い Spec delta または Spec skip reason も出力する。

/harness-plan add タスク名: 詳細説明 [--phase フェーズ番号]

タスクは cc:TODO マーカーで追加される。

update — マーカー更新

タスクのステータスマーカーを変更する。

/harness-plan update [タスク名|タスク番号] [WIP|完了|blocked]

マーカー対応表:

コマンド マーカー
WIP cc:WIP
完了 / done cc:完了
blocked blocked
TODO cc:TODO

sync — 進捗同期

実装状況と Plans.md を照合し、差分を検出・更新する。

See references/sync.md

フロー:

  1. Plans.md の現状取得
  2. Plans.md フォーマット検出(v1: 3 カラム / v2: 5 カラム)
  3. git status / git log から実装状況取得
  4. エージェントトレース確認(.claude/state/agent-trace.jsonl
  5. Plans.md と実装の差分検出
  6. 未更新マーカーの自動修正提案
  7. 次のアクション提示

レトロスペクティブ(デフォルト ON): cc:完了 タスクが 1 件以上あれば自動的に振り返りを実行する。 見積もり精度、ブロック原因パターン、スコープ変動を分析し、学びを記録。 sync --no-retro で明示的にスキップ可能。

team mode / issue bridge

Plans.md は正本のまま維持し、GitHub Issue 連携は opt-in の team mode だけで使う。

  • solo 開発では bridge を使わない
  • team mode は tracking issue を 1 つ作り、その配下に task ごとの sub-issue payload を dry-run で生成する
  • scripts/plans-issue-bridge.sh は実際に GitHub を更新せず、常に dry-run の payload を返す
  • Plans.md への変更はこの bridge では行わない

参照:

  • docs/plans/team-mode.md

named Plans

複数の Plans.md を使う場合は plans/manifest.json を正本にして、名前で選択する。

scripts/plan-registry.sh list
scripts/plan-registry.sh switch roadmap
scripts/plans-issue-bridge.sh --plan roadmap --format markdown
node scripts/generate-sprint-contract.js --plan roadmap 9.1.1

運用ルール:

  • 1 run では 1 つの named plan だけを使う
  • long-running / CI / issue bridge では active pointer に頼らず --plan <name> を渡す
  • manifest path は project root 相対のみ。絶対パス、..、repo 外 symlink は拒否される

参照:

  • docs/plans/named-plans.md

Plans.md フォーマット規約

フォーマット

# [プロジェクト名] Plans.md

作成日: YYYY-MM-DD

---

## Phase N: フェーズ名

| Task | 内容 | DoD | Depends | Status |
|------|------|-----|---------|--------|
| N.1  | 説明 | テスト通過 | - | cc:TODO |
| N.2  | 説明 | lint エラー 0 | N.1 | cc:WIP |
| N.3  | 説明 | マイグレーション実行可能 | N.1, N.2 | cc:完了 |

DoD(Definition of Done): 検証可能な完了条件を 1 行で記述。「いい感じ」「ちゃんと動く」は禁止。Yes/No で判定できる形にする。

Depends: タスク間の依存関係。-(依存なし)、タスク番号(N.1)、カンマ区切り(N.1, N.2)、フェーズ依存(Phase N)。

TDD tags

Plans.md の task には、TDD 判定を明示するタグを内容または DoD に書ける。

タグ 意味 tdd_required 推論
[tdd:required] この task は先に失敗テストを書く必要がある true
[tdd:skip:<reason>] この task は理由つきで TDD を省略する false, skip_tdd_reason=<reason>

<reason> は空にしない。 例: [tdd:skip:docs-only][tdd:skip:no-test-framework-detected]

タグがない場合の tdd_required は次の順で推論する。

  1. Plans.md tag: [tdd:required] / [tdd:skip:<reason>]
  2. files: src/, app/, cmd/, lib/, pkg/, internal/, go/ など source 実装を含むなら required
  3. TDD 推論: docs-only や test framework なしなら skip reason を付けて not required

optional briefs / manifest

harness-plan create は、必要なときだけ brief を付ける。

  • project spec SSOT は project 全体の正解条件を固定する文書で、必要時だけ作る
  • UI を含むタスクでは design brief
  • API を含むタスクでは contract brief
  • brief は「何を作るか」を短く固定する補助資料で、Plans.md や spec SSOT を置き換えない
  • skill frontmatter の一覧は scripts/generate-skill-manifest.sh で machine-readable JSON にできる

参照:

  • docs/plans/briefs-manifest.md
  • docs/plans/spec-ssot.md

マーカー一覧

マーカー 意味
pm:依頼中 PM から依頼済み
cc:TODO 未着手
cc:WIP 作業中
cc:完了 Worker 作業完了
pm:確認済 PM レビュー完了
blocked ブロック中(理由を必ず記載)

関連スキル

  • harness-sync — 実装と Plans.md を同期する
  • harness-work — 計画したタスクを実装する
  • harness-review — 実装のレビュー
  • harness-setup — プロジェクト初期化
生成项目进度追踪HTML快照,汇总Plans.md中TODO/WIP/已完成任务数量及完成率,显示耗时、成本与漂移警报。适用于快速查看当前会话进展,不用于代码实现或审查。
progress tracker 進捗確認 進捗ボード dashboard
codex/.codex/skills/harness-progress/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-progress -g -y
SKILL.md
Frontmatter
{
    "name": "harness-progress",
    "description": "Progress Tracker HTML showing cc:WIP\/cc:TODO\/cc:完了 counts + drift alerts from Plans.md. Triggers: progress tracker, 進捗確認, 進捗ボード, dashboard. Skip for: implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Write",
        "Bash"
    ],
    "argument-hint": "[--out <path>] [--no-open]",
    "description-en": "Progress Tracker HTML showing cc:WIP\/cc:TODO\/cc:完了 counts + drift alerts from Plans.md. Triggers: progress tracker, 進捗確認, 進捗ボード, dashboard. Skip for: implementation, review, release.",
    "description-ja": "進捗 Tracker HTML を生成する。Plans.md を SoT として cc:WIP \/ cc:TODO \/ cc:完了 件数・%、経過分数・コスト・drift alert を 1 枚 HTML で表示。PostToolUse hook で 60 秒に 1 回自動再生成。Use when: 進捗確認, 進捗ボード, dashboard。Do NOT load for: 実装作業, code review, release。"
}

Harness Progress Tracker

Phase 65.4 (Progress Tracker) — 3rd surface of the cognitive-load HTML triplet. Plan Brief / Acceptance Demo に続く 3 つ目の HTML surface で、進行中セッションの全体像を 1 枚の紙で把握 できるようにする。

Quick Reference

入力 動作
/harness-progress 現プロジェクトの進捗 snapshot HTML を生成し開く
/harness-progress --no-open 生成のみ (browser 開かない、PostToolUse hook 用)
/harness-progress --out <path> 出力先指定 (default: out/progress-snapshot.html)

Mission

"今のセッションは何件のタスクをどこまで終わらせて、いつ終わる見込みで、いくら使ったか" を、 エンジニアじゃない vibecoder が 3 秒でブラウザで把握 できる HTML 1 枚を生成する。

やる:

  • Plans.md の cc:TODO / cc:WIP / cc:完了 件数を集計
  • progress_pct (完了率) を計算 (cc:完了 ÷ 総タスク × 100)
  • 経過分数 / 推定総分数 / コスト so-far / コスト estimate を表示
  • drift alert を表示 (Phase 65.4.3 以降で populate)

やらない (本 cycle):

  • WebSocket / SSE による live update (静的 HTML、再生成で更新)
  • 過去 session の history 比較 (Phase 65.4.4 で別軸)
  • 他 project の cross-project view (Phase 65.3 と独立)

Schema: progress-snapshot.v1

詳細仕様: schemas/progress-snapshot.v1.schema.json

schema:        progress-snapshot.v1
project:       <basename of git repo>
current_task:  <cc:WIP の最初の項目 1 行サマリ、なければ空文字>
progress_pct:  <0-100 の整数、cc:完了 ÷ 総タスク × 100 の四捨五入>
todo_tasks:    [{number, title}]    ← cc:TODO のみ
wip_tasks:     [{number, title}]    ← cc:WIP のみ
done_tasks:    [{number, title, commit}]   ← cc:完了 [hash] のみ、hash は 7 chars
elapsed_minutes:          <int, state file から>
estimated_total_minutes:  <int, state file から>
cost_so_far_usd:          <float, state file から>
cost_estimate_usd:        <float, state file から>
alerts:                    []   ← Phase 65.4.3 以降で populate
generated_at:             <ISO8601 UTC>

Execution Flow

Step 0: PROJECT_NAME を取得

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "current")"

Step 1: snapshot を組み立て

SNAPSHOT_JSON="$(mktemp /tmp/progress-snapshot-XXXX.json)"
bash scripts/progress-snapshot.sh \
  --plans Plans.md \
  --project "$PROJECT_NAME" \
  > "$SNAPSHOT_JSON"

scripts/progress-snapshot.sh (Phase 65.4.1 で実装) は Plans.md を parse し progress-snapshot.v1 schema 準拠の JSON を出力する。

Step 2: HTML をレンダリング

OUT_PATH="${OUT_PATH:-out/progress-snapshot.html}"
mkdir -p "$(dirname "$OUT_PATH")"

bash scripts/render-html.sh \
  --template progress \
  --data "$SNAPSHOT_JSON" \
  --out "$OUT_PATH"

Step 3: ブラウザで開く

--no-open flag がない場合のみ実行 (PostToolUse hook からの背景再生成では skip):

bash scripts/plan-brief-open.sh --path "$OUT_PATH"

Cross-project search (default OFF)

Phase 65.4.4 で --cross-project-group <name> flag が追加される。本 cycle (65.4.1) では default OFF、現プロジェクトのみ集計する。

Failure modes

状態 動作
Plans.md が無い progress-snapshot.sh が exit 1 (clear error message)
Plans.md にタスクが 1 件もない progress_pct: 0, 空配列 で snapshot 生成 (HTML は「タスクなし」表示)
state file (経過分数等) が無い elapsed_minutes: 0, cost_so_far_usd: 0 で fallback (warning なし)
git 不在 / git repo 外 project: "current" で fallback

Related

  • harness-plan-brief (Phase 65.1.x) — 1st surface (実装前の説明会)
  • harness-accept (Phase 65.2.x) — 2nd surface (検収判断)
  • harness-progress (本 skill, Phase 65.4.x) — 3rd surface (進捗ダッシュボード)
  • 65.4.2 (PostToolUse auto-regen)、65.4.3 (drift alert 5 種)、65.4.4 (過去判断 lookup) で機能拡張
面向使用Keep a Changelog和GitHub的项目,提供通用发布自动化。执行版本检测、日志更新、PR合并、打标签及发布,支持单次确认流程。
用户输入release或/version bump/publish等命令 意图进行项目版本发布或代码上线
codex/.codex/skills/harness-release/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-release -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-release",
    "pair": "harness-review",
    "role": "orchestrator",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "high",
    "context": "fork",
    "purpose": "Release projects through changelog, version, PR\/main merge, tag, and GitHub Release gates",
    "trigger": "release, version bump, publish",
    "description": "Generic release automation for projects using Keep a Changelog + GitHub. Single confirmation gate then end-to-end automation: bump detection, CHANGELOG promotion, PR\/main merge, tag, GitHub Release. Trigger: release, version bump, publish. Do NOT load for: implementation, review, planning, setup.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "AskUserQuestion",
        "Skill"
    ],
    "argument-hint": "[patch|minor|major|--dry-run]",
    "description-en": "Generic release automation for projects using Keep a Changelog + GitHub. Single confirmation gate then end-to-end automation: bump detection, CHANGELOG promotion, PR\/main merge, tag, GitHub Release. Trigger: release, version bump, publish. Do NOT load for: implementation, review, planning, setup.",
    "description-ja": "汎用リリース自動化スキル。Keep a Changelog と GitHub を使うあらゆるプロジェクトで動作。単一確認ゲートで bump 判定・CHANGELOG 昇格・PR\/main 反映・タグ・GitHub Release まで全自動実行する。リリース、バージョンバンプ、タグ作成、公開で起動。実装・コードレビュー・プランニング・セットアップには使わない。",
    "user-invocable": true
}

Harness Release (汎用)

Keep a Changelog + GitHub を使うあらゆるプロジェクト向けの汎用リリース自動化スキル。

設計原則: 単一確認ゲート。ユーザーは 1 回だけ全体計画を見て承認する。承認後はファイル書き換え → commit → branch push → PR 作成/更新 → default branch へ merge → default branch 上で tag → GitHub Release までを中断なく実行する。

Release complete の定義: release は「tag と GitHub Release を作った」だけでは完了ではない。対象 work と release bump が default branch(通常 main)に merge 済みで、release tag が default branch 到達可能 commit を指し、GitHub Release がその tag を公開している状態を完了とする。

Literal invocation note: この skill の入口は harness-release, /release, /release patch, /release --dry-run のような literal command をそのまま使う。

CC runtime hard floor との関係

Claude Code 2.1.183+ の runtime hard floor は GitHub CLI release publish 系コマンドを構造的に deny する (Anthropic 製品仕様、settings.jsonpermissions.ask で覆せない)。本 skill は publish 自体を実行せず、.github/workflows/release.yml (tag push trigger) に委譲する。skill は tag push までで責務を完了し、その後 scripts/release-verify-publish.sh で workflow による公開を verify する。

Revert 条件: CC が runtime hard floor に user explicit approval path を提供したら、Post-Gate に直接 publish step を戻すことを検討する。

Bare invocation contract

if $ARGUMENTS == "": → 「今までの作業をコミットし、PR/main 反映まで完了してリリースしたい」と解釈し、Review Gate 検出を実行する → 対象 work が 1 つに確定できる場合だけ Step 0 (Review Gate) へ自動進行する → 対象が不明または review state が無い場合は AskUserQuestion で選択肢を出してから進める

引数なし呼び出し時の最初の応答で必ず次の literal marker を出力する:

RELEASE_AUTOSTART: target=<work-summary>, base_ref=<ref>, mode=<patch|minor|major|auto>

「タスクが不明確」「指示を待ちます」「タスクがありません」「追加の指示をお待ちします」は禁止行動。

Output Contract (P35: 「止まったように見える」UX 対策)

skill 結論時の output の 最後の 1 行は必ず P35 footer を含め、footer は本文 (user-facing prose) と同じ言語で出力する(言語解決は既存の言語ルールに従い、footer 契約は言語を再定義しない)。これは <local-command-stdout> 経由の表示で user が「止まった」と感じる UX 問題への明示的な instruction (patterns.md P35) で、意図は言語に依存しないため literal は言語ごとに切り替える (#208):

  • ja: ↑この結果は Claude が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。
  • en: ↑Claude will summarize this result. Press Enter to continue, or send a new prompt for a different instruction.
  • その他の言語: 同じ意味の 1 行を本文と同じ言語で出力する

Language

User-facing prose follows the explicit session or project language. If no language is configured, use English. Use Japanese only when i18n.language: ja, CLAUDE_CODE_HARNESS_LANG=ja, or an explicit session instruction requests Japanese output. Machine-readable values stay English.

harness-release / /release だけが入力された場合、これは 「今までの作業をコミットし、PR/main 反映まで完了してリリースしたい」 という意味として扱う。 旧表現の 「今までの作業をコミットしてリリースしたい」 も同じ意図だが、完了条件には PR/main 反映を必ず含める。 「タスクがありません」「指示を待ちます」で止まってはいけない。

bare release では、通常の release preflight の前に Review GateWork Commit Gate を実行する。

  1. git status --porcelaingit log @{upstream}..HEAD / main..HEAD を確認し、「今までの作業」の対象を特定する
  2. .claude/state/review-result.json.claude/state/review-approved.json を確認し、対象 work に APPROVE 済み review があるか確認する
  3. APPROVE 済み review が無い場合は AskUserQuestion で確認する
  4. ユーザーが「レビューから開始」を選んだら、harness-review を起動し、APPROVE になるまで release へ進まない
  5. harness-reviewREQUEST_CHANGES を返した場合は release を保留し、harness-work で修正してから harness-review を再実行する。これを APPROVE までループする
  6. harness-reviewAPPROVE を返した後、working tree の作業 commit を作る
  7. working tree clean になってから通常の release preflight / confirmation gate / PR merge / tag / GitHub Release へ進む

Review Gate AskUserQuestion

harness-release 実行時に review approval が確認できない場合は、推測で release しない。 次の Ask を出す。

question: "harness-release は今までの作業をコミットしてリリースしますが、この作業の APPROVE review が見つかりません。どう進めますか?"
options:
  - label: "レビューから開始 (Recommended)"
    description: "harness-review を実行し、APPROVE になった場合だけ commit/release へ進みます。"
  - label: "release dry-run"
    description: "ファイルを書き換えず、release 計画と不足 gate だけ確認します。"
  - label: "中止"
    description: "review も release も行わず止めます。"

ユーザーが「レビューから開始」を選んだ場合は、同じセッション内で harness-review から始める。 harness-review の対象決定は harness-review 側の bare review contract に従う。 review が APPROVE なら、そのまま harness-release の Work Commit Gate へ戻る。 review が REQUEST_CHANGES なら release は保留し、harness-work で修正してから harness-review を再実行する。 この修正後再レビュー loop は APPROVE まで継続する。

Persist Verdict after Review Gate (required / #218 fix)

harness-review 委譲後、必ず .claude/state/review-result.json に verdict が永続化されている ことを確認する。harness-review 側の Persist Verdict step が踏まれていれば既に保存済みだが、 踏み忘れ時の 二段防御として、Review Gate 側でも次の check + 補完保存を行う。これを欠かすと Work Commit Gate (Step 6) の git commit が PreToolUse commit guard でブロックされる

# 1. 保存済みか確認
if [ -f .claude/state/review-result.json ] \
   && [ "$(jq -r '.verdict // empty' .claude/state/review-result.json 2>/dev/null)" = "APPROVE" ]; then
  echo "review-result.json already persisted with APPROVE"
else
  # 2. 未保存なら orchestrator が in-context の verdict JSON を一時ファイルへ書き出し
  mkdir -p .claude/state
  cat > .claude/state/tmp-review-result.json <<'JSON'
{ "schema_version": "review-result.v1", "verdict": "APPROVE", ... }
JSON
  bash "${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-$PWD}}/scripts/write-review-result.sh" \
    .claude/state/tmp-review-result.json \
    "$(git rev-parse --short HEAD 2>/dev/null || true)"
  rm -f .claude/state/tmp-review-result.json
fi

multi-commit セーフティ: Phase 94.1.3 で PostToolUse commit-cleanup が VERSION / .claude-plugin/plugin.json / harness.toml / CHANGELOG.md のみの bookkeeping commit を認識し承認削除を skip するようになったため、 Post-Gate の version bump commit (Step 11) は harness-release の自動 commit でそのまま通過する。 それ以前のバージョン (4.15.0 以前) を使う場合は、Work Commit Gate と version bump commit の間に 再度 Persist Verdict を行うこと。

ユーザーに戻してよいのは次の場合だけ。

  1. 修正に仕様正本 / Plans.md / API / permission / migration / billing などの意思決定が必要で、AskUserQuestion が必要
  2. 修正方針が複数あり、どれを採るかでユーザー価値や互換性が変わる
  3. ユーザーが Ask で release dry-run または 中止 を選んだ

REQUEST_CHANGES 単体を最終停止理由にしてはいけない。

Work Commit Gate

bare release で working tree に未コミット変更がある場合、release version bump commit とは別に、 review 済み work commit を先に作る。

git status --short
git diff --stat
git add <reviewed files>
git commit -m "<type>: <summary>"

commit message は review summary / Plans.md task / branch name から短く生成する。 判断できない場合は AskUserQuestion で 2〜3 個の commit message 候補を出す。 work commit 作成後に .claude/state/review-result.jsoncommit_hash を確認または更新し、 release preflight へ進む。

通常の release preflight に入った後は、これまで通り working tree dirty を fail とする。 dirty tree のまま version bump / tag / GitHub Release に進まない。

Quick Reference

/release              # 今までの作業を review gate → commit → PR/main merge → release する
/release patch        # bump を patch に明示指定
/release minor        # bump を minor に明示指定
/release major        # bump を major に明示指定
/release --dry-run    # 計画の表示のみ、実行しない

前提条件

このスキルが動くプロジェクトは以下を満たす必要があります:

  1. CHANGELOG.mdKeep a Changelog 形式
  2. [Unreleased] セクションが存在する
  3. 以下のいずれかの version file を持つ:
    • VERSION (単独ファイル)
    • package.json (npm)
    • pyproject.toml (Python, [project] または [tool.poetry])
    • Cargo.toml (Rust, [package])
  4. gh CLI がインストール済みで、認証済み
  5. git リモート origin が GitHub を指す
  6. Claude Code plugin project の場合は、claude CLI が plugin tag をサポートしている

これらが満たされない場合、Preflight で detect して abort します。

prUrlTemplate による multi-host review URL は将来候補として認識するが、 このスキルの release automation は今も gh CLI と GitHub remote を primary path とする。 owner / branch / release asset / CI metadata の自動取得は host ごとの差が大きいため、Phase 56.2.3 では docs-only に留める。

単一ゲートフロー

[Bare release only: 作業 review/commit 前段]
  ↓
  0. Review Gate (未レビューなら AskUserQuestion → harness-review)
  0.5 Work Commit Gate (review APPROVE 済み work を release bump と分けて commit)
  ↓
[Pre-Gate: 情報収集のみ、ファイル未変更]
  ↓
  1. Preflight (working tree clean / CHANGELOG / gh 等の確認)
  2. Version file 自動検出
  3. 現在バージョンの読み取り
  4. Claude plugin tag preflight (plugin project の場合のみ)
  5. [Unreleased] 内容の解析 → bump level 推定
  6. 新バージョン算出
  7. CHANGELOG 差分ドラフト作成 (メモリ上)
  8. GitHub Release notes ドラフト作成 (メモリ上)

★━━━━━━ 単一確認ゲート ━━━━━━★
  ユーザーに全計画を 1 回だけ提示:
    - 検出された version file
    - 現バージョン → 新バージョン
    - bump 判定理由 ("[Unreleased] に ### Added があるため minor" 等)
    - CHANGELOG 変更プレビュー
    - GitHub Release notes ドラフト
    - コミット対象ファイル一覧
    - 最終アクション (branch push + PR merge + tag + release publish)

  ユーザー応答:
    "yes"        → Post-Gate へ進む
    "<修正指示>"  → 指示に応じて draft を再生成、再確認
    "cancel/no"  → 何もせず終了
★━━━━━━━━━━━━━━━━━━━━━━━★
  ↓
[Post-Gate: 承認後、中断なし]

  9. Version file 書き換え
  10. CHANGELOG.md 書き換え ([Unreleased] → [X.Y.Z] 昇格 + compare link)
  11. git add + commit
  12. release branch push
  13. PR 作成/更新
  14. default branch へ merge
  15. default branch を fetch/checkout し、release commit が到達可能であることを確認
  16. Claude plugin tag validation + tag (plugin project の場合のみ)
  17. GitHub Release 用 semver tag (必要な project のみ)
  18. git push origin <default-branch> --tags
  19. tag push 後、`.github/workflows/release.yml` が release を公開し、`release-verify-publish.sh` で verify
  20. 完了報告

Pre-Gate 詳細

1. Preflight

# 必須ツール
command -v gh >/dev/null || { echo "gh CLI がありません"; exit 1; }
command -v python3 >/dev/null || { echo "python3 が必要です"; exit 1; }

# working tree
if [ -n "$(git status --porcelain)" ]; then
  echo "working tree に未コミット変更があります"; exit 1;
fi

# CHANGELOG
[ -f CHANGELOG.md ] || { echo "CHANGELOG.md がありません"; exit 1; }
grep -q "^## \[Unreleased\]" CHANGELOG.md || { echo "[Unreleased] セクションがありません"; exit 1; }

# plugin/mirror projects
scripts/release-preflight.sh

この working tree clean check は通常 release preflight の gate である。 bare release で「今までの作業」を commit したい場合は、この check の前に Review Gate と Work Commit Gate を完了させる。 未レビューの dirty tree をこの check だけで abort して終わらせてはいけない。

scripts/release-preflight.sh は tag 作成前に opencode/, skills-codex/, codex/.codex/skills/ の mirror drift も検出する。node scripts/build-opencode.js が差分を生成した場合は release を止め、その差分を commit してから tag に進む。

2. Version File 自動検出

以下を優先順で探索。最初に見つかったものを正本とする:

# Python snippet to run inline
import os, json, re
import tomllib  # Python 3.11+

def detect_version_file():
    if os.path.exists("VERSION"):
        with open("VERSION") as f:
            return ("VERSION", f.read().strip(), None)
    if os.path.exists("package.json"):
        with open("package.json") as f:
            data = json.load(f)
        return ("package.json", data["version"], None)
    if os.path.exists("pyproject.toml"):
        with open("pyproject.toml", "rb") as f:
            data = tomllib.load(f)
        if "project" in data:
            return ("pyproject.toml", data["project"]["version"], "[project]")
        if "tool" in data and "poetry" in data["tool"]:
            return ("pyproject.toml", data["tool"]["poetry"]["version"], "[tool.poetry]")
    if os.path.exists("Cargo.toml"):
        with open("Cargo.toml", "rb") as f:
            data = tomllib.load(f)
        return ("Cargo.toml", data["package"]["version"], "[package]")
    raise RuntimeError("No supported version file found")

詳細: version-files.md

3. Claude Plugin Tag Preflight

.claude-plugin/plugin.json が存在する project では、通常の GitHub Release tag とは別に Claude plugin release tag も作る。

ひとことで言うと、git tag -a を手で組み立てる前に、Claude Code 本体の plugin validation に通してから {plugin-name}--v{version} tag を作る。

Pre-Gate ではファイルを書き換えず、以下を確認する。 version sync は grep / sed で拾わず、JSON は structured parser で読む:

command -v claude >/dev/null || { echo "claude CLI がありません"; exit 1; }
claude plugin validate .claude-plugin/plugin.json

HARNESS_PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-.}"
python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .

claude plugin tag .claude-plugin --dry-run

${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py は、存在する release surface をすべて読み取り、canonical を VERSION > package.json > .claude-plugin/plugin.json > .codex-plugin/plugin.json の順で決める。 そのうえで、以下の不一致・欠落が 1 つでもあれば tag / release に進まない:

  • VERSION
  • package.json.version
  • .claude-plugin/plugin.json.version
  • .codex-plugin/plugin.json.version
  • .claude-plugin/marketplace.json.metadata.version
  • .claude-plugin/marketplace.json.plugins[].version(配列内の各 plugin entry)

不一致時は、どの surface が canonical と違うか、またはどの field が missing / invalid かを表示する。 機械処理や CI で読む場合は --json を使う:

python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root . --json

この check は 3 つの事故を防ぐためにある:

  • VERSION.claude-plugin/plugin.json の version がずれたまま tag を切る事故
  • package.json / marketplace entry の version が古いまま release workflow に進む事故
  • plugin manifest / marketplace entry の validation を通さず、あとで plugin install / update 側で詰まる事故

--dry-run では claude plugin tag が実際に作る tag 名と内部の git tag -a / push 相当コマンドが見える。ここで見えた command を Confirmation Gate の plan に含める。

4. Bump 自動推定

[Unreleased] 直下の見出しを解析して bump level を決定:

[Unreleased] 内の見出し 推定 bump
### Breaking Changes または ### Removed を含む major
### Added を含む (Removed/Breaking なし) minor
### Fixed / ### Changed / ### Security のみ patch
空セクション error: リリース対象なし

ユーザーが /release patch|minor|major で明示指定した場合はそちらを優先。 詳細: bump-detection.md

5. CHANGELOG ドラフト作成 (メモリ上)

以下を計算、まだ書き込まない:

  1. ## [Unreleased] の本文を切り出し
  2. ## [Unreleased]## [<previous>] の間に ## [<new>] - YYYY-MM-DD を挿入した形を作成
  3. 末尾 compare link:
    • [Unreleased]: .../compare/v<prev>...HEADv<new>...HEAD
    • [<new>]: .../compare/v<prev>...v<new> を追加
  4. repo URL は既存の [Unreleased]: 行から動的抽出

6. Release Notes ドラフト作成 (メモリ上)

## [<new>] セクションの内容を元に、GitHub Release 用のマークダウンを生成:

## What's Changed

**<リリーステーマ(1行)>**

### Before / After
<テーブル>

### Added / Changed / Fixed / Removed
<該当セクションをコピー>

---

🤖 Generated with [Claude Code](https://claude.com/claude-code)

詳細: release-notes.md

Confirmation Gate

すべてのドラフトが揃ったら、ユーザーに 1 回だけ提示:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Release Plan: v<old> → v<new> (<bump>)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Version file: <detected file>
 Bump reason:  <why this level was chosen>

 CHANGELOG changes:
   [Unreleased] に <N> 項目の変更を検出
   [<new>] - YYYY-MM-DD として確定
   Compare link を追加

 GitHub Release notes preview:
   <最初の 10 行>
   ...

 Files to modify:
   - <version file>
   - CHANGELOG.md

 Final actions:
   - git commit -m "chore: release v<new>"
   - git push origin <release-branch>
   - gh pr create/update + gh pr merge into <default-branch>
   - git fetch origin <default-branch> && git checkout <default-branch>
   - claude plugin tag .claude-plugin --push --remote origin  # plugin project の場合。default branch 上で実行
   - git tag -a v<new>                                        # GitHub Release 用 semver tag が必要な場合。default branch 上で作成
   - git push origin <default-branch> --tags
   - (tag push 後は GitHub Actions release workflow が自動で release 公開)

Proceed? [yes / cancel / <修正指示>]

Post-Gate 詳細

承認後は中断なしで実行。失敗時は以下の方針:

失敗箇所 復旧
ファイル書き換え失敗 そこで abort、ローカルは dirty なまま人間が判断
commit 失敗 hook 拒否等。ユーザーに原因を提示して修正を促す
PR 作成/merge 失敗 release を未完了として停止。tag / GitHub Release には進まない
plugin tag validation 失敗 VERSION / .claude-plugin/plugin.json / marketplace entry の不一致を修正し、tag 作成には進まない
push 失敗 リモート側の問題。ローカル commit/tag は残す

PR / Main Merge Gate

Post-Gate の release commit 後は、tag を作る前に GitHub PR を default branch へ merge する。

release_branch="$(git branch --show-current)"
default_branch="${HARNESS_RELEASE_DEFAULT_BRANCH:-main}"

git push -u origin "$release_branch"
gh pr create --base "$default_branch" --head "$release_branch" --title "chore: release v<new>" --body "<release summary>"
gh pr merge --merge --delete-branch=false

git fetch origin "$default_branch" --tags
git checkout "$default_branch"
git pull --ff-only origin "$default_branch"
git merge-base --is-ancestor "<release-commit>" "origin/$default_branch"

既存 PR がある場合は新規作成せず、既存 PR の body を更新して merge する。repository policy が squash merge を要求する場合は、release commit hash ではなく release bump の内容(version files + CHANGELOG + source commits)が default branch に含まれることを確認する。

tag はこの Gate 完了後、default branch の HEAD もしくは release commit 到達可能な commit に対して作る。release branch 上だけに存在する commit を指す tag で GitHub Release を作ってはいけない。

Claude plugin project の tag 作成

.claude-plugin/plugin.json がある project では、PR/main merge 後に default branch 上でもう一度 version sync を確認してから plugin tag を作る:

HARNESS_PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-.}"
python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .

claude plugin tag .claude-plugin --dry-run
claude plugin tag .claude-plugin --push --remote origin

claude plugin tag が作る tag は {plugin-name}--v{version} 形式。既存の GitHub Release workflow が vX.Y.Z tag を前提にしている project では、plugin tag とは別に git tag -a v<new> を作る。plugin 配布の tag は claude plugin tag に任せ、GitHub Release 用 semver tag は release automation の互換 surface として扱う。

Verify Workflow Publish

Tag push 後、.github/workflows/release.yml が release を自動公開する。skill は以下で結果を verify する:

OWNER="$(git remote get-url origin | sed 's|.*github.com[:/]\([^/]*/[^/]*\)\.git|\1|')"
bash scripts/release-verify-publish.sh "v${NEW_VERSION}" "${OWNER}"

タイムアウト: 5 秒間隔 × 60 回 = 最大 5 分 polling。

  • exit 0: PASS — draft=false 且つ assets 4 platform 揃って公開済
  • exit 2: WARN — timeout (tag は push 済のため abort せず人間判断を促す)
  • exit 3: ERROR — API error (権限/認証問題、手動調査が必要)

Verify は gh api 経由 (gh release prefix は CC runtime hard floor で deny されるため)。

--dry-run モード

Pre-Gate 全てを実行し、Confirmation Gate までの内容を表示するが、gate で止まり Post-Gate に進まない

Claude plugin project の場合、dry-run でも python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .claude plugin tag .claude-plugin --dry-run を実行し、実際に作られる plugin tag 名と push 対象を表示する。ここで VERSION / package.json / .claude-plugin/plugin.json / .codex-plugin/plugin.json / .claude-plugin/marketplace.json の version surface が不一致または欠落していれば、dry-run の時点で止める。

環境変数

プロジェクトごとの調整に使用:

変数 説明
HARNESS_RELEASE_PROJECT_ROOT リポジトリルート (デフォルト: $(pwd))
HARNESS_RELEASE_BRANCH push 対象ブランチ (デフォルト: 現在のブランチ)
HARNESS_RELEASE_DEFAULT_BRANCH PR merge 先 default branch (デフォルト: main)
HARNESS_RELEASE_HEALTHCHECK_CMD Preflight で追加実行するコマンド
HARNESS_RELEASE_SKIP_GH 1 で GitHub Release 作成をスキップ

CHANGELOG 書き方ルール

[Unreleased] セクションは必ず以下のいずれかのサブセクションを持つ:

## [Unreleased]

### Added       ← minor
### Changed     ← patch
### Deprecated  ← minor
### Removed     ← major
### Fixed       ← patch
### Security    ← patch
### Breaking Changes  ← major (Keep a Changelog 非標準だが一般的)

このスキルはこれらの見出しを機械的に解析するため、見出しの表記揺れ(### Fix / ### Bug Fixes 等)は認識できません。KaCL 標準の見出しを使用してください。

関連スキル

  • harness-release-internal - 本体 claude-code-harness のリリース時に追加で走らせる harness 固有 preflight/finalization(配布対象外)
  • harness-plan - Plans.md 管理
  • harness-review - リリース前のコードレビュー

設計思想

  • 単一ゲート: ユーザーの判断タイミングは 1 回だけ。mini-confirmation を挟むとラバースタンプ化して意味を失う
  • 事前に全て描く: Post-Gate に入ってからの「考え直し」を禁ずる。Gate 前に全 draft を揃える
  • main 反映が完了条件: release tag / GitHub Release は default branch 反映後にだけ作る。branch-only release は未完了として扱う
  • 失敗は transparent: 途中で失敗したら自動ロールバックは試みず、ユーザーに現状を提示して判断させる
  • プロジェクト非依存: VERSION file 形式、mirror、residue check など特定環境の前提を持たない。本体 harness 固有の処理は harness-release-internal に分離
多角度的代码、计划和范围审查技能,涵盖安全与质量检查。自动检测审查目标或请求用户确认。仅执行只读审查,禁止自动提交或推送,需用户明确指令或通过其他工作流处理变更。
review code review plan review scope analysis
codex/.codex/skills/harness-review/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-review -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-review",
    "pair": "harness-work",
    "role": "evaluator",
    "owner": "harness-core",
    "shape": "evaluate",
    "since": "2026-05-05",
    "effort": "high",
    "context": "fork",
    "purpose": "Review code, plans, scope, and evidence before acceptance",
    "trigger": "review, レビューして, code review, plan review, scope analysis",
    "description": "HAR: Multi-angle code, plan, scope review. Security\/quality check. Trigger: review, code review, plan review, scope analysis. Do NOT load for: implementation, new features, bugfix, setup, release.",
    "allowed-tools": [
        "Read",
        "Grep",
        "Glob",
        "Bash",
        "Task",
        "Monitor",
        "AskUserQuestion"
    ],
    "argument-hint": "[code|plan|scope|--quick|--codex-closeout|--dual|--team-debate|--security|--ui-rubric]",
    "description-en": "HAR: Multi-angle code, plan, scope review. Security\/quality check. Trigger: review, code review, plan review, scope analysis. Do NOT load for: implementation, new features, bugfix, setup, release.",
    "description-ja": "HAR:コード・プラン・スコープを多角的にレビュー。セキュリティ・品質チェック。レビューして、レビュー、コードレビュー、プランレビュー、スコープ分析で起動。実装・新機能・バグ修正・セットアップ・リリースには使わない。",
    "user-invocable": true
}

Harness Review

Harness の統合レビュースキル。 この SKILL.md は薄い dispatcher であり、詳細な品質基準は references/ を読む。

if $ARGUMENTS == "": → 「今までの作業のレビュー」と解釈し、Review target detection を実行する → review target が 1 つに確定できる場合だけ自動開始する → review target が不明または複数候補の場合は AskUserQuestion で選択肢を出し、認識を揃えてから開始する

Output Contract (P35: 「止まったように見える」UX 対策)

skill 結論時の output の 最後の 1 行は必ず P35 footer を含め、footer は本文 (user-facing prose) と同じ言語で出力する(言語解決は既存の言語ルールに従い、footer 契約は言語を再定義しない)。これは <local-command-stdout> 経由の表示で user が「止まった」と感じる UX 問題への明示的な instruction (patterns.md P35) で、意図は言語に依存しないため literal は言語ごとに切り替える (#208):

  • ja: ↑この結果は Claude が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。
  • en: ↑Claude will summarize this result. Press Enter to continue, or send a new prompt for a different instruction.
  • その他の言語: 同じ意味の 1 行を本文と同じ言語で出力する

Dispatcher Contract

この skill の責務は review 判定だけ。 commit / push / release は既定では行わない。

  • review default read-only boundary: 既定は read-only。APPROVE でも自動 commit しない
  • Do not push just to review: review 目的だけで push しない
  • commit が必要な場合は、ユーザー明示依頼、harness-work、または harness-release の Work Commit Gate に委譲する
  • --commit-on-approve のような明示 opt-in が設計されるまで、この skill 単体の default side effect は禁止

Quick Reference

Command Mode Purpose
/harness-review code 今までの作業を自動検出して review
/harness-review --quick quick 小さな dirty change を軽く closeout
/harness-review --codex-closeout codex-closeout Codex 助言 + focused tests で closeout
/harness-review --dual dual Claude + Codex second opinion
/harness-review --cursor code+cursor-second-opinion core review gates に cursor (composer-2.5-fast) second-opinion を加算 (read = lean、Opus reviewer 必須併走)
HARNESS_IMPL_BACKEND=cursor harness-review code+cursor-second-opinion default ON 時も core review gates に cursor second-opinion を自動加算。primary verdict は Opus/brain 固定
/harness-review --team-debate team-debate TeamAgent Debate を強制
/harness-review --security security security 専用 review
/harness-review plan plan Plans.md の計画 review
/harness-review scope scope scope creep / 漏れ review

Mode Decision

引数から実行 mode を決定し、必要な references/ を選択ロードする。

入力 mode 読む reference
引数なし / code code references/code-review.md, references/governance.md
--quick quick references/codex-closeout.md, references/code-review.md
--codex-closeout codex-closeout references/codex-closeout.md
--dual dual references/dual-review.md, references/team-debate.md
--team-debate team-debate references/team-debate.md, references/governance.md
--security security references/security-profile.md, references/governance.md
--ui-rubric ui-rubric references/ui-rubric.md
plan plan references/plan-review.md, references/governance.md
scope scope references/scope-review.md, references/governance.md
--cursor or resolver result cursor for no-arg / code review only code+cursor-second-opinion references/code-review.md, references/governance.md, references/cursor-review.md, references/dual-review.md
full full references/code-review.md, references/team-debate.md, references/dual-review.md

quickcodex-closeout は軽量 path。 小さな dirty change、single commit、PR branch の closeout を速く見る。 品質 gate を捨てるものではない。

Cursor Default ON

mode 判定時、明示 mode words (plan, scope, full) と明示フラグを先に確定する。no-arg / code review の場合だけ helper root を解決して resolver を 1 回だけ実行し、resolver 不在時は claude とみなす。

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"; if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"; while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do probe="$(cd "$probe/.." && pwd)"; done; [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"; fi
if [ -x "${HARNESS_PLUGIN_ROOT:-}/scripts/resolve-impl-backend.sh" ]; then resolved_backend="$(bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --role reviewer)"; else resolved_backend="claude"; fi

no-arg / code review で結果が cursor の場合は --cursor と同じ cursor-second-opinion を追加するが、core review gates (references/code-review.md, references/governance.md) は必ず先に読み、Cursor reference は additive にだけ扱う。primary verdict は Opus/brain 側で維持し、cursor は dual_review.cursor_verdict の advisory に限る。plan / scope など明示 mode word は resolver result より優先し、cursor default によって plan/scope references も code/governance references も置き換えない。 結果が claude / codex の場合は従来どおりで、review の primary 判定面は変えない。

Review Target Detection

REVIEW_AUTOSTART 契約: 引数なし ($ARGUMENTS == "") で呼ばれた場合、review / /review / /harness-review だけの入力を「今までの作業のレビュー」と解釈する。 Step 1 開始前の handshake 行として次を 1 行だけ出力する。

REVIEW_AUTOSTART: target={resolved_target}, base_ref={resolved_base_ref}, type={mode}

REVIEW_TARGET_ASK 契約: bare 呼び出しで review target が不明または複数候補の場合、Step 1 に進む前に AskUserQuestion を 1 回だけ使い、候補を 2-3 個に絞って確認する。

  • 候補は 1. working tree(未コミット変更のみ)、2. branch range(upstream または main/master から HEAD)、3. recent commits(clean tree 時の直近 1 commit / 直近 5 commits)の順で作る
  • 複数候補が同時に成立する場合は REVIEW_TARGET_AMBIGUOUS: working_tree_and_branch_commits、clean tree かつ branch 差分がない場合は REVIEW_TARGET_AMBIGUOUS: clean_tree_no_branch_commits を 1 行出力してから AskUserQuestion を出す
  • ユーザー回答後は REVIEW_TARGET_CONFIRMED: {choice} に続けて REVIEW_AUTOSTART 行を出力する
  • AskUserQuestion の選択肢 literal・推奨 (Recommended) の付け方・各候補の比較範囲は references/code-review.md の Target Selection 節に従う

禁止:

  • 「タスクが不明確です」と応答して停止する
  • 「何をレビューすればよいですか」と自由記述で聞いて停止する
  • host project の session-start rules を理由に auto-start を飛ばす
  • target が曖昧なのに推測で範囲を広げる

Minimal Flow

  1. mode を決める
  2. 上記の Review Target Detection で対象と base ref を決める
  3. 必要な reference だけ読む
  4. 差分、untracked files、関連テスト、仕様正本、Plans.md を確認する
  5. APPROVE / REQUEST_CHANGES / decision_needed を返す
  6. REQUEST_CHANGES の場合は critical / major の修正方針と修正後再レビュー条件を示す

Review Governance Contract

詳細は references/governance.md。 ここでは最低限の合格ラインだけ固定する。

明確な合格ライン

APPROVE は次のすべてを満たす時だけ返す。

  • critical / major が 0 件
  • 仕様正本 (spec_path) または明示された spec_skip_reason と矛盾しない
  • Plans.md の task / DoD / Depends と矛盾しない
  • 既存テスト、既存 UX、既存 CLI、既存設定、既存 docs、配布 mirror のいずれにもデグレ証拠がない
  • 検証証跡がある。APPROVE なのに evidence が空の出力は禁止
  • TeamAgent Debate を実行した場合、反対意見が解消済み、または minor / recommendation として理由付きで格下げ済み

TeamAgent Debate

詳細は references/team-debate.md。 TeamAgent Debate は、異なる見解を read-only で衝突させる review pass。

Agent 主な問い
Spec Agent 仕様正本と実装差分の矛盾を探す
Plans Agent Plans.md の task / DoD / Depends と差分の対応を確認する
Regression Agent 既存挙動・テスト・配布 mirror・CLI/skill UX のデグレを探す
Skeptic Agent 合格させたい前提で見落としている major risk を探す

Codex 環境で native TeamAgent が使えない場合でも、この gate を省略してはいけない。 codex-companion.sh review、利用可能な reviewer subagent、または明示的に分けた read-only manual-pass で同じ 2-4 視点を再現し、team_agent_modenative / codex-companion / manual-pass / unavailable を記録する。

Code Review Summary

詳細は references/code-review.md。 通常 code review は次を見る。

  • Security
  • Performance
  • Quality
  • Accessibility
  • AI Residuals
  • Spec Alignment
  • Plans Alignment
  • Regression Safety
  • TDD compliance

仕様正本 alignment check は必須。 spec_path がある場合は差分が仕様正本と矛盾しないか確認し、仕様正本が必要なのに無い場合は spec_skip_reason の妥当性を見る。 Plans.md alignment check とデグレ alignment check も同じ gate で扱う。

AI Residualsscripts/review-ai-residuals.shscripts/review-weak-supervision-report.sh を優先して使う。 untracked も見る場合は --include-untracked を使う。 mockData, dummy, fake, localhost, TODO, FIXME, it.skip, test.skip, expect(true).toBe(true) などは候補であり、diff 文脈で severity を決める。 finding 段階は網羅優先。minor と判定した指摘も observations[] / recommendations[] に残し、gate は verdict 段階だけで行う(Opus 4.8 は low-severity の報告を絞る癖がある。references/code-review.md の Finding coverage 参照)。

TDD compliance check

TDD が required の task では skip_tdd_reason、red-log、focused tests の証跡を確認する。 証跡なしで APPROVE しない。

Quick / Codex Closeout Summary

詳細は references/codex-closeout.md

軽量 path の原則:

  • target selection を先に固定する
  • Codex 指摘は advisory として扱い、実コードで確認してから採否を決める
  • final report には review command / tests / accepted findings / rejected findings / clean result を含める
  • stop-on-clean: clean result 後に、見栄えのためだけの追加 review をしない
  • Codex が使えない場合は full manual pass に fallback し、失敗を成功扱いしない

helper:

bash scripts/harness-review-closeout.sh --dry-run --uncommitted
bash scripts/harness-review-closeout.sh --base origin/main --parallel-tests --test "bash tests/test-harness-review-governance.sh"
bash scripts/harness-review-closeout.sh --commit HEAD

Plan Review Summary

詳細は references/plan-review.md。 Plan Review は Plans.md の DoD / Depends / Status と実装順序を見る。 仕様正本が必要なタスクで spec_path がない場合は、decision_needed として止める。

Scope Review Summary

詳細は references/scope-review.md。 Scope Review は、要求・差分・テスト・docs の境界が膨らんでいないかを見る。 範囲変更が必要なら、推測で進めず AskUserQuestion または plan 更新に戻す。

Security / UI / Dual

  • Security: references/security-profile.md
  • UI rubric: references/ui-rubric.md
  • high-res vision flow: references/vision-high-res-flow.md
  • Dual review: references/dual-review.md

/ultrareview は Harness flow 内では既定で呼ばない。 Harness flow の review-result.v1、commit guard、sprint-contract との接続を置き換えないため。 claude ultrareview [target] --json は CI / script からの second-opinion としてだけ扱う。

PR Host Boundary

GitHub-first。 PR host 上の review 事実は GitHub を正とし、local diff は補助証拠として扱う。 ただし local uncommitted review は GitHub に push しない。

Output Contract

User-facing prose follows the explicit session or project language. If no language is configured, use English. Use Japanese only when i18n.language: ja, CLAUDE_CODE_HARNESS_LANG=ja, or an explicit session instruction requests Japanese output. Machine-readable values stay English.

Start with the result summary.

## Review Result

### {APPROVE | REQUEST_CHANGES | decision_needed} - {one-line conclusion}

Target: `{BASE_REF}..HEAD` or `{target}`
Verification: {commands run}

Strengths:
- ...

Findings:
- [severity] file:line - issue and evidence

Next Actions:
- ...

Details:
```json
{
  "schema_version": "review-result.v1",
  "verdict": "APPROVE | REQUEST_CHANGES",
  "decision_needed": {
    "required": false,
    "ask_tool": "AskUserQuestion"
  },
  "accepted_findings": [],
  "rejected_findings": [],
  "acceptance_bar": {
    "critical_major_zero": true,
    "spec_alignment": "pass | fail | not_applicable",
    "plans_alignment": "pass | fail | not_applicable",
    "regression_safety": "pass | fail | not_applicable",
    "verification_evidence": "pass | fail | not_applicable"
  },
  "team_debate": {
    "required": false,
    "mode": "native | codex-companion | manual-pass | unavailable",
    "team_agent_mode": "native | codex-companion | manual-pass | unavailable",
    "agents": [],
    "disagreements": []
  },
  "critical_issues": [],
  "major_issues": [],
  "observations": [],
  "recommendations": []
}
```

Persist Verdict (required for commit guard / #218 fix)

Output Contract の JSON ブロックを出力したら、verdict が .claude/state/review-result.json必ず永続化されるよう以下の step を最後に実行する。これを踏み忘れると、PreToolUse commit guard が 後続 git commitAPPROVE 無しでブロックする (harness-work step 10 と同じ pattern)。

# 1. 上の JSON ブロックを一時ファイルへ書き出す (verdict / acceptance_bar 等を実値で)
mkdir -p .claude/state
cat > .claude/state/tmp-review-result.json <<'JSON'
{ "schema_version": "review-result.v1", "verdict": "APPROVE", ... }
JSON

# 2. write-review-result.sh で正規化保存 (commit_hash は省略可)
bash "${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-$PWD}}/scripts/write-review-result.sh" \
  .claude/state/tmp-review-result.json \
  "$(git rev-parse --short HEAD 2>/dev/null || true)"

# 3. 一時ファイル削除
rm -f .claude/state/tmp-review-result.json

verdictREQUEST_CHANGES でも保存する (commit guard は APPROVE のみ通過させ、REQUEST_CHANGES は履歴として残す)。 harness-release の Review Gate から委譲された場合も同じ step を踏む。

reviewer subagent は read-only (allowed-tools: Read, Grep, Glob) のため、上記 write 操作は orchestrator (skill を呼んだ main agent) が行う。

Codex Environment

Codex 環境では使える tool が異なる。 それでも、合格ライン、仕様正本、Plans.md、デグレ、修正後再レビュー、AskUserQuestion / decision_needed.v1 の契約は同じ。

通常環境 Codex fallback
Task tool の TeamAgent Debate reviewer subagent / codex-companion.sh review / manual-pass
AskUserQuestion 使えない場合は decision_needed.v1 を stdout に出し、推測で進めない
TaskList Plans.md を直接読む

Related Skills

  • harness-work: REQUEST_CHANGES 後の修正実行
  • harness-plan: plan / scope / spec の更新
  • harness-release: review 済み work の commit / release
用于项目初始化、工具配置、代理设置及技能镜像同步的集成安装技能。涵盖CI/CD、Codex及内存配置,执行健康检查与文件同步。严禁用于实现、审查或规划阶段。
setup init new project CI/Codex setup harness-mem mirror
codex/.codex/skills/harness-setup/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-setup -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-setup",
    "pair": "harness-sync",
    "role": "generator",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "medium",
    "purpose": "Initialize and repair Harness project configuration",
    "trigger": "setup, init, new project, CI\/Codex setup, harness-mem, mirror",
    "description": "HAR: Project init, tool setup, agent config, memory setup, skill mirror sync. Trigger: setup, init, new project, CI\/Codex setup, harness-mem, mirror. Do NOT load for: implementation, review, release, planning.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Grep",
        "Glob",
        "Bash"
    ],
    "argument-hint": "[init|ci|codex|harness-mem|mirrors|agents|localize]",
    "description-en": "HAR: Project init, tool setup, agent config, memory setup, skill mirror sync. Trigger: setup, init, new project, CI\/Codex setup, harness-mem, mirror. Do NOT load for: implementation, review, release, planning.",
    "description-ja": "HAR:プロジェクト初期化・ツール設定・エージェント構成・メモリ設定・skill mirror 同期を担当。セットアップ、初期化、新規プロジェクト、CI\/Codex CLI セットアップ、harness-mem、mirror で起動。実装・レビュー・リリース・プランニングには使わない。",
    "user-invocable": true
}

Harness Setup

Harness の統合セットアップスキル。 以下の旧スキルを統合:

  • setup — 統合セットアップハブ
  • harness-init — プロジェクト初期化
  • harness-update — Harness アップデート
  • maintenance — ファイル整理・クリーンアップ

Quick Reference

サブコマンド 動作
/harness-setup init 新規プロジェクト初期化(CLAUDE.md + Plans.md + hooks + sync + doctor)
/harness-setup ci CI/CD パイプライン設定
/harness-setup codex Codex CLI インストール・設定
/harness-setup harness-mem harness-mem 統合・メモリ設定
/harness-setup mirrors skills/ → 公開 mirror bundle 更新
/harness-setup agents agents/ エージェント設定
/harness-setup localize CLAUDE.md ルールのローカライズ

Built-in slash discovery (CC 2.1.108+): /init のような built-in slash command も発見される。 Harness 固有の bootstrap が必要な時だけ /harness-setup init と使い分ける。

Claude Code setup guidance (CC 2.1.120+): MCP alwaysLoad${CLAUDE_EFFORT}claude plugin pruneclaude project purgeANTHROPIC_BEDROCK_SERVICE_TIERclaude_code.skill_activated.invocation_trigger、 Windows PowerShell primary shell、forked skills / subagents の deferred tools は docs/claude-code-setup-mcp-telemetry-provider.md を正本として扱う。

Codex plugin workflows: Codex /goalPlans.md を二重管理しない。 plugin-bundled hooks は opt-in、external agent import は ownership 明記、 MultiAgentV2 / agents.max_threads = 8 は上限として扱い、 sticky environments / app-server artifacts は safe default を優先する。 Codex 0.130.0 stable の codex remote-control、large thread pagination、 selected-environment view_image、live app-server config refresh、 accurate turn diffs、plugin details bundled hooks、sharing discoverability controls は docs/codex-plugin-workflows-policy.md を正本として扱う。 詳細は docs/codex-plugin-workflows-policy.md を参照。

サブコマンド詳細

init — プロジェクト初期化

新規プロジェクトに Harness を導入する。

生成ファイル:

project/
├── CLAUDE.md            # プロジェクト設定
├── Plans.md             # タスク管理(空テンプレート)
├── .claude/
│   ├── settings.json    # Claude Code 設定
│   └── hooks.json       # フック設定(Go バイナリ)
└── hooks/
    ├── pre-tool.sh      # 薄いシム(→ core/src/index.ts)
    └── post-tool.sh     # 薄いシム(→ core/src/index.ts)

フロー:

  1. プロジェクト種別を検出(Node.js/Python/Go/Rust/その他)
  2. 最小限の CLAUDE.md を生成
  3. Plans.md テンプレートを生成
  4. hooks.json を配置
  5. Go バイナリ検証: harness version でバイナリが利用可能か確認(v4.0 以降 Node.js 不要)
  6. プラグインファイル同期: harness sync.claude-plugin/ 配下のファイルを最新に同期。harness.toml が無く sync が失敗する場合は先に harness init を実行する(Setup hook 導入前にブートストラップされたプロジェクトの復旧経路)
  7. ヘルスチェック: harness doctor で全チェック項目をパス。問題があれば修正案を提示

Go バイナリ検証

# バイナリの存在と動作を確認
harness version
# 例: harness v4.0.0 (go1.22.0, darwin/arm64)

v4.0 以降、Harness のコアエンジンは Go バイナリに移行した。 Node.js は不要。バイナリは bin/harness(または PATH 上の harness)を使用する。

プラグインファイル同期

# .claude-plugin/ 配下のファイルを最新に同期
harness sync

# 同期内容の確認のみ(変更なし)
harness sync --dry-run

harness sync は skills/ の SSOT から各 mirror(codex/.codex/skills/、opencode/skills/)へ 変更を伝播させる。init 後に必ず実行すること。

ヘルスチェック

# 全チェック項目を実行
harness doctor

harness doctor は以下を確認する:

チェック項目 内容
バイナリ harness version が正常に返るか
プラグイン設定 .claude-plugin/plugin.json の形式が正しいか
hooks 配置 hooks が正しいパスに存在するか
mirror 同期 skills/ と mirror の内容が一致しているか
CLAUDE.md 必須セクションが存在するか

問題が検出された場合は修正コマンドを提示する。

ci — CI/CD 設定

GitHub Actions ワークフローを設定する。

# .github/workflows/ci.yml 生成例
name: CI
on:
  push:
    branches: [main]
  pull_request:
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test

codex — Codex CLI 設定

# インストール確認(Codex CLI は Node.js ベース。Harness 本体とは別物)
which codex || npm install -g @openai/codex

# タイムアウトコマンド確認(macOS)
TIMEOUT=$(command -v timeout || command -v gtimeout || echo "")
# macOS の場合: brew install coreutils

注意: Harness v4.0 本体(harness コマンド)は Node.js 不要の Go バイナリ。 Codex CLI(codex コマンド)は別ツールであり、引き続き Node.js が必要。

Codex provider / model metadata policy (0.123.0+ / 0.130.0)

Codex 0.123.0 以降の provider / model guidance と、Codex 0.130.0 stable の Bedrock aws login guidance は docs/codex-provider-setup-policy.md を正本として扱う。

要点:

  • Bedrock を使う場合は、Codex built-in provider の amazon-bedrock を使う。
  • AWS profile は user / project の Codex config で [model_providers.amazon-bedrock.aws] に置く。
  • AWS console-login credentials from aws login profiles は AWS 側の profile material として扱う。
  • Harness は AWS credential、console-login cache、provider endpoint を書き込まない。
  • Harness の配布用 Codex config には model = "gpt-5.4" を setup default として固定しない。
  • Harness の配布用 Codex config には model_provider = "amazon-bedrock" も setup default として固定しない。
  • gpt-5.4 は Codex 本体の current model metadata として扱い、古い gpt-5.2-codex などを推奨 sample として残さない。
  • Claude Code 側の CLAUDE_CODE_USE_BEDROCK / ANTHROPIC_DEFAULT_* / modelOverrides guidance と、Codex の model_provider = "amazon-bedrock" は混ぜない。

Bedrock を使う user / project だけが、必要に応じて次を追加する:

model_provider = "amazon-bedrock"

[model_providers.amazon-bedrock.aws]
profile = "codex-bedrock"

Claude Code 側の provider / MCP / telemetry guidance は docs/claude-code-setup-mcp-telemetry-provider.md を参照する。 特に ANTHROPIC_BEDROCK_SERVICE_TIER は Bedrock 利用者の provider 環境だけで扱い、 Harness の plugin default / template / shared project settings には入れない。

Codex app-server / plugin workflow policy (0.130.0)

Codex 0.130.0 stable (rust-v0.130.0, published 2026-05-08T23:09:55Z) の app-server / plugin workflow guidance は docs/codex-plugin-workflows-policy.md を正本として扱う。

要点:

  • codex remote-control は headless remotely controllable app-server の明示起動 entrypoint。Harness setup は remote-control defaults を config に書かない。
  • App-server clients can page large threads。長い loop / Breezing transcript は必要な page 範囲を確認する。
  • view_image は multi-environment session の selected environments 経由で file を解決できる。artifact report には environment / workdir を添える。
  • Live app-server threads pick up config changes without restart。ただし secret / provider / hook policy の変更は diff と verification で扱う。
  • Turn diffs stay accurate across apply_patch including partial failures。最終判断は git diff と tests で確認する。
  • Plugin details now show bundled hooks。install / share 前に bundled hooks を確認し、Harness bundled hooks は opt-in のままにする。
  • Plugin sharing exposes link metadata and discoverability controls。公開範囲と metadata は release surface として確認する。
  • Configurable OpenTelemetry trace metadata は debugging / triage 補助に限定し、個人情報・顧客情報・secret を入れない。
  • Built-in MCPs first-class runtime servers は Codex runtime owned surface として扱い、plugin-provided MCP と所有者を混ぜない。
  • CODEX_HOME environments TOML provider は user-level environment source。選択 environment を報告し、write turn は one primary environment に固定する。
  • Remove skills list extra roots に依存せず、Harness mirror install または [[skills.config]] path-based loading を明示する。

Codex MCP diagnostics / plugin loading (0.123.0+)

Codex 0.123.0 以降の MCP diagnostics / plugin MCP loading guidance は docs/codex-mcp-diagnostics.md を正本として扱う。

要点:

  • Codex TUI では、普段は /mcp で軽量に server 状態だけ確認する。
  • MCP server が見えない、resources が出ない、resource templates が読めない時だけ /mcp verbose を使う。
  • /mcp verbose では diagnostics / resources / resource templates を確認する。
  • plugin 内 .mcp.jsonmcpServers 形式と top-level server map 形式の両方を受け取れる前提で案内する。
  • 新規 plugin では共有しやすい mcpServers 形式を優先する。
  • 既存 plugin が top-level server map 形式なら、Codex 側の loading 改善を利用し、不要な書き換えを避ける。
  • Claude Code 側の claude mcp ....claude/mcp.json、hook type: "mcp_tool" guidance と混ぜない。

mcpServers 形式:

{
  "mcpServers": {
    "docs": {
      "command": "node",
      "args": ["server.js"]
    }
  }
}

top-level server map 形式:

{
  "docs": {
    "command": "node",
    "args": ["server.js"]
  }
}

Codex sandbox / execution policy (0.123.0+)

Codex 0.123.0 以降の remote_sandbox_configcodex exec shared flags guidance は docs/codex-sandbox-execution-policy.md を正本として扱う。

要点:

  • remote_sandbox_configrequirements.toml の host-specific sandbox policy として案内する。
  • remote devbox / ephemeral CI runner / shared host のように、remote environment ごとの allowed_sandbox_modes を比較して決める。
  • host matching は便利な分類だが、強い device authentication ではない。高リスク環境では broad wildcard を避ける。
  • Harness の配布用 codex/.codex/config.toml には organization-specific な remote_sandbox_config を書かない。
  • Codex 0.123.0 以降は codex exec が root-level shared flags を継承するため、wrapper 側で重複した --approval-policy / --sandbox pairs を追加しない。
  • scripts/codex-companion.sh task --write--sandbox workspace-write を付けるのは、Harness の「書き込みタスク」という意図を exec-local に変換しているためであり、root shared flags の重複転送ではない。
  • scripts/codex/codex-exec-wrapper.sh--full-auto は 53.2.4 では維持する。変更する場合は別 task で approval / sandbox behavior の回帰テストを追加する。

requirements example:

allowed_sandbox_modes = ["read-only"]

[[remote_sandbox_config]]
hostname_patterns = ["devbox-*.corp.example.com"]
allowed_sandbox_modes = ["read-only", "workspace-write"]

使用パターン(公式プラグイン経由):

bash scripts/codex-companion.sh task --write "タスク内容"
# または stdin 経由
cat /tmp/prompt.md | bash scripts/codex-companion.sh task --write

Cursor 実装バックエンド導入(脳 Opus / 体 composer)

Cursor を Harness の実装(worker)バックエンドとして使うための導入手順。 レビュー / advisor ロールは Opus に固定し、cursor バックエンドへ切り替えない(.claude/rules/cursor-cli-only.md の Role scope)。

1. AI 実行可(バックエンド選択の永続化)

set-impl-backend.sh でバックエンドを永続化する。Harness / AI がこのステップを実行できる。

# プロジェクトスコープ(このプロジェクトの env.local に書く)
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" cursor

# ユーザースコープ(全プロジェクト共通: ${HOME}/.config/claude-harness/impl-backend.env)
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --user cursor

# 現在解決されるバックエンドを表示して確認
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show

解決の優先順位: プロジェクト env.local がユーザースコープより優先される。

2. ユーザー手動(AI は編集不可。protected path + sandbox のため)

以下 3 ファイルは Edit/Write(.claude/settings*) deny と self-audit guard、および ~/.cursor/* が plugin write 対象外であるため Harness / AI が編集できない。ユーザー自身がターミナル / エディタで設定する。

  • ~/.cursor/permissions.json: terminalAllowlist / mcpAllowlist を追加する。 テンプレートは .claude/rules/cursor-cli-only.md~/.cursor/permissions.json テンプレートを使う。 --force / Run Everything(--yolo)は使わない(Cursor 公式が "Never use")。
  • .cursorignore: secrets(.env, *.pem, *.key, .ssh, .aws, .git)を列挙する。 テンプレートは .claude/rules/cursor-cli-only.md.cursorignore テンプレートを使う。
  • ~/.claude/settings.json の sandbox(2 点): (1) network.allowedDomains*.cursor.sh を追加、 (2) 公式キー sandbox.filesystem.allowWrite~/.cursor を追加する(cursor-agent は実行時に ~/.cursor/projects/...~/.cursor/cli-config.json.tmp へ状態を書くため、未許可だと EPERM で失敗する)。⚠️ キー名は allowWrite: write という名前にすると未知キーとして 無視され設定が効かない(実測で確認)。~/ は sandbox 側で展開される(公式例 ["~/.kube"])。 両方揃うと per-run の sandbox 無効化なしで実行できる。手順は docs/sandbox-allowlist-recipe.md の jq merge レシピと .claude/rules/cursor-cli-only.md の「Sandbox 要件」に従う。CC 完全再起動後に有効化される。

3. 境界(cursor は candidate のまま)

cursor バックエンドは candidate の位置づけ。安全性は Cursor の allowlist(best-effort、bypass 可能)ではなく、 専用 .git を持つ worktree での隔離実行 + Lead による diff レビュー + cherry-pick での本流取り込みで担保する。 cursor-agent の出力は Lead レビューまで untrusted として扱う。詳細は .claude/rules/cursor-cli-only.md を参照。

harness-mem — メモリ設定

Unified Harness Memory の設定を行う。

# メモリディレクトリ作成
mkdir -p .claude/agent-memory/claude-code-harness-worker
mkdir -p .claude/agent-memory/claude-code-harness-reviewer

# MEMORY.md テンプレート配置
cat > .claude/agent-memory/claude-code-harness-worker/MEMORY.md << 'EOF'
# Worker Agent Memory

## Project Context
[プロジェクト概要]

## Patterns
[学習パターン]
EOF

mirrors — 公開 skill bundle 同期

Windows の core.symlinks=false では repository symlink が通常ファイルになり、harness-* skill が command 一覧に出なくなることがあります。公開 bundle は実ディレクトリ mirror として同期します。

./scripts/sync-skill-mirrors.sh
./scripts/sync-skill-mirrors.sh --check

更新対象:

  • skills/
  • codex/.codex/skills/
  • opencode/skills/

agents — エージェント設定

agents/ の3エージェント構成を設定する。

agents/
├── worker.md      # 実装担当(task-worker + codex-implementer + error-recovery)
└── reviewer.md    # レビュー担当(code-reviewer + plan-critic)

localize — ルールローカライズ

.claude/rules/ のルールを現プロジェクトに適応する。

# ルール一覧確認
ls .claude/rules/

# プロジェクト固有ルールの追加
cat >> .claude/rules/project-rules.md << 'EOF'
# Project-Specific Rules
[プロジェクト固有ルール]
EOF

Plugin インストール (v2.1.71+ Marketplace)

v2.1.71 で Marketplace の安定性が大幅に改善された。 Claude Code 2.1.117-2.1.118 以降の plugin / managed settings 方針は docs/plugin-managed-settings-policy.md を正本として扱う。

推奨インストール方式

# @ref 形式でバージョン固定(推奨)
claude plugin install owner/repo@v4.0.0

# 最新版
claude plugin install owner/repo

owner/repo@vX.X.X 形式を推奨。@ref パーサー修正により、タグ・ブランチ・コミットハッシュいずれも正確に解決される。

アップデート

claude plugin update owner/repo

v2.1.71 で update 時の merge conflict が修正され、安定したアップデートが可能になった。

その他の改善点

  • MCP server 重複排除: 同一 MCP サーバーの多重登録を自動防止
  • /plugin uninstallsettings.local.json を使用: ユーザーローカル設定に正確に反映

Managed marketplace / dependency policy (v2.1.117+)

企業利用で plugin marketplace を制御する場合は、Claude Code 本体の managed settings を使う。 Harness は独自の marketplace resolver や dependency resolver を重ねない。

項目 用途 Harness の扱い
extraKnownMarketplaces チームに推奨 marketplace を案内・登録する 通常の onboarding ではこちらを優先
blockedMarketplaces 特定 marketplace source をブロックする managed settings 専用。通常ユーザー向け default には入れない
strictKnownMarketplaces 許可した marketplace source だけ追加できるようにする managed settings 専用。通常ユーザー向け default には入れない
plugin dependency auto-resolve dependencies の自動 install / missing dependency hints Claude Code 本体に任せる。Harness 独自 resolver は追加しない
plugin themes/ directory plugin が theme を配布する 今回は P: 将来タスク。Harness は theme を同梱しない

DISABLE_AUTOUPDATER は自動更新を止める。 DISABLE_UPDATES は手動 claude update まで止めるため、企業の固定バージョン運用向け。 Harness の project default にはどちらも入れず、必要な組織が managed settings または端末管理で設定する。

依存関係が欠けた場合は、まず Claude Code の /plugin Errors、/doctorclaude plugin list --json を確認する。 marketplace 未登録が原因なら /plugin marketplace add または claude plugin marketplace add で登録し、本体の auto-resolve に任せる。

Maintenance — ファイル整理

定期メンテナンスタスク:

タスク コマンド
古いログ削除 find .claude/logs -mtime +30 -delete
Plans.md 圧縮 完了タスクをアーカイブセクションに移動
古いトレース削除 tail -1000 .claude/state/agent-trace.jsonl > /tmp/trace && mv /tmp/trace .claude/state/agent-trace.jsonl

関連スキル

  • harness-plan — セットアップ後にプロジェクト計画を作成
  • harness-work — セットアップ後にタスクを実行
  • harness-review — セットアップ設定をレビュー
同步Plans.md与实现状态,检测漂移并更新标记。支持进度检查、快照保存及回顾。触发词包括sync-status、where am I等。禁止用于规划、实施、审查或发布阶段。
sync-status where am I check progress 今どこ? 進捗確認
codex/.codex/skills/harness-sync/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-sync -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-sync",
    "pair": "harness-plan",
    "role": "synchronizer",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "medium",
    "purpose": "Reconcile Plans.md, git, and implementation state",
    "trigger": "sync-status, where am I, check progress",
    "description": "HAR: Sync Plans.md with implementation. Drift detect, marker update, retrospective. Trigger: sync-status, where am I, check progress. --snapshot for snapshots. Do NOT load for: planning, implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Edit",
        "Bash",
        "Grep",
        "Glob"
    ],
    "argument-hint": "[--snapshot|--no-retro]",
    "description-en": "HAR: Sync Plans.md with implementation. Drift detect, marker update, retrospective. Trigger: sync-status, where am I, check progress. --snapshot for snapshots. Do NOT load for: planning, implementation, review, release.",
    "description-ja": "HAR:Plans.md と実装の進捗同期。差分検出・マーカー更新・レトロスペクティブ。sync-status、進捗確認、今どこ、どこまで終わったで起動。--snapshot でスナップショット保存。プランニング・実装・レビュー・リリースには使わない。",
    "user-invocable": true
}

Harness Sync

Plans.md と実装状況を照合し、差分を検出・更新する。 旧 sync-status および harness-plan sync サブコマンドの独立版。

Quick Reference

ユーザー入力 動作
harness-sync 進捗同期 + レトロスペクティブ(デフォルト ON)
harness-sync --no-retro 進捗同期のみ(レトロスキップ)
harness-sync --snapshot スナップショット保存(進捗の時点記録)
harness-sync --plan roadmap named Plans の roadmap を同期
"今どこ?" / "進捗確認" 同上

オプション

オプション 説明 デフォルト
--snapshot 現在の進捗をスナップショットとして保存 false
--no-retro レトロスペクティブをスキップ false(デフォルトで実行)
--plan NAME plans/manifest.json の named plan を使う active/default

Step 0: Plans.md 検証

Plans.md の存在とフォーマットを確認する。問題がある場合は即座に案内して停止する。 複数 Plans.md がある repo では、対象 plan を scripts/plan-registry.sh list または --plan NAME で確認してから読む。

状態 案内
Plans.md が存在しない Plans.md が見つかりません。harness-plan create で作成してください。停止
ヘッダーに DoD / Depends カラムがない(v1 形式) Plans.md が旧フォーマット(3カラム)です。harness-plan create で v2(5カラム)に再生成してください。既存タスクは自動的に引き継がれます。停止
v2 形式(5カラム) そのまま Step 1 に進む

Step 1: 現状収集(並列)

# Plans.md の状態
cat Plans.md

# Git 変更状態
git status
git diff --stat HEAD~3

# 直近コミット履歴
git log --oneline -10

# エージェントトレース(直近の編集ファイル)
tail -20 .claude/state/agent-trace.jsonl 2>/dev/null | jq -r '.files[].path' | sort -u

Step 1.5: Agent Trace 分析

Agent Trace から直近の編集履歴を取得し、Plans.md のタスクと照合する:

# 直近の編集ファイル一覧
RECENT_FILES=$(tail -20 .claude/state/agent-trace.jsonl 2>/dev/null | \
  jq -r '.files[].path' | sort -u)

# プロジェクト情報
PROJECT=$(tail -1 .claude/state/agent-trace.jsonl 2>/dev/null | \
  jq -r '.metadata.project')

照合ポイント:

チェック項目 検出方法
Plans.md にないファイル編集 Agent Trace vs タスク記述
タスク記述と異なるファイル 想定ファイル vs 実際の編集
長時間編集がないタスク Agent Trace 時系列 vs WIP 期間

Step 2: 差分検出

チェック項目 検出方法
完了済みなのに cc:WIP コミット履歴 vs マーカー
着手済みなのに cc:TODO 変更ファイル vs マーカー
cc:完了 なのに未コミット git status vs マーカー

Step 3: Plans.md 更新提案

差分が検出された場合、提案して実行する:

Plans.md 更新が必要です

| Task | 現在 | 変更後 | 理由 |
|------|------|--------|------|
| XX   | cc:WIP | cc:完了 | コミット済み |
| YY   | cc:TODO | cc:WIP | ファイル編集済み |

更新しますか? (yes / no)

Step 4: 進捗サマリー出力

## 進捗サマリー

**プロジェクト**: {{project_name}}

| ステータス | 件数 |
|----------|------|
| 未着手 (cc:TODO) | {{count}} |
| 作業中 (cc:WIP) | {{count}} |
| 完了 (cc:完了) | {{count}} |
| PM確認済 (pm:確認済) | {{count}} |

**進捗率**: {{percent}}%

### 直近の編集ファイル (Agent Trace)
- {{file1}}
- {{file2}}

Step 4.5: スナップショット保存(--snapshot 指定時)

--snapshot が指定された場合、現在の進捗状態を時刻付きスナップショットとして保存する。

保存先

.claude/state/snapshots/ ディレクトリに JSON 形式で保存:

SNAPSHOT_DIR="${PROJECT_ROOT}/.claude/state/snapshots"
mkdir -p "${SNAPSHOT_DIR}"
SNAPSHOT_FILE="${SNAPSHOT_DIR}/progress-$(date -u +%Y%m%dT%H%M%SZ).json"

スナップショット内容

{
  "timestamp": "2026-03-08T10:30:00Z",
  "phase": "Phase 26",
  "progress": {
    "total": 16,
    "todo": 5,
    "wip": 3,
    "done": 6,
    "confirmed": 2
  },
  "progress_rate": 50,
  "recent_commits": ["abc1234 feat: ...", "def5678 fix: ..."],
  "recent_files": ["skills/harness-work/SKILL.md", "..."],
  "notes": ""
}

差分比較

前回スナップショットが存在する場合、差分を表示:

## スナップショット差分

| 指標 | 前回 ({{prev_time}}) | 今回 | 変化 |
|------|---------------------|------|------|
| 進捗率 | {{prev}}% | {{current}}% | +{{diff}}%pt |
| 完了タスク | {{prev_done}} | {{current_done}} | +{{diff_done}} |
| WIP タスク | {{prev_wip}} | {{current_wip}} | {{diff_wip}} |

設計意図: snapshot はユーザーが「今の状態を記録しておきたい」と思った時に手動で使う。 breezing 中の自動的なプログレスフィード(26.2.3)とは別の機能。

Step 5: 次のアクション提案

次にやること

**優先 1**: {{タスク}}
- 理由: {{依頼中 / アンブロック待ち}}

**推奨**: harness-work, harness-review

異常検知

状況 警告
複数の cc:WIP 複数タスクが同時進行中
pm:依頼中 が未処理 PM の依頼を先に処理する
大きな乖離 タスク管理が追いついていない
WIP が 3日以上更新なし ブロックされていないか確認

Step 6: レトロスペクティブ(デフォルト ON)

cc:完了 タスクが 1 件以上あれば自動的に振り返りを実行する。 --no-retro で明示的にスキップ可能。

Step R1: 完了タスク収集

# Plans.md から cc:完了 / pm:確認済 のタスクを抽出
grep -E 'cc:完了|pm:確認済' Plans.md

# 直近の完了コミット履歴
git log --oneline --since="7 days ago"

# 変更規模
git diff --stat HEAD~10

Step R2: 振り返り 4 項目

項目 分析方法
見積もり精度 Plans.md のタスク記述から想定ファイル数を推論 → git diff --stat の実変更ファイル数と比較
ブロック原因 blocked マーカーが付いたタスクの理由パターンを集計(技術的/外部依存/仕様不明確)
品質マーカー的中率 [feature:security] 等を付けたタスクで実際に関連問題が出たか
スコープ変動 Plans.md の初回コミット時のタスク数 vs 現在のタスク数(追加/削除件数)

Step R3: 振り返りサマリー出力

## 振り返りサマリー

**期間**: {{start_date}} 〜 {{end_date}}

| 指標 | 値 |
|------|-----|
| 完了タスク | {{count}} 件 |
| ブロック発生 | {{blocked_count}} 件 |
| スコープ変動 | +{{added}} / -{{removed}} 件 |
| 見積もり精度 | 想定 {{est}} ファイル → 実際 {{actual}} ファイル |

### 学び
- {{1-2 行の学び}}

### 次に活かすこと
- {{1-2 行の改善アクション}}

Step R4: harness-mem への記録

振り返り結果を harness-mem に記録し、次回の create 時に参照できるようにする。 記録先: .claude/agent-memory/ 配下の該当エージェントメモリ。

関連スキル

  • harness-plan — 計画作成・タスク管理
  • harness-work — タスク実装
  • harness-review — コードレビュー
集成执行Plans.md任务,支持单任务、并行及团队全自动运行。根据任务数自动选择模式,兼容Claude/Codex/Cursor后端,适用于实现与执行场景。
implement execute do everything breezing team run parallel composer composer 2.5
codex/.codex/skills/harness-work/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-work -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-work",
    "pair": "harness-review",
    "role": "executor",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "high",
    "purpose": "Execute Plans.md tasks end to end through Codex-native tools",
    "trigger": "implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5, composer mode, コンポーザー",
    "description": "HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Grep",
        "Glob",
        "Bash",
        "spawn_agent",
        "send_input",
        "wait_agent",
        "close_agent"
    ],
    "argument-hint": "[all] [task-number|range] [--backend claude|codex|cursor] [--cursor] [--codex] [--parallel N] [--no-commit] [--resume id] [--breezing] [--auto-mode] [--tdd-bypass]",
    "description-en": "HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup.",
    "description-ja": "HAR:Plans.md タスクを1件から全並列チーム実行まで担当。実装して、実行して、全部やって、breezing、チーム実行、parallel、composer、コンポーザー、composer 2.5 で起動。プランニング・レビュー・リリース・セットアップには使わない。"
}

Harness Work

Harness の統合実行スキル。 以下の旧スキルを統合:

  • work — Plans.md タスクの実装(スコープ自動判断)
  • impl — 機能実装(タスクベース)
  • breezing — チームフル自動実行
  • parallel-workflows — 並列ワークフロー最適化
  • ci — CI 失敗時の復旧

Quick Reference

ユーザー入力 モード 動作
harness-work auto タスク数で自動判定(下記参照)
harness-work all auto 全未完了タスクを自動モードで実行
harness-work 3 solo タスク3だけ即実行
harness-work --parallel 5 parallel 5ワーカーで並列実行(強制)
harness-work --codex codex Codex CLI に委託(明示時のみ)
harness-work --breezing all breezing resolved backend でチーム実行(配布既定は claude、user/project default で cursor 可)
harness-work --breezing --backend cursor all breezing Cursor worker backend を明示してチーム実行
harness-work --breezing --backend claude all breezing Codex native subagent worker を明示してチーム実行
harness-work --breezing breezing チーム実行を強制
harness-work 3 --plan roadmap solo named Plans の roadmap からタスク3を実行

Execution Mode Auto Selection(フラグなし時の自動判定)

明示的なモードフラグ(--parallel, --breezing, --codex)がない場合、 対象タスク数に応じて最適なモードを自動選択する:

対象タスク数 自動選択モード 理由
1 件 Solo オーバーヘッド最小。直接実装が最速
2〜3 件 Parallel(Task tool) Worker 分離のメリットが出始める閾値
4 件以上 Breezing Lead 調整 + Worker 並列 + Reviewer 独立の三者分離が効果的

ルール

  1. 明示フラグは常にオートモードを上書きする
    • --parallel N → Parallel モード(タスク数に関係なく)
    • --breezing → Breezing モード(タスク数に関係なく)
    • --codex → Codex モード(タスク数に関係なく)
  2. --codex は明示時のみ発動。Codex CLI が未インストールの環境があるため、自動選択しない
  3. --codex は他モードと組み合わせ可能: --codex --breezing → Codex + Breezing

Execution Backend Selection(実装バックエンド選択)

バックエンド(どのランタイムが実装するか)は、トポロジー(実行モード: solo / parallel / breezing)と直交する。 トポロジーが「何ワーカーで・どう分割して回すか」を決めるのに対し、バックエンドは「実装の手を誰が動かすか」を決める。 この契約は host-neutral であり(spec.md「Execution Backend Contract」)、Codex host から harness を駆動しても Claude Code から駆動しても同じに振る舞う。

backend 実装の担い手 委託コマンド
claude(global fallback) Codex native subagent(spawn_agent({message, fork_context}) spawn_agent で worker を spawn
codex Codex CLI bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write "<prompt>"
cursor cursor-agent(model composer-2.5-fast bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task --write --workspace <worktree> "<prompt>"

解決手順

run 開始時に 1 回だけ解決する。backend 判定は 必ず resolver 経由にし、HARNESS_IMPL_BACKEND env だけを直読みして判定しない:

bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh"

precedence(高い順): --backend <v> / --cursor / --codex フラグ > HARNESS_IMPL_BACKEND 環境変数 > プロジェクト env.local の同名行 > ユーザー ~/.config/claude-harness/impl-backend.env の同名行 > call-site default。 明示フラグ(--backend / --cursor / --codex)は env / file / default を常に上書きする。プロジェクト設定はユーザースコープを上書きする。

Codex host の --breezing / breezing も配布 plugin では call-site default を変えない。 フラグなしは resolve-impl-backend.sh の結果に従い、未設定時の fallback は claude。 Cursor を既定にしたい環境は HARNESS_IMPL_BACKEND=cursor を env / project env.local / user-scope config に設定する。 明示的に Cursor を使う場合は --backend cursor / --cursor、Codex native subagent worker へ戻す場合は --backend claude を渡す。

モデル名の正本は model-routing.sh。本ドキュメント中の composer-2.5-fast は参照値であり、実解決は bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model に従う(drift 防止)。

自然言語 backend trigger

ユーザーが composer / コンポーザー / Composer で / composer 2.5 / composer モード と言った場合は、cursor backend 指定として扱う。 これは --cursor と同じ intent だが、backend の確定値は必ず resolve-impl-backend.sh で解決する。 解決時は明示 override として --backend cursor を渡し、env / project / user file / default より優先させる。 Lead は composer を Codex native Worker 内の追加 agent と解釈せず、非 claude backend の規約どおり Worker agent を挟まずに cursor-companion.sh を直接呼ぶ。

role-scoped 制約

バックエンドは role-scoped。解決済みバックエンドを使うのは実装(worker)ロールだけ。 Reviewer と Advisor の両ロールは常に brain(--host claude、Opus)に固定する。 Reviewer を cursor / codex バックエンドに routing しない(実装したバックエンドが自分の出力をレビューしてはならない)。

claude バックエンドの self_review ゲート

backend が codex または cursor の場合、worker-report.v1self_review 配列も生成されない。 そのため Lead は self_review ゲートをスキップし、Lead の diff レビューを唯一の品質ゲートとする(既存の codex path と同じ扱い)。

cursor バックエンドの banner(委託前に必須)

backend が cursor のとき、Lead は委託前に次の 1 行 banner を必ず出力する:

⚠️ cursor backend: model=composer-2.5-fast / R01-R13 ガードレールは cursor-agent 内部に適用されない / 出力は Lead レビューまで untrusted

cursor の write 委託は専用 .git を持つ worktree 内で実行し、Lead が main へ cherry-pick する(cherry-pick 経路で R01-R13 が適用される)。 ガバナンス詳細は .claude/rules/cursor-cli-only.md を参照。

オプション

オプション 説明 デフォルト
all 全未完了タスクを対象 -
N or N-M タスク番号/範囲指定 -
--parallel N 並列ワーカー数 auto
--sequential 直列実行強制 -
--codex Codex CLI で実装委託(明示時のみ、自動選択しない) false
--backend <claude|codex|cursor> 明示バックエンド選択(worker ロールのみ適用、precedence 最上位) resolver result(未設定時は claude)
--cursor cursor backend(--backend cursor の別名) false
--plan NAME plans/manifest.json の named plan を使う active/default
--no-commit 自動コミット抑制 false
--resume <id|latest> 前回セッション再開 -
--breezing Lead/Worker/Reviewer のチーム実行 false
--no-tdd TDD フェーズスキップ false
--tdd-bypass 緊急時だけ TDD 強制を bypass。HARNESS_TDD_BYPASS_REASON または明示理由を audit に残す false
--no-simplify Auto-Refinement スキップ false
--auto-mode Auto Mode rollout を明示。親セッションの permission mode が互換な場合のみ採用を検討 false

Progressive Disclosure

まずこの本文で入口、自動選択、停止条件だけを確認する。 詳細は必要になった時だけ読む。

詳細 参照
Codex native Solo / Parallel / Breezing の具体手順 references/execution-modes.md
companion review、Reviewer fallback、AI Residuals、修正ループ references/review-loop.md
完了報告の生成 references/completion-report.md
テスト/CI 失敗時の再チケット化 references/failure-reticketing.md
仕様正本チェックの基準 docs/plans/spec-ssot.md

重要停止条件

  • Plans.md が旧フォーマットで DoD / Depends / Status を読めない時は停止する。
  • 仕様が実装判断に影響するのに project spec SSOT が見つからない時は、先に仕様正本を作成/更新してから実装する。
  • sprint-contract が required なのに ready でない時は実装に進まない。
  • critical / major review finding が残っている時は完了にしない。
  • テストを弱める、skip する、期待値を実装に合わせて緩める形では解決しない。
  • helper script は host project の scripts/ ではなく ${HARNESS_PLUGIN_ROOT}/scripts/ から呼ぶ。
  • 複数 Plans.md がある場合は、1 run の中で plan を切り替えない。必要なら --plan NAME を明示して新しい run を開始する。

Token Optimization (v2.1.69+): git 操作を伴わない軽量タスクでは plugin settings の includeGitInstructions: false を有効にして プロンプトトークンを削減できる。

スコープダイアログ(引数なし時)

harness-work
どこまでやりますか?
1) 次のタスク: Plans.md の次の未完了タスク → Solo で実行
2) 全部(推奨): 残りのタスクをすべて完了 → タスク数で自動モード選択
3) 番号指定: タスク番号を入力(例: 3, 5-7)→ 件数で自動モード選択

引数ありなら即実行(対話スキップ):

  • harness-work all → 全タスク、自動モード選択
  • harness-work 3-6 → 4件なので Breezing 自動選択

Effort レベル制御(Opus 4.8 / v2.1.111+)

effort はモデルの推論強度を選ぶ正式なノブ。low(○)/medium(◐)/high(●)/xhigh の 4 段階で、 /effort auto でデフォルトにリセットできる(max は v2.1.72 で廃止、xhigh が後継)。

Opus 4.8 では thinking は既定 off で、effort が推論深度の主レバー(過去のどの Opus より effort の影響が大きい)。 「浅い推論」を観測したら prompt で回避せず effort を上げる。 そのため複雑タスクの強化は free-text marker(旧 ultrathink)を spawn prompt に注入する方式を廃止し、 複雑度スコアから Worker spawn の effort tier を選ぶ方式に統一する。

多要素スコアリング

タスク着手時に以下のスコアを合算する。

要素 条件 スコア
ファイル数 変更対象 4 ファイル以上 +1
ディレクトリ core/, guardrails/, security/ を含む +1
キーワード architecture, security, design, migration を含む +1
失敗履歴 agent memory に同タスクの失敗記録あり +2
明示指定 PM テンプレートに effort: high / effort: xhigh(旧 ultrathink も互換受理)記載あり +3(自動採用)

effort tier の決め方(注入しない)

スコアから effort tier を escalation signal として決める(ultrathink 等の marker 文字列を spawn prompt に 書かない)。 適用 lever は次の 2 つだけ:

  • session /effort: 複雑タスクのバッチに入る前に host が /effort high / /effort xhigh を設定する(session 単位で効く確実な lever)。
  • worker frontmatter: agents/worker.mdeffort(既定 medium)が floor。CC の Agent / Task spawn API は per-spawn の effort 指定を公開しないため、worker 1 体ごとに effort を上げる機構はない。スコアは worker-report.v1task_complexity_note に記録し、Lead が session effort 引き上げの判断材料にする。
スコア code-risk(core/guardrails/security/architecture/migration を含む) effort tier
0-2 不問 medium(Worker frontmatter 既定のまま)
≥ 3 なし high
≥ 3 あり xhigh

breezing モードでも同じロジックを適用する(harness-work が一本化して管理)。

実行モード詳細

Harness helper script root

Harness が同梱する helper script は、作業対象プロジェクトの scripts/ ではなく、必ず plugin bundle root から呼ぶ。

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi

以降の node "${HARNESS_PLUGIN_ROOT}/scripts/..." / bash "${HARNESS_PLUGIN_ROOT}/scripts/..." は、この解決済み root を前提にする。

Backend-resolved executor path (Solo / Parallel / Breezing)

Solo / Parallel / Breezing は同じ resolver result から実装 executor を選ぶ。 harness-work 3 --cursor と user/project HARNESS_IMPL_BACKEND=cursor は、1 件タスクでも local Read/Write/Edit/Bash に fall through してはいけない。

resolver_backend_arg = ""
if explicit_backend_value in ["claude", "codex", "cursor"]:
    resolver_backend_arg = "--backend {explicit_backend_value}"
backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
if explicit_flag == "--cursor":
    backend = "cursor"
if explicit_flag == "--codex":
    backend = "codex"

if topology in ["solo", "parallel"] and backend in ["cursor", "codex"]:
    BASE_REF = git("rev-parse", "HEAD")
    WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
    worktree_path = ".claude/worktrees/{backend}-{WT_ID}"
    worktree_branch = "{backend}-work/{WT_ID}"
    bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
    companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
    if backend == "cursor":
        companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
    else:
        companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
        companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
    latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
    if backend == "cursor" and git("-C", worktree_path, "status", "--porcelain") != "":
        git("-C", worktree_path, "add", "-A")
        git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: delegated change")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
    if latest_commit == BASE_REF:
        raise EscalationError("{backend} companion produced no commit")
    worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
    enter_shared_review_loop(worker_result)
else:
    run_native_solo_or_parallel()

Parallel は task ごとにこの resolver path を適用する。 backend=cursor / codex の場合は native Worker spawn を使わず、task ごとに isolated companion worktree を作成して companion-result.v1 に正規化してから共通 review / cherry-pick loop に入る。

Solo モード(1 件時の自動選択)

  1. Plans.md を読み込み、対象タスクを特定
    • Plans.md が存在しない場合: harness-plan create --ci を自動呼び出し → Plans.md を生成して続行
    • ヘッダーに DoD / Depends カラムがない場合: Plans.md が旧フォーマットです。harness-plan create で再生成してください。停止
    • 会話に未記載タスクがある場合: 直前の会話コンテキストから要件を抽出し、Plans.md に cc:TODO で自動追記
      • 抽出ロジック: ユーザー発言からアクション動詞(「〜を追加」「〜を修正」「〜を実装」)を検出
      • 追記時は v2 フォーマット(Task / 内容 / DoD / Depends / Status)に準拠
      • 追記後、ユーザーに「Plans.md に以下を追記しました」と表示(5 秒タイムアウト付きプロンプト、デフォルト: 続行) 1.5. タスク背景確認(30 秒):
    • タスクの「内容」と「DoD」から 目的(このタスクが解く課題)を 1 行で推論表示
    • git grep / Glob影響範囲(変更が及ぶファイル/モジュール)を推論表示
    • 推論に自信がある場合: そのまま実装に進む(フロー遅延なし)
    • 推論に自信がない場合: ユーザーに 1 問だけ確認(「この理解で合っていますか?」) 1.6. 仕様正本 preflight:
    • 既存の project spec SSOT を探す(例: docs/spec/00-project-spec.md, docs/ARCHITECTURE.md, docs/HANDOFF.md, docs/oem/PROJECT_COMPASS.md, docs/specs/
    • task が product behavior / API / data model / permission / billing / integration / tenant boundary を変える場合、spec がなければ docs/spec/00-project-spec.md を作る
    • spec が古い、または task と矛盾する場合は、実装前に spec を更新する
    • typo / format / dependency bump / docs-only / 動作変更なし refactor は skip 理由を残して続行する
    • Worker / Reviewer へ渡す context には spec_path または spec_skip_reason を含める
  2. タスクを cc:WIP に更新
  3. TDD フェーズ[skip:tdd] なし & テストFW存在時): a. テストファイルを先に作成(Red) b. 失敗を確認 c. bash "${HARNESS_PLUGIN_ROOT}/scripts/log-tdd-red.sh".claude/state/tdd-red-log/<task-id>.jsonl に FAIL 証跡を残す。script が利用できない環境では、literal な failing test output を worker-report の self_review evidence に添付する d. --tdd-bypass を使う場合は、HARNESS_TDD_BYPASS=1HARNESS_TDD_BYPASS_REASON="<理由>" を明示し、TDD を省略した理由を sprint-contract / worker-report に残す
  4. node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" <task-id>sprint-contract.json を生成
  5. Reviewer 観点の追記を bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" で加え、bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" で approved を確認
  6. Advisor consult(必要時のみ):
    • 高リスク task(needs-spike / security-sensitive / state-migration)は、初回実行前に 1 回だけ相談する
    • 同じ原因の失敗が 2 回続いたら、3 回目に入る前に相談する
    • plateau(行き詰まり検知)が PIVOT_REQUIRED を返した時は、ユーザーへ止めて投げる前に 1 回だけ相談する
    • 相談結果は advisor-response.v1 で受け取り、PLAN は進め方の組み替え、CORRECTION は局所修正、STOP は即エスカレーションとして扱う
    • 同じ trigger_hash では 1 回しか相談しない。task ごとの相談回数は最大 3 回
  7. backend-resolved executor path でコードを実装(Green)
    • backend=claude: local / native Read/Write/Edit/Bash path で実装
    • backend=cursor / codex: 上記 companion worktree path で実装し、companion-result.v1 を共通 review loop に渡す
  8. /simplify で Auto-Refinement(--no-simplify で省略可)
  9. 自動レビューステージ(「レビューループ」参照):
    • Codex exec 優先でレビュー実行 → フォールバックで内部 Reviewer agent
    • sprint-contract.jsonreviewer_profileruntime の場合は bash "${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh" を実行
    • REQUEST_CHANGES の場合: 指摘を元に修正→再レビュー(MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    • APPROVE で次ステップへ。self-check だけでは完了を確定しない
  10. bash "${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh" で review artifact を正規化して保存(browser profile は --browser-result を渡し、browser_verdict == PENDING_BROWSER の時は static verdict を採用)
  11. git commit で自動コミット(--no-commit で省略可)
  12. タスクを cc:完了 に更新(commit hash 付与)
  • git log --oneline -1 で直近の commit hash(短縮形 7 文字)を取得
  • Plans.md の Status を cc:完了 [a1b2c3d] 形式で更新
  • commit がない場合(--no-commit 時)は hash なしで cc:完了 のみ
  1. リッチ完了報告(「完了報告フォーマット」参照)
  2. 失敗時の自動再計画(テスト/CI 失敗時のみ):
    • テスト実行結果を確認
    • 失敗した場合: 修正タスク案を state に保存し、承認コマンド経由で Plans.md に追加(「失敗タスクの自動再チケット化」参照)
    • 成功した場合: 次タスクへ進む

Parallel モード(2〜3 件時の自動選択 / --parallel N で強制)

[P] マーク付きタスクを N ワーカーで並列実行。 --parallel N で明示指定した場合は、タスク数に関係なくこのモードを使用。 同一ファイルへの書き込みが競合する場合は git worktree で分離。 各 task の実装 executor は Backend-resolved executor path に従う。 --parallel N --cursor--backend cursor、または default HARNESS_IMPL_BACKEND=cursor の場合、Parallel でも native Worker spawn ではなく task ごとの Cursor companion worktree を使う。

Codex モード(--codex 明示時のみ)

公式プラグイン codex-plugin-cc の companion 経由で Codex CLI にタスクを委託する。

# タスク委託(書き込み可能・worktree 分離)
BASE_REF="$(git rev-parse HEAD)"
WT_ID="codex-$(date +%Y%m%d-%H%M%S)-$$"
WORKTREE_PATH=".claude/worktrees/${WT_ID}"
git worktree add -b "codex-work/${WT_ID}" "$WORKTREE_PATH" "$BASE_REF"
HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH/.claude/state/codex-primary-environment.json" \
  bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH" \
  "タスク内容。完了前にこの worktree で exactly one git commit を作成してください。"

# stdin 経由(大きなプロンプト向け)
CODEX_PROMPT=$(mktemp /tmp/codex-prompt-XXXXXX.md)
# タスク内容を書き出し
cat "$CODEX_PROMPT" | HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH/.claude/state/codex-primary-environment.json" \
  bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH"
rm -f "$CODEX_PROMPT"

# Lead review 後に承認されたら range を取り込む
git -C "$WORKTREE_PATH" diff "$BASE_REF..HEAD"
WORKTREE_HEAD="$(git -C "$WORKTREE_PATH" rev-parse HEAD)"
git cherry-pick --no-commit "$BASE_REF..$WORKTREE_HEAD"

companion は App Server Protocol 経由で Codex と通信し、 Job 管理・thread resume・構造化出力を提供する。 結果を検証し、品質基準を満たさない場合は自力で修正。

Breezing モード(4 件以上で自動選択 / --breezing で強制)

Lead / Worker / Advisor / Reviewer の役割分離でチーム実行する。 Codex host の Breezing は resolver result に従う。配布 plugin のフラグなし fallback は claude なので、 spawn_agent, wait_agent, send_input, close_agent を使った Codex native subagent orchestration が互換既定。 --backend cursor / --cursor、または user/project config の HARNESS_IMPL_BACKEND=cursor がある時だけ cursor-companion.sh で Cursor worker に委託する。 古い TeamCreate / TaskCreate ベースの説明は採らない。

権限ポリシー:

  • 現行の shipped default は bypassPermissions
  • --auto-mode は互換な親セッション向けの opt-in rollout フラグとして扱う
  • permissions.defaultMode や agent frontmatter の permissionMode には未文書化の autoMode 値を書かない

CC v2.1.69+: nested teammates はプラットフォーム側で禁止されるため、 Worker/Reviewer プロンプトには冗長な nested 防止文言を追加しない。

Lead (this agent)
├── Worker (resolver result: Codex native spawn_agent / codex-companion / cursor-companion) — 実装担当
├── Advisor (claude-code-harness:advisor) — 方針助言
└── Reviewer (code-reviewer agent) — レビュー担当

Phase A: Pre-delegate(準備):

  1. Plans.md を読み込み、対象タスクを特定
  2. 依存グラフを解析し、実行順序を決定(Depends カラム)
  3. 各タスクの仕様正本 preflight を行い、必要なら docs/spec/00-project-spec.md または既存 spec を実装前に更新
  4. 各タスクの effort スコアリング(effort tier 判定 — high/xhigh)
  5. node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js"sprint-contract.json を生成
  6. bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" で Reviewer 観点を加え、bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" で未承認なら停止

Phase B: Delegate(Worker spawn → 必要時 Advisor → レビュー → cherry-pick):

各タスクについて以下を逐次実行する(依存順):

API 注記: 以下は Codex native の subagent API 構文で記述する。 backend=claude の時だけ spawn_agent(...), send_input(...), wait_agent(...), close_agent(...) をそのまま使う。 backend=cursor / codex の時は Worker agent を spawn せず、Lead が companion を直接呼ぶ。 Claude Code 向けのサブエージェント構文やメッセージ送信構文は混ぜない。

for task in execution_order:
    # B-0. backend 解決(配布 fallback は claude、user/project default で cursor 可)
    resolver_backend_arg = ""
    if explicit_backend_value in ["claude", "codex", "cursor"]:
        resolver_backend_arg = "--backend {explicit_backend_value}"
    backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
    if explicit_flag == "--cursor":
        backend = "cursor"
    if explicit_flag == "--codex":
        backend = "codex"

    # B-1. sprint-contract を生成
    contract_path = bash("node \"${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js\" {task.number}")
    contract_path = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh\" {contract_path} --check \"DoD を reviewer 観点で確認\" --approve")
    bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh\" {contract_path}")

    # B-2. Worker 委託(worktree 分離)
    Plans.md: task.status = "cc:WIP"  # 着手時に更新(未着手タスクは cc:TODO のまま)

    if backend == "cursor":
        BASE_REF = git("rev-parse", "HEAD")
        WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
        worktree_path = ".claude/worktrees/cursor-{WT_ID}"
        worktree_branch = "cursor-work/{WT_ID}"
        bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
        print("🚀 cursor / $(bash \"${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh\" --host cursor --role worker --field model) / {branch} / {task.number}")
        companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
        companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if git("-C", worktree_path, "status", "--porcelain") != "":
            git("-C", worktree_path, "add", "-A")
            git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: delegated change")
            latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if latest_commit == BASE_REF:
            raise EscalationError("cursor companion produced no commit")
        worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
        worker_id = null
    elif backend == "codex":
        BASE_REF = git("rev-parse", "HEAD")
        WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
        worktree_path = ".claude/worktrees/codex-{WT_ID}"
        worktree_branch = "codex-work/{WT_ID}"
        bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
        companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
        companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
        companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if latest_commit == BASE_REF:
            raise EscalationError("codex companion produced no commit")
        worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
        worker_id = null
    else:
        print("🚀 claude / native-subagent / {branch} / {task.number}")
        worker_id = spawn_agent({
            message: "タスク: {task.内容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\nspec_path: {spec_path}\nspec_skip_reason: {spec_skip_reason}\nmode: breezing\n\n作業は分離 worktree で行い、完了後に git commit してください。\n完了時は {commit, worktreePath, branch, files_changed, summary} を返してください。",
            fork_context: true
        })
        worker_result = wait_agent({ targets: [worker_id] })
    # worker_result には {commit, worktreePath, branch, files_changed, summary} が含まれる
    # backend=cursor/codex では Lead が companion stdout を companion-result.v1 に正規化する。

    # B-3. Worker が advice request を返した時だけ、Lead が Advisor を呼ぶ
    if backend == "claude" and worker_result.type == "advisor-request.v1":
        advisor_id = spawn_agent({
            message: worker_result.request_json,
            agent_type: "default",
            fork_context: true
        })
        advisor_result = wait_agent({ targets: [advisor_id] })
        close_agent({ target: advisor_id })
        send_input({
            target: worker_id,
            message: "advisor-response.v1: {advisor_result}"
        })
        worker_result = wait_agent({ targets: [worker_id] })

    # B-4. Lead がレビュー実行(Codex exec 優先)
    if backend == "claude":
        diff_text = git("-C", worker_result.worktreePath, "show", worker_result.commit)
    else:
        diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
    verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
    profile = jq(contract_path, ".review.reviewer_profile")
    review_input = "review-output.json"
    if profile == "runtime":
        review_input = bash("cd {worker_result.worktreePath} && bash \"${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh\" {contract_path}")
        runtime_verdict = jq(review_input, ".verdict")
        if runtime_verdict == "REQUEST_CHANGES":
            verdict = "REQUEST_CHANGES"
        elif runtime_verdict == "DOWNGRADE_TO_STATIC":
            pass  # runtime 検証コマンドなし → static verdict をそのまま使う
    browser_result = ""
    if profile == "browser":
        # browser artifact から route / browser_mode / execution_instructions を再利用して browser runner を起動する。
        browser_artifact = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/generate-browser-review-artifact.sh\" {contract_path}")
        browser_result = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/browser-review-runner.sh\" {browser_artifact}")
        browser_verdict = jq(browser_result, ".browser_verdict")
        if browser_verdict == "REQUEST_CHANGES":
            verdict = "REQUEST_CHANGES"
        elif browser_verdict == "APPROVE" and verdict != "REQUEST_CHANGES":
            verdict = "APPROVE"
        # browser_verdict == PENDING_BROWSER のときは static verdict を維持する
    # review_input が DOWNGRADE_TO_STATIC の場合は static review 結果を使う
    if review_input != "review-output.json" and jq(review_input, ".verdict") == "DOWNGRADE_TO_STATIC":
        review_input = "review-output.json"  # static review の結果にフォールバック
    bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh\" {review_input} {latest_commit} --browser-result {browser_result}")

    # B-5. 修正ループ(REQUEST_CHANGES 時、contract の max_iterations まで)
    review_count = 0
    # sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
    MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    latest_commit = worker_result.commit
    while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
        if backend == "claude":
            send_input({
                target: worker_id,
                message: "指摘内容: {issues}\n修正して amend してください"
            })
            # Worker が修正 → amend → 更新された commit hash を返す
            updated_result = wait_agent({ targets: [worker_id] })
            latest_commit = updated_result.commit
        elif backend == "cursor":
            previous_commit = latest_commit
            companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
            latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
            if git("-C", worker_result.worktreePath, "status", "--porcelain") != "":
                git("-C", worker_result.worktreePath, "add", "-A")
                git("-C", worker_result.worktreePath, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: review fix")
                latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
            if latest_commit == previous_commit:
                raise EscalationError("cursor companion retry produced no new commit")
            worker_result.commit = latest_commit
            worker_result.summary = companion_output
        else:
            previous_commit = latest_commit
            companion_state_file = "{worker_result.worktreePath}/.claude/state/codex-primary-environment.json"
            companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
            latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
            if latest_commit == previous_commit:
                raise EscalationError("codex companion retry produced no new commit")
            worker_result.commit = latest_commit
            worker_result.summary = companion_output
        if backend == "claude":
            diff_text = git("-C", worker_result.worktreePath, "show", latest_commit)
        else:
            diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
        verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
        review_count++

    # B-6. Worker 終了
    if backend == "claude":
        close_agent({ target: worker_id })

    # B-7. APPROVE → trunk に cherry-pick(feature ブランチ経由)
    # Worker の Branch Guard により trunk HEAD は動かず、commit は feature ブランチ上にある想定
    if verdict == "APPROVE":
        TRUNK=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' || echo "main")
        git checkout "$TRUNK"  # safety: 既に trunk なら no-op
        # feature ブランチの commit が既に trunk にある(Branch Guard 失敗時のフォールバック)か確認
        if git("merge-base", "--is-ancestor", latest_commit, "HEAD"):
            pass  # 既に trunk 上 — cherry-pick 不要(再入防止)
        else:
            if backend == "claude":
                git cherry-pick --no-commit {latest_commit}  # feature branch → trunk
            else:
                git cherry-pick --no-commit {worker_result.baseCommit}..{latest_commit}  # companion range → trunk
            git commit -m "{task.内容}"
        # Worker の worktree を remove してから feature ブランチを削除
        if worker_result.worktreePath:
            git worktree remove {worker_result.worktreePath} --force
        if worker_result.branch and worker_result.branch not in ["main", "master"] and worker_result.branch != TRUNK:
            git branch -D {worker_result.branch}
        Plans.md: task.status = "cc:完了 [{hash}]"
        # auto-checkpoint 記録(冪等性ガード (c))
        # Plans.md 書き換え直後に呼ぶ。失敗しても fail-open(|| true)でループを止めない
        HASH=$(git rev-parse --short HEAD)
        REVIEW_RESULT_PATH=".claude/state/review-results/${task.number}.review-result.json"
        bash "${HARNESS_PLUGIN_ROOT}/scripts/auto-checkpoint.sh" \
            "${task.number}" "${HASH}" "${contract_path}" "${REVIEW_RESULT_PATH}" \
            || true  # fail-open: harness-mem 未起動環境でも継続
    else:
        → ユーザーにエスカレーション

    # B-8. Progress feed
    print("📊 Progress: Task {completed}/{total} 完了 — {task.内容}")

Advisor Protocol(全モード共通)

Advisor は「実装者」でも「レビュー担当」でもない。 迷った時だけ、実行役が次の一歩を決めるための相談役として入る。

  1. Worker は generic な subagent を増やさず、必要時だけ advisor-request.v1 を返す
  2. Lead が advisor を 1 回だけ呼ぶ
  3. Advisor は PLAN / CORRECTION / STOP のどれかを返す
  4. Lead はその advice を同じ Worker に返して続行させる
  5. Reviewer は最後の成果物だけを見る。advisor の返答に APPROVE / REQUEST_CHANGES を出さない

Solo モードでの Advisor

solo 実行では親セッション自身が Lead を兼ねる。 つまり「自分で実装し、自分で advisor に相談し、最後は独立レビューに回す」形になる。

  • 相談条件は loop / breezing と同じ
  • 相談 budget も task ごとに最大 3 回で同じ
  • STOP はその場で止まり、ユーザー判断へ上げる
  • review artifact の gate は飛ばさない

Sprint Contract

sprint-contract は「このタスクを何で合格にするか」を機械でも人でも同じ意味で読める形にする小さな契約ファイルです。 既定の保存先は .claude/state/contracts/<task-id>.sprint-contract.json です。

node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" 32.1.1

生成物には次を含めます。

  • checks: DoD を分解した確認項目
  • non_goals: 今回やらないこと
  • runtime_validation: test, lint, typecheck などの検証コマンド
  • browser_validation: browser reviewer が残すべき UI フロー検証項目
  • browser_mode: scripted または exploratory
  • route: browser reviewer が playwright / agent-browser / chrome-devtools のどれを使うか
  • risk_flags: needs-spike, security-sensitive, ux-regression など
  • reviewer_profile: static, runtime, browser

Phase C: Post-delegate(統合・報告):

  1. 全タスクの commit log を集計
  2. リッチ完了報告(「完了報告フォーマット」の Breezing テンプレート)を出力
  3. Plans.md の最終確認(全タスク cc:完了 になっているか)

CI 失敗時の対応

CI が失敗した場合:

  1. ログを確認してエラーを特定
  2. 修正を実施
  3. 同一原因で 3 回失敗したら自動修正ループを停止
  4. 失敗ログ・試みた修正・残る論点をまとめてエスカレーション

失敗タスクの自動再チケット化

タスク完了後にテスト/CI が失敗した場合、修正タスク案を自動生成し、承認後に Plans.md へ反映する:

トリガー条件

条件 アクション
cc:完了 後にテスト失敗 修正タスク案を state に保存し、承認を待つ
CI 失敗(3回未満) 修正を実施し、失敗カウントをインクリメント
CI 失敗(3回目) 修正タスク案を提示 + エスカレーション

修正タスクの自動生成

  1. 失敗原因を分類(syntax_error / import_error / type_error / assertion_error / timeout / runtime_error)
  2. .claude/state/pending-fix-proposals.jsonl に修正タスク案を保存:
    • 番号: 元タスク番号 + .fix サフィックス(例: 26.1.fix
    • 内容: fix: [元タスク名] - [失敗原因カテゴリ]
    • DoD: テスト/CI が通ること
    • Depends: 元タスク番号
  3. ユーザーが approve fix <task_id> を送ると Plans.md に cc:TODO で追加
  4. reject fix <task_id> で提案を破棄。pending が1件だけのときは yes / no でも応答可能

レビューループ

実装完了後(ステップ 5 の後)に自動実行される品質検証ステージ。 全モード共通(Solo / Parallel / Breezing)で統一的に適用される。 Parallel モードでは各 Worker が step 10(外部レビュー受付)として同じループを実行する。

レビュー実行の優先順位

1. Codex exec(優先)
   ↓ codex コマンドが存在しない or タイムアウト(120s)
2. 内部 Reviewer agent(フォールバック)

APPROVE / REQUEST_CHANGES の判定基準

レビュアーには以下の閾値基準を渡し、この基準のみで verdict を判定させる。 基準外の改善提案は recommendations として返すが、verdict には影響しない。

重要度 定義 verdict への影響
critical セキュリティ脆弱性、データ損失リスク、本番障害の可能性 1 件でも → REQUEST_CHANGES
major 既存機能の破壊、仕様との明確な矛盾、テスト不通過 1 件でも → REQUEST_CHANGES
minor 命名改善、コメント不足、スタイル不統一 verdict に影響しない
recommendation ベストプラクティス提案、将来の改善案 verdict に影響しない

重要: minor / recommendation のみの場合は 必ず APPROVE を返すこと。 「あったほうが良い改善」は REQUEST_CHANGES の理由にならない。

Codex exec レビュー(公式プラグイン経由)

タスク開始時の HEAD を BASE_REF として保持し、その ref との差分をレビュー対象にする。 公式プラグイン codex-plugin-cc の companion review を使用する。

# タスク開始時に base ref を記録(Step 2 の cc:WIP 更新前に実行)
BASE_REF=$(git rev-parse HEAD)

# ... 実装完了後 ...

# 公式プラグインの構造化レビューを実行
bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" review --base "${BASE_REF}"
REVIEW_EXIT=$?

verdict マッピング(公式プラグイン → Harness 形式):

公式プラグインは review-output.schema.json 準拠の構造化出力を返す。 Harness の verdict 形式への変換ルール:

公式 plugin Harness verdict 影響
approve APPROVE -
needs-attention REQUEST_CHANGES -
findings[].severity: critical critical_issues[] 1件でも → REQUEST_CHANGES
findings[].severity: high major_issues[] 1件でも → REQUEST_CHANGES
findings[].severity: medium/low recommendations[] verdict に影響しない

AI Residuals スキャンは引き続き bash "${HARNESS_PLUGIN_ROOT}/scripts/review-ai-residuals.sh" で実行し、 companion review の結果と合わせて最終 verdict を判定する。

# AI Residuals スキャン(companion review と並行実行可能)
AI_RESIDUALS_JSON="$(bash "${HARNESS_PLUGIN_ROOT}/scripts/review-ai-residuals.sh" --base-ref "${BASE_REF}" 2>/dev/null || echo '{"tool":"review-ai-residuals","scan_mode":"diff","base_ref":null,"files_scanned":[],"summary":{"verdict":"APPROVE","major":0,"minor":0,"recommendation":0,"total":0},"observations":[]}')"

内部 Reviewer agent フォールバック

Codex exec が使えない場合(command -v codex が失敗、または exit code ≠ 0):

Agent tool: subagent_type="reviewer"
prompt: "以下の変更をレビューしてください。判定基準: critical/major → REQUEST_CHANGES、minor/recommendation のみ → APPROVE。diff: {git diff ${BASE_REF}}"

Reviewer agent は Read-only(Write/Edit/Bash 無効)で安全にレビューを実行する。

修正ループ(REQUEST_CHANGES 時)

review_count = 0
# sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
contract_path = get_sprint_contract_path()  # 例: .claude/state/contracts/<task-id>.sprint-contract.json
MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3

while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
    1. レビュー指摘を解析(critical / major のみ対象)
    2. 各指摘に対して修正を実装
    3. 再度レビューを実行(同じ判定基準・同じ優先順位)
    review_count++

if review_count >= MAX_REVIEWS and verdict != "APPROVE":
    → ユーザーにエスカレーション
    → 「MAX_REVIEWS 回修正しましたが以下の critical/major 指摘が残っています」+ 指摘一覧を表示
    → ユーザー判断を待つ(続行 / 中断)

Breezing モードでの適用

Breezing モードでは Lead がレビューループを実行する(上記 Phase B 参照):

  1. Worker が worktree 内で実装・commit → Lead に結果返却
  2. Lead が Codex exec でレビュー(優先)/ Reviewer agent(フォールバック)
  3. REQUEST_CHANGES → Lead が send_input で Worker に修正指示し、wait_agent で再応答を待つ → Worker が amend
  4. 修正後、再レビュー(MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3 回まで)
  5. APPROVE → Lead が trunk(デフォルトブランチ)に cherry-pick → Plans.md を cc:完了 [{hash}] に更新

完了報告フォーマット

タスク完了時(cc:完了 + commit 後)に自動出力される視覚的サマリ。 非専門家にも変更内容と影響が伝わることを目的とする。

テンプレート

┌─────────────────────────────────────────────┐
│  ✓ Task {N} 完了: {タスク名}                    │
├─────────────────────────────────────────────┤
│                                              │
│  ■ 何をしたか                                 │
│    • {変更内容 1}                              │
│    • {変更内容 2}                              │
│                                              │
│  ■ 何が変わるか                                │
│    Before: {旧動作}                            │
│    After:  {新動作}                            │
│                                              │
│  ■ 変更ファイル ({N} files)                    │
│    {ファイルパス 1}                             │
│    {ファイルパス 2}                             │
│                                              │
│  ■ 残りの課題                                  │
│    • Task {X} ({status}): {内容}  ← Plans.md  │
│    • Task {Y} ({status}): {内容}  ← Plans.md  │
│    (Plans.md に {M} 件の未完了タスクあり)       │
│                                              │
│  commit: {hash} | review: {APPROVE}           │
└─────────────────────────────────────────────┘

生成ルール

  1. 何をしたか: git diff --stat HEAD~1 と commit message から自動抽出。技術用語は最小限にし、動詞で始める
  2. 何が変わるか: タスクの「内容」と「DoD」から Before/After を推論。ユーザー体験の変化を重視
  3. 変更ファイル: git diff --name-only HEAD~1 から取得。5 ファイル超は省略して件数表示
  4. 残りの課題: Plans.md の cc:TODO / cc:WIP タスクを一覧表示。Plans.md に記載済みかどうかを明示
  5. review: レビュー結果(APPROVE / REQUEST_CHANGES → APPROVE)を表示

Parallel モードでの報告

  • 1 タスク--parallel 強制時): Solo テンプレートを使用
  • 複数タスク: Breezing 集約テンプレートを使用(下記参照)

Breezing モードでの報告

全タスク完了後にまとめて出力。各タスクは簡略版(何をしたか + commit hash のみ)で一覧し、 最後に全体サマリ(合計変更ファイル数 + 残り課題)を出力する:

┌─────────────────────────────────────────────┐
│  ✓ Breezing 完了: {N}/{M} タスク             │
├─────────────────────────────────────────────┤
│                                              │
│  1. ✓ {タスク名 1}            [{hash1}]      │
│  2. ✓ {タスク名 2}            [{hash2}]      │
│  3. ✓ {タスク名 3}            [{hash3}]      │
│                                              │
│  ■ 全体の変更                                 │
│    {N} files changed, {A} insertions(+),     │
│    {D} deletions(-)                          │
│                                              │
│  ■ 残りの課題                                  │
│    Plans.md に {K} 件の未完了タスクあり         │
│    • Task {X}: {内容}                         │
│                                              │
└─────────────────────────────────────────────┘

関連スキル

  • harness-plan — 実行するタスクを計画する
  • harness-sync — 実装と Plans.md を同期する
  • harness-review — 実装のレビュー
  • harness-release — バージョンバンプ・リリース
用于整理和维护项目文件,包括归档Plans.md中的已完成任务、分割session-log日志、清理过期日志及压缩状态文件。执行前需确保关键信息已同步至SSOT,并遵循安全操作规范,防止误删进行中任务或重要数据。
用户输入/maintenance, cleanup, archive, organize, split session-log等指令 auto-cleanup-hook检测到文件行数超限并发出警告时
codex/.codex/skills/maintenance/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill maintenance -g -y
SKILL.md
Frontmatter
{
    "name": "maintenance",
    "effort": "low",
    "description": "File cleanup and archiving. Tidies up bloated Plans.md, session-log.md, old logs, and state files. Trigger: \/maintenance, cleanup, archive, organize, split session-log. Do NOT load for: implementation, review, release, new feature development.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Grep",
        "Glob",
        "Bash"
    ],
    "argument-hint": "[plans|session-log|logs|state|all] [--dry-run]",
    "description-en": "File cleanup and archiving. Tidies up bloated Plans.md, session-log.md, old logs, and state files. Trigger: \/maintenance, cleanup, archive, organize, split session-log. Do NOT load for: implementation, review, release, new feature development.",
    "description-ja": "ファイル整理・アーカイブ・ログ圧縮を担当。散らかった Plans.md \/ session-log.md \/ 古いログ \/ state ファイルを整頓する。`\/maintenance`, メンテ, 整理して, アーカイブして, 古いタスク移動, session-log 分割, ログ掃除 で起動。実装・レビュー・リリース・新機能開発には使わない。",
    "user-invocable": true
}

Maintenance

散らかったファイルを整頓する単一目的スキル。auto-cleanup-hook が警告を出した時、 または定期的な家事として呼び出す。

前提: 破壊的操作(アーカイブ移動・行削除)の前に Plans.md / session-log.md の 重要情報が SSOT (decisions.md / patterns.md) に昇格済みか確認する。 未同期なら /memory sync を先に走らせる。

Quick Reference

サブコマンド 対象 典型トリガー
maintenance plans Plans.md 完了タスクのアーカイブ移動 「Plans.md 整理」「古いタスクを移動」
maintenance session-log session-log.md の月別分割 「session-log 分割」「ログが長い」
maintenance logs .claude/logs/ の古いファイル削除 「ログ掃除」「30日以上前のログ消して」
maintenance state agent-trace.jsonl / harness-usage.json のトリム 「trace 肥大」「state 圧縮」
maintenance all 上記4つを順に実行 「全部整理」「総掃除」

--dry-run を付けると何をするかだけ列挙して実行しない。自由記述の指示(例: 「古いアーカイブも消して」「この session-log だけ残して」)は Step 1 で 受け付けて Step 2 以降の処理パラメータに反映する。

実行手順

  1. ユーザー指示のパース: サブコマンド + 自由記述(除外対象、保存先、日数閾値)を抽出
  2. SSOT 同期チェック: .claude/state/.ssot-synced-this-session が無ければ /memory sync を促す(Plans.md を触る場合のみ必須)
  3. 参照ファイルを開く: ${CLAUDE_SKILL_DIR}/references/cleanup.md を読み対応セクションを実行
  4. Before/After を報告: 行数と削除件数を表示して完了

サブコマンド詳細

対象ごとの実行手順・閾値・アーカイブ先は cleanup.md を参照。

auto-cleanup-hook との連携

PostToolUse hook (scripts/auto-cleanup-hook.sh / Go 版 auto_cleanup_hook.go) は Plans.md・session-log.md・CLAUDE.md の行数超過を検知すると /maintenance で古いタスクをアーカイブすることを推奨します と feedback を返す。 この警告を見たら該当サブコマンドを実行する。

注意事項

  • 進行中タスクは動かさない: cc:WIP, pm:依頼中, cursor:依頼中 はアーカイブ対象外
  • アーカイブ先ディレクトリは固定: .claude/memory/archive/ — 別の場所に移すときは ユーザーに確認する
  • バックアップ: 200 行超のファイルを編集する前に cp <file> <file>.bak.$(date +%s) で ローカルバックアップを取る
  • CLAUDE.md は警告のみ: 自動編集しない。分割提案だけ出す

関連スキル

  • memory — Plans.md 整理前の SSOT 昇格(decisions.md / patterns.md 更新)
  • harness-setup — セットアップ直後の定期メンテは harness-setup 経由でも呼べる
  • session-init — セッション開始時のメンテ推奨通知を制御
负责SSOT与记忆管理,包括初始化、计划合并及项目同步。优先使用harness_mem工具进行跨工具记录与搜索,支持将关键决策从自动内存晋升至SSOT,确保项目知识的一致性与持久化。
memory SSOT decisions.md patterns.md harness-mem memory search
codex/.codex/skills/memory/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill memory -g -y
SKILL.md
Frontmatter
{
    "name": "memory",
    "context": "fork",
    "description": "SSOT\/memory + cross-tool search. Guards decisions.md, patterns.md. Triggers: memory, SSOT, decisions.md, patterns.md, harness-mem, memory search. Skip for: implementation, review.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "mcp__harness__harness_mem_*"
    ],
    "argument-hint": "[ssot|sync|migrate|search|record]",
    "description-en": "SSOT\/memory + cross-tool search. Guards decisions.md, patterns.md. Triggers: memory, SSOT, decisions.md, patterns.md, harness-mem, memory search. Skip for: implementation, review.",
    "description-ja": "SSOTと記憶を管理し、ツール横断の記憶検索を提供。decisions.mdとpatterns.mdの守護者です。Use when user mentions memory, SSOT, decisions.md, patterns.md, merging, migration, SSOT promotion, sync memory, save learnings, memory search, harness-mem, past decisions, or record this. Do NOT load for: implementation work, reviews, ad-hoc notes, or in-session logging.",
    "user-invocable": true
}

Memory Skills

メモリとSSOT管理を担当するスキル群です。

機能詳細

機能 詳細
SSOT初期化 See references/ssot-initialization.md
Plans.mdマージ See references/plans-merging.md
移行処理 See references/workflow-migration.md
プロジェクト仕様同期 See references/sync-project-specs.md
メモリ→SSOT昇格 See references/sync-ssot-from-memory.md

Unified Harness Memory(共通DB)

Claude Code / Codex / OpenCode 共通の記録・検索は harness_mem_* MCP を優先する。

  • 検索: harness_mem_search, harness_mem_timeline, harness_mem_get_observations
  • 注入: harness_mem_resume_pack
  • 記録: harness_mem_record_checkpoint, harness_mem_finalize_session, harness_mem_record_event

Claude Code 自動メモリとの関係(D22)

Harness の SSOT メモリ(Layer 2)は Claude Code の自動メモリ(Layer 1)と共存します。 自動メモリは汎用的な学習を暗黙的に記録し、SSOT はプロジェクト固有の意思決定を明示的に管理します。 Layer 1 の知見がプロジェクト全体に重要な場合、/memory ssot で Layer 2 に昇格してください。

詳細: D22: 3層メモリアーキテクチャ

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容に従って実行

SSOT昇格

メモリシステム(Claude-mem / Serena)から重要な学びをSSOTに永続化します。

用于生成NotebookLM YAML和演示文稿文档的技能。根据用户请求分类并参考特定文件进行内容创建,支持通过指定页面范围高效处理大型PDF以优化Token消耗和处理速度。
提到 NotebookLM 需要生成 YAML 制作幻灯片或演示文稿
codex/.codex/skills/notebookLM/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill notebookLM -g -y
SKILL.md
Frontmatter
{
    "name": "notebookLM",
    "description": "Generate NotebookLM YAML and slides. Document craftsman shows skill. Use when user mentions NotebookLM, YAML, slides, or presentations. Do NOT load for: implementation work, code fixes, reviews, or deployments.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit"
    ],
    "argument-hint": "[yaml|slides]",
    "description-en": "Generate NotebookLM YAML and slides. Document craftsman shows skill. Use when user mentions NotebookLM, YAML, slides, or presentations. Do NOT load for: implementation work, code fixes, reviews, or deployments.",
    "description-ja": "NotebookLM用YAMLやスライドを生成。ドキュメント職人の腕の見せ所。Use when user mentions NotebookLM, YAML, slides, or presentations. Do NOT load for: implementation work, code fixes, reviews, or deployments.",
    "user-invocable": false,
    "disable-model-invocation": true
}

NotebookLM Skill

ドキュメント生成を担当するスキル群です。

機能詳細

機能 詳細
NotebookLM YAML See references/notebooklm-yaml.md
スライド YAML See references/notebooklm-slides.md

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容に従って生成

🔧 PDF ページ範囲読み取り(Claude Code 2.1.49+)

大型 PDF を効率的に扱うための機能です。

ページ範囲指定で読み取り

// ページ範囲指定で読み取り
Read({ file_path: "docs/spec.pdf", pages: "1-10" })

// 目次だけ確認
Read({ file_path: "docs/manual.pdf", pages: "1-3" })

// 特定のセクションのみ
Read({ file_path: "docs/api-reference.pdf", pages: "25-45" })

ユースケース別の推奨アプローチ

ケース 推奨読み取り方法 理由
100ページ超のPDF 目次(1-3) → 関連章のみ トークン消費を最小化
仕様書レビュー セクション単位で範囲指定 必要な部分のみ精読
APIドキュメント エンドポイント一覧(目次)から開始 全体構造を把握してから詳細へ
学術論文 Abstract + 結論 → 本文 要点を先に把握
技術マニュアル 目次 + トラブルシューティング章 実用的な部分を優先

NotebookLM YAML 生成時の活用例

大型PDF(300ページの技術仕様書)からYAMLを生成する場合:

1. **目次を読む**(1-5ページ)
   Read({ file_path: "spec.pdf", pages: "1-5" })
   → 章立てを把握

2. **各章の冒頭を読む**(各章の最初の2ページ)
   Read({ file_path: "spec.pdf", pages: "10-11" })  // 第1章
   Read({ file_path: "spec.pdf", pages: "45-46" })  // 第2章
   → 各章の概要を把握

3. **重要セクションを精読**
   Read({ file_path: "spec.pdf", pages: "78-95" })  // APIリファレンス
   → 詳細な内容を抽出

この方法で、300ページすべてを読むことなく効率的にYAMLを生成できます。

ベストプラクティス

原則 説明
段階的読み込み 目次 → 概要 → 詳細の順に読む
関連ページのみ タスクに必要なページだけ指定
トークン節約 全ページ読み込みは最終手段
構造理解優先 目次で全体像を把握してから詳細へ

従来の方法との比較

方法 トークン消費 処理時間 精度
全ページ読み込み(300ページ) ~150,000 長い
ページ範囲指定(必要な30ページ) ~15,000 短い

90%のトークン削減と処理時間短縮が可能

提供开发原则、安全指南及差异感知编辑规则。用于分类用户请求并加载对应参考文件(如基本原则、上下文读取等),指导代码修改与规范执行,不适用于实现或审查任务。
需要遵循特定开发原则时 进行差异感知的代码编辑时 需要读取仓库上下文信息时
codex/.codex/skills/principles/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill principles -g -y
SKILL.md
Frontmatter
{
    "name": "principles",
    "description": "Explicit helper for development principles, safety guidelines, and diff-aware editing rules. Do NOT load for: implementation, review, workflow coaching, or VibeCoder onboarding.",
    "allowed-tools": [
        "Read"
    ],
    "description-en": "Explicit helper for development principles, safety guidelines, and diff-aware editing rules. Do NOT load for: implementation, review, workflow coaching, or VibeCoder onboarding.",
    "description-ja": "開発原則、安全ガイドライン、差分尊重の編集ルールを確認する明示補助スキル。実装、レビュー、進め方相談、VibeCoder案内には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Principles Skills

開発原則とガイドラインを提供するスキル群です。

機能詳細

機能 詳細
基本原則 See references/general-principles.md
差分編集 See references/diff-aware-editing.md
コンテキスト読み取り See references/repo-context-reading.md
VibeCoder See references/vibecoder-guide.md

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容を参照・適用
用于/work命令内部工作流,根据--resume或--fork标志控制会话的恢复或分叉。通过执行脚本更新session.json和session.events.jsonl文件。严禁用于用户会话管理、登录状态或应用状态处理。
/work命令带有--resume参数 /work命令带有--fork参数
codex/.codex/skills/session-control/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-control -g -y
SKILL.md
Frontmatter
{
    "name": "session-control",
    "description": "Controls session resume\/fork(branch) for \/work based on --resume\/--fork flags. Updates session.json and session.events.jsonl. Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Write",
        "Edit"
    ],
    "description-en": "Controls session resume\/fork(branch) for \/work based on --resume\/--fork flags. Updates session.json and session.events.jsonl. Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "description-ja": "\/work のセッション resume\/fork(branch) を --resume\/--fork フラグに基づいて制御。session.json と session.events.jsonl を更新する内部ワークフロー専用スキル。Do NOT load for: user session management, login state, app state handling.",
    "user-invocable": false,
    "disable-model-invocation": true
}

Session Control Skill

/work の --resume / --fork フラグに応じてセッション状態を切り替える。

機能詳細

機能 詳細
セッション再開/分岐 See references/session-control.md

実行手順

  1. workflow から渡された変数を確認
  2. scripts/session-control.sh を適切な引数で実行
  3. session.jsonsession.events.jsonl の更新を確認
会话初始化技能,用于启动时自动检查Git状态、Plans.md任务进度及AGENTS.md规则。通过统一记忆包恢复上下文,生成包含优先任务和注意事项的简报,确保工作无缝衔接。
会话开始 作业开始 今日の作業を始める start session what should I work on? 状況を確認して
codex/.codex/skills/session-init/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-init -g -y
SKILL.md
Frontmatter
{
    "name": "session-init",
    "description": "Internal sub-skill for session startup checks, Plans.md status, git state, and harness-mem resume pack. Invoked by session\/startup workflows only. Do NOT load for: implementation, reviews, or mid-session tasks.",
    "allowed-tools": [
        "Read",
        "Write",
        "Bash",
        "mcp__harness__harness_mem_resume_pack",
        "mcp__harness__harness_mem_sessions_list",
        "mcp__harness__harness_mem_health"
    ],
    "description-en": "Internal sub-skill for session startup checks, Plans.md status, git state, and harness-mem resume pack. Invoked by session\/startup workflows only. Do NOT load for: implementation, reviews, or mid-session tasks.",
    "description-ja": "セッション開始時の環境確認、Plans.md 状況、git状態、harness-mem resume pack を扱う内部サブスキル。session\/startup 系からのみ呼ぶ。実装、レビュー、途中作業には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Session Init Skill

セッション開始時の環境確認と現在のタスク状況把握を行うスキル。


呼び出し条件

このスキルは session / SessionStart 系フローから内部的に呼び出します。 ユーザー向けの入口は /session または通常のセッション開始フローです。

旧トリガーフレーズ:

  • 「セッション開始」
  • 「作業開始」
  • 「今日の作業を始める」
  • 「状況を確認して」
  • 「何をすればいい?」
  • "start session"
  • "what should I work on?"

概要

Session Init スキルは、Claude Code セッション開始時に自動的に以下を確認します:

  1. Git 状態: 現在のブランチ、未コミットの変更
  2. Plans.md: 進行中タスク、依頼されたタスク
  3. AGENTS.md: 役割分担、禁止事項の確認
  4. 前回セッション: 引き継ぎ事項の確認
  5. 最新 snapshot: 進捗スナップショットの要約と前回差分

実行手順

Step 0: ファイル状態チェック(自動整理)

セッション開始前にファイルサイズをチェック:

# Plans.md の行数チェック
if [ -f "Plans.md" ]; then
  lines=$(wc -l < Plans.md)
  if [ "$lines" -gt 200 ]; then
    echo "⚠️ Plans.md が ${lines} 行です。「整理して」で整理を推奨"
  fi
fi

# session-log.md の行数チェック
if [ -f ".claude/memory/session-log.md" ]; then
  lines=$(wc -l < .claude/memory/session-log.md)
  if [ "$lines" -gt 500 ]; then
    echo "⚠️ session-log.md が ${lines} 行です。「セッションログを整理して」で整理を推奨"
  fi
fi

整理が必要な場合は提案を表示(作業には影響しない)。

Step 0.5: 旧ローカルメモリ互換の扱い(任意)

現在の標準は Step 0.7 の Unified Harness Memory です。 旧ローカルメモリ互換の確認は原則不要で、特別な移行確認が必要な場合だけ個別に参照します。

: 通常運用ではこのステップをスキップし、共通DB の Resume Pack を唯一の再開導線として扱います。

Step 0.7: Unified Harness Memory Resume Pack(必須)

Codex / Claude / OpenCode 共通DB(~/.harness-mem/harness-mem.db)から再開文脈を取得する。

必須呼び出し:

harness_mem_resume_pack(project, session_id?, limit=5, include_private=false)

運用ルール:

  • project は必ず現在プロジェクト名を指定
  • session_id$CLAUDE_SESSION_ID.claude/state/session.json.session_id の順で取得する
  • harness_mem_sessions_list(project, limit=1) の先頭利用は read-only(resume確認)に限定し、record_checkpoint / finalize_session での書き込みには使わない
  • 取得結果はセッション開始時コンテキストに注入
  • 取得失敗時は harness_mem_health() で daemon 状態を確認し、失敗を明示して続行
  • 復旧は scripts/harness-memd doctorscripts/harness-memd cleanup-stalescripts/harness-memd start の順で行う

Step 1: 環境確認

以下を並列で実行:

# Git状態
git status -sb
git log --oneline -3
# Plans.md
cat Plans.md 2>/dev/null || echo "Plans.md not found"
# AGENTS.md の要点
head -50 AGENTS.md 2>/dev/null || echo "AGENTS.md not found"

Step 2: タスク状況の把握

Plans.md から以下を抽出:

  • cc:WIP - 前回から継続中のタスク
  • pm:依頼中 - PM から新規依頼されたタスク(互換: cursor:依頼中)
  • cc:TODO - 未着手だが割り当て済みのタスク

Step 3: 状況レポートの出力

## 🚀 セッション開始

**日時**: {{YYYY-MM-DD HH:MM}}
**ブランチ**: {{branch}}
**セッションID**: ${CLAUDE_SESSION_ID}

---

### 📋 今日のタスク

**優先タスク**:
- {{pm:依頼中(互換: cursor:依頼中) または cc:WIP のタスク}}

**その他のタスク**:
- {{cc:TODO のタスク一覧}}

---

### ⚠️ 注意事項

{{AGENTS.md からの重要な制約・禁止事項}}

---

**作業を開始しますか?**

出力フォーマット

セッション開始時は、以下の情報を簡潔に提示:

項目 内容
現在のブランチ staging など
優先タスク 最も重要な 1-2 件
注意事項 禁止事項の要約
次のアクション 具体的な提案

関連コマンド

  • /work - タスク実行(並列実行対応)
  • /sync-status - Plans.md の進捗サマリー
  • /maintenance - ファイルの自動整理

注意事項

  • AGENTS.md を必ず確認: 役割分担を把握してから作業開始
  • Plans.md が無い場合: /harness-init を案内
  • 前回の作業が中断している場合: 継続するか確認
跨会话记忆管理技能,记录作业历史、决策与模式。通过读取日志和上下文文件实现知识持久化与无缝交接,支持自动追踪编辑历史并优化项目状态,确保多轮对话中的连续性。
查询上次操作内容或继续前序工作 查看项目历史记录或过往作业详情 了解当前项目背景与上下文信息
codex/.codex/skills/session-memory/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-memory -g -y
SKILL.md
Frontmatter
{
    "name": "session-memory",
    "description": "Internal sub-skill for cross-session handoff, durable learning, and memory persistence. Invoked by session\/memory workflows only. Do NOT load for: implementation, review, ad-hoc notes, or SSOT editing.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "description-en": "Internal sub-skill for cross-session handoff, durable learning, and memory persistence. Invoked by session\/memory workflows only. Do NOT load for: implementation, review, ad-hoc notes, or SSOT editing.",
    "description-ja": "セッション間引き継ぎ、永続学習、memory persistence を扱う内部サブスキル。session\/memory 系からのみ呼ぶ。実装、レビュー、単発メモ、SSOT編集には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Session Memory Skill

セッション間の学習と記憶を管理するスキル。 過去の作業内容、決定事項、学んだパターンを記録・参照します。


トリガーフレーズ

このスキルは以下のフレーズで自動起動します:

  • 「前回何をした?」「前回の続きから」
  • 「履歴を見せて」「過去の作業」
  • 「このプロジェクトについて教えて」
  • "what did we do last time?", "continue from before"

概要

このスキルは .claude/memory/ に作業履歴を保存し、 セッション間での知識の継続を実現します。

あわせて、重要な情報は「どこに残すべきか」を明確にします(詳細: docs/MEMORY_POLICY.md)。


メモリ構造

.claude/
├── memory/
│   ├── session-log.md      # セッションごとのログ
│   ├── decisions.md        # 重要な決定事項
│   ├── patterns.md         # 学んだパターン
│   └── context.json        # プロジェクトコンテキスト
└── state/
    └── agent-trace.jsonl   # Agent Trace(ツール実行履歴)

推奨運用(SSOT/ローカル分離)

  • SSOT(共有推奨): decisions.md / patterns.md
    • 「決定(Why)」と「再利用できる解法(How)」を集約する
    • 各エントリは タイトル + タグ(例: #decision #db)を付け、先頭に Index を置く
  • ローカル推奨: session-log.md / context.json / .claude/state/
    • ノイズ/肥大化しやすいため、基本は Git 管理しない(必要なら個別に判断)

自動記録される情報

session-log.md

各セッション記録には、実行環境から取得できるセッションIDを付与します。 Claude Code では ${CLAUDE_SESSION_ID} を優先し、Codex では Codex runtime が渡す session / thread ID を優先します。 どちらも取得できない場合は .claude/state/session.json.session_id を読み、最後の fallback として日時ベースのIDを生成します。 これにより、セッション間のトレーサビリティが向上します。

## セッション: 2024-01-15 14:30 (session: abc123def)

### 実行したタスク
- [x] ユーザー認証機能の実装
- [x] ログインページの作成

### 生成したファイル
- src/lib/auth.ts
- src/app/login/page.tsx

### 重要な決定
- 認証方式: Supabase Auth を採用

### 次回への引き継ぎ
- ログアウト機能が未実装
- パスワードリセットも必要

Note: ${CLAUDE_SESSION_ID} は Claude Code が自動設定する環境変数です。 Codex 側ではこの変数が存在しない場合があるため、固定前提にせず、Codex runtime の session / thread ID または .claude/state/session.json を使います。

decisions.md

## 技術選定

| 日付 | 決定事項 | 理由 |
|------|---------|------|
| 2024-01-15 | Supabase Auth | 無料枠あり、セットアップ簡単 |
| 2024-01-14 | Next.js App Router | 最新のベストプラクティス |

## アーキテクチャ

- コンポーネント: `src/components/`
- ユーティリティ: `src/lib/`
- 型定義: `src/types/`

patterns.md

## このプロジェクトのパターン

### コンポーネント命名
- PascalCase
- 例: `UserProfile.tsx`, `LoginForm.tsx`

### API エンドポイント
- `/api/v1/` プレフィックス
- RESTful 設計

### エラーハンドリング
- try-catch で囲む
- エラーメッセージは日本語

context.json

{
  "project_name": "my-blog",
  "created_at": "2024-01-14",
  "stack": {
    "frontend": "next.js",
    "backend": "next-api",
    "database": "supabase",
    "styling": "tailwind"
  },
  "current_phase": "フェーズ2: コア機能",
  "last_session": "2024-01-15T14:30:00Z"
}

処理フロー

セッション開始時

  1. .claude/memory/context.json を読み込み
  2. 前回のセッションログを確認
  3. Agent Trace から直近の編集履歴を取得
  4. 未完了タスクを特定
  5. コンテキストサマリーを生成

Agent Trace 活用:

# 前回の編集ファイル一覧を取得
tail -50 .claude/state/agent-trace.jsonl | jq -r '.files[].path' | sort -u

# プロジェクト情報を取得
tail -1 .claude/state/agent-trace.jsonl | jq '.metadata'

セッション中

  1. 重要な決定を decisions.md に記録
  2. 新しいパターンを patterns.md に追加
  3. ファイル生成を session-log.md に記録

セッション終了時

  1. セッションサマリーを生成
  2. context.json を更新
  3. 次回への引き継ぎ事項を記録

メモリ最適化(CC 2.1.49+)

Claude Code 2.1.49 以降、セッション再開時のメモリ使用量が 68% 削減 されました。

推奨ワークフロー

# 長時間作業は --resume を活用
claude --resume

# 大規模タスクは分割してセッション再開
claude --resume "続きから"
シナリオ 推奨
長時間実装 1-2時間ごとにセッション再開
大規模リファクタ 機能単位でセッション分割
メモリ不足警告 即座に --resume で再開

メモリ効率が大幅に改善されたため、セッション再開を積極的に活用してください。

/recap — セッション中の状況確認(CC 2.1.108+)

CC 2.1.108 で追加された /recap コマンド(/rewind のエイリアス)は、現在のセッション内で これまでに何をしたかを素早く振り返るために使用します。 --resume で別セッションに戻る前や、長時間作業の途中確認に組み合わせると効果的です。

推奨タイミング:

タイミング 使い方
--resume で再開する直前 /recap でコンテキストを整理してから claude --resume
Breezing の Worker 再開前 セッション内の進捗を /recap で確認してから次タスクへ
長時間実装 (1時間超) の中間点 /recap で状況確認 → 必要なら session-log.md に手動追記
# 典型的な使用フロー
# 1. 現在の作業状況を確認
/recap

# 2. 必要に応じて session-log.md に手動追記後、セッションを再開
claude --resume

/recap はセッション内の振り返りのみ。前回セッションの内容は session-log.md または claude --resume でのコンテキスト継承で確認する。


使用例

前回の続きから開始

ユーザー: 「前回の続きから」

Claude Code:
📋 前回のセッション(2024-01-15)

完了したタスク:
- ユーザー認証機能
- ログインページ

未完了:
- ログアウト機能
- パスワードリセット

「ログアウト機能を作って」と言えば続きを実装します。

プロジェクトの状況確認

ユーザー: 「このプロジェクトについて教えて」

Claude Code:
📁 プロジェクト: my-blog

技術スタック:
- Next.js + Tailwind CSS + Supabase

現在のフェーズ: コア機能開発
進捗: 40% 完了

最近の決定:
- Supabase Auth を採用
- App Router を使用

Claude Code 自動メモリとの関係(D22)

Claude Code 2.1.32+ には「自動メモリ」機能があり、~/.claude/projects/<project>/memory/MEMORY.md にセッション間の学習を自動保存します。

Harness のメモリシステムとは3層アーキテクチャとして共存します:

システム 内容 管理
Layer 1 Claude Code 自動メモリ 汎用的な学習(ミス回避、ツール使い方) 暗黙的・自動
Layer 2 Harness SSOT プロジェクト固有の決定事項・パターン 明示的・手動
Layer 3 Agent Memory エージェント別のタスク学習 エージェント定義

使い分け:

  • Layer 1 の知見がプロジェクト全体に重要 → /memory ssot で Layer 2 に昇格
  • 日常的な学習は Layer 1 に任せる(無効化しない)
  • Agent Teams 使用時は並列書き込みに注意

詳細: D22: 3層メモリアーキテクチャ


注意事項

  • 自動保存: hooks/Stop により、セッション終了時に session-log.md へ要約を自動追記する運用を推奨(未導入の場合は手動運用でOK)
  • プライバシー: 機密情報は記録しない
  • Git方針: decisions.md/patterns.mdは共有推奨、session-log.md/context.json/.claude/state/はローカル推奨(詳細: docs/MEMORY_POLICY.md
  • 容量管理: ログが大きくなったら「セッションログを整理して」を推奨
管理会话状态机转换的内部技能。用于/work阶段边界更新、错误升级、会话结束及恢复时的状态重置。严格限制为内部工作流使用,禁止用于用户登录或应用状态管理。
/work 阶段边界状态更新 发生错误时进行升级转移 会话结束时停止状态 会话恢复时初始化
codex/.codex/skills/session-state/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-state -g -y
SKILL.md
Frontmatter
{
    "name": "session-state",
    "description": "Manages session state transitions per SESSION_ORCHESTRATION.md. Controls state updates at \/work phase boundaries, escalated transitions on error, and initialized restoration on session resume. Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "description-en": "Manages session state transitions per SESSION_ORCHESTRATION.md. Controls state updates at \/work phase boundaries, escalated transitions on error, and initialized restoration on session resume. Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "description-ja": "SESSION_ORCHESTRATION.md に基づくセッション状態遷移管理。\/work フェーズ境界での状態更新、エラー時の escalated 遷移、セッション再開時の initialized 復帰を制御。Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "user-invocable": false,
    "disable-model-invocation": true
}

Session State Skill

セッション状態の遷移を管理する内部スキル。 docs/SESSION_ORCHESTRATION.md に定義された状態機械に従って遷移を検証・実行する。

機能詳細

機能 詳細
状態遷移 See references/state-transition.md

使用タイミング

  • /work フェーズ境界での状態更新
  • エラー発生時の escalated 遷移
  • セッション終了時の stopped 遷移
  • セッション再開時の initialized 復帰

注意事項

  • このスキルは内部使用専用です
  • ユーザーが直接呼び出すことは想定していません
  • 状態遷移ルールは docs/SESSION_ORCHESTRATION.md で定義
统一会话管理技能,提供会话初始化、内存持久化、状态控制及跨会话通信功能。支持列出活跃会话、检查收件箱和广播消息。建议积极使用会话恢复以优化内存,适用于管理Claude Code会话生命周期。
用户需要查看或管理当前活跃的Claude Code会话列表 用户希望在不同会话间发送广播消息或检查收件箱 涉及会话初始化、恢复(resume)或分叉(fork)的操作 需要跨会话的上下文传递或状态同步
codex/.codex/skills/session/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session -g -y
SKILL.md
Frontmatter
{
    "name": "session",
    "description": "Unified session management window. Handles initialization, memory, state all-in-one. Explicit \/session invocation only — sub-skills handle auto-delegation. Use when managing Claude Code sessions, \/session command. Do NOT load for: app user sessions, login state, authentication features.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Write",
        "Edit",
        "Glob"
    ],
    "argument-hint": "[list|inbox|broadcast \"message\"]",
    "description-en": "Unified session management window. Handles initialization, memory, state all-in-one. Explicit \/session invocation only — sub-skills handle auto-delegation. Use when managing Claude Code sessions, \/session command. Do NOT load for: app user sessions, login state, authentication features.",
    "description-ja": "セッション管理の総合窓口。初期化・記憶・状態を一手に引き受けます。明示的 \/session 呼び出し専用 — 下位スキルが自動委譲されるため自動発動は不要。Use when managing Claude Code sessions, \/session command. Do NOT load for: app user sessions, login state, authentication features.",
    "user-invocable": true,
    "disable-model-invocation": true
}

Session Skill (Unified)

Consolidates all session-related functionality into one skill.

Usage

/session              # Show available options
/session list         # Show active sessions
/session inbox        # Check incoming messages
/session broadcast "message"  # Send message to all sessions

Subcommands

/session list - List Active Sessions

Shows all active Claude Code sessions in the current project.

📋 Active Sessions

| Session ID | Status | Last Activity |
|------------|--------|---------------|
| abc123     | active | 2 min ago     |
| def456     | idle   | 15 min ago    |

/session inbox - Check Inbox

Checks for incoming messages from other sessions.

📬 Session Inbox

| From | Time | Message |
|------|------|---------|
| abc123 | 5m ago | "Ready for review" |
| def456 | 10m ago | "API implementation done" |

/session broadcast "message" - Broadcast Message

Sends a message to all active sessions.

/session broadcast "Review complete, ready for merge"

Capabilities

Feature Description Reference
Initialization Start new session, load context See ../session-init/SKILL.md
Memory Persist learnings across sessions See ../session-memory/SKILL.md
State Control Resume/fork session based on flags See references/session-control.md
Communication Cross-session messaging See ../session-state/SKILL.md

メモリ最適化(CC 2.1.49+)

Claude Code 2.1.49 以降、セッション再開時のメモリ使用量が 68% 削減 されました。

長時間セッション管理のベストプラクティス

ワークロード 推奨戦略
通常実装 1-2時間ごとに --resume で再開
大規模リファクタ 機能単位でセッション分割 → 各セッションで --resume
並列タスク /work all で並列実行、長時間なら途中で --resume
メモリ警告時 即座に --resume で再開(以前より高速)

セッション名の自動生成(CC 2.1.41+)

/rename を引数なしで実行すると、会話コンテキストからセッション名を自動生成します。 長時間セッションや --resume を多用するワークフローでセッションの識別が容易になります。

効率的なワークフロー例

# 実装フェーズ1
claude "認証機能を実装"
# → 1時間後

# セッション再開(メモリ効率的)
claude --resume "パスワードリセット機能を追加"
# → 1時間後

# さらに再開
claude --resume "テストを追加"

メモリ管理の推奨事項

推奨事項 理由
積極的なセッション再開 68% メモリ削減で再開コストが低い
定期的な再開 コンテキストを整理し、集中力を維持
機能単位の分割 大規模タスクを小さく分けて再開
Plans.md を活用 再開時の引き継ぎがスムーズ

💡 メモリ効率が大幅に改善されたため、セッション再開を積極的に活用してください。

Codex 0.123.0 の session shell / terminal 修正

Codex 0.123.0 では stale proxy env が shell snapshot から復元されにくくなり、VS Code WSL terminal の Unicode / dead-key input と keyboard 入力も本体側で修正されています。 Harness は proxy snapshot scrubber や key input wrapper を追加せず、本体修正を自動継承します。


When to Use

  • Session initialization (/harness-init)
  • Session resume/fork (/work --resume, /work --fork)
  • Memory persistence (automatic)
  • Cross-session communication (/session broadcast)

Execution Flow

1. Session Initialization

/harness-init
    ↓
├── Load project context
├── Initialize session.json
├── Load previous session memory (if exists)
└── Display session status

2. Session Control (from /work)

/work --resume
    ↓
├── Check session.json exists
├── Load session state
└── Continue from last checkpoint

/work --fork
    ↓
├── Create new session branch
├── Copy relevant context
└── Start fresh with context

3. Memory Persistence

Session end
    ↓
├── Extract learnings (gotchas, patterns)
├── Update .claude/memory/*.md
└── Prepare handoff summary

4. Cross-Session Communication

/session broadcast "message"
    ↓
├── Find active sessions
├── Write to session.events.jsonl
└── Notify all sessions

Files Managed

File Purpose
.claude/state/session.json Current session state
.claude/state/session.events.jsonl Event log for cross-session communication
.claude/memory/*.md Persistent memory files

Migration Note

This skill consolidates:

  • session-init → Session initialization
  • session-memory → Memory persistence
  • session-control → Resume/fork control
  • session-state → State management & communication

The individual skills are deprecated but still work for backward compatibility.

专注生成UI组件、表单及反馈界面的技能。优先遵循基础约束,仅在明确需求时启用强视觉风格。执行前需通过无障碍访问性检查,确保代码符合可访问标准,适用于前端展示层开发。
需要生成UI组件或界面元素 创建表单或联系页面 涉及前端视觉呈现的任务
codex/.codex/skills/ui/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill ui -g -y
SKILL.md
Frontmatter
{
    "name": "ui",
    "description": "Explicit helper for UI components, hero sections, forms, feedback, and contact surfaces. Do NOT load for: authentication, backend implementation, database work, or business logic.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "description-en": "Explicit helper for UI components, hero sections, forms, feedback, and contact surfaces. Do NOT load for: authentication, backend implementation, database work, or business logic.",
    "description-ja": "UIコンポーネント、ヒーロー、フォーム、フィードバック、問い合わせ面の明示補助スキル。認証、バックエンド実装、データベース作業、ビジネスロジックには使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

UI Skills

UIコンポーネントとフォームの生成を担当するスキル群です。

制約の優先順位と適用条件

  1. 基本は ${CLAUDE_SKILL_DIR}/references/ui-skills.md の制約を最優先で適用する。
  2. ${CLAUDE_SKILL_DIR}/references/frontend-design.md は「尖った/独自/表現強め/ブランド強化」などが明示された場合のみ適用する。
  3. UI Skills の MUST/NEVER は原則維持。ただしユーザーが明示的に要求した場合のみ以下の例外を許可する:
    • グラデーション、発光、強い装飾
    • アニメーション(追加・拡張)
    • カスタム easing

機能詳細

機能 詳細
制約セット See references/ui-skills.md / references/frontend-design.md
コンポーネント生成 See references/component-generation.md
フィードバックフォーム See references/feedback-forms.md

実行手順

  1. 制約セットを適用(優先順位に従う)
  2. 品質判定ゲート(Step 0)
  3. ユーザーのリクエストを分類
  4. 上記の「機能詳細」から適切な参照ファイルを読む
  5. その内容に従って生成

Step 0: 品質判定ゲート(a11y チェックリスト)

UI コンポーネント生成時は、アクセシビリティを確保:

♿ アクセシビリティチェックリスト

生成する UI は以下を満たすことを推奨:

### 必須項目
- [ ] 画像に alt 属性を設定
- [ ] フォーム要素に label を関連付け
- [ ] キーボード操作可能(Tab でフォーカス移動)
- [ ] フォーカス状態が視覚的に分かる

### 推奨項目
- [ ] 色だけに依存しない情報伝達
- [ ] コントラスト比 4.5:1 以上(テキスト)
- [ ] aria-label / aria-describedby の適切な使用
- [ ] 見出し構造(h1 → h2 → h3)が論理的

### インタラクティブ要素
- [ ] ボタンに適切なラベル(「詳細」ではなく「製品詳細を見る」)
- [ ] モーダル/ダイアログのフォーカストラップ
- [ ] エラーメッセージがスクリーンリーダーで読まれる

VibeCoder 向け

♿ 誰でも使えるデザインにするために

1. **画像には説明をつける**
   - 「商品画像」ではなく「赤いスニーカー、正面から」

2. **クリックできる場所はキーボードでも操作可能に**
   - Tab キーで移動、Enter で決定

3. **色だけで判断させない**
   - 赤=エラー だけでなく、アイコン+テキストも
面向非技术用户的VibeCoder指导助手,通过自然语言询问开发进度或求助。自动识别项目状态并推荐下一步操作(如开始、继续、修复),提供简单话术引导用户交互,避免使用技术术语。
用户询问下一步该做什么 用户表示困惑或需要帮助 用户请求查看当前状态或计划
codex/.codex/skills/vibecoder-guide/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill vibecoder-guide -g -y
SKILL.md
Frontmatter
{
    "name": "vibecoder-guide",
    "description": "Explicit helper for non-technical VibeCoder coaching: what to ask next, how to describe work, and how to stay safe. Do NOT load for: direct implementation, technical review, or Cursor\/PM workflow.",
    "allowed-tools": [
        "Read"
    ],
    "description-en": "Explicit helper for non-technical VibeCoder coaching: what to ask next, how to describe work, and how to stay safe. Do NOT load for: direct implementation, technical review, or Cursor\/PM workflow.",
    "description-ja": "非技術ユーザー向けに、次の頼み方、作業の伝え方、安全な進め方を案内する明示補助スキル。直接実装、技術レビュー、Cursor\/PM ワークフローには使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

VibeCoder Guide Skill

VibeCoder(非技術者)が自然言語だけで開発を進められるようガイドするスキル。 「どうすればいい?」「次は何?」などの質問に自動で応答します。


トリガーフレーズ

このスキルは以下のフレーズで自動起動します:

  • 「どうすればいい?」「どうしたらいい?」
  • 「次は何をすればいい?」「次は?」
  • 「何ができる?」「何をすればいい?」
  • 「困った」「わからない」「助けて」
  • 「使い方を教えて」
  • "what should I do?", "what's next?", "help"

概要

VibeCoder は技術的なコマンドやワークフローを知らなくても、 自然な日本語で質問するだけで次のアクションが分かります。


応答パターン

パターン1: プロジェクトがない場合

🎯 まずはプロジェクトを始めましょう!

言い方の例:

  • 「ブログを作りたい」
  • 「タスク管理アプリを作りたい」
  • 「ポートフォリオサイトを作りたい」

ざっくりで大丈夫です。やりたいことを教えてください。

パターン2: Plans.md があるが進行中タスクがない

📋 計画があります。作業を始めましょう!

現在の計画:

  • フェーズ1: 基盤構築
  • フェーズ2: コア機能
  • ...

言い方の例:

  • 「フェーズ1を始めて」
  • 「最初のタスクをやって」
  • 「全部やって」

パターン3: タスク進行中

🔧 作業中です

現在のタスク: {{タスク名}} 進捗: {{完了数}}/{{全体数}}

言い方の例:

  • 「続けて」
  • 「次のタスク」
  • 「今どこまで進んだ?」

パターン4: フェーズ完了後

フェーズが完了しました!

次にできること:

  • 「動作確認して」→ 開発サーバーを起動
  • 「レビューして」→ コード品質チェック
  • 「次のフェーズへ」→ 次の作業を開始
  • 「コミットして」→ 変更を保存

パターン5: エラー発生時

⚠️ 問題が発生しました

状況: {{エラーの要約}}

言い方の例:

  • 「直して」→ 自動修正を試行
  • 「説明して」→ 問題の詳細を説明
  • 「スキップして」→ 次のタスクへ

よく使うフレーズ対応表

やりたいこと 言い方
プロジェクト開始 「〇〇を作りたい」
計画を見たい 「計画を見せて」「今の状況は?」
作業を開始 「始めて」「作って」「フェーズ1をやって」
続きをやる 「続けて」「次」
動作確認 「動かして」「見せて」
コード確認 「レビューして」「チェックして」
保存する 「コミットして」「保存して」
困った時 「どうすればいい?」「助けて」
全部任せる 「全部やって」「おまかせ」

コンテキスト判定

このスキルは以下を確認して適切な応答を選択:

  1. AGENTS.md の存在 → プロジェクトが初期化済みか
  2. Plans.md の内容 → 計画があるか、進捗状況
  3. 現在のタスク状態cc:WIP マーカーの有無
  4. 直近のエラー → 問題が発生しているか

実装ノート

このスキルが起動したら:

  1. 現在の状態を分析
  2. 適切なパターンを選択
  3. 具体的な「言い方の例」を提示
  4. ユーザーの次のアクションを待つ

重要: 技術用語を避け、平易な日本語で説明する

Cursor PM与Claude Code双Agent协作指南。明确角色分工、Plans.md任务流转及命令,规范CI/CD边界,指导高效协同开发流程。
ワークフローについて教えて Cursor との連携方法は? 作業の流れを教えて どうやって進めればいい? how does the workflow work? explain 2-agent workflow
codex/.codex/skills/workflow-guide/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill workflow-guide -g -y
SKILL.md
Frontmatter
{
    "name": "workflow-guide",
    "description": "Explicit helper for Cursor PM ↔ Claude Code two-agent workflow guidance. Do NOT load for: solo implementation, workflow setup, handoff execution, or general process coaching.",
    "allowed-tools": [
        "Read"
    ],
    "description-en": "Explicit helper for Cursor PM ↔ Claude Code two-agent workflow guidance. Do NOT load for: solo implementation, workflow setup, handoff execution, or general process coaching.",
    "description-ja": "Cursor PM と Claude Code の2エージェント運用を説明する明示補助スキル。単独実装、ワークフロー設定、ハンドオフ実行、一般的な進め方相談には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Workflow Guide Skill

Cursor ↔ Claude Code 2エージェントワークフローのガイダンスを提供するスキル。


トリガーフレーズ

このスキルは以下のフレーズで起動します:

  • 「ワークフローについて教えて」
  • 「Cursor との連携方法は?」
  • 「作業の流れを教えて」
  • 「どうやって進めればいい?」
  • "how does the workflow work?"
  • "explain 2-agent workflow"

概要

このスキルは、Cursor(PM)と Claude Code(Worker)の役割分担と連携方法を説明します。


2エージェントワークフロー

役割分担

エージェント 役割 責務
Cursor PM(プロジェクトマネージャー) タスク割り当て、レビュー、本番デプロイ判断
Claude Code Worker(作業者) 実装、テスト、CI修正、staging デプロイ

ワークフロー図

┌─────────────────────────────────────────────────────────┐
│                    Cursor (PM)                          │
│  ・タスクを Plans.md に追加                              │
│  ・Claude Code に作業を依頼(/handoff-to-claude)            │
│  ・完了報告をレビュー                                    │
│  ・本番デプロイの判断                                    │
└─────────────────────┬───────────────────────────────────┘
                      │ タスク依頼
                      ▼
┌─────────────────────────────────────────────────────────┐
│                  Claude Code (Worker)                   │
│  ・/work でタスク実行(並列実行対応)                   │
│  ・実装 → テスト → コミット                             │
│  ・CI 失敗時は自動修正(3回まで)                        │
│  ・/handoff-to-cursor で完了報告                        │
└─────────────────────┬───────────────────────────────────┘
                      │ 完了報告
                      ▼
┌─────────────────────────────────────────────────────────┐
│                    Cursor (PM)                          │
│  ・変更内容を確認                                        │
│  ・staging 動作確認                                      │
│  ・本番デプロイ実行(承認後)                            │
└─────────────────────────────────────────────────────────┘

Plans.md によるタスク管理

マーカー一覧

マーカー 意味 設定者
pm:依頼中 PM から依頼(互換: cursor:依頼中) PM(Cursor/PM Claude)
cc:TODO Claude Code 未着手 どちらでも
cc:WIP Claude Code 作業中 Claude Code
cc:完了 Claude Code 完了 Claude Code
pm:確認済 PM 確認完了(互換: cursor:確認済) PM(Cursor/PM Claude)
cursor:依頼中 (互換)pm:依頼中 と同義 Cursor
cursor:確認済 (互換)pm:確認済 と同義 Cursor
blocked ブロック中 どちらでも

タスクの状態遷移

pm:依頼中 → cc:WIP → cc:完了 → pm:確認済

主要コマンド

Claude Code 側

コマンド 用途
/harness-init プロジェクトセットアップ
/plan-with-agent 計画・タスク分解
/work タスク実行(並列実行対応)
/handoff-to-cursor 完了報告(Cursor PMへ)
/sync-status 状態確認

スキル(会話で自動起動)

スキル トリガー例
handoff-to-pm 「PMに完了報告」
handoff-to-impl 「実装役に渡して」

Cursor 側(参考)

コマンド 用途
/handoff-to-claude Claude Code にタスク依頼
/review-cc-work 完了報告のレビュー

CI/CD ルール

Claude Code の責務範囲

  • ✅ staging デプロイまで
  • ✅ CI 失敗時の自動修正(3回まで)
  • ❌ 本番デプロイは禁止

3回ルール

CI が 3回連続で失敗した場合:

  1. 自動修正を中止
  2. エスカレーションレポートを生成
  3. Cursor に判断を委ねる

よくある質問

Q: Cursor がいない場合は?

A: 一人で作業する場合も、Plans.md でタスク管理することを推奨します。 本番デプロイは手動で慎重に行ってください。

Q: タスクが不明確な場合は?

A: Cursor に確認を依頼するか、/sync-status で現状を整理してください。

Q: CI が何度も失敗する場合は?

A: 3回以上は自動修正せず、Cursor にエスカレーションしてください。


関連ドキュメント

  • AGENTS.md - 詳細な役割分担
  • CLAUDE.md - Claude Code 固有の設定
  • Plans.md - タスク管理ファイル
基于agent-browser CLI的浏览器自动化技能,支持页面导航、表单填写、截图及UI调试。采用AI快照工作流精准操作元素,适用于网页验证与自动测试,优先于其他工具使用。
页面打开或URL确认 点击或表单输入 截取屏幕截图 UI检查或画面测试 open this page, click on, fill the form, screenshot
opencode/skills/agent-browser/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill agent-browser -g -y
SKILL.md
Frontmatter
{
    "name": "agent-browser",
    "description": "Browser automation through the repo agent-browser CLI. Explicit helper for navigation, forms, screenshots, scraping, and web-app checks. Prefer Browser Use or Playwright when available. Do NOT load for: sharing URLs, embedding links, or editing screenshot files."
}

Agent Browser Skill

ブラウザ自動化を行うスキル。agent-browser CLI を使用して、UI デバッグ・検証・自動操作を実行します。


トリガーフレーズ

このスキルは以下のフレーズで自動起動します:

  • 「ページを開いて」「URLを確認して」
  • 「クリックして」「入力して」「フォームに」
  • 「スクリーンショットを撮って」
  • 「UIを確認して」「画面をテストして」
  • "open this page", "click on", "fill the form", "screenshot"

機能詳細

機能 詳細
ブラウザ自動化 See references/browser-automation.md
AI スナップショットワークフロー See references/ai-snapshot-workflow.md

実行手順

Step 0: agent-browser の確認

# インストール確認
which agent-browser

# 未インストールの場合
npm install -g agent-browser
agent-browser install

Step 1: ユーザーのリクエストを分類

リクエストタイプ 対応アクション
URL を開く agent-browser open <url>
要素をクリック スナップショット → agent-browser click @ref
フォーム入力 スナップショット → agent-browser fill @ref "text"
状態確認 agent-browser snapshot -i -c
スクリーンショット agent-browser screenshot <path>
デバッグ agent-browser --headed open <url>

Step 2: AI スナップショットワークフロー(推奨)

ほとんどの操作で、まずスナップショットを取得してから要素参照で操作します:

# 1. ページを開く
agent-browser open https://example.com

# 2. スナップショット取得(AI 向け、インタラクティブ要素のみ)
agent-browser snapshot -i -c

# 出力例:
# - link "Home" [ref=e1]
# - button "Login" [ref=e2]
# - input "Email" [ref=e3]
# - input "Password" [ref=e4]
# - button "Submit" [ref=e5]

# 3. 要素参照で操作
agent-browser click @e2           # Login ボタンをクリック
agent-browser fill @e3 "user@example.com"
agent-browser fill @e4 "password123"
agent-browser click @e5           # Submit

Step 3: 結果の確認

# 現在の状態をスナップショットで確認
agent-browser snapshot -i -c

# または URL を確認
agent-browser get url

# スクリーンショットを取得
agent-browser screenshot result.png

クイックリファレンス

基本操作

コマンド 説明
open <url> URL を開く
snapshot -i -c AI 向けスナップショット
click @e1 要素をクリック
fill @e1 "text" フォームに入力
type @e1 "text" テキストを入力
press Enter キーを押す
screenshot [path] スクリーンショット
close ブラウザを閉じる

ナビゲーション

コマンド 説明
back 戻る
forward 進む
reload リロード

情報取得

コマンド 説明
get text @e1 テキスト取得
get html @e1 HTML 取得
get url 現在の URL
get title ページタイトル

待機

コマンド 説明
wait @e1 要素を待機
wait 1000 1秒待機

デバッグ

コマンド 説明
--headed ブラウザを表示
console コンソールログ
errors ページエラー
highlight @e1 要素をハイライト

セッション管理

複数のタブ/セッションを並列管理:

# セッションを指定
agent-browser --session admin open https://admin.example.com
agent-browser --session user open https://example.com

# セッション一覧
agent-browser session list

# 特定セッションで操作
agent-browser --session admin snapshot -i -c

MCP ブラウザツールとの使い分け

ツール 推奨度 用途
agent-browser ★★★ 第一選択。AI 向けスナップショットが強力
chrome-devtools MCP ★★☆ Chrome が既に開いている場合
playwright MCP ★★☆ 複雑な E2E テスト

原則: まず agent-browser を試し、うまくいかない場合のみ MCP ツールを使用。


注意事項

  • agent-browser はヘッドレスモードがデフォルト
  • --headed オプションでブラウザを表示可能
  • セッションは明示的に close するまで維持される
  • 認証が必要なサイトはセッションを活用
专注于使用 Clerk、Supabase Auth 或 Stripe 实现认证与支付功能的助手。严格排除 UI 和数据库设计任务。执行前强制进行安全审查,涵盖密码哈希、会话管理及防篡改等关键风险点,确保高安全性。
需要集成用户登录注册功能 需要处理订阅或一次性支付逻辑 询问关于认证或支付的安全最佳实践
opencode/skills/auth/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill auth -g -y
SKILL.md
Frontmatter
{
    "name": "auth",
    "description": "Explicit helper for authentication and payment implementation with Clerk, Supabase Auth, or Stripe. Do NOT load for: general UI work, database design, or non-auth features."
}

Auth Skills

認証と決済機能の実装を担当するスキル群です。

機能詳細

機能 詳細
認証機能 See references/authentication.md
決済機能 See references/payments.md

実行手順

  1. 品質判定ゲート(Step 0)
  2. ユーザーのリクエストを分類(認証 or 決済)
  3. 上記の「機能詳細」から適切な参照ファイルを読む
  4. その内容に従って実装

Step 0: 品質判定ゲート(セキュリティチェックリスト)

認証・決済機能は常にセキュリティリスクが高いため、作業開始前に必ず以下を表示:

🔐 セキュリティチェックリスト

この作業はセキュリティ上重要です。以下を確認してください:

### 認証関連
- [ ] パスワードはハッシュ化(bcrypt/argon2)
- [ ] セッション管理は安全か(HTTPOnly Cookie)
- [ ] CSRF 対策は実装されているか
- [ ] レート制限(ブルートフォース対策)

### 決済関連
- [ ] 機密情報(カード番号等)をサーバーに保存しない
- [ ] Stripe/決済プロバイダの SDK を正しく使用
- [ ] Webhook の署名検証
- [ ] 金額改ざん防止(サーバー側で金額を確定)

### 共通
- [ ] エラーメッセージが詳細すぎないか(情報漏洩防止)
- [ ] ログに機密情報を出力していないか

セキュリティ重要度表示

⚠️ 注意レベル: 🔴 高

この機能は以下のリスクがあります:
- 認証情報の漏洩
- 不正アクセス
- 決済の不正操作

専門家によるレビューを推奨します。

VibeCoder 向け

🔐 安全にログイン・決済機能を作るために

1. **パスワードは「ハッシュ化」する**
   - 元のパスワードを復元できない形で保存
   - 万が一データが漏れても安全

2. **カード情報はサーバーに保存しない**
   - Stripe などの専用サービスに任せる
   - 自分のサーバーには一切保存しない

3. **エラーメッセージは曖昧に**
   - 「パスワードが違います」ではなく「認証に失敗しました」
   - 悪意ある人にヒントを与えない
Breezing是团队执行模式的别名,用于通过harness-work进行任务编排。支持多种后端(如cursor、codex)和并行策略,强制启动时输出简洁计划并禁止冗余叙述,旨在提升团队协作效率与执行速度。
用户请求使用breezing命令或相关变体 涉及团队任务执行、代码审查或全量任务处理场景 用户提及composer或cursor后端进行开发委托
opencode/skills/breezing/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill breezing -g -y
SKILL.md
Frontmatter
{
    "name": "breezing",
    "description": "Team execution mode — backward-compatible alias for harness-work with team orchestration. Composer\/composer 2.5 maps to the cursor backend."
}

Breezing — Team Execution Mode

後方互換エイリアス: harness-work をチーム実行モードで動かします。

Narration Rules (UX Contract)

敵は 冗長さ であって進捗報告ではない。起動時に実行計画を簡潔に明示してから実行を開始する。見やすい進捗報告は歓迎する。冗長な繰り返し・中身のない前置きだけを禁ずる。

起動時に必ず出すもの (banner + plan、合計 5 行以内)

最初の応答で、何を・どの順で進めるかを示してから tool 実行に入る:

🚀 cursor / composer-2.5-fast / feat/hah-11-golden-rule-lint / Reviewer
これから:
1. backend/model を resolve
2. composer に diff レビューを委譲 (read-only)
3. verdict を 3-5 行で要約 → Plans.md 更新

banner 1 行 (🚀 <backend> / <model> / <branch> / <task>) + 計画 2-4 行。1 秒以内に出し、即 Step 1 へ。

進捗報告は出してよい (見やすい範囲で)

  • 各ステップの開始・完了を 1 行ステータスで (✓ backend=cursor / model=composer-2.5-fast)
  • 判断に必要な中間結果 (pre-check の要点、resolved model、検出した branch 等)
  • なぜこの分岐を取るかの理由を 1 行で (例: 「Reviewer のみ委譲: Worker は別系統で完了済み」)

禁止 (= 冗長さ)

  • 同じ事実の 2 回言い換え: 一度言ったことを後段で再説明しない
  • 中身のない前置き: 「使い方を確認します」だけの行など、tool call で自明な宣言
  • 3 行以上の経緯振り返り: 結論を引き伸ばす長い前置き。経緯が必要なら 1 行に圧縮
  • 起動シーケンス中の ★ Insight ブロック: Insight は最終 report で 1 回のみ

違反例 (冗長):

× 「composer 2.5 使うモード」= cursor backend で Composer に委託、ですね(と解釈の言い換え)
× 「前回 Reviewer が止まったので別系統に逃がすのは理にかなっています」(3 行以上の振り返り)
× 「使い方を確認します」 → bash → 「呼べます」(中身のない前置き + 同じ事実の 2 回言い換え)

正常例 (簡潔 + 計画明示):

🚀 cursor / composer-2.5-fast / feat/hah-11-golden-rule-lint / Reviewer
これから: backend resolve → composer に diff レビュー委譲 (read-only) → verdict 要約

Quick Reference

/breezing                       # スコープを聞く(claude backend)
/breezing all                   # 全タスク完走(claude backend)
/breezing 3-6                   # タスク3〜6を完走
/breezing --codex all           # Codex CLI で全タスク委託
/breezing --cursor              # cursor backend lean path (--no-discuss all 既定)
/breezing --cursor --reviewer-only  # Reviewer のみ cursor に委譲(Worker は別系統で既完了)
/breezing composer 2.5 all      # 自然言語 trigger: cursor backend として扱う
/breezing --parallel 2 all      # 2並列で全タスク完走
/breezing --no-discuss all      # 計画議論スキップで全タスク完走
/breezing --auto-mode all       # 互換な親セッションで Auto Mode rollout を試す

Options

Option Description Default
all 全未完了タスクを対象 -
N or N-M タスク番号/範囲指定 -
--codex Codex CLI で実装委託 false
--cursor cursor backend lean path (HARNESS_IMPL_BACKEND=cursor 相当)。Worker 介在 / self_review / sprint-contract 3 段チェーン / Phase 0 を skip し、起動 → 委譲を 3 秒以内に開始する false
--reviewer-only Reviewer のみ独立系統に委譲(Worker 実装は既完了前提)。--cursor と併用で Composer に逃がす false
--parallel N Implementer 並列数 auto
--no-commit 自動コミット抑制 false
--no-discuss 計画議論スキップ --cursor で true 既定
--auto-mode Harness 側の Auto Mode rollout を明示。CC 2.1.111 で不要になった --enable-auto-mode とは別物 false

Natural Language Backend Triggers

composer / コンポーザー / Composer で / composer 2.5 / composer モード は、正式に cursor backend の trigger として扱う。 これは --cursor 相当の intent であり、Lead は resolve-impl-backend.sh を経由して backend を確定する。 解決時は明示 override として --backend cursor を渡し、env / project / user file / default より優先させる。

入力例 解釈 実行経路
composer 2.5 で cursor backend Lead → cursor-companion.sh task --write --workspace <wt>
コンポーザーで全部 cursor backend Lead → cursor-companion.sh task --write --workspace <wt>
composer モード cursor backend Lead → cursor-companion.sh task --write --workspace <wt>

composer は Claude Worker の内側に spawn する追加 agent ではない。 非 claude backend のトポロジーに従い、Lead が Worker agent を挟まずに cursor-companion.sh を直接呼ぶ。

CC 2.1.111 note: Opus 4.7 では literal に /effort xhigh が使える。 built-in /ultrareview は明示要求時だけ追加で使い、既定レビューは置き換えない。

長時間セッション推奨 (CC 2.1.108+): セッション長が 30 分を超える見込みの場合、plugin bundle root 解決後に bash "${HARNESS_PLUGIN_ROOT}/scripts/enable-1h-cache.sh" を実行して 1 時間 prompt cache を opt-in すること。 このスクリプトは env.localexport ENABLE_PROMPT_CACHING_1H=1 を追記する (冪等)。 5 分 TTL の既定キャッシュでは breezing の 1 時間超セッションで cache miss が累積し input token コストが最大 12 倍になりうるため、長時間 team 実行では明示的に opt-in する。 Codex CLI 子プロセス (scripts/codex-companion.sh task --write 等) は通常 env 継承で ENABLE_PROMPT_CACHING_1H を読むが、CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1 が有効な場合は 明示的に export を維持する shell wrapper が必要。詳細は docs/long-running-harness.md を参照。

Execution

このスキルは harness-work に委譲します。 以下の設定で harness-work を実行してください:

  1. 引数をそのまま harness-work に渡す
  2. チーム実行モードを強制 — Lead → Worker spawn → Reviewer spawn の三者分離
  3. Lead は delegate 専念 — コードを直接書かない
  4. Auto Mode は opt-in 扱い--auto-mode は互換な親セッションでの rollout 用フラグとして受け付ける
  5. Advisor は必要時のみ — Worker が advisor-request.v1 を返した時だけ Lead が advisor を呼ぶ

harness-work との違い

特徴 harness-work breezing (このスキル)
並列手段 必要数に応じた自動分割 Lead/Worker/Reviewer の役割分離
Lead の役割 調整+実装 delegate (調整専念)
レビュー Lead 自己レビュー 独立 Reviewer
デフォルトスコープ 次のタスク 全部

Team Composition

Role Agent Type Mode 責務
Lead (self) - 調整・指揮・タスク分配
Worker ×N claude-code-harness:worker bypassPermissions(現行) / Auto Mode(follow-up)* 実装
Advisor claude-code-harness:advisor 読み取り専用 方針助言 (PLAN / CORRECTION / STOP)
Reviewer claude-code-harness:reviewer bypassPermissions(現行) / Auto Mode(follow-up)* 独立レビュー

*親セッションまたは frontmatter が bypassPermissions の場合はそちらが優先される。配布テンプレートは現在も bypassPermissions を使うため、Auto Mode は follow-up の rollout 対象であり、既定挙動ではない。

Codex Mode (--codex)

公式プラグイン codex-plugin-cc 経由で Codex CLI にすべての実装を委託するモード:

# タスク委託(書き込み可能)
bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write "タスク内容"

# stdin 経由(大きなプロンプト向け)
CODEX_PROMPT=$(mktemp /tmp/codex-prompt-XXXXXX.md)
# タスク内容を書き出し
cat "$CODEX_PROMPT" | bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write
rm -f "$CODEX_PROMPT"

Execution Backend (persistent)

HARNESS_IMPL_BACKEND=cursorbash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" cursor で設定)にすると、 per-run フラグなしで cursor が既定の worker バックエンドになる。review / advisor ロールは Opus に固定したまま。 バックエンド選択の正本(precedence、role-scope、self_review スキップ、cursor banner)は harness-work の「Execution Backend Selection(実装バックエンド選択)」を参照する。

下の Cursor Backend Fast Path は per-run フラグ (--cursor) で同等の lean path を有効化する別軸であり、本節と併読する。

Cursor Backend Fast Path (--cursor / lean mode)

--cursor 指定時、または env HARNESS_IMPL_BACKEND=cursor の時に有効。Worker 層を介在させず Lead が直接 cursor-companion.sh を呼ぶ(Phase 85 SSOT、.claude/rules/cursor-cli-only.md Topology 節)。

削除される step(claude backend と比べて節約)

Step 削除理由 節約秒数
claude-code-harness:worker agent spawn cursor backend は Worker 介在なし 5-30s
self_review 5 件ゲート worker-report.v1 が cursor では生成されないため不要 10-60s × retry
sprint-contract 3 段チェーン (generate→enrich→ensure) Worker 契約不要なら contract 不要 2-5s × N
Phase 0 Q1-Q3 interactive --no-discuss all 既定 (Plans/Depends は Lead が直読み) 15-30s
Effort スコアリング cursor backend では ultrathink 注入不要 0.5-1s × N
Plans.md re-parse (per task) session 内 cache (mtime+hash で短絡) 3-8s

合計 baseline 15-35s → target 3-7s で 1 タスク目の cursor 委譲開始までを短縮。

既定 flow(cursor backend)

  1. banner + 実行計画 (🚀 cursor / <model> / <branch> / <task> + これから進める 2-4 step、合計 5 行以内、1 秒以内)
  2. 1 bash で並列 pre-check: git branch --show-current + cat VERSION + Plans.md tail + cursor-agent --version
  3. 1 bash で resolve: bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" + bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model
  4. 即 委譲: bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task --write --workspace <wt> "<task>"
  5. cursor 出力を Lead が diff レビュー → cherry-pick → Plans.md cc:done [hash] 更新

Reviewer-only mode (--cursor --reviewer-only) — read = lean

Worker 実装は既完了(別系統 = claude / Codex で済んだ)、Reviewer のみ独立系統 (Composer) で回したい時の lean path。read-only 委譲なので worktree 不要・cherry-pick 不要・Lead diff review 不要:

  1. banner + 計画: 🚀 cursor / composer-2.5-fast / review + 「これから: diff レビューを composer に委譲 → verdict 要約」
  2. bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task "diff レビュー: <base_ref>..HEAD"--write--workspace も付けない
    • companion は --write 未指定で default --mode ask (hard read-only stop) になる (cursor-companion.sh の workspace guard は --write 時のみ発火)
    • cursor 側はファイル書込・コマンド実行が disabled、worktree 隔離不要
  3. cursor 出力 (REQUEST_CHANGES / APPROVE 相当) を Lead が解釈し、dual_review.cursor_verdict に advisory として格納
  4. primary verdict は Opus reviewer から取る。cursor 単独では APPROVE を確定しない (harness-work/SKILL.md「実装したバックエンドが自分の出力をレビューしてはならない」不変ルールと整合)
  5. APPROVE なら Plans.md cc:done [hash] を Lead が更新

read mode で省略できるもの: 専用 .git worktree / Lead diff review / cherry-pick / worker-report.v1 / self_review 5 件。 read mode でも保持必要: .cursorignore / egress allowlist (*.cursor.sh) / permissions.json (best-effort)。詳細は .claude/rules/cursor-cli-only.md 「Read mode delegation (lean path)」節を参照。

用途:

  • Anthropic 側 server rate limit で Reviewer が止まった時の逃げ道
  • Worker 完了済みで Reviewer だけ別系統に分散
  • Codex review が auth 失敗した時の manual fallback

Cursor adapter support claim

Cursor は依然 internal-compatible tier(Phase 87 / PR #174 で promotion)。supported public claim は CI-gated workflow smoke 充足まで継続 gate。--cursor lean path は support tier を昇格させない。

Bootstrap route: .cursor/AGENTS.md + .cursor-plugin/plugin.json

Verification:

bash tests/test-cursor-adapter-candidate.sh
bash tests/test-support-claim-wording.sh

Flow Summary

breezing [scope] [--codex] [--parallel N] [--no-discuss] [--auto-mode]
    │
    ↓ Load harness-work with team mode
    │
Phase 0: Planning Discussion (--no-discuss でスキップ)
Phase A: Pre-delegate(チーム初期化)
Phase B: Delegate(Worker 実装 + 必要時 Advisor + Reviewer レビュー)
Phase C: Post-delegate(統合検証 + Plans.md 更新 + commit)

Advisor Protocol

Worker は generic な subagent を増やさない。 迷った時は構造化 JSON で相談要求だけ返し、Lead が advisor を呼ぶ。

  1. Worker → advisor-request.v1
  2. Lead → Advisor
  3. Advisor → advisor-response.v1
  4. Lead → 同じ Worker に advice を返して続行
  5. Reviewer は最後の成果物だけを見る

相談条件は loop / solo とそろえる。

  • 高リスク task(needs-spike / security-sensitive / state-migration)の初回実行前
  • 同じ原因の失敗が 2 回続いた後
  • plateau により PIVOT_REQUIRED を返す直前
  • 同じ trigger_hash は 1 回だけ。task ごとの相談回数は最大 3 回

Progress Feed(Phase B 中の進捗通知)

Lead は Worker のタスク完了ごとに、以下のフォーマットで進捗を出力する:

📊 Progress: Task {completed}/{total} 完了 — "{task_subject}"

出力例:

📊 Progress: Task 1/5 完了 — "harness-work に失敗再チケット化を追加"
📊 Progress: Task 2/5 完了 — "harness-sync に --snapshot を追加"
📊 Progress: Task 3/5 完了 — "breezing にプログレスフィードを追加"

設計意図: breezing は長時間実行になることが多い。 ユーザーがターミナルをチラ見した時に「今どこまで進んでいるか」が一目で分かるようにする。 task-completed.sh フックが systemMessage で同等の情報を出力するため、Lead の出力と補完し合う。

Silence Policy(長時間実行の通知整理)

Codex 0.123.0 の realtime handoff では、background agent が transcript delta を受け取り、必要ない時は明示的に沈黙できる。 Breezing の progress feed はこの前提に合わせ、通知を「作業の節目」に絞る。

報告するもの:

  • task 完了、blocked、validation failure、review REQUEST_CHANGES
  • Advisor の PLAN / CORRECTION / STOP
  • Reviewer の APPROVE / REQUEST_CHANGES
  • advisor / reviewer drift、plateau、contract readiness failure
  • user が明示的に status を求めた時の要約

沈黙してよいもの:

  • transcript delta を受け取っただけで、判定や status が変わっていない時
  • tool stdout の細かな増分で、log に残っていれば十分な時
  • 並列 Worker の待機中 heartbeat

頻度は「task 完了ごとに 1 回」を基本にする。 heartbeat を増やして安心感を作るのではなく、status / log / drift 検知に責務を分ける。 ただし Advisor request 未応答、Reviewer result 未到着、plateau 直前の警告は silence 対象にしない。

Monitor ツール活用ガイド (CC 2.1.98+)

長時間実行コマンドを監視する時は、ポーリング (Read で定期的にファイル末尾を読む) ではなく Monitor ツール を使用する。Monitor はバックグラウンドプロセスの stdout 各行を逐次通知として Lead に届けるため、polling より低レイテンシかつ低トークン消費で状況を把握できる。

適用例:

  • go test ./... -v の実行中進捗監視
  • gh run watch による GitHub Actions 進捗追跡
  • npm run build --watch / vite build --watch のビルドエラー即時検知
  • codex-companion.sh status <job-id> での Codex job 完了検知
  • docker-compose logs -f / kubectl logs -f のデプロイログ追跡

使い分けの判断基準:

対象 Monitor 使う? 理由
Agent (Worker / Reviewer) の完了監視 不要 Agent 層が自前で完了通知する
run_in_background: true で投げた shell process 推奨 stdout 各行を逐次通知で拾える
短時間の一発コマンド (go test 1 回実行) 不要 通常の Bash tool 実行で十分
長時間 tail / watch / stream 系コマンド 推奨 polling より効率的

Breezing Lead での典型パターン:

Lead:
  Task(Worker1, ...)           ← Agent 完了待ち (Monitor 不要)
  Task(Worker2, ...)           ← 同上
  Bash(run_in_background, "gh run watch --exit-status")
  Monitor(tailCommand="...")   ← CI 失敗を即時検知 → Worker に修正指示

これにより Lead が「Worker 完了 → CI 失敗検知 → 修正指示」の反応速度を上げられる。

Review Policy(全モード統一)

Breezing モードでもレビューは Codex exec 優先 → 内部 Reviewer フォールバック の統一ポリシーに従う。 詳細は harness-work の「レビューループ」セクションを参照。

  • Worker が worktree 内で実装・commit → worker-report.v1 (self_review 5 件) を Lead に返却
  • self_review ゲート (Reviewer spawn 前): Lead が self_review[].verifiedevidence を機械検証。1 件でも verified:false or evidence:"" なら Reviewer を spawn せず Worker に自動差し戻し(同一セッション内 最大 2 回、3 回目で escalate)
  • Lead が Codex exec でレビュー(120s タイムアウト、フォールバック: Reviewer agent)
  • REQUEST_CHANGES → Lead が SendMessage で Worker に修正指示、Worker が amend(最大 MAX_REVIEWS 回。MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
  • APPROVE → Lead が main に cherry-pick → Plans.md を cc:完了 [{hash}] に更新

完了報告(Phase C — Lead が生成)

全タスク完了後、Lead が以下の手順でリッチ完了報告を生成する:

  1. git log --oneline {base_ref}..HEAD で全 cherry-pick コミットを収集
  2. git diff --stat {base_ref}..HEAD で全体の変更規模を取得
  3. Plans.md の cc:TODO / cc:WIP 残タスクを抽出
  4. harness-work の「完了報告フォーマット」の Breezing テンプレートに従い出力

生成者は Lead。Worker や hook ではない。Lead が Phase C で git + Plans.md を読んで生成する。

Phase 0: Planning Discussion(構造化 3 問チェック)

全タスク実行前に、以下の 3 問で計画の健全性を確認する。 --no-discuss 指定時は全スキップ。

Q1. スコープ確認:

「{{N}} 件のタスクを実行します。スコープは適切ですか?」

多すぎる場合は優先度(Required > Recommended > Optional)で絞り込みを提案。

Q2. 依存関係確認(Plans.md に Depends カラムがある場合のみ):

「タスク {{X}} は {{Y}} に依存しています。実行順序は合っていますか?」

Depends カラムを読み取り、依存チェーンを表示。循環依存があればエラー。

Q3. リスクフラグ[needs-spike] タスクがある場合のみ):

「タスク {{Z}} は [needs-spike] です。先に spike しますか?」

spike 未完了の [needs-spike] タスクがある場合、spike を先行実行するか確認。

3 問とも問題なければ、Phase A に進む(合計 30 秒で完了する設計)。

Universal Violations Injection(セッション内 Worker 間の学習伝播)

同一 /breezing 起動内で蓄積された Reviewer の universal gotchas を次 Worker の briefing 冒頭に自動注入する。同一セッション内のみ有効(セッション終了で破棄、session-memory には書かない)。

# Phase A 開始時に Lead プロセスの in-memory 配列を初期化
universal_violations = []  # List[str] — このセッション内で蓄積

# Phase B で Worker を spawn する直前、briefing 冒頭に注入:
def build_worker_briefing(task, contract_path):
    header = ""
    if universal_violations:
        header = (
            "🚨 同一セッションで既に検出された universal 違反(再発禁止):\n"
            + "\n".join(f"- {v}" for v in universal_violations)
            + "\n\n"
        )
    return header + f"タスク: {task.内容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\nmode: breezing"

# Reviewer が review-result.v1 を返した後、Lead が scope="universal" のみ抽出して累積:
for update in reviewer_result.memory_updates:
    # 後方互換: 文字列は task-specific 扱い → 無視
    if isinstance(update, str):
        continue
    if update.get("scope") == "universal":
        universal_violations.append(update["text"])

方針: 過剰設計回避のため、session-memorydecisions.md への永続化は行わない。Lead プロセスの in-memory 配列に保持するだけで、/breezing セッション終了時に破棄する(issue #87 本文の方針)。

依存グラフに基づくタスク割り当て

Plans.md に Depends カラムがある場合(v2 フォーマット)、依存グラフに従ってタスクを実行する:

  1. Depends が - のタスクを先に実行。独立タスクが複数あれば並列 spawn 可能
  2. 各 Worker 完了後、Lead がレビュー→cherry-pick(harness-work Phase B 参照)
  3. 依存元タスクが main に cherry-pick されたら、そのタスクに依存していたタスクを次に実行
  4. 全タスクが完了するまで繰り返す

注意: 各タスクの「Worker 完了→レビュー→cherry-pick」は逐次処理。 並列化できるのは独立タスク(Depends が -)の Worker spawn 部分のみ。

Codex Native Orchestration

Codex では native subagent を使う。 代表的な制御面は spawn_agent, wait, send_input, resume_agent, close_agent

Claude Code vs Codex の通信 API(SSOT: team-composition.md の API マッピング表):

  • Claude Code: SendMessage(to: agentId, message: "...") で Worker に修正指示
  • Codex: resume_agent(agent_id) で Worker を再開 → send_input(agent_id, "...") で指示送信

harness-work の擬似コードは Claude Code 構文で記述。Codex 環境では上記に読み替えること。

Related Skills

  • harness-work — 単一タスクからチーム実行まで(本体)
  • harness-sync — 進捗同期
  • harness-review — コードレビュー(breezing 内で自動起動)
支持双智能体工作流,将头脑风暴内容发送至Cursor进行可行性验证与任务拆解。通过提取上下文、生成验证请求并指导复制粘贴,实现计划从Claude Code到Cursor的往返校验及更新。
Cursor PM交接 双智能体计划验证 头脑风暴审查
opencode/skills/cc-cursor-cc/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cc-cursor-cc -g -y
SKILL.md
Frontmatter
{
    "name": "cc-cursor-cc",
    "description": "Validate brainstorm with Cursor PM, update Plans.md, handoff back. Cursor↔CC 2-agent workflow. Triggers: Cursor PM handoff, 2-agent plan validation, brainstorm review. Skip for: implementation, single-agent."
}

CC-Cursor-CC Skill (Plan Validation Round Trip)

Supports the flow of sending brainstormed content from Claude Code to Cursor (PM) for feasibility validation.

Prerequisites

This skill assumes 2-agent operation.

Role Agent Description
PM Cursor Validate plans, update Plans.md
Impl Claude Code Brainstorming, implementation

Execution Flow

Step 1: Extract Brainstorming Context

Extract from recent conversation:

  1. Goal (feature/purpose)
  2. Technology choices
  3. Decisions made
  4. Undecided items
  5. Concerns

Step 2: Add Provisional Tasks to Plans.md

## 🟠 Under Validation: {{Project}} `pm:awaiting-validation`

### Provisional Tasks (To Validate)
- [ ] {{task1}} `awaiting-validation`
- [ ] {{task2}} `awaiting-validation`

### Undecided Items
- {{item1}} → **Requesting PM decision**

Step 3: Generate Validation Request for Cursor

Generate text to copy-paste to Cursor:

## 📋 Plan Validation Request

**Goal**: {{summary}}

**Provisional tasks**:
1. {{task1}}
2. {{task2}}

### ✅ Requesting Cursor (PM) to:
1. Validate feasibility
2. Break down tasks
3. Decide undecided items
4. Update Plans.md (awaiting → cc:TODO)

Step 4: Guide Next Action

  1. Copy & paste request to Cursor
  2. Run /plan-with-cc in Cursor
  3. Cursor updates Plans.md
  4. Cursor runs /handoff-to-claude
  5. Copy & paste back to Claude Code

Overall Flow

Claude Code (Brainstorm)
    ↓ /cc-cursor-cc
Cursor (PM validates & breaks down)
    ↓ /handoff-to-claude
Claude Code (/work implements)
用于解决CI/CD流水线失败、构建错误或测试未通过的问题。涵盖失败分析、代码修正及环境排查,严禁跳过测试或绕过检查。支持复杂场景调用ci-cd-fixer子代理自动修复。
CI失败 构建错误 测试未通过 流水线问题
opencode/skills/ci/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill ci -g -y
SKILL.md
Frontmatter
{
    "name": "ci",
    "description": "CI red? Call us. Pipeline fire brigade deploys. Use when user mentions CI failures, build errors, test failures, or pipeline issues. Do NOT load for: local builds, standard implementation work, reviews, or setup."
}

CI/CD Skills

CI/CD パイプラインに関する問題を解決するスキル群です。


発動条件

  • 「CIが落ちた」「GitHub Actionsが失敗」
  • 「ビルドエラー」「テストが通らない」
  • 「パイプラインを直して」

機能詳細

機能 詳細 トリガー
失敗分析 See references/analyzing-failures.md 「ログを見て」「原因を調べて」
テスト修正 See references/fixing-tests.md 「テストを直して」「修正案を出して」

実行手順

  1. テスト vs 実装判定(Step 0)
  2. ユーザーの意図を分類(分析 or 修正)
  3. 複雑度を判定(下記参照)
  4. 上記の「機能詳細」から適切な参照ファイルを読む、または ci-cd-fixer サブエージェント起動
  5. 結果を確認し、必要に応じて再実行

Step 0: テスト vs 実装判定(品質判定ゲート)

CI 失敗時、まず原因の切り分けを行う:

CI 失敗報告
    ↓
┌─────────────────────────────────────────┐
│           テスト vs 実装判定             │
├─────────────────────────────────────────┤
│  エラーの原因を分析:                    │
│  ├── 実装が間違い → 実装を修正          │
│  ├── テストが古い → ユーザーに確認      │
│  └── 環境問題 → 環境修正                │
└─────────────────────────────────────────┘

禁止事項(改ざん防止)

⚠️ CI 失敗時の禁止事項

以下の「解決策」は禁止です:

| 禁止 | 例 | 正しい対応 |
|------|-----|-----------|
| テスト skip 化 | `it.skip(...)` | 実装を修正 |
| アサーション削除 | `expect()` を消す | 期待値を確認 |
| CI チェック迂回 | `continue-on-error` | 根本原因修正 |
| lint ルール緩和 | `eslint-disable` | コードを修正 |

判断フロー

🔴 CI が失敗しています

**判断が必要です**:

1. **実装が間違い** → 実装を修正 ✅
2. **テストの期待値が古い** → ユーザーに確認を求める
3. **環境の問題** → 環境設定を修正

⚠️ テストの改ざん(skip化、アサーション削除)は禁止です

どれに該当しますか?

承認が必要な場合

テスト/設定の変更がやむを得ない場合:

## 🚨 テスト/設定変更の承認リクエスト

### 理由
[なぜこの変更が必要か]

### 変更内容
[差分]

### 代替案の検討
- [ ] 実装の修正で解決できないか確認した

ユーザーの明示的な承認を待つ

Git log 拡張フラグの活用(CC 2.1.49+)

CI 失敗時の原因コミット特定に構造化ログを活用します。

原因コミットの特定

# 構造化フォーマットでコミット分析
git log --format="%h|%s|%an|%ad" --date=short -10

# トポロジカル順序で時系列分析
git log --topo-order --oneline -20

# 変更ファイルと原因の紐付け
git log --raw --oneline -5

主な活用場面

用途 フラグ 効果
失敗原因の特定 `--format="%h %s"`
時系列での追跡 --topo-order マージ順序を考慮した追跡
変更影響の把握 --raw ファイル変更の詳細表示
マージ除外分析 --cherry-pick --no-merges 実コミットのみを抽出

出力例

🔍 CI 失敗原因分析

最近のコミット(構造化):
| Hash | Subject | Author | Date |
|------|---------|--------|------|
| a1b2c3d | feat: update API | Alice | 2026-02-04 |
| e4f5g6h | test: add tests | Bob | 2026-02-03 |

変更ファイル(--raw):
├── src/api/endpoint.ts (Modified) ← 型エラー発生
├── tests/api.test.ts (Modified)
└── package.json (Modified)

→ a1b2c3d のコミットが原因の可能性大
  型エラー: src/api/endpoint.ts:42

サブエージェント連携

以下の条件を満たす場合、Task tool で ci-cd-fixer を起動:

  • 修正 → 再実行 → 失敗のループが 2回以上 発生
  • または、エラーが複数ファイルにまたがる複雑なケース

起動パターン:

Task tool:
  subagent_type="ci-cd-fixer"
  prompt="CI失敗を診断・修正してください。エラーログ: {error_log}"

ci-cd-fixer は安全第一で動作(デフォルト dry-run モード)。 詳細は agents/ci-cd-fixer.md を参照。


VibeCoder 向け

🔧 CI が壊れたときの言い方

1. **「CI が落ちた」「赤くなった」**
   - 自動テストが失敗している状態

2. **「なんで失敗してるの?」**
   - 原因を調べてほしい

3. **「直して」**
   - 自動で修正を試みる

💡 重要: テストを「ごまかす」修正は禁止です
   - ❌ テストを消す、スキップする
   - ⭕ コードを正しく直す

「テストが間違ってそう」と思ったら、
まず確認してから対応を決めましょう
为指定实体自动生成生产级CRUD功能,涵盖API端点、Zod验证、RBC授权及完整测试用例。支持Next.js/Express等框架,自动适配现有数据库模式并处理关联关系。
需要生成特定实体的增删改查接口 请求创建包含分页和搜索功能的CRUD模块 需要为数据表设置权限控制或自动生成测试
opencode/skills/crud/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill crud -g -y
SKILL.md
Frontmatter
{
    "name": "crud",
    "description": "Explicit helper for CRUD scaffolding and API endpoint generation. Do NOT load for: UI components, form design, database schema discussion, or general implementation."
}

CRUD Skill

Auto-generates CRUD functionality for specified entities (tables) at production-ready level.

Quick Reference

  • "Create CRUD for task management" → /crud tasks
  • "Want search and pagination too" → Includes all together
  • "Include permissions (who can view/edit)" → Sets up authorization/rules together

Deliverables

  • CRUD + validation + authorization + tests, complete production-safe set
  • Minimize diff to match existing DB/code

Features:

  • Validation (Zod) auto-add
  • Auth/authorization (Row Level Security) auto-config
  • Relations (one-to-many, many-to-many) support
  • Pagination, search, filters
  • Auto-generated test cases

Auto-invoke Skills

This skill must explicitly invoke the following skills with the Skill tool:

Skill Purpose When to Call
impl Implementation (parent skill) CRUD feature implementation
verify Verification (parent skill) Post-implementation verification

Execution Flow

Detailed steps are described in the phases below.

Phase 1: Entity Analysis

  1. Parse entity name from $ARGUMENTS
  2. Detect existing schema (Prisma, Drizzle, raw SQL)
  3. Infer field types and relations

Phase 2: CRUD Generation

  1. Generate model/schema if needed
  2. Create API endpoints (REST or tRPC)
  3. Add validation schemas (Zod)
  4. Configure authorization rules

Phase 3: Test Generation

  1. Create unit tests for each endpoint
  2. Add integration tests
  3. Generate test fixtures

Phase 4: Verification

  1. Run type check
  2. Run tests
  3. Verify build

Supported Frameworks

Framework Detection Generated Files
Next.js + Prisma prisma/schema.prisma API routes, Prisma client
Next.js + Drizzle drizzle.config.ts API routes, Drizzle queries
Express express in package.json Controllers, routes
Hono hono in package.json Route handlers

Output Structure

src/
├── lib/
│   └── validations/
│       └── {entity}.ts        # Zod schemas
├── app/api/{entity}/
│   ├── route.ts              # GET (list), POST (create)
│   └── [id]/
│       └── route.ts          # GET, PUT, DELETE
└── tests/
    └── {entity}.test.ts      # Test cases

Related Skills

  • impl - Feature implementation
  • verify - Build verification
  • auth - Authentication/authorization
将只读问题、调查、设计咨询或敌对审查委托给Cursor Composer。通过禁用写入确保安全性,避免隔离需求。要求启动时简明展示计划,执行中禁止冗余解释,仅输出关键结论。
ask cursor cursor:ask second opinion sanity check
opencode/skills/cursor-ask/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-ask -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-ask",
    "description": "Read-only cursor-agent delegate for questions\/sanity checks (no writes). Triggers: ask cursor, cursor:ask, second opinion, sanity check. Skip for: implementation (use cursor:do)."
}

cursor:ask — Read-Only Cursor Delegate

cursor-agent (Composer) に read-only で質問・調査・設計相談・敵対的レビューを委譲する軽量スキル。

cursor-companion.sh task は引数なしで --mode ask (hard read-only stop) が自動で付くため、--write を渡さない限り cursor 側は ファイル書き込み・コマンド実行ができない。これにより worktree 隔離・cherry-pick・Lead diff review がすべて不要になる。

Quick Reference

cursor:ask "この設計判断、Composer 視点でどう思う?"
cursor:ask "TASK_BASE_REF からの diff を読んで、見落としを 3 つ挙げて"
cursor:ask "harness-mem の cross-project N-call、楽観的すぎる前提はある?"

用途:

ケース
質問 "この型エラーの根本原因は?"
調査 "scripts/ 配下で curl を使ってる箇所を全部挙げて理由付きで"
設計相談 "この abstraction、3 年後に保守できる?"
敵対的視点 "この PR の最大の弱点を 1 つだけ挙げて"

Narration Rules (UX Contract)

敵は 冗長さ であって進捗報告ではない。起動時に何を聞くか・どう進めるかを簡潔に明示してから実行する。冗長な繰り返し・中身のない前置きだけを禁ずる。

起動時に必ず出すもの (banner + plan、3 行以内)

🚀 cursor / composer-2.5-fast / ask
これから: <質問の要点> を composer に投げて、結果を 3-5 行で要約

banner 1 行 + 計画 1-2 行。1 秒以内に出し、即 Step 2 へ。

進捗報告は出してよい

  • 委譲開始の 1 行 (→ composer に問い合わせ中)
  • 判断に必要な経緯を 1 行で

禁止 (= 冗長さ)

  • 同じ事実の 2 回言い換え: cursor-companion の結果を後段で再説明しない
  • 中身のない前置き: 「使い方を確認します」だけの行など tool call で自明な宣言
  • 3 行以上の経緯振り返り: 必要なら 1 行に圧縮
  • 起動シーケンス中の ★ Insight ブロック: Insight は最終要約で 1 回のみ

違反例 (冗長):

× 「cursor に質問を投げる準備をします」→ bash → 「投げます」(中身のない前置き + 言い換え)
× 「ask モードは読み取り専用なので安全です」と再説明(既知事実の繰り返し)
× ★ Insight ──── まず cursor の状態を確認します: ...

正常例 (簡潔 + 計画明示):

🚀 cursor / composer-2.5-fast / ask
これから: 設計の弱点を composer に問い、結果を 3-5 行で要約

Execution Flow

Step 0: 起動時 banner + plan

上記 Narration Rules に従い、banner + 計画 (3 行以内) を出してから Step 1 へ。

Step 1: banner 確認

Step 0 で banner + 計画 (3 行以内) は出し切っているので、ここでは banner 行が出ていることを確認する。banner は:

🚀 cursor / composer-2.5-fast / ask

以降は委譲開始の 1 行ステータス等で進捗を見せてよい。冗長な繰り返しのみ避ける。

composer-2.5-fastscripts/model-routing.sh --host cursor --role worker --field model で解決される値の代表表記。実際の resolved model は cursor-companion 側のログに出る。

Step 2: helper root 解決 + cursor-companion 直接実行

$ARGUMENTS を質問文として渡す。--write は絶対に付けないscripts/cursor-companion.sh を相対パスで呼ぶと consumer repo の cwd 直下に見えず exit するため、CLAUDE_PLUGIN_ROOT / HARNESS_PLUGIN_ROOT を hooks.json と同じ valid_root パターンで解決する (Issue #193 §2):

QUESTION="$ARGUMENTS"
if [ -z "$QUESTION" ]; then
  echo "ERROR: question required. Usage: cursor:ask \"<your question>\"" >&2
  exit 1
fi

bash -c '
  set -euo pipefail
  valid_root() {
    [ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
  }
  HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
  ROOT="$HARNESS_PLUGIN_ROOT"
  if ! valid_root "$ROOT"; then
    ROOT=""
    if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && ! valid_root "$probe"; do
        probe="$(cd "$probe/.." && pwd)"
      done
      valid_root "$probe" && ROOT="$probe"
    fi
  fi
  if ! valid_root "$ROOT"; then
    ROOT=""
    for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
             "$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
             "$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
      if valid_root "$c"; then ROOT="$c"; break; fi
    done
  fi
  if ! valid_root "$ROOT"; then
    echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
    exit 2
  fi
  HARNESS_PLUGIN_ROOT="$ROOT"
  bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task "$1"
' _ "$QUESTION"

これだけで cursor-agent 側は --mode ask (hard read-only stop) に locked される。--force / --yolo も付かない。

Step 3: 結果を host が 3-5 行で要約

cursor の出力をそのまま貼らない。host (Claude/Codex) が読んで 3-5 行に要約 する:

  • 結論
  • なぜそう言えるか (cursor が挙げた根拠の核)
  • 注意点 / 追加調査が必要な点
  • 次の一手 (もしあれば)

要約後、最後に literal で次の一文を出力する:

↑この結果は host が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。

Trust Boundary

cursor は不透明なサブプロセスであり、Harness のガードレール (R01-R13) は内部に適用されない。read-only 委譲でも以下の前提条件を満たすこと。

必須前提

項目 内容 設定場所
Secret 遮断 .cursorignore.env / *.pem / *.key / .ssh / .aws / .git を読取対象から除外 repo root .cursorignore
Egress allowlist ~/.claude/settings.jsonsandbox.network.allowedDomains*.cursor.sh を追加 user settings
Filesystem allowlist sandbox.filesystem.allowWrite~/.cursor を追加 (cursor-agent が状態書込を行うため) user settings
permissions.json ~/.cursor/permissions.jsonterminalAllowlist / mcpAllowlist は read mode でも有効 (allowlist は best-effort、security boundary ではない) user config

詳細は .claude/rules/cursor-cli-only.md を参照。

ask mode で省略できるもの

通常の cursor 委譲で必要 ask mode では不要 理由
隔離 worktree 不要 cursor は書き込みできない
Lead diff review 不要 差分が生まれない
cherry-pick 不要 同上
worker-report.v1 / self_review 5 件 不要 実装をしないため

それでも残るリスク

  • 読み取り漏洩: .cursorignore を怠ると秘密ファイルが cursor 推論に渡る
  • 誤った情報の鵜呑み: cursor 出力は untrusted。Step 3 の要約で必ず host が判断軸を残す
  • allowlist 過信: Cursor 公式は "Allowlists are best-effort convenience. They are not a security guarantee." と明言。allowlist に依存しない

Topology

Lead (Claude/Codex) ──[cursor-companion.sh task]──> cursor-agent (--mode ask, locked read-only)
       │
       └──[Step 3: 3-5 行要約]──> User

Worker 介在なし。Reviewer 介在なし。worker-report.v1 / review-result.v1 契約は発生しない。

Related Skills / Rules

  • cursor-do — 書込タスク委譲(worktree + Lead review + cherry-pick の full containment)
  • breezing --cursor — Reviewer のみ cursor に逃がす lean second-opinion レーン
  • harness-review --cursor — レビューを cursor (composer-2.5-fast) に second-opinion として依頼
  • .claude/rules/cursor-cli-only.md — Cursor backend governance (trust boundary, prohibited flags)
将单一实现任务委托给 Cursor Composer,在隔离 worktree 中执行。通过 Lead 审查 diff 后 cherry-pick 合并至主分支,确保快速、简洁的单人任务交付流程。
cursor:do delegate to cursor composer write refactor with cursor
opencode/skills/cursor-do/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-do -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-do",
    "description": "Delegate write task to Cursor Composer in isolated worktree, Lead-review + cherry-pick. Triggers: cursor:do, delegate to cursor, composer write, refactor with cursor. Skip for: planning, review-only, multi-task."
}

cursor:do — Single-Task Write Delegate to Cursor Composer

1 件の実装タスクを Cursor Composer (composer-2.5-fast) に専用 worktree 内で委譲し、Lead が diff をレビューしてから main へ cherry-pick する skill。breezing の team フローを起こさず、1 タスク 1 cherry-pick を最短経路で回す。

封じ込めは Cursor 側にはない (.claude/rules/cursor-cli-only.md)。専用 .git を持つ worktree + Lead diff review + cherry-pick (R01-R13 経路) の 3 点だけが実効的な境界。cursor の出力は Lead レビューまで untrusted として扱う。

Step 0 — NARRATION RULES (UX Contract)

敵は 冗長さ であって進捗報告ではない。breezing と同じ契約。起動時に banner + 実行計画を簡潔に明示してから実行する。見やすい進捗報告は歓迎、冗長な繰り返しのみ禁止。

起動時に必ず出すもの (banner + plan、合計 5 行以内)

🚀 cursor / composer-2.5-fast / feat/foo-bar / Add login form validation
これから:
1. pre-check (branch / cursor-agent) → 専用 worktree 作成
2. composer に実装委譲 (--write)
3. diff レビュー → cherry-pick → Plans.md 更新

banner 1 行 (🚀 cursor / composer-2.5-fast / <branch> / <task>) + 計画 2-4 行。1 秒以内に出し、即 Step 1 へ。

進捗報告は出してよい (見やすい範囲で)

  • 各ステップの開始・完了を 1 行ステータスで (✓ worktree 作成: .claude/worktrees/cursor-do-...)
  • pre-check / resolve の要点、cherry-pick した SHA
  • なぜこの分岐を取るかの理由を 1 行で

禁止 (= 冗長さ)

  • 同じ事実の 2 回言い換え: pre-check 結果を後段で再説明しない
  • 中身のない前置き: tool call で自明な宣言だけの行
  • 3 行以上の経緯振り返り: 必要なら 1 行に圧縮
  • 起動シーケンス中の ★ Insight ブロック: Insight は最終 report で 1 回のみ

違反例 (冗長):

× 「composer 2.5 で実装する流れですね、まず確認します」(中身のない前置き)
× 「Cursor を呼ぶ前に branch を見ます」 → bash → 「branch を確認しました」(言い換え)
× ★ Insight ──── Cursor の強みは…

正常例 (簡潔 + 計画明示):

🚀 cursor / composer-2.5-fast / feat/foo-bar / Add login form validation
これから: worktree 作成 → composer に実装委譲 → diff レビュー → cherry-pick

Step 1 — banner + plan を出し切る (1 秒以内)

引数 $ARGUMENTS をタスク説明として受ける。引数が空なら以下のマーカーを出力してユーザーに 1 行タスクを要求し、入力後に Step 2 へ進む:

CURSOR_DO_AWAITING_TASK: provide a one-line task description as $ARGUMENTS

引数があれば、即 1 行 echo:

🚀 cursor / composer-2.5-fast / <current-branch> / <task-first-60-chars>

<current-branch> は Step 2 で取得する値だが、Step 1 では未取得のため でも可。Step 2 直後に確定値を 1 行で再出力する。Step 0 の banner + 実行計画 (5 行以内) はここで出し切り、以降は各ステップの 1 行ステータスで進捗を見せる。冗長な繰り返しのみ避ける。

Step 2 — 並列 pre-check (1 bash)

1 つの bash 呼び出しで以下を並列に取り、結果だけを 1 ブロックで受ける。個別の説明は出さない。

bash -c '
  set +e
  echo "==BRANCH=="; git branch --show-current
  echo "==VERSION=="; cat VERSION 2>/dev/null
  echo "==PLANS_TAIL=="; tail -n 12 Plans.md 2>/dev/null
  echo "==CURSOR_AGENT=="
  CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
  if [ -z "$CURSOR_AGENT_BIN" ]; then
    if command -v cursor-agent >/dev/null 2>&1; then
      CURSOR_AGENT_BIN="$(command -v cursor-agent)"
    elif [ -x "$HOME/.local/bin/cursor-agent" ]; then
      CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
    fi
  fi
  if [ -z "$CURSOR_AGENT_BIN" ]; then
    echo "NOT_INSTALLED"
  else
    "$CURSOR_AGENT_BIN" --version 2>/dev/null || echo "NOT_INSTALLED"
  fi
'

判定:

  • CURSOR_AGENT=NOT_INSTALLEDERROR: cursor-agent not found (exit 3 expected from companion). Install via setup-cursor.sh. を出し終了。
  • BRANCHmain / masterWARN: on protected branch — cherry-pick target is HEAD of this branch. Confirm intent or switch. を出し継続。

Step 3 — plugin root + backend + model resolve (1 bash)

HARNESS_PLUGIN_ROOT / CLAUDE_PLUGIN_ROOT が未設定だと :-. fallback が consumer repo の cwd に解決し、scripts/cursor-companion.sh が見えず起動不能になる (Issue #193 §2)。hooks.json と同じ valid_root パターンで堅牢に解決する。

bash -c '
  set -euo pipefail
  valid_root() {
    [ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
  }
  HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
  ROOT="$HARNESS_PLUGIN_ROOT"
  if ! valid_root "$ROOT"; then
    ROOT=""
    if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && ! valid_root "$probe"; do
        probe="$(cd "$probe/.." && pwd)"
      done
      valid_root "$probe" && ROOT="$probe"
    fi
  fi
  if ! valid_root "$ROOT"; then
    ROOT=""
    for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
             "$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
             "$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
      if valid_root "$c"; then ROOT="$c"; break; fi
    done
  fi
  if ! valid_root "$ROOT"; then
    echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
    exit 2
  fi
  HARNESS_PLUGIN_ROOT="$ROOT"
  BACKEND=$(bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --backend cursor --role worker)
  MODEL=$(bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model)
  echo "PLUGIN_ROOT=${HARNESS_PLUGIN_ROOT}"
  echo "BACKEND=$BACKEND"
  echo "MODEL=$MODEL"
'

返却値: PLUGIN_ROOT (Step 5 で使う) / BACKEND (必ず cursor) / MODEL (通常 composer-2.5-fast)。BACKEND または MODEL が空なら ERROR: backend/model resolution failed を 1 行で出して終了。PLUGIN_ROOT 解決失敗は上記スクリプトが exit 2 で報告する。

Step 4 — 専用 worktree 作成

衝突しない id を作って worktree を切る。main tree や $HOME を指してはならない (companion 側 guard で exit 2 になる)。WT_DIR は絶対パスで作る (Step 5 の --workspace は companion の is not a directory ガードで相対パスを exit 2 にすることがあるため、Issue #193 §4)。

bash -c '
  set -euo pipefail
  REPO_ROOT="$(git rev-parse --show-toplevel)"
  cd "$REPO_ROOT"
  ID="$(date +%Y%m%d-%H%M%S)-$$"
  WT_DIR="$REPO_ROOT/.claude/worktrees/cursor-do-${ID}"
  BASE_REF="$(git rev-parse HEAD)"
  BASE_BRANCH="$(git branch --show-current)"
  WT_BRANCH="cursor-do/${ID}"
  mkdir -p "$REPO_ROOT/.claude/worktrees"
  git worktree add -b "${WT_BRANCH}" "${WT_DIR}" "${BASE_REF}"
  echo "REPO_ROOT=${REPO_ROOT}"
  echo "WT_DIR=${WT_DIR}"
  echo "WT_BRANCH=${WT_BRANCH}"
  echo "BASE_REF=${BASE_REF}"
  echo "BASE_BRANCH=${BASE_BRANCH}"
'

返却された WT_DIR / WT_BRANCH / BASE_REF / BASE_BRANCH を以降の Step で使う。失敗時 (branch 名衝突等) は ID を作り直して 1 回だけ retry。2 回連続失敗で ERROR: worktree creation failed を出し終了。

Step 5 — cursor-companion.sh task --write で委譲

Lead が直接 companion を呼ぶ (.claude/rules/cursor-cli-only.md Topology 節 — 非 claude backend では Worker 介在なし)。プロンプトは引数の task そのまま + 必要な追補のみ。冗長な前置きは付けない。

bash -c '
  set -euo pipefail
  valid_root() {
    [ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
  }
  HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
  ROOT="${PLUGIN_ROOT:-$HARNESS_PLUGIN_ROOT}"
  if ! valid_root "$ROOT"; then
    ROOT=""
    if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && ! valid_root "$probe"; do
        probe="$(cd "$probe/.." && pwd)"
      done
      valid_root "$probe" && ROOT="$probe"
    fi
  fi
  if ! valid_root "$ROOT"; then
    ROOT=""
    for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
             "$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
             "$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
      if valid_root "$c"; then ROOT="$c"; break; fi
    done
  fi
  if ! valid_root "$ROOT"; then
    echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
    exit 2
  fi
  HARNESS_PLUGIN_ROOT="$ROOT"
  PROMPT="<task-description>

Constraints:
- Modify only files relevant to the task.
- Keep existing tests green. Add tests when the task is verifiable.
- Match existing code style and naming.
- Create exactly one git commit if your environment supports it; otherwise leave one dirty changeset for Lead auto-commit.
- Do not touch .claude-plugin/settings*, .claude/settings*, .eslintrc*, biome.json, tsconfig*.json."
  bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task \
    --write \
    --workspace "${WT_DIR}" \
    "${PROMPT}"
' 2>&1

判定:

  • exit 0 + result text → Step 6 へ
  • exit 1 (result-error) → companion stderr を 1 行要約して ERROR: cursor returned is_error/empty result を出し終了。worktree は Step 8 のクリーンアップで削除
  • exit 2 (bad-guard) → 設定不備。原因 (workspace 指定誤り等) を 1 行で示し終了
  • exit 3 (not-found) → Step 2 で検出済みのはずだが、再度遭遇したら同様に終了

Step 6 — Lead diff review

worktree 内で Composer が作成した変更を読み、目視レビュー + contract grep の二段ゲートを通す (harness-work 「Lead の cherry-pick 前ゲート」と同じ契約)。

注意 (Issue #193 §1): Cursor Composer は --write でファイル編集を行うが commit は作らないことがある。worktree が dirty なまま放置すると Step 7 の cherry-pick 対象から漏れ、ユーザー視点で「完了したのに main に何も入らない」状態になる。本 Step 冒頭で dirty なら、既存 commit がある場合は amend、commit がない場合は Lead 側で 1 commit にまとめる。

bash -c '
  set -euo pipefail
  cd "${WT_DIR}"
  # Composer は dirty changeset を返すことがあるため、既存 commit に fold する
  if [ -n "$(git status --porcelain)" ]; then
    git add -A
    if [ "$(git rev-list --count "${BASE_REF}..HEAD")" -gt 0 ]; then
      git -c user.name="cursor-composer" -c user.email="cursor-composer@local" \
        commit --amend --no-edit --no-verify
      echo "==AUTO_AMENDED=="
    else
      git -c user.name="cursor-composer" -c user.email="cursor-composer@local" \
        commit --no-verify -m "cursor: ${TASK_SUMMARY:-cursor-do delegated change}"
      echo "==AUTO_COMMITTED=="
    fi
    git log -1 --oneline
  fi
  echo "==LOG=="
  git log --oneline "${BASE_REF}..HEAD"
  echo "==STAT=="
  git diff --stat "${BASE_REF}..HEAD"
  echo "==DIFF=="
  git diff "${BASE_REF}..HEAD"
'

TASK_SUMMARY は引数 task の先頭 60 文字以内に圧縮した文字列を Lead が事前に export しておく (例: TASK_SUMMARY="Add login form validation")。未設定なら fallback メッセージ cursor-do delegated change を使う。--no-verify を付けるのは worktree 内の編集を「Lead レビュー前の中間 commit」として扱うため (cherry-pick 後の main commit で R01-R13 と pre-commit hook を通す)。

Lead は diff 全文を Read し、以下を確認する:

  • 変更が依頼タスクの範囲内か (関係ないファイルを触っていないか)
  • protected path (.claude-plugin/settings*, .eslintrc*, etc.) を変更していないか
  • secret / .env / 認証情報を含まないか
  • 公開 support tier 表記を破壊していないか。contract gates は必ず candidate worktree (WT_DIR) 内で実行する:
    [ ! -f "${WT_DIR}/tests/test-support-claim-wording.sh" ] || (cd "${WT_DIR}" && bash tests/test-support-claim-wording.sh)
    [ ! -f "${WT_DIR}/scripts/ci/check-consistency.sh" ] || (cd "${WT_DIR}" && bash scripts/ci/check-consistency.sh)
    [ ! -f "${WT_DIR}/tests/validate-plugin.sh" ] || (cd "${WT_DIR}" && bash tests/validate-plugin.sh)
    

判定:

  • 問題なし → Step 7 へ
  • 範囲外変更あり → 該当 commit を git reset で巻き戻すか、Cursor に再委譲 (Step 5 を 1 回だけ retry)。2 回失敗で REQUEST_CHANGES: <理由> を出し、worktree を残したまま終了
  • protected path / secret 検出 → 即 abort。ABORT: protected path violation を出し worktree 削除

Step 7 — cherry-pick + Plans.md cc:done 更新

worktree から main tree に cherry-pick する。Cursor prompt は exactly one commit 契約だが、Composer は dirty changeset を返すことがあるため Step 6 で commit/amend する。複数 commit が残った場合は main tree を触る前に停止する。 さらに cherry-pick 前に Plans.md の staged / unstaged 差分がないことを確認する。理由: 既存差分がある状態で後続の git add Plans.md && git commit --amend を行うと、task と無関係な plan/status 編集を Cursor の code commit に巻き込むため。 SHA 直接指定 (branch 名経由ではない) で reviewer state drift を避ける (MEMORY: reviewer_state_drift)。

bash -c '
  set -euo pipefail
  COMMIT_COUNT="$(cd "${WT_DIR}" && git rev-list --count "${BASE_REF}..HEAD")"
  if [ "${COMMIT_COUNT}" -eq 0 ]; then
    echo "ERROR: no commits to cherry-pick"
    exit 1
  fi
  if [ "${COMMIT_COUNT}" -ne 1 ]; then
    echo "ERROR: cursor returned ${COMMIT_COUNT} commits; expected exactly one. Keep worktree for manual review: ${WT_DIR}"
    exit 1
  fi
  if ! git diff --quiet -- Plans.md || ! git diff --cached --quiet -- Plans.md; then
    echo "ERROR: Plans.md has pre-existing local edits; refusing to cherry-pick before the cursor:do marker amend"
    exit 1
  fi
  SHA="$(cd "${WT_DIR}" && git rev-parse HEAD)"
  git cherry-pick "${SHA}"
  echo "==CHERRY_PICKED=="
  git log --oneline -n 1
'

cherry-pick で conflict が出たら git cherry-pick --abort し、CHERRY_PICK_CONFLICT: <files> を 1 行で示して終了 (worktree は残す、ユーザー判断)。

cherry-pick 後、Plans.md に対応行があれば該当タスクのマーカーを更新する。 上記の clean precondition を通過しているため、ここで発生する Plans.md 差分は marker-only diff として扱う:

| <task> | ... | cc:done [<merged-sha>] |

該当行の特定: 引数 task 文字列の先頭 40 文字で grep し、ヒットした最初の cc:TODO / cc:WIP / cc:todo 行を cc:done [<sha>] に置換する。ヒットなしなら更新スキップ (Plans.md 外のタスクとして扱う)。

マーカーを更新した場合、その編集は cherry-pick commit に含める。未コミットの Plans.md を残して cleanup / 完了報告へ進んではならない。 以下の amend block は、上記 precondition 通過後に実行した marker-only diff だけを対象にする:

bash -c '
  set -euo pipefail
  if git diff --quiet -- Plans.md; then
    echo "PLANS_UPDATED=0"
  else
    git add Plans.md
    git commit --amend --no-edit
    echo "PLANS_UPDATED=1"
    echo "MERGED_SHA=$(git rev-parse HEAD)"
  fi
'

Step 8 — worktree cleanup + 完了報告 (1 ブロック)

cherry-pick 成功後、worktree を delete する。失敗 path では呼ばれない(worktree を残してユーザー判断)。

bash -c '
  set -euo pipefail
  git worktree remove --force "${WT_DIR}"
  git branch -D "${WT_BRANCH}" 2>/dev/null || true
  echo "==CLEANUP=="
  git worktree list | grep -v "cursor-do-" || true
'

完了報告は 1 ブロック で出す。中間ナレーションなし:

cursor:do completed
   task: <task-first-60-chars>
   commits: <count>
   base: <BASE_REF> → cherry-picked into <BASE_BRANCH>
   plans: <updated|skipped (no match)>
   files: <changed-file-count> changed, +<inserts> -<deletes>

Full Containment (write mode 必須)

役割 skip 可否
専用 .git worktree cursor の書込を main tree から隔離 不可(必須)
Lead diff review untrusted cursor 出力の品質ゲート 不可(必須)
contract-grep ゲート docs / locale / matrix 固定文字列の保護 不可(必須)
cherry-pick → main R01-R13 guard rail を通す唯一の経路 不可(必須)
Plans.md cc:done 更新 台帳との sync 該当行なければ skip 可

Prohibited

  • --force / --yolo を companion に渡す(Cursor 公式 "Never use")
  • cursor 出力を Lead レビュー前に main へ直接 commit する
  • protected path (.claude-plugin/settings*, .eslintrc*, tsconfig*.json, etc.) を Step 5 の prompt で許可する
  • $HOME / / / main tree を --workspace に指定する
  • Plans.md の cc:* マーカーを task と無関係に書き換える

Related Skills / Rules

  • cursor:ask — 読取専用の質問・調査・敵対的視点 (worktree 不要)
  • breezing --cursor — 複数タスクを team フローで cursor 委譲する場合
  • harness-work — claude backend の default フロー (Worker agent 経由)
  • .claude/rules/cursor-cli-only.md — Cursor backend governance + Topology
诊断并修复 Harness 工作流中 Cursor 后端故障。用于处理委托失败、cursor-agent 缺失、setup-cursor 错误或后端意外回退至 Claude 等问题,提供快速诊断与最小化修复方案。
Cursor 委托失败 cursor-agent 未找到 setup-cursor 执行失败 后端意外回退到 claude
opencode/skills/cursor-rescue/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-rescue -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-rescue",
    "description": "Diagnose and recover Cursor backend failures for Harness workflows. Use when user invokes cursor:rescue, Cursor delegation fails, cursor-agent is missing, setup-cursor fails, or backend resolution unexpectedly falls back to claude."
}

cursor:rescue - Cursor Backend Recovery

Cursor backend の failure path を短く切り分ける skill。変更は最小限にし、破壊的操作はしない。

Quick Reference

cursor:rescue "breezing fell back to claude"
cursor:rescue "cursor-agent not found"

Diagnosis Order

Run one compact diagnostic block:

set +e
HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi
if [ -z "$HARNESS_PLUGIN_ROOT" ]; then
  echo "ERROR: HARNESS_PLUGIN_ROOT is not set and could not be derived from CLAUDE_PLUGIN_ROOT or CLAUDE_SKILL_DIR" >&2
  exit 2
fi
echo "==RESOLVED_BACKEND=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --role worker
echo "==USER_OR_PROJECT_DEFAULT=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
echo "==CURSOR_MODEL=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model
echo "==CURSOR_AGENT=="
CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
if [ -z "$CURSOR_AGENT_BIN" ]; then
  if command -v cursor-agent >/dev/null 2>&1; then
    CURSOR_AGENT_BIN="$(command -v cursor-agent)"
  elif [ -x "$HOME/.local/bin/cursor-agent" ]; then
    CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
  fi
fi
if [ -z "$CURSOR_AGENT_BIN" ]; then
  echo "NOT_INSTALLED: cursor-agent not found in PATH or $HOME/.local/bin"
else
  "$CURSOR_AGENT_BIN" --version
fi
echo "==CURSOR_PACKAGE_CHECK=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/setup-cursor.sh" --check

Common Fixes

Symptom Fix
cursor-agent missing Install / sign in to Cursor CLI, then rerun cursor:setup --check.
backend resolves to claude unexpectedly Run bash scripts/set-impl-backend.sh --show; set user default with cursor:setup --user-default or project default with cursor:setup --project-default.
setup-cursor.sh --check fails Report the first failing [ERR] line and the missing file path.
companion exits 2 Workspace guard or forbidden path. Recreate an isolated worktree and retry.
companion exits 3 cursor-agent not found in PATH or $HOME/.local/bin.

Output

Return:

  • root cause candidate
  • exact failing command
  • minimal fix command
  • whether retrying the original workflow is safe
作为顾问性第二意见运行 Cursor Composer 审查,用于检查差异。Cursor 仅提供建议,不拥有最终批准权,由主脑做出最终裁决。
用户显式调用 cursor:review 要求 Cursor 进行代码审查 希望 Composer 对差异进行合理性检查
opencode/skills/cursor-review/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-review -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-review",
    "description": "Run a Cursor Composer review as an advisory second opinion while keeping the primary review verdict on the host brain. Use when user invokes cursor:review, asks Cursor to review, or wants composer to sanity-check a diff. Cursor never owns APPROVE\/REQUEST_CHANGES."
}

cursor:review - Advisory Cursor Review

Cursor Composer (composer-2.5-fast) を read-only second opinion として使う review skill。primary verdict は host brain (Opus / Claude role) が出す。

Quick Reference

cursor:review --base origin/main
cursor:review "Phase 88.5 command namespace diff"

Rules

  • Cursor review is advisory. The final verdict must come from the host reviewer.

  • Do not pass --write to cursor-companion.sh.

  • Use resolver/model routing, not direct env checks:

    bash scripts/resolve-impl-backend.sh --backend cursor --role reviewer
    bash scripts/model-routing.sh --host cursor --role worker --field model
    
  • Prefer the existing harness-review contract when a full review is requested. This command exists for users who explicitly ask for the Cursor lane.

Flow

  1. Resolve the Harness helper root:

    HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
    if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
        probe="$(cd "$probe/.." && pwd)"
      done
      [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
    fi
    if [ -z "$HARNESS_PLUGIN_ROOT" ]; then
      echo "ERROR: HARNESS_PLUGIN_ROOT is not set and could not be derived from CLAUDE_PLUGIN_ROOT or CLAUDE_SKILL_DIR" >&2
      exit 2
    fi
    
  2. Determine review scope:

    BASE_REF="${TASK_BASE_REF:-origin/main}"
    REVIEW_SCOPE="${ARGUMENTS:-}"
    if [ -n "${REVIEW_SCOPE}" ]; then
      set -- ${REVIEW_SCOPE}
      while [ "$#" -gt 0 ]; do
        case "$1" in
          --base)
            BASE_REF="${2:?--base requires a ref}"
            shift 2
            ;;
          --base=*)
            BASE_REF="${1#--base=}"
            shift
            ;;
          *)
            shift
            ;;
        esac
      done
    fi
    DIFF_STAT="$(git diff --stat "${BASE_REF}..HEAD")"
    DIFF_TEXT="$(git diff "${BASE_REF}..HEAD")"
    
  3. Ask Cursor in read-only mode:

    PROMPT="$(cat <<EOF
    

Review this diff as an advisory second opinion. Base ref: ${BASE_REF} Requested scope: ${ARGUMENTS:-full diff}

Focus on bugs, regressions, missing tests, and unsafe assumptions. Do not propose broad refactors.

Diff stat: ${DIFF_STAT}

Diff: ${DIFF_TEXT} EOF )" bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task "${PROMPT}"


4. Host reads Cursor's output and performs the primary review:

- Findings first, ordered by severity.
- Mark Cursor-originated points as advisory when used.
- `APPROVE` / `REQUEST_CHANGES` must be the host decision, not a copied Cursor verdict.

## Output

Use the standard review shape:

- findings
- open questions
- validation run
- final host verdict
配置并验证 Cursor 后端。支持检查就绪状态、设置用户或项目级默认值为 Cursor,以及撤销设置。仅修改本地环境,不更改分发默认值。
cursor:setup set Cursor as local default check Cursor readiness
opencode/skills/cursor-setup/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-setup -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-setup",
    "description": "Configure and verify Cursor backend for CCH. Triggers: cursor:setup, set Cursor as local default, check Cursor readiness. Distribution default stays opt-in; only local env changes on request."
}

cursor:setup - Cursor Backend Setup

Cursor backend の setup / verification 用 skill。配布 plugin の fallback は claude のままにし、現在の repo / user 環境だけ cursor default にする時に使う。

Quick Reference

cursor:setup --check
cursor:setup --user-default
cursor:setup --project-default
cursor:setup --unset

Rules

  • Do not change distribution defaults or plugin manifests to make Cursor the shipped fallback.
  • Use scripts/resolve-impl-backend.sh / scripts/set-impl-backend.sh; do not infer from HARNESS_IMPL_BACKEND alone.
  • Treat ~/.cursor/permissions.json, .cursorignore, and Claude sandbox allowlists as manual/user-owned setup surfaces unless the user explicitly asks to edit a local file.

Flow

First resolve the Harness helper root. Keep the current working directory as the target project so project-scoped env.local writes still land in the user's repo:

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi
if [ -z "$HARNESS_PLUGIN_ROOT" ]; then
  echo "ERROR: HARNESS_PLUGIN_ROOT is not set and could not be derived from CLAUDE_PLUGIN_ROOT or CLAUDE_SKILL_DIR" >&2
  exit 2
fi
  1. For --check, run:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/setup-cursor.sh" --check
    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
    bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --role worker
    CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
    if [ -z "$CURSOR_AGENT_BIN" ]; then
      if command -v cursor-agent >/dev/null 2>&1; then
        CURSOR_AGENT_BIN="$(command -v cursor-agent)"
      elif [ -x "$HOME/.local/bin/cursor-agent" ]; then
        CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
      fi
    fi
    if [ -z "$CURSOR_AGENT_BIN" ]; then
      echo "ERROR: cursor-agent not found in PATH or $HOME/.local/bin" >&2
      exit 3
    fi
    "$CURSOR_AGENT_BIN" --version
    
  2. For --user-default, run:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --user cursor
    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
    
  3. For --project-default, run:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" cursor
    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
    
  4. For --unset, ask whether the target is user or project scope if not clear from the request, then run exactly one matching unset command:

    Project scope:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --unset
    

    User scope:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --unset --user
    

Output

Report three facts only:

  • resolved backend (claude / codex / cursor)
  • Cursor package readiness (setup-cursor.sh --check)
  • next manual step if Cursor is not ready
负责部署和监控配置,涵盖Vercel/Netlify部署、分析设置及环境健康检查。适用于用户提及部署、平台名称或监控相关场景,不用于开发或代码审查。
用户提到部署 提及Vercel 提及Netlify 涉及分析功能 需要健康检查
opencode/skills/deploy/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill deploy -g -y
SKILL.md
Frontmatter
{
    "name": "deploy",
    "description": "Deploy to Vercel\/Netlify. One-way ticket to production arranged. Use when user mentions deployment, Vercel, Netlify, analytics, or health checks. Do NOT load for: implementation work, local development, reviews, or setup."
}

Deploy Skills

デプロイとモニタリングの設定を担当するスキル群です。

機能詳細

機能 詳細
デプロイ設定 See references/deployment-setup.md
アナリティクス See references/analytics.md
環境診断 See references/health-checking.md

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容に従って設定
通过Nano Banana Pro API自动生成项目介绍幻灯片。支持Minimalist、Infographic、Hero Visual三种风格,每风格生成2张并自动筛选最优,最终输出3张高质量图片及评估报告。仅限内部或显式命令调用。
用户输入/generate-slide命令 父级媒体工作流内部触发
opencode/skills/generate-slide/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill generate-slide -g -y
SKILL.md
Frontmatter
{
    "name": "generate-slide",
    "description": "Generate project intro slides with Nano Banana Pro. Internal\/manual workflow only; use from an explicit \/generate-slide command or a parent media workflow."
}

Generate Slide Skill

プロジェクトの内容を紹介・説明する1枚スライド画像を、Nano Banana Pro(Gemini 3 Pro Image Preview)API で自動生成します。

起動契約

このスキルは user-invocable: false かつ disable-model-invocation: true です。 通常のユーザー発話(例: 「スライド作って」)から Claude が自動選択する前提ではありません。

  • 明示的な /generate-slide コマンド、または親メディアワークフローから内部的に起動される時だけ使います。
  • allowed-tools は Claude Code 用です。Claude ではユーザー確認に AskUserQuestion を使えます。
  • Codex mirror では同等の確認は request_user_input 相当の計画モード入力に読み替えます。通常実行でそのツールがない場合は、既定値を提示して停止せず進め、重要な未確定事項だけユーザーへ確認します。
  • disable-model-invocation: true は「説明文だけを見てモデルが勝手に起動しない」という意味です。slash や親 workflow から明示起動された場合は本文手順に従います。

概要

3パターン x 各2枚候補 = 計6枚生成 → パターンごとに品質チェック → NG ならリトライ → 各パターンの最良1枚、計3枚を出力。

前提条件

  • GOOGLE_AI_API_KEY 環境変数が設定済み
  • Google AI Studio で Nano Banana Pro(Gemini 3 Pro Image Preview)が有効化済み

機能詳細

機能 詳細
スライド画像生成 See references/slide-generator.md
品質判定 See references/slide-quality-check.md

実行フロー

/generate-slide
    |
    +--[Step 1] 情報収集
    |   +-- ユーザー指定テキスト or コードベース自動分析(README, package.json 等)
    |   +-- プロジェクト名・概要・主要機能・技術スタックを抽出
    |
    +--[Step 2] 仕様確認(AskUserQuestion)
    |   +-- サイズ・アスペクト比(デフォルト: 16:9 / 2K)
    |   +-- トーン(テック、カジュアル、コーポレート等)
    |   +-- 強調したいポイント(曖昧な場合のみ質問)
    |
    +--[Step 3] 3パターン x 2枚生成(Nano Banana Pro API x 6回)
    |   +-- Pattern A: Minimalist(2枚)
    |   +-- Pattern B: Infographic(2枚)
    |   +-- Pattern C: Hero Visual(2枚)
    |
    +--[Step 4] パターンごとに品質チェック
    |   +-- 各パターンの2枚を Claude が Read で読み込み
    |   +-- 5段階スコアリング → 高い方を採用候補
    |   +-- 両方スコア2以下 → プロンプト改善してリトライ(最大3回)
    |   +-- リトライ上限到達 → ユーザーに報告、続行 or スキップを選択
    |
    +--[Step 5] 最良3枚を出力
        +-- 各パターンのベスト1枚を selected/ にコピー
        +-- 結果一覧(パス + スコア + 評価コメント)をユーザーに提示

デザインパターン

パターン コンセプト 特徴
Minimalist 余白とタイポグラフィ主体 clean, whitespace, typography-driven, elegant
Infographic データ/フロー可視化 data visualization, metrics, flow diagram, structured
Hero Visual 大ビジュアル + キャッチコピー bold visual, impactful, hero image, catchy headline

出力先

out/slides/
+-- minimalist_1.png       # Pattern A 候補1
+-- minimalist_2.png       # Pattern A 候補2
+-- infographic_1.png      # Pattern B 候補1
+-- infographic_2.png      # Pattern B 候補2
+-- hero_1.png             # Pattern C 候補1
+-- hero_2.png             # Pattern C 候補2
+-- selected/
|   +-- minimalist.png     # Pattern A 最良
|   +-- infographic.png    # Pattern B 最良
|   +-- hero.png           # Pattern C 最良
+-- quality-report.md      # 品質チェック結果レポート

実行手順

Step 1: 情報収集

プロジェクト情報を以下の優先順位で収集:

  1. ユーザー指定テキスト: 引数でプロジェクト説明が渡された場合はそれを使用
  2. コードベース自動分析: 引数がない場合、以下を自動分析
    • README.md — プロジェクト概要
    • package.json / Cargo.toml / pyproject.toml — プロジェクト名・説明・依存関係
    • CLAUDE.md — プロジェクト構成・目的
    • Plans.md — 進行中のタスク(存在する場合)

抽出する情報:

項目
プロジェクト名 Claude Code Harness
概要(1-2文) Claude Code を Plan-Work-Review で自律運用するプラグイン
主要機能(3-5個) スキル管理、品質チェック、並列実行
技術スタック TypeScript, Node.js, Claude Code Plugin
カラー(あれば) ブランドカラー or 推測

Step 2: 仕様確認

AskUserQuestion で以下を確認(デフォルト値があるため、曖昧な場合のみ質問):

質問1: スライドのサイズ・アスペクト比は?
  - 16:9 / 2K(推奨)
  - 4:3 / 2K
  - 1:1 / 2K
  - カスタム

質問2: トーンは?
  - テック(ダークテーマ、コード感)
  - カジュアル(明るい、フレンドリー)
  - コーポレート(フォーマル、信頼感)
  - クリエイティブ(大胆、アート寄り)

Step 3: 画像生成

slide-generator.md の手順に従い、3パターン x 2枚 = 6枚を生成。

各パターンの生成は独立しているため、可能な限り並列で curl を実行:

# 並列実行例(3パターン x 2枚)
for pattern in minimalist infographic hero; do
  for i in 1 2; do
    # slide-generator.md の curl パターンを実行
    # → out/slides/${pattern}_${i}.png に保存
  done
done

Step 4: 品質チェック

slide-quality-check.md の基準に従い、各パターンの2枚を評価:

  1. 各画像を Read で読み込み
  2. 5段階スコアリング(情報伝達力、レイアウト、テキスト可読性、プロフェッショナル感、ブランド整合性)
  3. パターン内でスコアが高い方を採用候補
  4. 両方スコア2以下 → プロンプト改善して再生成(最大3回)

Step 5: 結果出力

# 最良画像を selected/ にコピー
mkdir -p out/slides/selected
cp out/slides/minimalist_best.png out/slides/selected/minimalist.png
cp out/slides/infographic_best.png out/slides/selected/infographic.png
cp out/slides/hero_best.png out/slides/selected/hero.png

品質レポート(out/slides/quality-report.md)を生成:

# Slide Quality Report

## 生成情報
- プロジェクト: {project_name}
- 生成日時: {datetime}
- アスペクト比: {aspect_ratio}
- トーン: {tone}

## 結果サマリー

| パターン | 候補1 | 候補2 | 採用 | スコア |
|---------|-------|-------|------|--------|
| Minimalist | 3/5 | 4/5 | 候補2 | 4/5 |
| Infographic | 4/5 | 3/5 | 候補1 | 4/5 |
| Hero Visual | 5/5 | 4/5 | 候補1 | 5/5 |

## 詳細評価
...

エラーハンドリング

GOOGLE_AI_API_KEY 未設定

GOOGLE_AI_API_KEY が設定されていません。

設定方法:
1. Google AI Studio でAPIキーを取得: https://ai.google.dev/aistudio
2. export GOOGLE_AI_API_KEY="your-api-key"

全パターンでリトライ上限到達

AskUserQuestion で選択肢を提示:

パターン {pattern} の画像が3回のリトライでも基準を満たしませんでした。

選択肢:
1. 最も高スコアの画像を採用して続行
2. このパターンをスキップ
3. プロンプトを手動で指定して再生成

関連スキル

  • generate-video — プロダクトデモ動画生成(画像生成エンジンを共有)
  • notebookLM — ドキュメント・スライド生成(別アプローチ)
通过显式命令或工作流内部调用,基于Remotion自动生产品牌演示视频。流程涵盖代码分析、场景规划、素材生成及并行渲染,支持多种漏斗阶段适配。
用户输入/generate-video命令 父级媒体工作流触发
opencode/skills/generate-video/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill generate-video -g -y
SKILL.md
Frontmatter
{
    "name": "generate-video",
    "description": "Auto-generate product demo videos. Internal\/manual workflow only; use from an explicit \/generate-video command or a parent media workflow. Requires Remotion setup."
}

Generate Video Skill

プロダクト説明動画の自動生成を担当するスキル群です。

起動契約

このスキルは user-invocable: false かつ disable-model-invocation: true です。 通常のユーザー発話(例: 「動画を作って」)で Claude が自動選択する前提にはしません。

  • 明示的な /generate-video コマンド、または親メディアワークフローから内部的に起動される時だけ使います。
  • allowed-tools は Claude Code 用です。Claude ではユーザー確認に AskUserQuestion を使えます。
  • Codex mirror では同等の確認は request_user_input 相当の計画モード入力に読み替えます。通常実行でそのツールがない場合は、既定値を提示して停止せず進め、重要な未確定事項だけユーザーへ確認します。
  • disable-model-invocation: true は「説明文だけを見てモデルが勝手に起動しない」という意味です。slash や親 workflow から明示起動された場合は本文手順に従います。

概要

/generate-video コマンドの内部で使用されるスキルです。 コードベース分析 → シナリオ提案 → 並列生成のフローを実行します。

機能詳細

機能 詳細
ベストプラクティス See references/best-practices.md
コードベース分析 See references/analyzer.md
シナリオプランニング See references/planner.md
並列シーン生成 See references/generator.md
視覚効果ライブラリ See references/visual-effects.md
AI画像生成 See references/image-generator.md
画像品質判定 See references/image-quality-check.md

Prerequisites

  • Remotion がセットアップ済み(/remotion-setup
  • Node.js 18+
  • (オプション)GOOGLE_AI_API_KEY - AI画像生成用

/generate-video フロー

/generate-video
    │
    ├─[Step 1] 分析(analyzer.md)
    │   ├─ フレームワーク検出
    │   ├─ 主要機能検出
    │   ├─ UIコンポーネント検出
    │   └─ プロジェクト資産解析(Plans.md, CHANGELOG等)
    │
    ├─[Step 2] シナリオ提案(planner.md)
    │   ├─ 動画タイプ自動判定
    │   ├─ シーン構成提案
    │   └─ ユーザー確認
    │
    ├─[Step 2.5] 素材生成(image-generator.md)← NEW
    │   ├─ 素材必要判定(イントロ、CTA等)
    │   ├─ Nano Banana Pro で2枚生成
    │   ├─ Claude が品質判定(image-quality-check.md)
    │   └─ OK → 採用 / NG → 再生成(最大3回)
    │
    └─[Step 3] 並列生成(generator.md)
        ├─ シーン並列生成(Task tool)
        ├─ 統合 + トランジション
        └─ 最終レンダリング

実行手順

  1. ユーザーが /generate-video を実行
  2. Remotion セットアップ確認
  3. analyzer.md でコードベース分析
  4. planner.md でシナリオ提案 + ユーザー確認
  5. generator.md で並列生成
  6. 完了報告

動画タイプ(ファネル別)

タイプ ファネル 長さ目安 自動判定条件 構成の芯
LP/広告ティザー 認知〜興味 30-90秒 新規プロジェクト 痛み→結果→CTA
Introデモ 興味→検討 2-3分 UI変更検出 1ユースケース完走
リリースノート 検討→確信 1-3分 CHANGELOG更新 Before/After重視
アーキテクチャ解説 確信→決裁 5-30分 大規模構造変更 実運用+証拠
オンボーディング 継続・活用 30秒-数分 初回セットアップ Aha体験への最短パス

詳細: references/best-practices.md

シーンテンプレート

90秒ティザー(LP/広告向け)

時間 シーン 内容
0-5秒 Hook 痛み or 望む結果
5-15秒 Problem+Promise 対象ユーザーと約束
15-55秒 Workflow 象徴ワークフロー
55-70秒 Differentiator 差別化の根拠
70-90秒 CTA 次の一手

3分Introデモ(検討向け)

時間 シーン 内容
0-10秒 Hook 結論+痛み
10-30秒 UseCase ユースケース宣言
30-140秒 Demo 実画面で完走
140-170秒 Objection よくある不安1つ潰す
170-180秒 CTA 行動喚起

共通シーン

シーン 推奨時間 内容
イントロ 3-5秒 ロゴ + タグライン
機能デモ 10-30秒 Playwrightキャプチャ
アーキテクチャ図 10-20秒 Mermaid → アニメーション
CTA 3-5秒 URL + 連絡先

詳細テンプレート: ${CLAUDE_SKILL_DIR}/references/best-practices.md

音声同期ルール(重要)

ナレーション付き動画では以下を厳守:

ルール
音声開始 シーン開始 + 30f(1秒待機)
シーン長さ 30f + 音声長さ + 20f余白
トランジション 15f(隣接シーンとオーバーラップ)
シーン開始計算 前シーン開始 + 前シーン長 - 15f

事前確認: ffprobe で音声長さを確認してからシーン設計

詳細: ${CLAUDE_SKILL_DIR}/references/generator.md

BGM サポート

項目 推奨値
ナレーションあり bgmVolume: 0.20 - 0.30
ナレーションなし bgmVolume: 0.50 - 0.80
ファイル配置 public/BGM/

詳細: ${CLAUDE_SKILL_DIR}/references/generator.md

字幕サポート

ルール
字幕開始 音声開始と同じ
字幕duration 音声長 + 10f
フォント Base64埋め込み推奨

詳細: ${CLAUDE_SKILL_DIR}/references/generator.md

視覚効果ライブラリ

インパクトのある動画向けエフェクト集:

エフェクト 用途
GlitchText Hook、タイトル
Particles 背景、CTA収束
ScanLine 解析中演出
ProgressBar 並列処理表示
3D Parallax カード表示

詳細: references/visual-effects.md

Notes

  • Remotion未セットアップの場合は /remotion-setup を案内
  • 並列生成数はシーン数に応じて自動調整(max 5)
  • 生成された動画は out/ ディレクトリに出力
  • AI生成画像は out/assets/generated/ に保存
  • GOOGLE_AI_API_KEY 未設定時は画像生成をスキップ(既存素材 or プレースホルダー使用)
标准化gogcli操作Google Workspace文件。通过URL解析ID、验证认证,优先执行只读检查,经确认后才进行写入操作,涵盖Drive/Sheets/Docs/Slides的元数据查询与导出。
需要操作Google Drive文件 读取或更新Google Sheets表格 查看或导出Google Docs文档 处理Google Slides演示文稿 从URL提取Google文件ID
opencode/skills/gogcli-ops/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill gogcli-ops -g -y
SKILL.md
Frontmatter
{
    "name": "gogcli-ops",
    "description": "gogcli for Google Workspace ops (Drive\/Sheets\/Docs\/Slides). Triggers: list\/search\/export\/read\/update Google files, URL\/ID parsing, auth selection. Skip for: non-Google storage, generic shell."
}

Gogcli Ops

Overview

Standardize gogcli usage: verify auth, resolve IDs from URLs, default to read-only checks, then run the minimum command needed.

Quick start

  • Confirm gogcli is available: gog --version
  • List accounts and pick one explicitly if more than one: gog auth list
  • Resolve URL to ID with python3 scripts/gog_parse_url.py "<url-or-id>"
  • Run a read-only metadata command first (Drive/Sheets/Docs/Slides)

Workflow decision tree

  1. Identify target type: sheet | doc | slide | file | folder | id | unknown via scripts/gog_parse_url.py.
  2. Choose the smallest read-only command to confirm access:
    • Sheets: gog sheets metadata <spreadsheetId>
    • Docs: gog docs info <docId>
    • Slides: gog slides info <presentationId>
    • Drive file/folder: gog drive get <fileId> or gog drive permissions <fileId>
  3. Only proceed to write operations (update/append/move/share/delete) after explicit user confirmation.

Core tasks

Auth and account selection

  • Show stored accounts: gog auth list
  • Show auth configuration: gog auth status
  • Add/authorize account: gog auth add <email>
  • Always use --account <email> when multiple accounts exist.

Resolve IDs from URLs

  • Parse a URL or ID:
    • python3 scripts/gog_parse_url.py "<url-or-id>"
  • If output type is unknown, ask for a direct ID or a different URL.

Drive (files/folders)

  • List root or a folder: gog drive ls
  • Search by query: gog drive search "<query>"
  • Get metadata: gog drive get <fileId>
  • Download/export: gog drive download <fileId>
  • Permissions check: gog drive permissions <fileId>

Sheets

  • Metadata: gog sheets metadata <spreadsheetId>
  • Read values: gog sheets get <spreadsheetId> <range>
  • Export: gog sheets export <spreadsheetId>
  • Write operations (update/append/clear/format): require explicit confirmation and exact range.

Docs

  • Metadata: gog docs info <docId>
  • Read text: gog docs cat <docId>
  • Export: gog docs export <docId>

Slides

  • Metadata: gog slides info <presentationId>
  • Export: gog slides export <presentationId>

Output modes

  • Use --plain for stable TSV output.
  • Use --json when a caller wants structured output.
  • Use --no-input in non-interactive flows to avoid hanging.

Error handling

  • 403/404: verify account (gog auth list), check permissions (gog drive permissions <fileId>), and confirm the ID.
  • If access fails, request the user to share the file with the selected account or provide the correct account.

Resources

  • See ${CLAUDE_SKILL_DIR}/references/gogcli-cheatsheet.md for a compact command list.
  • Use scripts/gog_parse_url.py to normalize URLs into IDs before running commands.
面向非技术人员生成单页HTML验收演示,基于预设标准自动计算ship/wait/reject建议。仅读取当前项目数据,支持跨项目需显式开启。
接受判断 ship/wait/reject决策 验收评审 acceptance demo
opencode/skills/harness-accept/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-accept -g -y
SKILL.md
Frontmatter
{
    "name": "harness-accept",
    "description": "Acceptance Demo HTML for ship\/wait\/reject decision — reads stored acceptance_criteria. Triggers: 受け入れ判断, ship\/wait\/reject, 検収レビュー, acceptance demo. Skip for: implementation, review, release."
}

harness-accept

非エンジニアの発注者・プロデューサー職向けに、実装完了タスクの受け入れ判断 (ship / wait / reject) を HTML 1 枚 で提示するスキル。 発注者の認知負荷ピーク (3) 受け入れ判断の段階で使う。

Phase 65.1.x (harness-plan-brief) の対構造として動作し、Plan Brief で承認した acceptance_criteria を read 側で取り戻して評価する。

Quick Reference

  • Acceptance Demo を作って」 → このスキル
  • 受け入れ判断したい」 → このスキル
  • ship/wait/reject 判定」 → このスキル

責任境界

範囲 このスキルの責務
検索 現プロジェクトのみ (project: <current>, strict_project: true を必ず指定)
クロスプロジェクト やらない (Phase 65.3 以降で --cross-project-group <name> flag で opt-in 解放)
Plan Brief 連携 user_request_hash を join key として personal-preference.v1 (Phase 65.1.4) を read
書き込み やらない (Acceptance 承認後の memory write は accept-record-decision.sh の責務)
recommendation 算出 verified / 全 criteria の比率で 0.8 / 0.5 閾値判定。ロジックは scripts/render-html.sh 直前で計算

入力

引数 [task-description] にユーザーの request を渡す (Plan Brief 時と同じ文を使う)。 引数なしの場合は対話形式で受け取る。

出力

出力 パス 形式
Acceptance Demo HTML .claude/state/views/accept-<timestamp>.html 単独で開ける HTML (no server, no JS framework)
Acceptance context JSON .claude/state/views/accept-<timestamp>.context.json acceptance-context.v1 schema

Schema: acceptance-context.v1

{
  "schema": "acceptance-context.v1",
  "user_request": "string",
  "user_request_hash": "sha256 hex (Plan Brief 側の personal-preference.v1 と join)",
  "demo_artifacts": [
    { "kind": "video|screenshot|text", "path": "string" }
  ],
  "verified_criteria": [
    { "name": "string", "passed": true, "evidence": "string" }
  ],
  "tdd_verified": "yes|no|not-required|skip:<reason>",
  "unverified_caveats": ["string"],
  "past_issue_patterns": [
    { "pattern_id": "P5", "title": "string", "verified_in_current_task": true }
  ],
  "recommendation": "ship|wait|reject",
  "recommendation_evidence": ["string"],
  "project": "string",
  "generated_at": "ISO8601"
}

完全 schema は schemas/acceptance-context.v1.schema.json を参照。

Recommendation 算出ロジック

verified_count    = count of verified_criteria where passed=true
total_criteria    = count of verified_criteria
ratio             = verified_count / total_criteria  (total=0 のときは 0)

  ratio >= 0.8 → "ship"
  ratio >= 0.5 → "wait"
  ratio <  0.5 → "reject"
  total = 0    → "reject" (criteria 0 件は判定不能、安全側 reject)

評価根拠は recommendation_evidence に literal な数値で残す。 例: "verified 4 件 / 全 5 件 (80%) → ship 閾値以上"

Execution Flow

スキル起動時、Claude は以下の手順で動作する。

Step 1: project name と user_request_hash を解決

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)")"
USER_REQUEST_HASH="$(printf '%s' "$USER_REQUEST" | sha256sum | awk '{print $1}')"

PROJECT_NAME が空 (git 外) の場合は current をデフォルトに使う。

Step 2: harness-mem を project-only で検索し、Plan Brief 側 record を取得 (default)

引数に --cross-project-group <name> flag がない場合 (default behavior):

mcp__harness__harness_mem_search を以下のパラメータで呼び出す:

project: <PROJECT_NAME>
strict_project: true
tags: ["personal-preference", "plan-brief-approval"]
limit: 10

重要: project パラメータは必須strict_project: true を指定し、cross-project な検索は絶対に行わない

取得した record を data.user_request_hash == <USER_REQUEST_HASH> でフィルタし、最も新しい 1 件を選ぶ。 これが Plan Brief 時の承認内容 (chosen_option / acceptance_criteria 等) を保持している。

Step 2 (alt): cross-project search (Phase 65.3.5 opt-in)

引数に --cross-project-group <name> flag がある場合のみ、横断 group 内の他プロジェクトでの 類似 plan-brief-approval / acceptance-decision 履歴を取得する (D43 Option α):

MEMBERS_JSON="$(bash scripts/load-cross-project-groups.sh --group "<name>" 2>/dev/null)" || {
  echo "ERROR: cross-project group not found: <name>" >&2
  exit 1
}

MEMBERS_JSON[] の場合は default の単一 project search に fallback。

MEMBERS_JSON が非空の場合、各 member project ごとに MCP search を 1 回発行:

for each project in MEMBERS_JSON:
  mcp__harness__harness_mem_search(
    project: <member>,
    strict_project: true,
    tags: ["personal-preference", "plan-brief-approval"],
    limit: 10
  )

結果を client 側でマージし、data.user_request_hash == <USER_REQUEST_HASH> でフィルタ。 hash 一致は基本的に同一 user request 由来のため複数 project での重複は稀だが、念のため id 単位で dedupe。

cross-project 由来の record を採用すると過去他案件の chosen_option / acceptance_criteria が混入する 可能性があるため、HTML 出力時は --with-redaction flag を必ず使用 すること:

bash scripts/render-html.sh --template accept ... --with-redaction

詳細は .claude/rules/cross-repo-handoff.md の「Phase 65.3 実装決定事項 (D43)」を参照。

Step 3: 過去の問題パターンを取得 (Phase 65.2.2 委譲)

bash scripts/accept-past-issues.sh --project "$PROJECT_NAME" --task "$USER_REQUEST" > "$PAST_ISSUES_JSON"

このスクリプトは patterns.md (P1-P33) と過去の acceptance-context.v1 record を semantic search し、 最大 3 件の past-issue.v1 を返す。各々 verified_in_current_task: bool 付き。

Step 4: verified_criteria を組み立てる

Plan Brief 時の acceptance_criteria 各項目について、現タスクの状態を評価する。 ユーザー (もしくは Claude) が「verify した evidence」を提示し、evidence 文字列を埋める。

evidence が空文字列の場合、HTML 上で警告表示される (DoD c)。

TDD が必要な task では、Acceptance Demo に TDD verified: yes|no の 1 行を必ず出す。 TDD 不要または skip の場合は TDD verified: not-required または TDD verified: skip:<reason> と表示する。 yes にできるのは .claude/state/tdd-red-log/<task-id>.jsonl の Red 証跡、または literal failing test output が確認できる時だけ。

Step 5: recommendation を算出する

上記「Recommendation 算出ロジック」に従って ship / wait / reject を決定する。

Step 6: HTML を生成する

scripts/render-html.sh (Phase 65.1.1) を templates/html/accept.html.template で呼ぶ:

bash scripts/render-html.sh \
  --template accept \
  --data "$CONTEXT_JSON" \
  --out "$HTML_OUT"

Step 7: ブラウザで自動 open する

scripts/plan-brief-open.sh (Phase 65.1.2 で導入された 汎用 OS dispatcher) を再利用:

bash scripts/plan-brief-open.sh "$HTML_OUT"

: スクリプト名に「plan-brief」が入っているが、実体は OS 別 browser open dispatcher で kind 中立。 Phase 65.1.2 で先に導入されたため historical name。Layer 3 (HTML 直前最終 scan) 等の他用途でも再利用される。 BROWSER=true の env が設定されている場合 (CI 環境)、open は skip され printf で path だけ出力する。

Step 8: ユーザー判断待ち

「ship / wait / reject の recommendation を採用するか、override するか」を確認する。 判断後の memory write は別スキル (accept-record-decision.sh、Phase 65.2.3) の責務。

失敗時の挙動

失敗 挙動
mcp__harness__harness_mem_search 不達 警告を表示し、verified_criteria を空配列で続行 (recommendation = reject)
Plan Brief 側 record が見つからない warning を出し、verified_criteria を空配列で続行
git rev-parse --show-toplevel 失敗 PROJECT_NAME=current で続行
accept-past-issues.sh 失敗 past_issue_patterns: [] で続行 (best-effort)
render-html.sh 失敗 エラーを stderr に出力し exit 1

Related

  • harness-plan-brief (Phase 65.1.2) — 計画段階の対構造スキル。本スキルは Plan Brief 時の personal-preference.v1user_request_hash で join して read
  • scripts/accept-past-issues.sh (Phase 65.2.2) — 過去の問題パターン取得 (read side)
  • scripts/accept-record-decision.sh (Phase 65.2.3) — 承認 memory write (acceptance-decision.v1)
  • scripts/render-html.sh (Phase 65.1.1) — HTML テンプレートエンジン
  • scripts/plan-brief-open.sh (Phase 65.1.2) — 汎用 OS browser dispatcher
  • harness-progress skill (Phase 65.4.1) — 進行管理スキル (3 surface のうち真ん中)
结合/loop和ScheduleWakeup实现长时间任务的循环执行。每次唤醒时刷新上下文,调用harness-work完成单任务闭环。支持多种pacing模式、最大循环数控制及状态管理,适用于需自主持续运行的场景。
长时间运行任务 需要循环执行的工作流 自动唤醒重入
opencode/skills/harness-loop/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-loop -g -y
SKILL.md
Frontmatter
{
    "name": "harness-loop",
    "description": "Long-running task loop using \/loop (Claude Code dynamic mode) and ScheduleWakeup to re-enter with fresh context on each wake-up. Internally invokes harness-work through Agent. Trigger: long-running, loop, wake-up, autonomous. Do NOT load for: one-shot task execution, review, release, planning."
}

harness-loop

/loop(CC dynamic mode)と ScheduleWakeup を組み合わせ、 長時間タスクを wake-up 毎に fresh context で再入実行 するメタスキル。

各 wake-up で harness-work --breezing を Agent 経由で呼び出し、 1 サイクル = 1 タスク完結の再入可能ループを構成する。

Long-session helpers (CC 2.1.108+): 人が戻ってきたら /recap で要約を取り直してから /harness-loop status を見る。 長めの離席や再入が多い運用では ENABLE_PROMPT_CACHING_1H=1 を優先する。

長時間セッション推奨 (CC 2.1.108+): セッション長が 30 分を超える見込みの場合、plugin bundle root 解決後に bash "${HARNESS_PLUGIN_ROOT}/scripts/enable-1h-cache.sh" を実行して 1 時間 prompt cache を opt-in すること。

Codex 0.123.0 automatic bug fix inheritance: manual shell follow-up queue と /copy after rollback は Codex 本体の TUI 修正として自動継承する。 loop runner は追加入力 queue、copy wrapper、rollback workaround を追加しない。 長時間作業中に manual shell へ follow-up を投げた時の queueing は Codex runtime に任せる。

Quick Reference

入力 動作
/harness-loop all 全未完了タスクをループ実行(default: max 8 サイクル)
/harness-loop all --max-cycles 3 3 サイクルで停止
/harness-loop 41.1-41.3 --pacing ci タスク範囲を CI pacing で実行
/harness-loop all --plan roadmap named Plans の roadmap を対象にループ実行
/harness-loop all --pacing night 深夜バッチ(3600s 間隔)
/harness-loop status 進行中ランナーの状態確認
/harness-loop stop 進行中ランナーの停止要求

オプション

オプション 説明 デフォルト
all 全未完了タスクを対象 -
N-M タスク番号範囲指定 -
--plan NAME plans/manifest.json の named plan を使う active/default
--max-cycles N 最大サイクル数 8
--pacing <mode> wake-up 間隔モード worker(270s)

pacing 値マッピング

pacing delaySeconds 用途
worker 270 Worker 完了直後(5 min 以内で cache warm)
ci 270 CI 短時間ジョブ待ち
plateau 1200 20 min(plateau 検知後の再試行間隔)
night 3600 深夜の長時間放置

制約: ScheduleWakeupdelaySeconds はランタイムで [60, 3600] に clamp される。 worker / ci の 270s および night の 3600s はこの範囲内。 plateau の 1200s も範囲内。値を直接指定する場合は必ず 60 以上 3600 以下にすること。

起動フロー(wake-up 毎のエントリ)

詳細版: ${CLAUDE_SKILL_DIR}/references/flow.md

plugin bundle root 解決

harness-loop は host project の cwd ではなく、plugin bundle root 配下の helper script を呼ぶ。 たとえると、作業机(host project)と工具箱(plugin bundle)を分けて扱う。

各 wake-up の冒頭で次の順に HARNESS_PLUGIN_ROOT を決める:

  1. CLAUDE_PLUGIN_ROOT があり、scripts/ を含むならそれを使う
  2. CLAUDE_PLUGIN_ROOT がなければ、CLAUDE_SKILL_DIR から plugin bundle root を逆算する
    • skills/harness-loop 配布なら ${CLAUDE_SKILL_DIR}/../..
    • .agents/skills/harness-loop mirror 配布なら ${CLAUDE_SKILL_DIR}/../../..
  3. どちらでも解けない場合は停止し、CLAUDE_PLUGIN_ROOT を plugin bundle root に設定して再実行する

Plans.md.claude/state/... は host project 側に置く。 helper script だけを ${HARNESS_PLUGIN_ROOT}/scripts/... から呼ぶ。

複数 Plans.md がある repo では、長時間 run の起動時に --plan NAME を明示する。 runner は開始時に解決した Plans file を cycle 間で保持するため、途中で active plan を切り替えない。

wake-up
  │
  ▼
[Step 0] plugin bundle root を HARNESS_PLUGIN_ROOT に解決
  CLAUDE_PLUGIN_ROOT が有効ならそれを使用
  なければ CLAUDE_SKILL_DIR から plugin bundle root を逆算
  ※ host project cwd の scripts/ は参照しない
  │
  ▼
[Step 1] Plans.md を先に読む
  cc:WIP / cc:TODO の先頭タスクを特定(task_id を得る)
  ※ 未完了タスクなし → ループ終了(正常完了)
  │
  ▼
[Step 2] sprint-contract 存在確認 & 生成
  .claude/state/contracts/${task_id}.sprint-contract.json の有無を確認
  無ければ node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" ${task_id} で生成
  生成直後(初回のみ): bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" <contract-path> \
    --check "wake-up 自動承認(harness-loop のため DoD を reviewer 観点で確認)" \
    --approve  ← draft → approved に昇格
  (既存 contract は approved 済みのためスキップ)
  │
  ▼
[Step 3] contract readiness チェック
  bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" <contract-path>
  │
  ▼
[Step 4] Resume pack 再読込
  harness-mem resume-pack(コンテキスト再注入)
  │
  ▼
[Step 4.5] Advisor consult(必要時のみ)
  高リスク task の初回実行前 / 同じ原因の 2 回目失敗後 / plateau 直前で
  `advisor-request.v1` を組み立てて相談する
  │
  ├── PLAN        → 次回 executor prompt に advice を prepend
  ├── CORRECTION  → 局所修正の指示として再実行
  └── STOP        → その場で loop を停止し、理由を残す
  │
  ▼
[Step 5] 1 タスクサイクル実行
  worker_result = Agent(
      subagent_type="claude-code-harness:worker",  # worker エージェント(harness-work ではない)
      prompt="タスク: ${task_id}\nDoD: <Plans.md から抽出>\ncontract_path: ${CONTRACT_PATH}\nmode: breezing",
      isolation="worktree",
      run_in_background=false
  )
  # worker_result: { commit, branch, worktreePath, files_changed, summary }
  │
  ▼
[Step 5.5] Lead レビュー実行
  diff_text = git show worker_result.commit
  verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
  ※ 詳細は flow.md 参照
  │
  ▼
[Step 5.6] APPROVE → main に cherry-pick / REQUEST_CHANGES → 修正ループ(contract の max_iterations 回、デフォルト 3)
  APPROVE: git cherry-pick → Plans.md を cc:完了 [{hash}] に更新 → feature branch 削除
  REQUEST_CHANGES x MAX_REVIEWS 後も否決: エスカレーション
  ※ 詳細は flow.md 参照
  │
  ▼
[Step 6] plateau 判定
  bash "${HARNESS_PLUGIN_ROOT}/scripts/detect-review-plateau.sh" ${current_task_id}
  │
  ├── PIVOT_REQUIRED(exit 2)  → ループ停止 + ユーザーエスカレーション
  ├── INSUFFICIENT_DATA(exit 1)→ 続行
  └── PIVOT_NOT_REQUIRED(exit 0)→ 続行
  │
  ▼
[Step 7] サイクル数チェック
  │
  ├── cycles >= max_cycles → ループ停止(上限到達)
  │
  ▼
[Step 8] checkpoint 記録
  harness_mem_record_checkpoint(
      session_id, title, content=サイクル結果サマリ
  )
  │
  ▼
[Step 9] 次 wake-up 予約
  ScheduleWakeup(
      delaySeconds=<pacing値>,
      prompt="/harness-loop <同じ引数>",
      reason="サイクル {N}/{max} 完了 — 次タスクへ"
  )

サイクル停止条件

条件 停止種別 対応
cycles >= max_cycles 正常停止(上限到達) ユーザーに報告
PIVOT_REQUIRED(exit 2) 異常停止(エスカレーション) ユーザーに判断を仰ぐ
未完了タスクなし 正常停止(全完了) 完了報告を出力

--max-cycles 3 指定時は 3 サイクル完了後に停止する。 default(--max-cycles 8)時は 8 サイクルで停止する。

途中報告 / Silence Policy

長時間 loop では、途中報告は「安心のための heartbeat」ではなく「判断が変わった時の通知」として扱う。 Codex 0.123.0 の background agent が transcript delta を受け取れる環境では、delta 到着だけを理由に返答せず、必要ない時は明示的に沈黙する。

報告するもの:

  • cycle 完了、上限到達、全完了、blocked
  • validation failure、review REQUEST_CHANGES、plateau、advisor STOP
  • advisor / reviewer drift、contract readiness failure
  • user が status を求めた時の要約

沈黙してよいもの:

  • transcript delta だけが増え、task / review / advisor の状態が変わっていない時
  • log に残る細かな stdout だけが増えた時
  • 次 wake-up までの pacing 待機中

default は「1 cycle につき最終報告 1 回」。 ただし Advisor request 未応答、Reviewer result 未到着、plateau 直前の警告は silence policy より優先して報告する。

/loop との連携

このスキルは CC の /loop(dynamic mode)と組み合わせて使用する。

/loop を有効にすると CC は自律的な再入実行を継続し、 各サイクルの末尾で ScheduleWakeup を呼ぶことで次回 wake-up を予約する。

/loop のセンチネル: <<autonomous-loop-dynamic>>

各 wake-up は fresh context で開始されるため、前サイクルのコンテキスト汚染を防ぐ。 harness-mem resume-pack による resume pack 再読込が必須(Step 2)。

checkpoint 記録

harness_mem_record_checkpoint スキーマ:

{
  "session_id": "<セッション ID>",
  "title": "harness-loop cycle {N}/{max}: {タスク名}",
  "content": "cycle_result の 1 行サマリ + commit hash"
}

Advisor Strategy

この skill の主役は executor で、advisor は必要な時だけ呼ぶ。 たとえると、担当者が普段は自走し、難所だけベテランに相談する形。

相談条件は固定で、自然言語の「自信が低い」判定は使わない。

条件 相談するか
needs-spike / security-sensitive / state-migration する
<!-- advisor:required --> する
同じ原因の 2 回目失敗 する
plateau で停止する直前 する

同じ trigger は 1 回しか相談しない。 その判定には trigger_hash = task_id + reason_code + normalized_error_signature を使う。

関連スキル

  • harness-work — 各サイクルで実行されるタスク実装スキル
  • harness-plan — ループ対象タスクの計画
  • harness-review — 個別タスクのレビュー
  • session-control — セッション状態管理
用于可视化分析项目后端AI工具(Claude/Codex/Cursor)的使用情况与委托频率。支持生成HTML评分卡或终端摘要,仅按需触发,不介入实施、审查或规划工作。
查看后端AI使用统计 询问各AI工具调用次数 要求展示累计使用数据
opencode/skills/harness-orchestration/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-orchestration -g -y
SKILL.md
Frontmatter
{
    "name": "harness-orchestration",
    "description": "Backend orchestration scorecard (Claude\/Codex\/Cursor) — HTML + terminal summary. Triggers: scorecard, backend usage, 自慢. Skip for: implementation, review, planning, release."
}

Harness Orchestration Scorecard

このセッション/プロジェクトの backend 活用度(Claude=ホスト / Codex / Cursor への委譲)を可視化する read-only スキル。 記録の正本は .claude/state/orchestration-ledger.jsonl(companion が委譲ごとに追記、Phase 90.1.1)と .claude/state/orchestration-totals.json(セッション終了/完了時に冪等 roll up、Phase 90.1.2)。

表示は on-demand のみ。作業中は出さず、見たい時にこのスキルで出す。 全タスク完了時の 1 回だけは task-completed が自動でターミナルサマリを出す(このスキルとは別経路)。

Quick Reference

  • オーケストレーション活用度見せて」→ HTML スコアカードを生成して開く
  • どのバックエンド使った」「Codex/Cursor どれだけ」→ ターミナルサマリ
  • 累計見せて」「自慢できるやつ」→ HTML スコアカード(lifetime totals が主役)

Deliverables

出力 生成物
HTML スコアカード scripts/orchestration-scorecard.sh --format html-datascripts/render-html.sh --template orchestration で単一 HTML
ターミナルサマリ scripts/orchestration-scorecard.sh --format terminal(3-5 行)

tri-state: used(count>0)/ available(設定済み未使用)/ not-configured(binary 不在=中立、壊れではない)。 委譲ゼロなら "no delegations observed" に degrade。

Execution

helper script は plugin bundle root から呼ぶ:

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"

ターミナルサマリ(--terminal

bash "${HARNESS_PLUGIN_ROOT}/scripts/orchestration-scorecard.sh" --format terminal

3-5 行を要約してそのまま提示する。

HTML スコアカード(既定 / --out / --no-open

OUT="${1:-.claude/state/orchestration-scorecard.html}"   # --out <path> で上書き
bash "${HARNESS_PLUGIN_ROOT}/scripts/orchestration-scorecard.sh" --format html-data \
  | bash "${HARNESS_PLUGIN_ROOT}/scripts/render-html.sh" --template orchestration --data - --out "$OUT"
  • --no-open 指定がなければ生成後にパスを提示し、ブラウザで開くよう案内する(自動 open は環境依存なのでパス提示を基本とする)
  • redaction は使わない: scorecard データは構造的に非機密(カウント + backend 名 + repo basename + 時刻のみ)。no-secret 保証は上流の ledger 契約が担保する

Related Skills

  • harness-progress — 進捗ダッシュボード(タスク進捗。本スキルは backend 活用度に特化)
  • harness-work / breezing — 実装(backend を実際に使う側)
为项目经理等非技术人员生成计划预览HTML,通过搜索当前项目历史决策与模式辅助理解。触发词包括plan brief、計画概要等。严禁跨项目搜索及执行实施操作。
plan brief planning preview 計画概要 計画レビュー
opencode/skills/harness-plan-brief/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-plan-brief -g -y
SKILL.md
Frontmatter
{
    "name": "harness-plan-brief",
    "description": "Plan Brief HTML for pre-implementation preview (searches harness-mem for past decisions\/patterns). Triggers: plan brief, planning preview, 計画概要, 計画レビュー. Skip for: implementation, review, release."
}

harness-plan-brief

非エンジニアの発注者・プロデューサー職向けに、Claude が着手しようとしている計画を HTML 1 枚 で提示するスキル。 発注者の認知負荷ピーク (1) 計画理解の段階で使う。

Quick Reference

  • Plan Brief を作って」 → このスキル
  • 実装前にざっくり整理」 → このスキル
  • 非エンジニア向けに計画を見せて」 → このスキル

責任境界

範囲 このスキルの責務
検索 現プロジェクトのみ (project: <current>, strict_project: true を必ず指定)
クロスプロジェクト やらない (Phase 65.3 以降で --cross-project-group <name> flag で opt-in 解放)
書き込み やらない (Plan Brief 承認後の memory write は plan-brief-record-decision.sh の責務)
confidence 算出 65.1.3 で実装される scripts/plan-brief-compile.sh に委譲

入力

引数 [task-description] にユーザーの request を渡す。 引数なしの場合は対話形式で受け取る。

出力

出力 パス 形式
Plan Brief HTML .claude/state/views/plan-brief-<timestamp>.html 単独で開ける HTML (no server, no JS framework)
Plan Brief context JSON .claude/state/views/plan-brief-<timestamp>.context.json plan-brief-context.v1 schema

Schema: plan-brief-context.v1

{
  "schema": "plan-brief-context.v1",
  "user_request": "string (ユーザーの request 原文)",
  "my_understanding": "string (Claude の理解を 1-3 段落で)",
  "options": [
    { "name": "string", "summary": "string", "pros": ["string"], "cons": ["string"] }
  ],
  "risks": [
    { "kind": "string", "severity": "info|warn|critical", "description": "string", "mitigation": "string" }
  ],
  "acceptance_criteria": [
    { "id": "string", "description": "string", "verifiable_by": "string" }
  ],
  "tdd_required": "yes|no|skip:<reason>",
  "confidence": 0,
  "confidence_evidence": ["string"],
  "related_decisions": [
    { "id": "string", "title": "string", "relevance": "string" }
  ],
  "similar_past_plans": [
    { "archive_path": "string", "phase": "string", "outcome": "cc:完了|cc:WIP|cc:TODO|skipped", "relevance": "string" }
  ],
  "project": "string",
  "generated_at": "ISO8601"
}

完全 schema は schemas/plan-brief-context.v1.schema.json を参照。

Execution Flow

スキル起動時、Claude は以下の手順で動作する。

Step 1: project name を解決

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)")"

PROJECT_NAME が空 (git 外) の場合は current をデフォルトに使う。

Step 2: harness-mem を project-only で検索する (default)

引数に --cross-project-group <name> flag がない場合 (default behavior):

mcp__harness__harness_mem_search必ず 以下のパラメータで呼び出す:

project: <PROJECT_NAME>
strict_project: true
query: <user request>
expand_links: true
limit: 5

重要: project パラメータは必須。空文字列や null を渡してはならない。 strict_project: true を指定し、cross-project な検索は絶対に行わない。 必要なら tags filter で decision / pattern を絞ってもよいが、project は固定。

過去 decision (D1-D41) / pattern (P1-P33) / Plans archive 28 件から類似案件を最大 5 件取得する。

Step 2 (alt): cross-project search (Phase 65.3.5 opt-in)

引数に --cross-project-group <name> flag がある場合のみ:

D43 Option α (MCP N-call) に従い、以下の手順で cross-project 検索を行う。

# (a) group → member projects に解決 (yaml SSOT)
MEMBERS_JSON="$(bash scripts/load-cross-project-groups.sh --group "<name>" 2>/dev/null)" || {
  echo "ERROR: cross-project group not found: <name>" >&2
  exit 1
}
# MEMBERS_JSON は ["proj1","proj2",...] 形式の JSON 配列

MEMBERS_JSON[] (空配列) の場合は warning を出して default の単一 project search に fallback。

MEMBERS_JSON が非空の場合、各 member project に対して MCP search を 1 回ずつ発行 する:

for each project in MEMBERS_JSON:
  mcp__harness__harness_mem_search(
    project: <member>,
    strict_project: true,
    query: <user request>,
    expand_links: true,
    limit: 5
  )

各 search 結果を client 側でマージ・dedupe (id 単位)・relevance_score 降順 sort し、最大 5 件に絞る。 合計呼び出し数が多くなる (group が 5 project なら 5 回) ため、レイテンシは増える点に注意。

D43 判断 1 の根拠: MCP tool schema には projects: [array]strict_project: false も exposed されていないため、横断検索は client 側 N-call が唯一の選択肢。 詳細は .claude/rules/cross-repo-handoff.md の「Phase 65.3 実装決定事項 (D43)」参照。

cross-project 結果には Layer 2/3 (Phase 65.3.2-65.3.4) の redaction を必ず通すこと:

  • HTML レンダリング時に bash scripts/render-html.sh ... --with-redaction を使用
  • これにより辞書 + NER + final scan の 3 段で固有名詞が漏れない

Step 3: context JSON を組み立てる

scripts/plan-brief-compile.sh (Phase 65.1.3 で実装) を使って、 mem search 結果から plan-brief-context.v1 schema 準拠の JSON を構築する。

65.1.3 が未実装の段階では、Claude が直接 jq で以下を組み立てる:

jq -n \
  --arg req "$USER_REQUEST" \
  --arg proj "$PROJECT_NAME" \
  --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
  '{
    schema: "plan-brief-context.v1",
    user_request: $req,
    my_understanding: "(まだ未着手)",
    options: [],
    risks: [],
    acceptance_criteria: [],
    confidence: 0,
    confidence_evidence: ["(stub) 65.1.3 で算出ロジック実装"],
    tdd_required: "no",
    related_decisions: [],
    similar_past_plans: [],
    project: $proj,
    generated_at: $ts
  }' > "$CONTEXT_JSON"

Step 4: HTML を生成する

scripts/render-html.sh (Phase 65.1.1) を templates/html/plan-brief.html.template で呼ぶ:

HTML には TDD 判定を 1 行で表示する。 形式は tdd_required: yestdd_required: no、または tdd_required: skip:<reason> のいずれかにする。

bash scripts/render-html.sh \
  --template plan-brief \
  --data "$CONTEXT_JSON" \
  --out "$HTML_OUT"

Step 5: ブラウザで自動 open する

scripts/plan-brief-open.sh で OS 別 dispatch:

bash scripts/plan-brief-open.sh "$HTML_OUT"

BROWSER=true の env が設定されている場合 (CI 環境)、open は skip され printf で path だけ出力する。

Step 6: ユーザー承認待ち

「この理解で実装に進んでよいか」を確認する。 承認後の memory write は別スキル (Phase 65.1.4 の plan-brief-record-decision.sh) の責務。

失敗時の挙動

失敗 挙動
mcp__harness__harness_mem_search 不達 警告を表示し、related_decisions / similar_past_plans を空配列で続行
git rev-parse --show-toplevel 失敗 PROJECT_NAME=current で続行
render-html.sh 失敗 エラーを stderr に出力し exit 1
plan-brief-open.sh 失敗 HTML path を stdout に出力するだけで exit 0 (browser open は best-effort)

Related

  • scripts/render-html.sh (Phase 65.1.1) — HTML テンプレートエンジン
  • scripts/plan-brief-compile.sh (Phase 65.1.3) — context compilation
  • scripts/plan-brief-record-decision.sh (Phase 65.1.4) — 承認 memory write
  • harness-accept skill (Phase 65.2.1) — 受け入れ判断スキル (対構造)
  • harness-progress skill (Phase 65.4.1) — 進行管理スキル (対構造)
集成规划、任务管理与进度同步的Skill。支持创建计划、添加/更新任务、同步Plans.md与实现状态。强调基于研究验证的质量契约,对非平凡规划执行多视角团队验证,确保安全性与完整性,不用于代码实现或发布环节。
制定项目计划 添加新任务到Plans.md 标记任务完成 检查并同步实施进度
opencode/skills/harness-plan/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-plan -g -y
SKILL.md
Frontmatter
{
    "name": "harness-plan",
    "description": "HAR: Research-backed, team-validated task planning, Plans.md management, progress sync. Trigger: create a plan, add tasks, update Plans.md, mark complete, check progress. Do NOT load for: implementation, review, release."
}

Harness Plan

Harness の統合プランニングスキル。 以下の3つの旧スキルを統合:

  • planning (plan-with-agent) — アイデア → Plans.md への落とし込み
  • plans-management — タスク状態管理・マーカー更新
  • sync-status — Plans.md と実装の同期確認

Quick Reference

ユーザー入力 サブコマンド 動作
"計画を作って" / /harness-plan create create Spec delta / skip reason → Plans.md task 生成
"タスクを追加して" / /harness-plan add add Plans.md に新タスク追加
"完了にして" / /harness-plan update update タスクマーカーを cc:完了 に変更
"今どこ?" / /harness-plan sync sync 実装とPlans.mdを照合・同期
/harness-sync sync 進捗確認(独立 sync surface と同等)
/harness-plan create create spec.md / Plans.md 二正本の計画作成
/harness-plan list list plans/manifest.json の named Plans を一覧
/harness-plan switch <name> switch active plan を .claude/state/active-plan.json に保存

Literal companion commands(CC 2.1.108+)

  • /recap: 久しぶりに戻った時に要約を取り直してから sync へ入る
  • /undo: /rewind の別名。直前の plan 更新を即座に戻したい時にそのまま使う

サブコマンド詳細

標準の計画品質契約

See references/planning-quality.md

harness-plan は、spec.md product contract and Plans.md task contract の co-required planning output を作る planning surface である。 precedence は spec.md > sub-spec > Plans.md のまま維持する。 Plans.md は task ledger、root spec.md は product contract であり、上下関係は崩さない。 渡された情報をそのまま Plans.md に落とさない。 計画作成や大きな task 追加では、最新情報・既存仕様・記憶・TeamAgent / サブエージェントによる複数視点の議論を確認し、 このプロダクトに取り入れるべき要素だけを task contract に変換する。 /harness-plan createSpec delta または Spec skip reasonPlans.md task 生成をセットで返す。 出力には必ず Spec delta または Spec skip reason を含める。 Spec delta / Spec skip reason は Harness が生成し、consumer は承認・修正だけ行う。

Non-trivial planning gate:

単発・軽微タスクでない planning は、TeamAgent またはサブエージェント前提で扱う。 ここでの non-trivial は、複数 task / 複数 file / 複数 session / product behavior / API / data model / 権限 / 課金 / 外部連携 / 配布面 / セキュリティに影響する依頼を指す。 Task tool が使える場合は Product / Architecture / Security / QA / Skeptic の独立視点を走らせる。 使えない場合は サブエージェント未使用 と明示し、同じ観点を単独で分けて評価する。

non-trivial planning の出力には、次の検証を必ず含める。

  • team_validation_mode: not_required_lightweight / native / subagent / manual-pass / unavailable
  • spec.md / sub-spec / Plans.md の整合性
  • harness-mem / harness-recall / repo memory による車輪の再発明防止確認
  • プロダクト目的から外れていないか
  • セキュリティ、権限、秘密情報、サプライチェーンに問題がないか
  • lint / formatter baseline があるか。source code changes を含む plan で未設定なら、実装 task の前に setup task を置く
  • ちゃんと動く計画か。つまり test / smoke / CI / review / release gate が task DoD に落ちているか

軽量 task は team_validation_mode: not_required_lightweight でよい。 non-trivial planning は native / subagent / manual-pass のいずれかを使う。 unavailable のまま Required にしてはいけない。 Product / Architecture / Security / QA / Skeptic は検証 perspective であり、agent_type 名ではない。 利用可能な TeamAgent / Task サブエージェントに perspective として依頼し、任意 agent spawn を要求しない。 Security gate は秘密情報の実読取を要求しない。 .env や secret の read が必要になる場合は Risk Gate として止め、許可された既存 guard / evidence で確認する。

適用する場面:

  • create で新しい計画を作る
  • add で product behavior / API / 権限 / 課金 / 外部連携 / 配布面に影響する task を足す
  • ユーザーが外部プロダクト、競合、仕様案、改善案、比較材料を渡した
  • 既存仕様や過去判断との衝突リスクがある

軽く扱ってよい場面:

  • marker 更新だけの update
  • status 照合だけの sync
  • typo、format、README/CHANGELOG のみ
  • 既存 spec とテストで正解が固定されている狭い変更

品質フロー:

  1. 入力情報を分解し、評価対象・採点軸・不確かな事実を明示する
  2. 最新情報を取得する。外部事実は WebSearch / 公式ドキュメント / 一次情報を優先し、重要点は複数ソースでクロスチェックする
  3. 既存仕様・root spec.md・Plans.md・README・docs・CLAUDE.md・関連 skill を確認する
  4. harness-mem / harness-recall / .claude/agent-memory/ / .claude/state/ など、利用可能な記憶面を project-scoped で確認する
  5. non-trivial planning では TeamAgent / Task サブエージェントを使い、Product / Architecture / Security / QA / Skeptic など異なる視点で独立レビューする
  6. source code changes を含む plan では lint / formatter baseline を確認し、未設定なら setup task を先行させる
  7. 中立的な採点レビューを出し、Required / Recommended / Optional / Reject に分類する
  8. $easy 形式で、提案内容・理由・どうなるのかを報告する
  9. 採用する案だけを root spec.md / Plans.md / test task へ落とし込む

create — 計画作成

See references/create.md

アイデア・要件をヒアリングし、実行可能な Plans.md を生成する。

フロー:

  1. 会話コンテキスト確認(直前の議論から抽出 or 新規ヒアリング)
  2. 何を作るか聞く(max 3問)
  3. 計画品質チェック(最新情報、既存仕様、記憶、TeamAgent / サブエージェント複数視点レビュー、採点)
  4. 技術調査(WebSearch)
  5. 機能リスト抽出
  6. spec.md / Plans.md 二正本チェック(Spec delta または Spec skip reason + Plans.md task)
  7. 優先度マトリクス(Required / Recommended / Optional / Reject)
  8. TDD 採用判断(テスト設計)
  9. Plans.md 生成(cc:TODO マーカー付き)
  10. 次のアクション案内

spec.md / Plans.md 二正本チェック(デフォルト)

Plans.md は「やるべきこと」の task contract、root spec.md は「何が正しいか」の product contract として扱う。 co-required planning output は両方の出力を必須にするという意味であり、precedence は spec.md > sub-spec > Plans.md のまま維持する。 実装がぶれる可能性がある時は、Plans.md 生成前に root spec.md を更新する。 create と product-impacting add は毎回 root spec.md を読む。

優先する保存先:

  1. root spec.md
  2. consumer repo に root spec.md がない時だけ、既存の project spec / architecture / product compass
  3. consumer repo に root spec.md がない時だけ、docs/spec/00-project-spec.md
  4. 既存規約がある repo では、その規約に沿った spec path

作成/更新が必要な条件:

  • ユーザーに見える振る舞い、API、データモデル、権限、課金、外部連携を決める task
  • 複数の実装方針があり、選び方で product behavior が変わる task
  • 過去または今回の会話で「仕様が曖昧で実装がぶれた」兆候がある task
  • Plans.md には作業内容があるが、project としての正解条件が安定文書にない task

不要な条件:

  • typo、format、dependency bump、README/CHANGELOG のみ
  • 動作変更なしの狭い refactor
  • 既存 spec とテストで正解が十分に固定されている修正

出力契約:

  • Spec delta: product contract を更新する時に、対象 spec path と変更点を書く
  • Spec skip reason: product contract を更新しない時に、理由を書く
  • Spec delta / Spec skip reason は Harness が生成し、consumer は承認・修正だけ行う
  • docs-only / mechanical task でも Spec skip reason を task context / sprint contract に残す
  • missing search result、unavailable memory、未読ファイルを absent と断定しない。not_observed != absent
  • ユーザーに spec を一から書かせない。agent が既存 spec と入力から最小 delta を作り、曖昧な時だけ判断分岐を出す

参照:

  • docs/plans/spec-ssot.md

create 完了時のセッション起動案内(必須)

create が終わったら、説明だけで終わらせず、新しいセッションの起動コマンド起動後にそのまま入れる最初の指示プロンプト をセットで案内する。

優先順位は次の通り:

  1. 未完了タスクが 1 件だけ、または最初の 1 件だけ始めるのが自然
    • 起動コマンド: claude
    • 最初の入力: /harness-work <task番号>
  2. 依存の薄いタスクが複数あり、まとめて進めるのが自然
    • 起動コマンド: claude
    • 最初の入力: /breezing all
    • 代替: /harness-work all
  3. 長時間実行や再入が前提
    • 起動コマンド: ENABLE_PROMPT_CACHING_1H=1 claude
    • 最初の入力: /harness-loop all
    • 代替: /breezing all

最低でも次の 3 行を含める:

  • 新しいセッションの起動コマンド:
  • 起動後の最初の入力:
  • 向いている場面:

例:

新しいセッションの起動コマンド: claude
起動後の最初の入力: /breezing all
向いている場面: Phase 1 の task が複数あり、まとめて進めるほうが自然なため

長時間系を勧める場合は、Claude Code セッション起動コマンドも併記する:

新しいセッションの起動コマンド: ENABLE_PROMPT_CACHING_1H=1 claude
起動後の最初の入力: /harness-loop all
向いている場面: 5 分を超える待機や resume をまたぐ長時間タスクのため

補足:

  • scripts/claude-longrun.sh はこのリポジトリの開発補助スクリプトで、plugin install 後の consumer 環境には配布されない
  • そのため、consumer 向け案内では常に ENABLE_PROMPT_CACHING_1H=1 claude の 1 行コマンドを優先する
  • リポジトリ開発中だけ同等のラッパーを使いたい場合、bash scripts/claude-longrun.sh はローカル checkout 上では利用してよい

CI モード (--ci): ヒアリングなし。既存の Plans.md をそのまま利用してタスク分解のみ行う。

add — タスク追加

Plans.md に新しいタスクを追加する。 product-impacting な追加では、上の「spec.md / Plans.md 二正本チェック」に従い Spec delta または Spec skip reason も出力する。

/harness-plan add タスク名: 詳細説明 [--phase フェーズ番号]

タスクは cc:TODO マーカーで追加される。

update — マーカー更新

タスクのステータスマーカーを変更する。

/harness-plan update [タスク名|タスク番号] [WIP|完了|blocked]

マーカー対応表:

コマンド マーカー
WIP cc:WIP
完了 / done cc:完了
blocked blocked
TODO cc:TODO

sync — 進捗同期

実装状況と Plans.md を照合し、差分を検出・更新する。

See references/sync.md

フロー:

  1. Plans.md の現状取得
  2. Plans.md フォーマット検出(v1: 3 カラム / v2: 5 カラム)
  3. git status / git log から実装状況取得
  4. エージェントトレース確認(.claude/state/agent-trace.jsonl
  5. Plans.md と実装の差分検出
  6. 未更新マーカーの自動修正提案
  7. 次のアクション提示

レトロスペクティブ(デフォルト ON): cc:完了 タスクが 1 件以上あれば自動的に振り返りを実行する。 見積もり精度、ブロック原因パターン、スコープ変動を分析し、学びを記録。 sync --no-retro で明示的にスキップ可能。

team mode / issue bridge

Plans.md は正本のまま維持し、GitHub Issue 連携は opt-in の team mode だけで使う。

  • solo 開発では bridge を使わない
  • team mode は tracking issue を 1 つ作り、その配下に task ごとの sub-issue payload を dry-run で生成する
  • scripts/plans-issue-bridge.sh は実際に GitHub を更新せず、常に dry-run の payload を返す
  • Plans.md への変更はこの bridge では行わない

参照:

  • docs/plans/team-mode.md

named Plans

複数の Plans.md を使う場合は plans/manifest.json を正本にして、名前で選択する。

scripts/plan-registry.sh list
scripts/plan-registry.sh switch roadmap
scripts/plans-issue-bridge.sh --plan roadmap --format markdown
node scripts/generate-sprint-contract.js --plan roadmap 9.1.1

運用ルール:

  • 1 run では 1 つの named plan だけを使う
  • long-running / CI / issue bridge では active pointer に頼らず --plan <name> を渡す
  • manifest path は project root 相対のみ。絶対パス、..、repo 外 symlink は拒否される

参照:

  • docs/plans/named-plans.md

Plans.md フォーマット規約

フォーマット

# [プロジェクト名] Plans.md

作成日: YYYY-MM-DD

---

## Phase N: フェーズ名

| Task | 内容 | DoD | Depends | Status |
|------|------|-----|---------|--------|
| N.1  | 説明 | テスト通過 | - | cc:TODO |
| N.2  | 説明 | lint エラー 0 | N.1 | cc:WIP |
| N.3  | 説明 | マイグレーション実行可能 | N.1, N.2 | cc:完了 |

DoD(Definition of Done): 検証可能な完了条件を 1 行で記述。「いい感じ」「ちゃんと動く」は禁止。Yes/No で判定できる形にする。

Depends: タスク間の依存関係。-(依存なし)、タスク番号(N.1)、カンマ区切り(N.1, N.2)、フェーズ依存(Phase N)。

TDD tags

Plans.md の task には、TDD 判定を明示するタグを内容または DoD に書ける。

タグ 意味 tdd_required 推論
[tdd:required] この task は先に失敗テストを書く必要がある true
[tdd:skip:<reason>] この task は理由つきで TDD を省略する false, skip_tdd_reason=<reason>

<reason> は空にしない。 例: [tdd:skip:docs-only][tdd:skip:no-test-framework-detected]

タグがない場合の tdd_required は次の順で推論する。

  1. Plans.md tag: [tdd:required] / [tdd:skip:<reason>]
  2. files: src/, app/, cmd/, lib/, pkg/, internal/, go/ など source 実装を含むなら required
  3. TDD 推論: docs-only や test framework なしなら skip reason を付けて not required

optional briefs / manifest

harness-plan create は、必要なときだけ brief を付ける。

  • project spec SSOT は project 全体の正解条件を固定する文書で、必要時だけ作る
  • UI を含むタスクでは design brief
  • API を含むタスクでは contract brief
  • brief は「何を作るか」を短く固定する補助資料で、Plans.md や spec SSOT を置き換えない
  • skill frontmatter の一覧は scripts/generate-skill-manifest.sh で machine-readable JSON にできる

参照:

  • docs/plans/briefs-manifest.md
  • docs/plans/spec-ssot.md

マーカー一覧

マーカー 意味
pm:依頼中 PM から依頼済み
cc:TODO 未着手
cc:WIP 作業中
cc:完了 Worker 作業完了
pm:確認済 PM レビュー完了
blocked ブロック中(理由を必ず記載)

関連スキル

  • harness-sync — 実装と Plans.md を同期する
  • harness-work — 計画したタスクを実装する
  • harness-review — 実装のレビュー
  • harness-setup — プロジェクト初期化
生成项目进度追踪HTML快照,统计Plans.md中TODO/WIP/已完成任务数及成本、时间消耗,提供3秒速览的可视化仪表盘,支持命令行参数控制输出与打开行为。
progress tracker 進捗確認 進捗ボード dashboard
opencode/skills/harness-progress/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-progress -g -y
SKILL.md
Frontmatter
{
    "name": "harness-progress",
    "description": "Progress Tracker HTML showing cc:WIP\/cc:TODO\/cc:完了 counts + drift alerts from Plans.md. Triggers: progress tracker, 進捗確認, 進捗ボード, dashboard. Skip for: implementation, review, release."
}

Harness Progress Tracker

Phase 65.4 (Progress Tracker) — 3rd surface of the cognitive-load HTML triplet. Plan Brief / Acceptance Demo に続く 3 つ目の HTML surface で、進行中セッションの全体像を 1 枚の紙で把握 できるようにする。

Quick Reference

入力 動作
/harness-progress 現プロジェクトの進捗 snapshot HTML を生成し開く
/harness-progress --no-open 生成のみ (browser 開かない、PostToolUse hook 用)
/harness-progress --out <path> 出力先指定 (default: out/progress-snapshot.html)

Mission

"今のセッションは何件のタスクをどこまで終わらせて、いつ終わる見込みで、いくら使ったか" を、 エンジニアじゃない vibecoder が 3 秒でブラウザで把握 できる HTML 1 枚を生成する。

やる:

  • Plans.md の cc:TODO / cc:WIP / cc:完了 件数を集計
  • progress_pct (完了率) を計算 (cc:完了 ÷ 総タスク × 100)
  • 経過分数 / 推定総分数 / コスト so-far / コスト estimate を表示
  • drift alert を表示 (Phase 65.4.3 以降で populate)

やらない (本 cycle):

  • WebSocket / SSE による live update (静的 HTML、再生成で更新)
  • 過去 session の history 比較 (Phase 65.4.4 で別軸)
  • 他 project の cross-project view (Phase 65.3 と独立)

Schema: progress-snapshot.v1

詳細仕様: schemas/progress-snapshot.v1.schema.json

schema:        progress-snapshot.v1
project:       <basename of git repo>
current_task:  <cc:WIP の最初の項目 1 行サマリ、なければ空文字>
progress_pct:  <0-100 の整数、cc:完了 ÷ 総タスク × 100 の四捨五入>
todo_tasks:    [{number, title}]    ← cc:TODO のみ
wip_tasks:     [{number, title}]    ← cc:WIP のみ
done_tasks:    [{number, title, commit}]   ← cc:完了 [hash] のみ、hash は 7 chars
elapsed_minutes:          <int, state file から>
estimated_total_minutes:  <int, state file から>
cost_so_far_usd:          <float, state file から>
cost_estimate_usd:        <float, state file から>
alerts:                    []   ← Phase 65.4.3 以降で populate
generated_at:             <ISO8601 UTC>

Execution Flow

Step 0: PROJECT_NAME を取得

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "current")"

Step 1: snapshot を組み立て

SNAPSHOT_JSON="$(mktemp /tmp/progress-snapshot-XXXX.json)"
bash scripts/progress-snapshot.sh \
  --plans Plans.md \
  --project "$PROJECT_NAME" \
  > "$SNAPSHOT_JSON"

scripts/progress-snapshot.sh (Phase 65.4.1 で実装) は Plans.md を parse し progress-snapshot.v1 schema 準拠の JSON を出力する。

Step 2: HTML をレンダリング

OUT_PATH="${OUT_PATH:-out/progress-snapshot.html}"
mkdir -p "$(dirname "$OUT_PATH")"

bash scripts/render-html.sh \
  --template progress \
  --data "$SNAPSHOT_JSON" \
  --out "$OUT_PATH"

Step 3: ブラウザで開く

--no-open flag がない場合のみ実行 (PostToolUse hook からの背景再生成では skip):

bash scripts/plan-brief-open.sh --path "$OUT_PATH"

Cross-project search (default OFF)

Phase 65.4.4 で --cross-project-group <name> flag が追加される。本 cycle (65.4.1) では default OFF、現プロジェクトのみ集計する。

Failure modes

状態 動作
Plans.md が無い progress-snapshot.sh が exit 1 (clear error message)
Plans.md にタスクが 1 件もない progress_pct: 0, 空配列 で snapshot 生成 (HTML は「タスクなし」表示)
state file (経過分数等) が無い elapsed_minutes: 0, cost_so_far_usd: 0 で fallback (warning なし)
git 不在 / git repo 外 project: "current" で fallback

Related

  • harness-plan-brief (Phase 65.1.x) — 1st surface (実装前の説明会)
  • harness-accept (Phase 65.2.x) — 2nd surface (検収判断)
  • harness-progress (本 skill, Phase 65.4.x) — 3rd surface (進捗ダッシュボード)
  • 65.4.2 (PostToolUse auto-regen)、65.4.3 (drift alert 5 種)、65.4.4 (過去判断 lookup) で機能拡張
适用于使用Keep a Changelog和GitHub的项目的通用发布自动化技能。通过单一确认门控,自动执行版本检测、日志更新、PR合并、打标签及发布流程。支持无参触发,需确保工作已提交并经过审查。
用户输入 release, /release 等命令 需要提升版本号或发布新版本 完成开发任务后希望自动构建并发布
opencode/skills/harness-release/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-release -g -y
SKILL.md
Frontmatter
{
    "name": "harness-release",
    "description": "Generic release automation for projects using Keep a Changelog + GitHub. Single confirmation gate then end-to-end automation: bump detection, CHANGELOG promotion, PR\/main merge, tag, GitHub Release. Trigger: release, version bump, publish. Do NOT load for: implementation, review, planning, setup."
}

Harness Release (汎用)

Keep a Changelog + GitHub を使うあらゆるプロジェクト向けの汎用リリース自動化スキル。

設計原則: 単一確認ゲート。ユーザーは 1 回だけ全体計画を見て承認する。承認後はファイル書き換え → commit → branch push → PR 作成/更新 → default branch へ merge → default branch 上で tag → GitHub Release までを中断なく実行する。

Release complete の定義: release は「tag と GitHub Release を作った」だけでは完了ではない。対象 work と release bump が default branch(通常 main)に merge 済みで、release tag が default branch 到達可能 commit を指し、GitHub Release がその tag を公開している状態を完了とする。

Literal invocation note: この skill の入口は harness-release, /release, /release patch, /release --dry-run のような literal command をそのまま使う。

CC runtime hard floor との関係

Claude Code 2.1.183+ の runtime hard floor は GitHub CLI release publish 系コマンドを構造的に deny する (Anthropic 製品仕様、settings.jsonpermissions.ask で覆せない)。本 skill は publish 自体を実行せず、.github/workflows/release.yml (tag push trigger) に委譲する。skill は tag push までで責務を完了し、その後 scripts/release-verify-publish.sh で workflow による公開を verify する。

Revert 条件: CC が runtime hard floor に user explicit approval path を提供したら、Post-Gate に直接 publish step を戻すことを検討する。

Bare invocation contract

if $ARGUMENTS == "": → 「今までの作業をコミットし、PR/main 反映まで完了してリリースしたい」と解釈し、Review Gate 検出を実行する → 対象 work が 1 つに確定できる場合だけ Step 0 (Review Gate) へ自動進行する → 対象が不明または review state が無い場合は AskUserQuestion で選択肢を出してから進める

引数なし呼び出し時の最初の応答で必ず次の literal marker を出力する:

RELEASE_AUTOSTART: target=<work-summary>, base_ref=<ref>, mode=<patch|minor|major|auto>

「タスクが不明確」「指示を待ちます」「タスクがありません」「追加の指示をお待ちします」は禁止行動。

Output Contract (P35: 「止まったように見える」UX 対策)

skill 結論時の output の 最後の 1 行は必ず P35 footer を含め、footer は本文 (user-facing prose) と同じ言語で出力する(言語解決は既存の言語ルールに従い、footer 契約は言語を再定義しない)。これは <local-command-stdout> 経由の表示で user が「止まった」と感じる UX 問題への明示的な instruction (patterns.md P35) で、意図は言語に依存しないため literal は言語ごとに切り替える (#208):

  • ja: ↑この結果は Claude が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。
  • en: ↑Claude will summarize this result. Press Enter to continue, or send a new prompt for a different instruction.
  • その他の言語: 同じ意味の 1 行を本文と同じ言語で出力する

Language

User-facing prose follows the explicit session or project language. If no language is configured, use English. Use Japanese only when i18n.language: ja, CLAUDE_CODE_HARNESS_LANG=ja, or an explicit session instruction requests Japanese output. Machine-readable values stay English.

harness-release / /release だけが入力された場合、これは 「今までの作業をコミットし、PR/main 反映まで完了してリリースしたい」 という意味として扱う。 旧表現の 「今までの作業をコミットしてリリースしたい」 も同じ意図だが、完了条件には PR/main 反映を必ず含める。 「タスクがありません」「指示を待ちます」で止まってはいけない。

bare release では、通常の release preflight の前に Review GateWork Commit Gate を実行する。

  1. git status --porcelaingit log @{upstream}..HEAD / main..HEAD を確認し、「今までの作業」の対象を特定する
  2. .claude/state/review-result.json.claude/state/review-approved.json を確認し、対象 work に APPROVE 済み review があるか確認する
  3. APPROVE 済み review が無い場合は AskUserQuestion で確認する
  4. ユーザーが「レビューから開始」を選んだら、harness-review を起動し、APPROVE になるまで release へ進まない
  5. harness-reviewREQUEST_CHANGES を返した場合は release を保留し、harness-work で修正してから harness-review を再実行する。これを APPROVE までループする
  6. harness-reviewAPPROVE を返した後、working tree の作業 commit を作る
  7. working tree clean になってから通常の release preflight / confirmation gate / PR merge / tag / GitHub Release へ進む

Review Gate AskUserQuestion

harness-release 実行時に review approval が確認できない場合は、推測で release しない。 次の Ask を出す。

question: "harness-release は今までの作業をコミットしてリリースしますが、この作業の APPROVE review が見つかりません。どう進めますか?"
options:
  - label: "レビューから開始 (Recommended)"
    description: "harness-review を実行し、APPROVE になった場合だけ commit/release へ進みます。"
  - label: "release dry-run"
    description: "ファイルを書き換えず、release 計画と不足 gate だけ確認します。"
  - label: "中止"
    description: "review も release も行わず止めます。"

ユーザーが「レビューから開始」を選んだ場合は、同じセッション内で harness-review から始める。 harness-review の対象決定は harness-review 側の bare review contract に従う。 review が APPROVE なら、そのまま harness-release の Work Commit Gate へ戻る。 review が REQUEST_CHANGES なら release は保留し、harness-work で修正してから harness-review を再実行する。 この修正後再レビュー loop は APPROVE まで継続する。

Persist Verdict after Review Gate (required / #218 fix)

harness-review 委譲後、必ず .claude/state/review-result.json に verdict が永続化されている ことを確認する。harness-review 側の Persist Verdict step が踏まれていれば既に保存済みだが、 踏み忘れ時の 二段防御として、Review Gate 側でも次の check + 補完保存を行う。これを欠かすと Work Commit Gate (Step 6) の git commit が PreToolUse commit guard でブロックされる

# 1. 保存済みか確認
if [ -f .claude/state/review-result.json ] \
   && [ "$(jq -r '.verdict // empty' .claude/state/review-result.json 2>/dev/null)" = "APPROVE" ]; then
  echo "review-result.json already persisted with APPROVE"
else
  # 2. 未保存なら orchestrator が in-context の verdict JSON を一時ファイルへ書き出し
  mkdir -p .claude/state
  cat > .claude/state/tmp-review-result.json <<'JSON'
{ "schema_version": "review-result.v1", "verdict": "APPROVE", ... }
JSON
  bash "${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-$PWD}}/scripts/write-review-result.sh" \
    .claude/state/tmp-review-result.json \
    "$(git rev-parse --short HEAD 2>/dev/null || true)"
  rm -f .claude/state/tmp-review-result.json
fi

multi-commit セーフティ: Phase 94.1.3 で PostToolUse commit-cleanup が VERSION / .claude-plugin/plugin.json / harness.toml / CHANGELOG.md のみの bookkeeping commit を認識し承認削除を skip するようになったため、 Post-Gate の version bump commit (Step 11) は harness-release の自動 commit でそのまま通過する。 それ以前のバージョン (4.15.0 以前) を使う場合は、Work Commit Gate と version bump commit の間に 再度 Persist Verdict を行うこと。

ユーザーに戻してよいのは次の場合だけ。

  1. 修正に仕様正本 / Plans.md / API / permission / migration / billing などの意思決定が必要で、AskUserQuestion が必要
  2. 修正方針が複数あり、どれを採るかでユーザー価値や互換性が変わる
  3. ユーザーが Ask で release dry-run または 中止 を選んだ

REQUEST_CHANGES 単体を最終停止理由にしてはいけない。

Work Commit Gate

bare release で working tree に未コミット変更がある場合、release version bump commit とは別に、 review 済み work commit を先に作る。

git status --short
git diff --stat
git add <reviewed files>
git commit -m "<type>: <summary>"

commit message は review summary / Plans.md task / branch name から短く生成する。 判断できない場合は AskUserQuestion で 2〜3 個の commit message 候補を出す。 work commit 作成後に .claude/state/review-result.jsoncommit_hash を確認または更新し、 release preflight へ進む。

通常の release preflight に入った後は、これまで通り working tree dirty を fail とする。 dirty tree のまま version bump / tag / GitHub Release に進まない。

Quick Reference

/release              # 今までの作業を review gate → commit → PR/main merge → release する
/release patch        # bump を patch に明示指定
/release minor        # bump を minor に明示指定
/release major        # bump を major に明示指定
/release --dry-run    # 計画の表示のみ、実行しない

前提条件

このスキルが動くプロジェクトは以下を満たす必要があります:

  1. CHANGELOG.mdKeep a Changelog 形式
  2. [Unreleased] セクションが存在する
  3. 以下のいずれかの version file を持つ:
    • VERSION (単独ファイル)
    • package.json (npm)
    • pyproject.toml (Python, [project] または [tool.poetry])
    • Cargo.toml (Rust, [package])
  4. gh CLI がインストール済みで、認証済み
  5. git リモート origin が GitHub を指す
  6. Claude Code plugin project の場合は、claude CLI が plugin tag をサポートしている

これらが満たされない場合、Preflight で detect して abort します。

prUrlTemplate による multi-host review URL は将来候補として認識するが、 このスキルの release automation は今も gh CLI と GitHub remote を primary path とする。 owner / branch / release asset / CI metadata の自動取得は host ごとの差が大きいため、Phase 56.2.3 では docs-only に留める。

単一ゲートフロー

[Bare release only: 作業 review/commit 前段]
  ↓
  0. Review Gate (未レビューなら AskUserQuestion → harness-review)
  0.5 Work Commit Gate (review APPROVE 済み work を release bump と分けて commit)
  ↓
[Pre-Gate: 情報収集のみ、ファイル未変更]
  ↓
  1. Preflight (working tree clean / CHANGELOG / gh 等の確認)
  2. Version file 自動検出
  3. 現在バージョンの読み取り
  4. Claude plugin tag preflight (plugin project の場合のみ)
  5. [Unreleased] 内容の解析 → bump level 推定
  6. 新バージョン算出
  7. CHANGELOG 差分ドラフト作成 (メモリ上)
  8. GitHub Release notes ドラフト作成 (メモリ上)

★━━━━━━ 単一確認ゲート ━━━━━━★
  ユーザーに全計画を 1 回だけ提示:
    - 検出された version file
    - 現バージョン → 新バージョン
    - bump 判定理由 ("[Unreleased] に ### Added があるため minor" 等)
    - CHANGELOG 変更プレビュー
    - GitHub Release notes ドラフト
    - コミット対象ファイル一覧
    - 最終アクション (branch push + PR merge + tag + release publish)

  ユーザー応答:
    "yes"        → Post-Gate へ進む
    "<修正指示>"  → 指示に応じて draft を再生成、再確認
    "cancel/no"  → 何もせず終了
★━━━━━━━━━━━━━━━━━━━━━━━★
  ↓
[Post-Gate: 承認後、中断なし]

  9. Version file 書き換え
  10. CHANGELOG.md 書き換え ([Unreleased] → [X.Y.Z] 昇格 + compare link)
  11. git add + commit
  12. release branch push
  13. PR 作成/更新
  14. default branch へ merge
  15. default branch を fetch/checkout し、release commit が到達可能であることを確認
  16. Claude plugin tag validation + tag (plugin project の場合のみ)
  17. GitHub Release 用 semver tag (必要な project のみ)
  18. git push origin <default-branch> --tags
  19. tag push 後、`.github/workflows/release.yml` が release を公開し、`release-verify-publish.sh` で verify
  20. 完了報告

Pre-Gate 詳細

1. Preflight

# 必須ツール
command -v gh >/dev/null || { echo "gh CLI がありません"; exit 1; }
command -v python3 >/dev/null || { echo "python3 が必要です"; exit 1; }

# working tree
if [ -n "$(git status --porcelain)" ]; then
  echo "working tree に未コミット変更があります"; exit 1;
fi

# CHANGELOG
[ -f CHANGELOG.md ] || { echo "CHANGELOG.md がありません"; exit 1; }
grep -q "^## \[Unreleased\]" CHANGELOG.md || { echo "[Unreleased] セクションがありません"; exit 1; }

# plugin/mirror projects
scripts/release-preflight.sh

この working tree clean check は通常 release preflight の gate である。 bare release で「今までの作業」を commit したい場合は、この check の前に Review Gate と Work Commit Gate を完了させる。 未レビューの dirty tree をこの check だけで abort して終わらせてはいけない。

scripts/release-preflight.sh は tag 作成前に opencode/, skills-codex/, codex/.codex/skills/ の mirror drift も検出する。node scripts/build-opencode.js が差分を生成した場合は release を止め、その差分を commit してから tag に進む。

2. Version File 自動検出

以下を優先順で探索。最初に見つかったものを正本とする:

# Python snippet to run inline
import os, json, re
import tomllib  # Python 3.11+

def detect_version_file():
    if os.path.exists("VERSION"):
        with open("VERSION") as f:
            return ("VERSION", f.read().strip(), None)
    if os.path.exists("package.json"):
        with open("package.json") as f:
            data = json.load(f)
        return ("package.json", data["version"], None)
    if os.path.exists("pyproject.toml"):
        with open("pyproject.toml", "rb") as f:
            data = tomllib.load(f)
        if "project" in data:
            return ("pyproject.toml", data["project"]["version"], "[project]")
        if "tool" in data and "poetry" in data["tool"]:
            return ("pyproject.toml", data["tool"]["poetry"]["version"], "[tool.poetry]")
    if os.path.exists("Cargo.toml"):
        with open("Cargo.toml", "rb") as f:
            data = tomllib.load(f)
        return ("Cargo.toml", data["package"]["version"], "[package]")
    raise RuntimeError("No supported version file found")

詳細: version-files.md

3. Claude Plugin Tag Preflight

.claude-plugin/plugin.json が存在する project では、通常の GitHub Release tag とは別に Claude plugin release tag も作る。

ひとことで言うと、git tag -a を手で組み立てる前に、Claude Code 本体の plugin validation に通してから {plugin-name}--v{version} tag を作る。

Pre-Gate ではファイルを書き換えず、以下を確認する。 version sync は grep / sed で拾わず、JSON は structured parser で読む:

command -v claude >/dev/null || { echo "claude CLI がありません"; exit 1; }
claude plugin validate .claude-plugin/plugin.json

HARNESS_PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-.}"
python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .

claude plugin tag .claude-plugin --dry-run

${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py は、存在する release surface をすべて読み取り、canonical を VERSION > package.json > .claude-plugin/plugin.json > .codex-plugin/plugin.json の順で決める。 そのうえで、以下の不一致・欠落が 1 つでもあれば tag / release に進まない:

  • VERSION
  • package.json.version
  • .claude-plugin/plugin.json.version
  • .codex-plugin/plugin.json.version
  • .claude-plugin/marketplace.json.metadata.version
  • .claude-plugin/marketplace.json.plugins[].version(配列内の各 plugin entry)

不一致時は、どの surface が canonical と違うか、またはどの field が missing / invalid かを表示する。 機械処理や CI で読む場合は --json を使う:

python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root . --json

この check は 3 つの事故を防ぐためにある:

  • VERSION.claude-plugin/plugin.json の version がずれたまま tag を切る事故
  • package.json / marketplace entry の version が古いまま release workflow に進む事故
  • plugin manifest / marketplace entry の validation を通さず、あとで plugin install / update 側で詰まる事故

--dry-run では claude plugin tag が実際に作る tag 名と内部の git tag -a / push 相当コマンドが見える。ここで見えた command を Confirmation Gate の plan に含める。

4. Bump 自動推定

[Unreleased] 直下の見出しを解析して bump level を決定:

[Unreleased] 内の見出し 推定 bump
### Breaking Changes または ### Removed を含む major
### Added を含む (Removed/Breaking なし) minor
### Fixed / ### Changed / ### Security のみ patch
空セクション error: リリース対象なし

ユーザーが /release patch|minor|major で明示指定した場合はそちらを優先。 詳細: bump-detection.md

5. CHANGELOG ドラフト作成 (メモリ上)

以下を計算、まだ書き込まない:

  1. ## [Unreleased] の本文を切り出し
  2. ## [Unreleased]## [<previous>] の間に ## [<new>] - YYYY-MM-DD を挿入した形を作成
  3. 末尾 compare link:
    • [Unreleased]: .../compare/v<prev>...HEADv<new>...HEAD
    • [<new>]: .../compare/v<prev>...v<new> を追加
  4. repo URL は既存の [Unreleased]: 行から動的抽出

6. Release Notes ドラフト作成 (メモリ上)

## [<new>] セクションの内容を元に、GitHub Release 用のマークダウンを生成:

## What's Changed

**<リリーステーマ(1行)>**

### Before / After
<テーブル>

### Added / Changed / Fixed / Removed
<該当セクションをコピー>

---

🤖 Generated with [Claude Code](https://claude.com/claude-code)

詳細: release-notes.md

Confirmation Gate

すべてのドラフトが揃ったら、ユーザーに 1 回だけ提示:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Release Plan: v<old> → v<new> (<bump>)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Version file: <detected file>
 Bump reason:  <why this level was chosen>

 CHANGELOG changes:
   [Unreleased] に <N> 項目の変更を検出
   [<new>] - YYYY-MM-DD として確定
   Compare link を追加

 GitHub Release notes preview:
   <最初の 10 行>
   ...

 Files to modify:
   - <version file>
   - CHANGELOG.md

 Final actions:
   - git commit -m "chore: release v<new>"
   - git push origin <release-branch>
   - gh pr create/update + gh pr merge into <default-branch>
   - git fetch origin <default-branch> && git checkout <default-branch>
   - claude plugin tag .claude-plugin --push --remote origin  # plugin project の場合。default branch 上で実行
   - git tag -a v<new>                                        # GitHub Release 用 semver tag が必要な場合。default branch 上で作成
   - git push origin <default-branch> --tags
   - (tag push 後は GitHub Actions release workflow が自動で release 公開)

Proceed? [yes / cancel / <修正指示>]

Post-Gate 詳細

承認後は中断なしで実行。失敗時は以下の方針:

失敗箇所 復旧
ファイル書き換え失敗 そこで abort、ローカルは dirty なまま人間が判断
commit 失敗 hook 拒否等。ユーザーに原因を提示して修正を促す
PR 作成/merge 失敗 release を未完了として停止。tag / GitHub Release には進まない
plugin tag validation 失敗 VERSION / .claude-plugin/plugin.json / marketplace entry の不一致を修正し、tag 作成には進まない
push 失敗 リモート側の問題。ローカル commit/tag は残す

PR / Main Merge Gate

Post-Gate の release commit 後は、tag を作る前に GitHub PR を default branch へ merge する。

release_branch="$(git branch --show-current)"
default_branch="${HARNESS_RELEASE_DEFAULT_BRANCH:-main}"

git push -u origin "$release_branch"
gh pr create --base "$default_branch" --head "$release_branch" --title "chore: release v<new>" --body "<release summary>"
gh pr merge --merge --delete-branch=false

git fetch origin "$default_branch" --tags
git checkout "$default_branch"
git pull --ff-only origin "$default_branch"
git merge-base --is-ancestor "<release-commit>" "origin/$default_branch"

既存 PR がある場合は新規作成せず、既存 PR の body を更新して merge する。repository policy が squash merge を要求する場合は、release commit hash ではなく release bump の内容(version files + CHANGELOG + source commits)が default branch に含まれることを確認する。

tag はこの Gate 完了後、default branch の HEAD もしくは release commit 到達可能な commit に対して作る。release branch 上だけに存在する commit を指す tag で GitHub Release を作ってはいけない。

Claude plugin project の tag 作成

.claude-plugin/plugin.json がある project では、PR/main merge 後に default branch 上でもう一度 version sync を確認してから plugin tag を作る:

HARNESS_PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-.}"
python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .

claude plugin tag .claude-plugin --dry-run
claude plugin tag .claude-plugin --push --remote origin

claude plugin tag が作る tag は {plugin-name}--v{version} 形式。既存の GitHub Release workflow が vX.Y.Z tag を前提にしている project では、plugin tag とは別に git tag -a v<new> を作る。plugin 配布の tag は claude plugin tag に任せ、GitHub Release 用 semver tag は release automation の互換 surface として扱う。

Verify Workflow Publish

Tag push 後、.github/workflows/release.yml が release を自動公開する。skill は以下で結果を verify する:

OWNER="$(git remote get-url origin | sed 's|.*github.com[:/]\([^/]*/[^/]*\)\.git|\1|')"
bash scripts/release-verify-publish.sh "v${NEW_VERSION}" "${OWNER}"

タイムアウト: 5 秒間隔 × 60 回 = 最大 5 分 polling。

  • exit 0: PASS — draft=false 且つ assets 4 platform 揃って公開済
  • exit 2: WARN — timeout (tag は push 済のため abort せず人間判断を促す)
  • exit 3: ERROR — API error (権限/認証問題、手動調査が必要)

Verify は gh api 経由 (gh release prefix は CC runtime hard floor で deny されるため)。

--dry-run モード

Pre-Gate 全てを実行し、Confirmation Gate までの内容を表示するが、gate で止まり Post-Gate に進まない

Claude plugin project の場合、dry-run でも python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .claude plugin tag .claude-plugin --dry-run を実行し、実際に作られる plugin tag 名と push 対象を表示する。ここで VERSION / package.json / .claude-plugin/plugin.json / .codex-plugin/plugin.json / .claude-plugin/marketplace.json の version surface が不一致または欠落していれば、dry-run の時点で止める。

環境変数

プロジェクトごとの調整に使用:

変数 説明
HARNESS_RELEASE_PROJECT_ROOT リポジトリルート (デフォルト: $(pwd))
HARNESS_RELEASE_BRANCH push 対象ブランチ (デフォルト: 現在のブランチ)
HARNESS_RELEASE_DEFAULT_BRANCH PR merge 先 default branch (デフォルト: main)
HARNESS_RELEASE_HEALTHCHECK_CMD Preflight で追加実行するコマンド
HARNESS_RELEASE_SKIP_GH 1 で GitHub Release 作成をスキップ

CHANGELOG 書き方ルール

[Unreleased] セクションは必ず以下のいずれかのサブセクションを持つ:

## [Unreleased]

### Added       ← minor
### Changed     ← patch
### Deprecated  ← minor
### Removed     ← major
### Fixed       ← patch
### Security    ← patch
### Breaking Changes  ← major (Keep a Changelog 非標準だが一般的)

このスキルはこれらの見出しを機械的に解析するため、見出しの表記揺れ(### Fix / ### Bug Fixes 等)は認識できません。KaCL 標準の見出しを使用してください。

関連スキル

  • harness-release-internal - 本体 claude-code-harness のリリース時に追加で走らせる harness 固有 preflight/finalization(配布対象外)
  • harness-plan - Plans.md 管理
  • harness-review - リリース前のコードレビュー

設計思想

  • 単一ゲート: ユーザーの判断タイミングは 1 回だけ。mini-confirmation を挟むとラバースタンプ化して意味を失う
  • 事前に全て描く: Post-Gate に入ってからの「考え直し」を禁ずる。Gate 前に全 draft を揃える
  • main 反映が完了条件: release tag / GitHub Release は default branch 反映後にだけ作る。branch-only release は未完了として扱う
  • 失敗は transparent: 途中で失敗したら自動ロールバックは試みず、ユーザーに現状を提示して判断させる
  • プロジェクト非依存: VERSION file 形式、mirror、residue check など特定環境の前提を持たない。本体 harness 固有の処理は harness-release-internal に分離
用于多角度代码、计划及范围审查,涵盖安全与质量检查。支持自动检测目标或用户选择,禁止执行实现、发布等操作。
review code review plan review scope analysis
opencode/skills/harness-review/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-review -g -y
SKILL.md
Frontmatter
{
    "name": "harness-review",
    "description": "HAR: Multi-angle code, plan, scope review. Security\/quality check. Trigger: review, code review, plan review, scope analysis. Do NOT load for: implementation, new features, bugfix, setup, release."
}

Harness Review

Harness の統合レビュースキル。 この SKILL.md は薄い dispatcher であり、詳細な品質基準は references/ を読む。

if $ARGUMENTS == "": → 「今までの作業のレビュー」と解釈し、Review target detection を実行する → review target が 1 つに確定できる場合だけ自動開始する → review target が不明または複数候補の場合は AskUserQuestion で選択肢を出し、認識を揃えてから開始する

Output Contract (P35: 「止まったように見える」UX 対策)

skill 結論時の output の 最後の 1 行は必ず P35 footer を含め、footer は本文 (user-facing prose) と同じ言語で出力する(言語解決は既存の言語ルールに従い、footer 契約は言語を再定義しない)。これは <local-command-stdout> 経由の表示で user が「止まった」と感じる UX 問題への明示的な instruction (patterns.md P35) で、意図は言語に依存しないため literal は言語ごとに切り替える (#208):

  • ja: ↑この結果は Claude が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。
  • en: ↑Claude will summarize this result. Press Enter to continue, or send a new prompt for a different instruction.
  • その他の言語: 同じ意味の 1 行を本文と同じ言語で出力する

Dispatcher Contract

この skill の責務は review 判定だけ。 commit / push / release は既定では行わない。

  • review default read-only boundary: 既定は read-only。APPROVE でも自動 commit しない
  • Do not push just to review: review 目的だけで push しない
  • commit が必要な場合は、ユーザー明示依頼、harness-work、または harness-release の Work Commit Gate に委譲する
  • --commit-on-approve のような明示 opt-in が設計されるまで、この skill 単体の default side effect は禁止

Quick Reference

Command Mode Purpose
/harness-review code 今までの作業を自動検出して review
/harness-review --quick quick 小さな dirty change を軽く closeout
/harness-review --codex-closeout codex-closeout Codex 助言 + focused tests で closeout
/harness-review --dual dual Claude + Codex second opinion
/harness-review --cursor code+cursor-second-opinion core review gates に cursor (composer-2.5-fast) second-opinion を加算 (read = lean、Opus reviewer 必須併走)
HARNESS_IMPL_BACKEND=cursor harness-review code+cursor-second-opinion default ON 時も core review gates に cursor second-opinion を自動加算。primary verdict は Opus/brain 固定
/harness-review --team-debate team-debate TeamAgent Debate を強制
/harness-review --security security security 専用 review
/harness-review plan plan Plans.md の計画 review
/harness-review scope scope scope creep / 漏れ review

Mode Decision

引数から実行 mode を決定し、必要な references/ を選択ロードする。

入力 mode 読む reference
引数なし / code code references/code-review.md, references/governance.md
--quick quick references/codex-closeout.md, references/code-review.md
--codex-closeout codex-closeout references/codex-closeout.md
--dual dual references/dual-review.md, references/team-debate.md
--team-debate team-debate references/team-debate.md, references/governance.md
--security security references/security-profile.md, references/governance.md
--ui-rubric ui-rubric references/ui-rubric.md
plan plan references/plan-review.md, references/governance.md
scope scope references/scope-review.md, references/governance.md
--cursor or resolver result cursor for no-arg / code review only code+cursor-second-opinion references/code-review.md, references/governance.md, references/cursor-review.md, references/dual-review.md
full full references/code-review.md, references/team-debate.md, references/dual-review.md

quickcodex-closeout は軽量 path。 小さな dirty change、single commit、PR branch の closeout を速く見る。 品質 gate を捨てるものではない。

Cursor Default ON

mode 判定時、明示 mode words (plan, scope, full) と明示フラグを先に確定する。no-arg / code review の場合だけ helper root を解決して resolver を 1 回だけ実行し、resolver 不在時は claude とみなす。

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"; if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"; while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do probe="$(cd "$probe/.." && pwd)"; done; [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"; fi
if [ -x "${HARNESS_PLUGIN_ROOT:-}/scripts/resolve-impl-backend.sh" ]; then resolved_backend="$(bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --role reviewer)"; else resolved_backend="claude"; fi

no-arg / code review で結果が cursor の場合は --cursor と同じ cursor-second-opinion を追加するが、core review gates (references/code-review.md, references/governance.md) は必ず先に読み、Cursor reference は additive にだけ扱う。primary verdict は Opus/brain 側で維持し、cursor は dual_review.cursor_verdict の advisory に限る。plan / scope など明示 mode word は resolver result より優先し、cursor default によって plan/scope references も code/governance references も置き換えない。 結果が claude / codex の場合は従来どおりで、review の primary 判定面は変えない。

Review Target Detection

REVIEW_AUTOSTART 契約: 引数なし ($ARGUMENTS == "") で呼ばれた場合、review / /review / /harness-review だけの入力を「今までの作業のレビュー」と解釈する。 Step 1 開始前の handshake 行として次を 1 行だけ出力する。

REVIEW_AUTOSTART: target={resolved_target}, base_ref={resolved_base_ref}, type={mode}

REVIEW_TARGET_ASK 契約: bare 呼び出しで review target が不明または複数候補の場合、Step 1 に進む前に AskUserQuestion を 1 回だけ使い、候補を 2-3 個に絞って確認する。

  • 候補は 1. working tree(未コミット変更のみ)、2. branch range(upstream または main/master から HEAD)、3. recent commits(clean tree 時の直近 1 commit / 直近 5 commits)の順で作る
  • 複数候補が同時に成立する場合は REVIEW_TARGET_AMBIGUOUS: working_tree_and_branch_commits、clean tree かつ branch 差分がない場合は REVIEW_TARGET_AMBIGUOUS: clean_tree_no_branch_commits を 1 行出力してから AskUserQuestion を出す
  • ユーザー回答後は REVIEW_TARGET_CONFIRMED: {choice} に続けて REVIEW_AUTOSTART 行を出力する
  • AskUserQuestion の選択肢 literal・推奨 (Recommended) の付け方・各候補の比較範囲は references/code-review.md の Target Selection 節に従う

禁止:

  • 「タスクが不明確です」と応答して停止する
  • 「何をレビューすればよいですか」と自由記述で聞いて停止する
  • host project の session-start rules を理由に auto-start を飛ばす
  • target が曖昧なのに推測で範囲を広げる

Minimal Flow

  1. mode を決める
  2. 上記の Review Target Detection で対象と base ref を決める
  3. 必要な reference だけ読む
  4. 差分、untracked files、関連テスト、仕様正本、Plans.md を確認する
  5. APPROVE / REQUEST_CHANGES / decision_needed を返す
  6. REQUEST_CHANGES の場合は critical / major の修正方針と修正後再レビュー条件を示す

Review Governance Contract

詳細は references/governance.md。 ここでは最低限の合格ラインだけ固定する。

明確な合格ライン

APPROVE は次のすべてを満たす時だけ返す。

  • critical / major が 0 件
  • 仕様正本 (spec_path) または明示された spec_skip_reason と矛盾しない
  • Plans.md の task / DoD / Depends と矛盾しない
  • 既存テスト、既存 UX、既存 CLI、既存設定、既存 docs、配布 mirror のいずれにもデグレ証拠がない
  • 検証証跡がある。APPROVE なのに evidence が空の出力は禁止
  • TeamAgent Debate を実行した場合、反対意見が解消済み、または minor / recommendation として理由付きで格下げ済み

TeamAgent Debate

詳細は references/team-debate.md。 TeamAgent Debate は、異なる見解を read-only で衝突させる review pass。

Agent 主な問い
Spec Agent 仕様正本と実装差分の矛盾を探す
Plans Agent Plans.md の task / DoD / Depends と差分の対応を確認する
Regression Agent 既存挙動・テスト・配布 mirror・CLI/skill UX のデグレを探す
Skeptic Agent 合格させたい前提で見落としている major risk を探す

Codex 環境で native TeamAgent が使えない場合でも、この gate を省略してはいけない。 codex-companion.sh review、利用可能な reviewer subagent、または明示的に分けた read-only manual-pass で同じ 2-4 視点を再現し、team_agent_modenative / codex-companion / manual-pass / unavailable を記録する。

Code Review Summary

詳細は references/code-review.md。 通常 code review は次を見る。

  • Security
  • Performance
  • Quality
  • Accessibility
  • AI Residuals
  • Spec Alignment
  • Plans Alignment
  • Regression Safety
  • TDD compliance

仕様正本 alignment check は必須。 spec_path がある場合は差分が仕様正本と矛盾しないか確認し、仕様正本が必要なのに無い場合は spec_skip_reason の妥当性を見る。 Plans.md alignment check とデグレ alignment check も同じ gate で扱う。

AI Residualsscripts/review-ai-residuals.shscripts/review-weak-supervision-report.sh を優先して使う。 untracked も見る場合は --include-untracked を使う。 mockData, dummy, fake, localhost, TODO, FIXME, it.skip, test.skip, expect(true).toBe(true) などは候補であり、diff 文脈で severity を決める。 finding 段階は網羅優先。minor と判定した指摘も observations[] / recommendations[] に残し、gate は verdict 段階だけで行う(Opus 4.8 は low-severity の報告を絞る癖がある。references/code-review.md の Finding coverage 参照)。

TDD compliance check

TDD が required の task では skip_tdd_reason、red-log、focused tests の証跡を確認する。 証跡なしで APPROVE しない。

Quick / Codex Closeout Summary

詳細は references/codex-closeout.md

軽量 path の原則:

  • target selection を先に固定する
  • Codex 指摘は advisory として扱い、実コードで確認してから採否を決める
  • final report には review command / tests / accepted findings / rejected findings / clean result を含める
  • stop-on-clean: clean result 後に、見栄えのためだけの追加 review をしない
  • Codex が使えない場合は full manual pass に fallback し、失敗を成功扱いしない

helper:

bash scripts/harness-review-closeout.sh --dry-run --uncommitted
bash scripts/harness-review-closeout.sh --base origin/main --parallel-tests --test "bash tests/test-harness-review-governance.sh"
bash scripts/harness-review-closeout.sh --commit HEAD

Plan Review Summary

詳細は references/plan-review.md。 Plan Review は Plans.md の DoD / Depends / Status と実装順序を見る。 仕様正本が必要なタスクで spec_path がない場合は、decision_needed として止める。

Scope Review Summary

詳細は references/scope-review.md。 Scope Review は、要求・差分・テスト・docs の境界が膨らんでいないかを見る。 範囲変更が必要なら、推測で進めず AskUserQuestion または plan 更新に戻す。

Security / UI / Dual

  • Security: references/security-profile.md
  • UI rubric: references/ui-rubric.md
  • high-res vision flow: references/vision-high-res-flow.md
  • Dual review: references/dual-review.md

/ultrareview は Harness flow 内では既定で呼ばない。 Harness flow の review-result.v1、commit guard、sprint-contract との接続を置き換えないため。 claude ultrareview [target] --json は CI / script からの second-opinion としてだけ扱う。

PR Host Boundary

GitHub-first。 PR host 上の review 事実は GitHub を正とし、local diff は補助証拠として扱う。 ただし local uncommitted review は GitHub に push しない。

Output Contract

User-facing prose follows the explicit session or project language. If no language is configured, use English. Use Japanese only when i18n.language: ja, CLAUDE_CODE_HARNESS_LANG=ja, or an explicit session instruction requests Japanese output. Machine-readable values stay English.

Start with the result summary.

## Review Result

### {APPROVE | REQUEST_CHANGES | decision_needed} - {one-line conclusion}

Target: `{BASE_REF}..HEAD` or `{target}`
Verification: {commands run}

Strengths:
- ...

Findings:
- [severity] file:line - issue and evidence

Next Actions:
- ...

Details:
```json
{
  "schema_version": "review-result.v1",
  "verdict": "APPROVE | REQUEST_CHANGES",
  "decision_needed": {
    "required": false,
    "ask_tool": "AskUserQuestion"
  },
  "accepted_findings": [],
  "rejected_findings": [],
  "acceptance_bar": {
    "critical_major_zero": true,
    "spec_alignment": "pass | fail | not_applicable",
    "plans_alignment": "pass | fail | not_applicable",
    "regression_safety": "pass | fail | not_applicable",
    "verification_evidence": "pass | fail | not_applicable"
  },
  "team_debate": {
    "required": false,
    "mode": "native | codex-companion | manual-pass | unavailable",
    "team_agent_mode": "native | codex-companion | manual-pass | unavailable",
    "agents": [],
    "disagreements": []
  },
  "critical_issues": [],
  "major_issues": [],
  "observations": [],
  "recommendations": []
}
```

Persist Verdict (required for commit guard / #218 fix)

Output Contract の JSON ブロックを出力したら、verdict が .claude/state/review-result.json必ず永続化されるよう以下の step を最後に実行する。これを踏み忘れると、PreToolUse commit guard が 後続 git commitAPPROVE 無しでブロックする (harness-work step 10 と同じ pattern)。

# 1. 上の JSON ブロックを一時ファイルへ書き出す (verdict / acceptance_bar 等を実値で)
mkdir -p .claude/state
cat > .claude/state/tmp-review-result.json <<'JSON'
{ "schema_version": "review-result.v1", "verdict": "APPROVE", ... }
JSON

# 2. write-review-result.sh で正規化保存 (commit_hash は省略可)
bash "${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-$PWD}}/scripts/write-review-result.sh" \
  .claude/state/tmp-review-result.json \
  "$(git rev-parse --short HEAD 2>/dev/null || true)"

# 3. 一時ファイル削除
rm -f .claude/state/tmp-review-result.json

verdictREQUEST_CHANGES でも保存する (commit guard は APPROVE のみ通過させ、REQUEST_CHANGES は履歴として残す)。 harness-release の Review Gate から委譲された場合も同じ step を踏む。

reviewer subagent は read-only (allowed-tools: Read, Grep, Glob) のため、上記 write 操作は orchestrator (skill を呼んだ main agent) が行う。

Codex Environment

Codex 環境では使える tool が異なる。 それでも、合格ライン、仕様正本、Plans.md、デグレ、修正後再レビュー、AskUserQuestion / decision_needed.v1 の契約は同じ。

通常環境 Codex fallback
Task tool の TeamAgent Debate reviewer subagent / codex-companion.sh review / manual-pass
AskUserQuestion 使えない場合は decision_needed.v1 を stdout に出し、推測で進めない
TaskList Plans.md を直接読む

Related Skills

  • harness-work: REQUEST_CHANGES 後の修正実行
  • harness-plan: plan / scope / spec の更新
  • harness-release: review 済み work の commit / release
用于项目初始化、工具配置、代理设置及技能镜像同步的集成技能。涵盖新建项目引导、CI/CD与Codex配置、内存集成及环境健康检查,不适用于实现或发布阶段。
setup init new project CI/Codex setup harness-mem mirror
opencode/skills/harness-setup/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-setup -g -y
SKILL.md
Frontmatter
{
    "name": "harness-setup",
    "description": "HAR: Project init, tool setup, agent config, memory setup, skill mirror sync. Trigger: setup, init, new project, CI\/Codex setup, harness-mem, mirror. Do NOT load for: implementation, review, release, planning."
}

Harness Setup

Harness の統合セットアップスキル。 以下の旧スキルを統合:

  • setup — 統合セットアップハブ
  • harness-init — プロジェクト初期化
  • harness-update — Harness アップデート
  • maintenance — ファイル整理・クリーンアップ

Quick Reference

サブコマンド 動作
/harness-setup init 新規プロジェクト初期化(CLAUDE.md + Plans.md + hooks + sync + doctor)
/harness-setup ci CI/CD パイプライン設定
/harness-setup codex Codex CLI インストール・設定
/harness-setup harness-mem harness-mem 統合・メモリ設定
/harness-setup mirrors skills/ → 公開 mirror bundle 更新
/harness-setup agents agents/ エージェント設定
/harness-setup localize CLAUDE.md ルールのローカライズ

Built-in slash discovery (CC 2.1.108+): /init のような built-in slash command も発見される。 Harness 固有の bootstrap が必要な時だけ /harness-setup init と使い分ける。

Claude Code setup guidance (CC 2.1.120+): MCP alwaysLoad${CLAUDE_EFFORT}claude plugin pruneclaude project purgeANTHROPIC_BEDROCK_SERVICE_TIERclaude_code.skill_activated.invocation_trigger、 Windows PowerShell primary shell、forked skills / subagents の deferred tools は docs/claude-code-setup-mcp-telemetry-provider.md を正本として扱う。

Codex plugin workflows: Codex /goalPlans.md を二重管理しない。 plugin-bundled hooks は opt-in、external agent import は ownership 明記、 MultiAgentV2 / agents.max_threads = 8 は上限として扱い、 sticky environments / app-server artifacts は safe default を優先する。 Codex 0.130.0 stable の codex remote-control、large thread pagination、 selected-environment view_image、live app-server config refresh、 accurate turn diffs、plugin details bundled hooks、sharing discoverability controls は docs/codex-plugin-workflows-policy.md を正本として扱う。 詳細は docs/codex-plugin-workflows-policy.md を参照。

サブコマンド詳細

init — プロジェクト初期化

新規プロジェクトに Harness を導入する。

生成ファイル:

project/
├── CLAUDE.md            # プロジェクト設定
├── Plans.md             # タスク管理(空テンプレート)
├── .claude/
│   ├── settings.json    # Claude Code 設定
│   └── hooks.json       # フック設定(Go バイナリ)
└── hooks/
    ├── pre-tool.sh      # 薄いシム(→ core/src/index.ts)
    └── post-tool.sh     # 薄いシム(→ core/src/index.ts)

フロー:

  1. プロジェクト種別を検出(Node.js/Python/Go/Rust/その他)
  2. 最小限の CLAUDE.md を生成
  3. Plans.md テンプレートを生成
  4. hooks.json を配置
  5. Go バイナリ検証: harness version でバイナリが利用可能か確認(v4.0 以降 Node.js 不要)
  6. プラグインファイル同期: harness sync.claude-plugin/ 配下のファイルを最新に同期。harness.toml が無く sync が失敗する場合は先に harness init を実行する(Setup hook 導入前にブートストラップされたプロジェクトの復旧経路)
  7. ヘルスチェック: harness doctor で全チェック項目をパス。問題があれば修正案を提示

Go バイナリ検証

# バイナリの存在と動作を確認
harness version
# 例: harness v4.0.0 (go1.22.0, darwin/arm64)

v4.0 以降、Harness のコアエンジンは Go バイナリに移行した。 Node.js は不要。バイナリは bin/harness(または PATH 上の harness)を使用する。

プラグインファイル同期

# .claude-plugin/ 配下のファイルを最新に同期
harness sync

# 同期内容の確認のみ(変更なし)
harness sync --dry-run

harness sync は skills/ の SSOT から各 mirror(codex/.codex/skills/、opencode/skills/)へ 変更を伝播させる。init 後に必ず実行すること。

ヘルスチェック

# 全チェック項目を実行
harness doctor

harness doctor は以下を確認する:

チェック項目 内容
バイナリ harness version が正常に返るか
プラグイン設定 .claude-plugin/plugin.json の形式が正しいか
hooks 配置 hooks が正しいパスに存在するか
mirror 同期 skills/ と mirror の内容が一致しているか
CLAUDE.md 必須セクションが存在するか

問題が検出された場合は修正コマンドを提示する。

ci — CI/CD 設定

GitHub Actions ワークフローを設定する。

# .github/workflows/ci.yml 生成例
name: CI
on:
  push:
    branches: [main]
  pull_request:
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test

codex — Codex CLI 設定

# インストール確認(Codex CLI は Node.js ベース。Harness 本体とは別物)
which codex || npm install -g @openai/codex

# タイムアウトコマンド確認(macOS)
TIMEOUT=$(command -v timeout || command -v gtimeout || echo "")
# macOS の場合: brew install coreutils

注意: Harness v4.0 本体(harness コマンド)は Node.js 不要の Go バイナリ。 Codex CLI(codex コマンド)は別ツールであり、引き続き Node.js が必要。

Codex provider / model metadata policy (0.123.0+ / 0.130.0)

Codex 0.123.0 以降の provider / model guidance と、Codex 0.130.0 stable の Bedrock aws login guidance は docs/codex-provider-setup-policy.md を正本として扱う。

要点:

  • Bedrock を使う場合は、Codex built-in provider の amazon-bedrock を使う。
  • AWS profile は user / project の Codex config で [model_providers.amazon-bedrock.aws] に置く。
  • AWS console-login credentials from aws login profiles は AWS 側の profile material として扱う。
  • Harness は AWS credential、console-login cache、provider endpoint を書き込まない。
  • Harness の配布用 Codex config には model = "gpt-5.4" を setup default として固定しない。
  • Harness の配布用 Codex config には model_provider = "amazon-bedrock" も setup default として固定しない。
  • gpt-5.4 は Codex 本体の current model metadata として扱い、古い gpt-5.2-codex などを推奨 sample として残さない。
  • Claude Code 側の CLAUDE_CODE_USE_BEDROCK / ANTHROPIC_DEFAULT_* / modelOverrides guidance と、Codex の model_provider = "amazon-bedrock" は混ぜない。

Bedrock を使う user / project だけが、必要に応じて次を追加する:

model_provider = "amazon-bedrock"

[model_providers.amazon-bedrock.aws]
profile = "codex-bedrock"

Claude Code 側の provider / MCP / telemetry guidance は docs/claude-code-setup-mcp-telemetry-provider.md を参照する。 特に ANTHROPIC_BEDROCK_SERVICE_TIER は Bedrock 利用者の provider 環境だけで扱い、 Harness の plugin default / template / shared project settings には入れない。

Codex app-server / plugin workflow policy (0.130.0)

Codex 0.130.0 stable (rust-v0.130.0, published 2026-05-08T23:09:55Z) の app-server / plugin workflow guidance は docs/codex-plugin-workflows-policy.md を正本として扱う。

要点:

  • codex remote-control は headless remotely controllable app-server の明示起動 entrypoint。Harness setup は remote-control defaults を config に書かない。
  • App-server clients can page large threads。長い loop / Breezing transcript は必要な page 範囲を確認する。
  • view_image は multi-environment session の selected environments 経由で file を解決できる。artifact report には environment / workdir を添える。
  • Live app-server threads pick up config changes without restart。ただし secret / provider / hook policy の変更は diff と verification で扱う。
  • Turn diffs stay accurate across apply_patch including partial failures。最終判断は git diff と tests で確認する。
  • Plugin details now show bundled hooks。install / share 前に bundled hooks を確認し、Harness bundled hooks は opt-in のままにする。
  • Plugin sharing exposes link metadata and discoverability controls。公開範囲と metadata は release surface として確認する。
  • Configurable OpenTelemetry trace metadata は debugging / triage 補助に限定し、個人情報・顧客情報・secret を入れない。
  • Built-in MCPs first-class runtime servers は Codex runtime owned surface として扱い、plugin-provided MCP と所有者を混ぜない。
  • CODEX_HOME environments TOML provider は user-level environment source。選択 environment を報告し、write turn は one primary environment に固定する。
  • Remove skills list extra roots に依存せず、Harness mirror install または [[skills.config]] path-based loading を明示する。

Codex MCP diagnostics / plugin loading (0.123.0+)

Codex 0.123.0 以降の MCP diagnostics / plugin MCP loading guidance は docs/codex-mcp-diagnostics.md を正本として扱う。

要点:

  • Codex TUI では、普段は /mcp で軽量に server 状態だけ確認する。
  • MCP server が見えない、resources が出ない、resource templates が読めない時だけ /mcp verbose を使う。
  • /mcp verbose では diagnostics / resources / resource templates を確認する。
  • plugin 内 .mcp.jsonmcpServers 形式と top-level server map 形式の両方を受け取れる前提で案内する。
  • 新規 plugin では共有しやすい mcpServers 形式を優先する。
  • 既存 plugin が top-level server map 形式なら、Codex 側の loading 改善を利用し、不要な書き換えを避ける。
  • Claude Code 側の claude mcp ....claude/mcp.json、hook type: "mcp_tool" guidance と混ぜない。

mcpServers 形式:

{
  "mcpServers": {
    "docs": {
      "command": "node",
      "args": ["server.js"]
    }
  }
}

top-level server map 形式:

{
  "docs": {
    "command": "node",
    "args": ["server.js"]
  }
}

Codex sandbox / execution policy (0.123.0+)

Codex 0.123.0 以降の remote_sandbox_configcodex exec shared flags guidance は docs/codex-sandbox-execution-policy.md を正本として扱う。

要点:

  • remote_sandbox_configrequirements.toml の host-specific sandbox policy として案内する。
  • remote devbox / ephemeral CI runner / shared host のように、remote environment ごとの allowed_sandbox_modes を比較して決める。
  • host matching は便利な分類だが、強い device authentication ではない。高リスク環境では broad wildcard を避ける。
  • Harness の配布用 codex/.codex/config.toml には organization-specific な remote_sandbox_config を書かない。
  • Codex 0.123.0 以降は codex exec が root-level shared flags を継承するため、wrapper 側で重複した --approval-policy / --sandbox pairs を追加しない。
  • scripts/codex-companion.sh task --write--sandbox workspace-write を付けるのは、Harness の「書き込みタスク」という意図を exec-local に変換しているためであり、root shared flags の重複転送ではない。
  • scripts/codex/codex-exec-wrapper.sh--full-auto は 53.2.4 では維持する。変更する場合は別 task で approval / sandbox behavior の回帰テストを追加する。

requirements example:

allowed_sandbox_modes = ["read-only"]

[[remote_sandbox_config]]
hostname_patterns = ["devbox-*.corp.example.com"]
allowed_sandbox_modes = ["read-only", "workspace-write"]

使用パターン(公式プラグイン経由):

bash scripts/codex-companion.sh task --write "タスク内容"
# または stdin 経由
cat /tmp/prompt.md | bash scripts/codex-companion.sh task --write

Cursor 実装バックエンド導入(脳 Opus / 体 composer)

Cursor を Harness の実装(worker)バックエンドとして使うための導入手順。 レビュー / advisor ロールは Opus に固定し、cursor バックエンドへ切り替えない(.claude/rules/cursor-cli-only.md の Role scope)。

1. AI 実行可(バックエンド選択の永続化)

set-impl-backend.sh でバックエンドを永続化する。Harness / AI がこのステップを実行できる。

# プロジェクトスコープ(このプロジェクトの env.local に書く)
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" cursor

# ユーザースコープ(全プロジェクト共通: ${HOME}/.config/claude-harness/impl-backend.env)
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --user cursor

# 現在解決されるバックエンドを表示して確認
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show

解決の優先順位: プロジェクト env.local がユーザースコープより優先される。

2. ユーザー手動(AI は編集不可。protected path + sandbox のため)

以下 3 ファイルは Edit/Write(.claude/settings*) deny と self-audit guard、および ~/.cursor/* が plugin write 対象外であるため Harness / AI が編集できない。ユーザー自身がターミナル / エディタで設定する。

  • ~/.cursor/permissions.json: terminalAllowlist / mcpAllowlist を追加する。 テンプレートは .claude/rules/cursor-cli-only.md~/.cursor/permissions.json テンプレートを使う。 --force / Run Everything(--yolo)は使わない(Cursor 公式が "Never use")。
  • .cursorignore: secrets(.env, *.pem, *.key, .ssh, .aws, .git)を列挙する。 テンプレートは .claude/rules/cursor-cli-only.md.cursorignore テンプレートを使う。
  • ~/.claude/settings.json の sandbox(2 点): (1) network.allowedDomains*.cursor.sh を追加、 (2) 公式キー sandbox.filesystem.allowWrite~/.cursor を追加する(cursor-agent は実行時に ~/.cursor/projects/...~/.cursor/cli-config.json.tmp へ状態を書くため、未許可だと EPERM で失敗する)。⚠️ キー名は allowWrite: write という名前にすると未知キーとして 無視され設定が効かない(実測で確認)。~/ は sandbox 側で展開される(公式例 ["~/.kube"])。 両方揃うと per-run の sandbox 無効化なしで実行できる。手順は docs/sandbox-allowlist-recipe.md の jq merge レシピと .claude/rules/cursor-cli-only.md の「Sandbox 要件」に従う。CC 完全再起動後に有効化される。

3. 境界(cursor は candidate のまま)

cursor バックエンドは candidate の位置づけ。安全性は Cursor の allowlist(best-effort、bypass 可能)ではなく、 専用 .git を持つ worktree での隔離実行 + Lead による diff レビュー + cherry-pick での本流取り込みで担保する。 cursor-agent の出力は Lead レビューまで untrusted として扱う。詳細は .claude/rules/cursor-cli-only.md を参照。

harness-mem — メモリ設定

Unified Harness Memory の設定を行う。

# メモリディレクトリ作成
mkdir -p .claude/agent-memory/claude-code-harness-worker
mkdir -p .claude/agent-memory/claude-code-harness-reviewer

# MEMORY.md テンプレート配置
cat > .claude/agent-memory/claude-code-harness-worker/MEMORY.md << 'EOF'
# Worker Agent Memory

## Project Context
[プロジェクト概要]

## Patterns
[学習パターン]
EOF

mirrors — 公開 skill bundle 同期

Windows の core.symlinks=false では repository symlink が通常ファイルになり、harness-* skill が command 一覧に出なくなることがあります。公開 bundle は実ディレクトリ mirror として同期します。

./scripts/sync-skill-mirrors.sh
./scripts/sync-skill-mirrors.sh --check

更新対象:

  • skills/
  • codex/.codex/skills/
  • opencode/skills/

agents — エージェント設定

agents/ の3エージェント構成を設定する。

agents/
├── worker.md      # 実装担当(task-worker + codex-implementer + error-recovery)
└── reviewer.md    # レビュー担当(code-reviewer + plan-critic)

localize — ルールローカライズ

.claude/rules/ のルールを現プロジェクトに適応する。

# ルール一覧確認
ls .claude/rules/

# プロジェクト固有ルールの追加
cat >> .claude/rules/project-rules.md << 'EOF'
# Project-Specific Rules
[プロジェクト固有ルール]
EOF

Plugin インストール (v2.1.71+ Marketplace)

v2.1.71 で Marketplace の安定性が大幅に改善された。 Claude Code 2.1.117-2.1.118 以降の plugin / managed settings 方針は docs/plugin-managed-settings-policy.md を正本として扱う。

推奨インストール方式

# @ref 形式でバージョン固定(推奨)
claude plugin install owner/repo@v4.0.0

# 最新版
claude plugin install owner/repo

owner/repo@vX.X.X 形式を推奨。@ref パーサー修正により、タグ・ブランチ・コミットハッシュいずれも正確に解決される。

アップデート

claude plugin update owner/repo

v2.1.71 で update 時の merge conflict が修正され、安定したアップデートが可能になった。

その他の改善点

  • MCP server 重複排除: 同一 MCP サーバーの多重登録を自動防止
  • /plugin uninstallsettings.local.json を使用: ユーザーローカル設定に正確に反映

Managed marketplace / dependency policy (v2.1.117+)

企業利用で plugin marketplace を制御する場合は、Claude Code 本体の managed settings を使う。 Harness は独自の marketplace resolver や dependency resolver を重ねない。

項目 用途 Harness の扱い
extraKnownMarketplaces チームに推奨 marketplace を案内・登録する 通常の onboarding ではこちらを優先
blockedMarketplaces 特定 marketplace source をブロックする managed settings 専用。通常ユーザー向け default には入れない
strictKnownMarketplaces 許可した marketplace source だけ追加できるようにする managed settings 専用。通常ユーザー向け default には入れない
plugin dependency auto-resolve dependencies の自動 install / missing dependency hints Claude Code 本体に任せる。Harness 独自 resolver は追加しない
plugin themes/ directory plugin が theme を配布する 今回は P: 将来タスク。Harness は theme を同梱しない

DISABLE_AUTOUPDATER は自動更新を止める。 DISABLE_UPDATES は手動 claude update まで止めるため、企業の固定バージョン運用向け。 Harness の project default にはどちらも入れず、必要な組織が managed settings または端末管理で設定する。

依存関係が欠けた場合は、まず Claude Code の /plugin Errors、/doctorclaude plugin list --json を確認する。 marketplace 未登録が原因なら /plugin marketplace add または claude plugin marketplace add で登録し、本体の auto-resolve に任せる。

Maintenance — ファイル整理

定期メンテナンスタスク:

タスク コマンド
古いログ削除 find .claude/logs -mtime +30 -delete
Plans.md 圧縮 完了タスクをアーカイブセクションに移動
古いトレース削除 tail -1000 .claude/state/agent-trace.jsonl > /tmp/trace && mv /tmp/trace .claude/state/agent-trace.jsonl

関連スキル

  • harness-plan — セットアップ後にプロジェクト計画を作成
  • harness-work — セットアップ後にタスクを実行
  • harness-review — セットアップ設定をレビュー
Plans.mdと実装状況を照合し、差分を検出・進捗を同期するスキル。Git履歴やAgent Traceからタスク状態を確認し、 Plans.mdのステータマーカーを更新する。スナップショット保存やレトロスペクティブも対応。
sync-status where am I check progress 今どこ? 進捗確認
opencode/skills/harness-sync/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-sync -g -y
SKILL.md
Frontmatter
{
    "name": "harness-sync",
    "description": "HAR: Sync Plans.md with implementation. Drift detect, marker update, retrospective. Trigger: sync-status, where am I, check progress. --snapshot for snapshots. Do NOT load for: planning, implementation, review, release."
}

Harness Sync

Plans.md と実装状況を照合し、差分を検出・更新する。 旧 sync-status および harness-plan sync サブコマンドの独立版。

Quick Reference

ユーザー入力 動作
harness-sync 進捗同期 + レトロスペクティブ(デフォルト ON)
harness-sync --no-retro 進捗同期のみ(レトロスキップ)
harness-sync --snapshot スナップショット保存(進捗の時点記録)
harness-sync --plan roadmap named Plans の roadmap を同期
"今どこ?" / "進捗確認" 同上

オプション

オプション 説明 デフォルト
--snapshot 現在の進捗をスナップショットとして保存 false
--no-retro レトロスペクティブをスキップ false(デフォルトで実行)
--plan NAME plans/manifest.json の named plan を使う active/default

Step 0: Plans.md 検証

Plans.md の存在とフォーマットを確認する。問題がある場合は即座に案内して停止する。 複数 Plans.md がある repo では、対象 plan を scripts/plan-registry.sh list または --plan NAME で確認してから読む。

状態 案内
Plans.md が存在しない Plans.md が見つかりません。harness-plan create で作成してください。停止
ヘッダーに DoD / Depends カラムがない(v1 形式) Plans.md が旧フォーマット(3カラム)です。harness-plan create で v2(5カラム)に再生成してください。既存タスクは自動的に引き継がれます。停止
v2 形式(5カラム) そのまま Step 1 に進む

Step 1: 現状収集(並列)

# Plans.md の状態
cat Plans.md

# Git 変更状態
git status
git diff --stat HEAD~3

# 直近コミット履歴
git log --oneline -10

# エージェントトレース(直近の編集ファイル)
tail -20 .claude/state/agent-trace.jsonl 2>/dev/null | jq -r '.files[].path' | sort -u

Step 1.5: Agent Trace 分析

Agent Trace から直近の編集履歴を取得し、Plans.md のタスクと照合する:

# 直近の編集ファイル一覧
RECENT_FILES=$(tail -20 .claude/state/agent-trace.jsonl 2>/dev/null | \
  jq -r '.files[].path' | sort -u)

# プロジェクト情報
PROJECT=$(tail -1 .claude/state/agent-trace.jsonl 2>/dev/null | \
  jq -r '.metadata.project')

照合ポイント:

チェック項目 検出方法
Plans.md にないファイル編集 Agent Trace vs タスク記述
タスク記述と異なるファイル 想定ファイル vs 実際の編集
長時間編集がないタスク Agent Trace 時系列 vs WIP 期間

Step 2: 差分検出

チェック項目 検出方法
完了済みなのに cc:WIP コミット履歴 vs マーカー
着手済みなのに cc:TODO 変更ファイル vs マーカー
cc:完了 なのに未コミット git status vs マーカー

Step 3: Plans.md 更新提案

差分が検出された場合、提案して実行する:

Plans.md 更新が必要です

| Task | 現在 | 変更後 | 理由 |
|------|------|--------|------|
| XX   | cc:WIP | cc:完了 | コミット済み |
| YY   | cc:TODO | cc:WIP | ファイル編集済み |

更新しますか? (yes / no)

Step 4: 進捗サマリー出力

## 進捗サマリー

**プロジェクト**: {{project_name}}

| ステータス | 件数 |
|----------|------|
| 未着手 (cc:TODO) | {{count}} |
| 作業中 (cc:WIP) | {{count}} |
| 完了 (cc:完了) | {{count}} |
| PM確認済 (pm:確認済) | {{count}} |

**進捗率**: {{percent}}%

### 直近の編集ファイル (Agent Trace)
- {{file1}}
- {{file2}}

Step 4.5: スナップショット保存(--snapshot 指定時)

--snapshot が指定された場合、現在の進捗状態を時刻付きスナップショットとして保存する。

保存先

.claude/state/snapshots/ ディレクトリに JSON 形式で保存:

SNAPSHOT_DIR="${PROJECT_ROOT}/.claude/state/snapshots"
mkdir -p "${SNAPSHOT_DIR}"
SNAPSHOT_FILE="${SNAPSHOT_DIR}/progress-$(date -u +%Y%m%dT%H%M%SZ).json"

スナップショット内容

{
  "timestamp": "2026-03-08T10:30:00Z",
  "phase": "Phase 26",
  "progress": {
    "total": 16,
    "todo": 5,
    "wip": 3,
    "done": 6,
    "confirmed": 2
  },
  "progress_rate": 50,
  "recent_commits": ["abc1234 feat: ...", "def5678 fix: ..."],
  "recent_files": ["skills/harness-work/SKILL.md", "..."],
  "notes": ""
}

差分比較

前回スナップショットが存在する場合、差分を表示:

## スナップショット差分

| 指標 | 前回 ({{prev_time}}) | 今回 | 変化 |
|------|---------------------|------|------|
| 進捗率 | {{prev}}% | {{current}}% | +{{diff}}%pt |
| 完了タスク | {{prev_done}} | {{current_done}} | +{{diff_done}} |
| WIP タスク | {{prev_wip}} | {{current_wip}} | {{diff_wip}} |

設計意図: snapshot はユーザーが「今の状態を記録しておきたい」と思った時に手動で使う。 breezing 中の自動的なプログレスフィード(26.2.3)とは別の機能。

Step 5: 次のアクション提案

次にやること

**優先 1**: {{タスク}}
- 理由: {{依頼中 / アンブロック待ち}}

**推奨**: harness-work, harness-review

異常検知

状況 警告
複数の cc:WIP 複数タスクが同時進行中
pm:依頼中 が未処理 PM の依頼を先に処理する
大きな乖離 タスク管理が追いついていない
WIP が 3日以上更新なし ブロックされていないか確認

Step 6: レトロスペクティブ(デフォルト ON)

cc:完了 タスクが 1 件以上あれば自動的に振り返りを実行する。 --no-retro で明示的にスキップ可能。

Step R1: 完了タスク収集

# Plans.md から cc:完了 / pm:確認済 のタスクを抽出
grep -E 'cc:完了|pm:確認済' Plans.md

# 直近の完了コミット履歴
git log --oneline --since="7 days ago"

# 変更規模
git diff --stat HEAD~10

Step R2: 振り返り 4 項目

項目 分析方法
見積もり精度 Plans.md のタスク記述から想定ファイル数を推論 → git diff --stat の実変更ファイル数と比較
ブロック原因 blocked マーカーが付いたタスクの理由パターンを集計(技術的/外部依存/仕様不明確)
品質マーカー的中率 [feature:security] 等を付けたタスクで実際に関連問題が出たか
スコープ変動 Plans.md の初回コミット時のタスク数 vs 現在のタスク数(追加/削除件数)

Step R3: 振り返りサマリー出力

## 振り返りサマリー

**期間**: {{start_date}} 〜 {{end_date}}

| 指標 | 値 |
|------|-----|
| 完了タスク | {{count}} 件 |
| ブロック発生 | {{blocked_count}} 件 |
| スコープ変動 | +{{added}} / -{{removed}} 件 |
| 見積もり精度 | 想定 {{est}} ファイル → 実際 {{actual}} ファイル |

### 学び
- {{1-2 行の学び}}

### 次に活かすこと
- {{1-2 行の改善アクション}}

Step R4: harness-mem への記録

振り返り結果を harness-mem に記録し、次回の create 時に参照できるようにする。 記録先: .claude/agent-memory/ 配下の該当エージェントメモリ。

関連スキル

  • harness-plan — 計画作成・タスク管理
  • harness-work — タスク実装
  • harness-review — コードレビュー
集成Plans.md任务执行,支持单人、并行及团队全自动模式。根据任务数自动选择最优执行拓扑,支持Codex/Cursor等后端切换,实现从单任务到全并行的高效开发与CI恢复。
implement execute do everything breezing team run parallel composer composer 2.5
opencode/skills/harness-work/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-work -g -y
SKILL.md
Frontmatter
{
    "name": "harness-work",
    "description": "HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup."
}

Harness Work

Harness の統合実行スキル。 以下の旧スキルを統合:

  • work — Plans.md タスクの実装(スコープ自動判断)
  • impl — 機能実装(タスクベース)
  • breezing — チームフル自動実行
  • parallel-workflows — 並列ワークフロー最適化
  • ci — CI 失敗時の復旧

Quick Reference

ユーザー入力 モード 動作
/harness-work auto タスク数で自動判定(下記参照)
/harness-work all auto 全未完了タスクを自動モードで実行
/harness-work 3 solo タスク3だけ即実行
/harness-work --parallel 5 parallel 5ワーカーで並列実行(強制)
/harness-work --codex codex Codex CLI に委託(明示時のみ)
Cursor host (adapter candidate) cursor Task/subagent routing via .cursor/AGENTS.md; not auto-selected
/harness-work --breezing breezing チーム実行を強制
/harness-work 3 --plan roadmap solo named Plans の roadmap からタスク3を実行

Execution Mode Auto Selection(フラグなし時の自動判定)

明示的なモードフラグ(--parallel, --breezing, --codex)がない場合、 対象タスク数に応じて最適なモードを自動選択する:

対象タスク数 自動選択モード 理由
1 件 Solo オーバーヘッド最小。直接実装が最速
2〜3 件 Parallel(Task tool) Worker 分離のメリットが出始める閾値
4 件以上 Breezing Lead 調整 + Worker 並列 + Reviewer 独立の三者分離が効果的

ルール

  1. 明示フラグは常にオートモードを上書きする
    • --parallel N → Parallel モード(タスク数に関係なく)
    • --breezing → Breezing モード(タスク数に関係なく)
    • --codex → Codex モード(タスク数に関係なく)
  2. --codex は明示時のみ発動。Codex CLI が未インストールの環境があるため、自動選択しない
  3. --codex は他モードと組み合わせ可能: --codex --breezing → Codex + Breezing

Execution Backend Selection(実装バックエンド選択)

バックエンド(どのランタイムが実装するか)は、実行モード(トポロジー: solo / parallel / breezing)と直交する。 実行モードが「何ワーカーで・どう分割して回すか」を決めるのに対し、バックエンドは「実装の手を誰が動かすか」を決める。

backend 実装の担い手 委託コマンド
claude(既定) Task subagent(agents/worker.md Agent tool で worker を spawn
codex Codex CLI bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write "<prompt>"
cursor cursor-agent(model composer-2.5-fast bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task --write --workspace <worktree> "<prompt>"

解決手順

run 開始時に 1 回だけ解決する。backend 判定は 必ず resolver 経由にし、HARNESS_IMPL_BACKEND env だけを直読みして判定しない:

bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh"

precedence(高い順): --backend <v> / --cursor / --codex フラグ > HARNESS_IMPL_BACKEND 環境変数 > プロジェクト env.local の同名行 > ユーザー ~/.config/claude-harness/impl-backend.env の同名行 > 既定値 claude。プロジェクト設定はユーザースコープを上書きする。 明示フラグ(--backend / --cursor / --codex)は env / file / default を常に上書きする。

自然言語 backend trigger

ユーザーが composer / コンポーザー / Composer で / composer 2.5 / composer モード と言った場合は、cursor backend 指定として扱う。 これは --cursor と同じ intent だが、backend の確定値は必ず resolve-impl-backend.sh で解決する。 解決時は明示 override として --backend cursor を渡し、env / project / user file / default より優先させる。 Lead は composer を Claude Worker 内の追加 agent と解釈せず、非 claude backend の規約どおり Worker agent を挟まずに cursor-companion.sh を直接呼ぶ。

role-scoped 制約

バックエンドは role-scoped。解決済みバックエンドを使うのは実装(worker)ロールだけ。 Reviewer と Advisor の両ロールは常に brain(--host claude、Opus)に固定する。 Reviewer を cursor / codex バックエンドに routing しない(実装したバックエンドが自分の出力をレビューしてはならない)。

# 実装ロールだけ解決済み backend に従う(例: backend=cursor なら composer-2.5-fast を解決)
bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model
# review / advisor は常に claude(Opus)固定
bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host claude --role reviewer --field model
bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host claude --role advisor --field model

モデル名の正本は model-routing.sh 側。本ドキュメント中の composer-2.5-fast は参照値であり、実際の解決は上記コマンドに従う(drift 防止)。

claude バックエンドのトポロジー(Worker 介在なし)

backend が codex または cursor の場合、Lead は Worker agent (claude-code-harness:worker) を spawn しない。 代わりに Lead 自身が cursor-companion.sh / codex-companion.sh を直接呼ぶ。 Worker 層の介在は backend=claude のときだけ。

配線:

backend 経路
claude(既定) Lead → Worker (claude-code-harness:worker agent) → … → Lead review → cherry-pick
codex Lead → codex-companion.sh task --write → Lead review → cherry-pick
cursor Lead → cursor-companion.sh task --write --workspace <isolated-wt> → Lead review → cherry-pick

非 claude backend で Worker を間に挟むと、Lead → Worker → companion → composer/codex と二段委譲になり、Worker の存在意義(agent 契約による self_review 5 件のゲート)が空回りする(非 claude では worker-report.v1self_review も生成されないため)。Lead は Worker をスキップして companion を直接呼ぶ。

非 claude backend の companion 呼び出しでも、Lead は先に専用 worktree を作り、companion stdout を companion-result.v1 相当の {baseCommit, commit, worktreePath, branch, files_changed, summary} に正規化してから既存の Lead review / cherry-pick 経路へ渡す。REQUEST_CHANGES 時は SendMessage を使わず、同じ worktree で cursor-companion.sh / codex-companion.sh を再実行し、baseCommit..HEAD を再レビューして range cherry-pick する。

claude バックエンドの self_review ゲート

backend が codex または cursor の場合、worker-report.v1self_review 配列も生成されない。 そのため Lead は self_review ゲートをスキップし、Lead の diff レビューを唯一の品質ゲートとする(既存の codex path と同じ扱い)。

cursor バックエンドの banner(委託前に必須)

backend が cursor のとき、Lead は委託前に次の 1 行 banner を必ず出力する:

⚠️ cursor backend: model=composer-2.5-fast / R01-R13 ガードレールは cursor-agent 内部に適用されない / 出力は Lead レビューまで untrusted

cursor の write 委託は専用 .git を持つ worktree 内で実行し、Lead が main へ cherry-pick する(cherry-pick 経路で R01-R13 が適用される)。 ガバナンス詳細は .claude/rules/cursor-cli-only.md を参照。

Lead の cherry-pick 前ゲート(contract grep を必須)

非 claude backend (cursor / codex) の出力を main にとり込む前に、Lead は 目視 diff + contract grep の二段ゲートを必ず通す。目視 diff だけで APPROVE しない。

ゲート コマンド 検知できるもの
diff 目視 git show <sha> 変更が意図どおりか・他ファイル touch なしか・support tier 表記不変か
contract grep bash tests/test-support-claim-wording.sh 公開 support 表記の破壊
contract grep bash scripts/ci/check-consistency.sh i18n / locale / mirror / capability matrix の固定文字列契約破壊
contract grep bash tests/validate-plugin.sh plugin 配布契約・hook 配線

全 PASS のときだけ cherry-pick。1 件でも fail なら revert または composer に再委託(同一文字列契約を保つよう明示)。

理由: docs / README / locale / capability-matrix / spec.md には grep で監視される 固定文字列契約がある (例: README_ja.md5動詞ワークフロー)。composer は表面的な言語的重複を機械的に削減する傾向があり、目視 diff では「綺麗な dedup」に見えても固定句を破壊しうる。

オプション

オプション 説明 デフォルト
all 全未完了タスクを対象 -
N or N-M タスク番号/範囲指定 -
--parallel N 並列ワーカー数 auto
--sequential 直列実行強制 -
--codex Codex CLI で実装委託(明示時のみ、自動選択しない) false
--backend <claude|codex|cursor> 明示バックエンド選択(worker ロールのみ適用、precedence 最上位) claude
--cursor cursor backend(--codex と同様、明示時のみ。cursor-agent 未インストール環境があるため自動選択しない) false
--plan NAME plans/manifest.json の named plan を使う active/default
--no-commit 自動コミット抑制 false
--resume <id|latest> 前回セッション再開。長く空いた後は /recap 併用を推奨 -
--breezing Lead/Worker/Reviewer のチーム実行 false
--no-tdd TDD フェーズスキップ false
--tdd-bypass 緊急時だけ TDD 強制を bypass。HARNESS_TDD_BYPASS_REASON または明示理由を audit に残す false
--no-simplify Auto-Refinement スキップ false
--auto-mode Harness 側の Auto Mode rollout を明示。CC 2.1.111 で不要になった --enable-auto-mode とは別物 false

Progressive Disclosure

まずこの本文で入口、自動選択、停止条件だけを確認する。 詳細は必要になった時だけ読む。

詳細 参照
Solo / Parallel / Codex / Breezing の具体手順 references/execution-modes.md
Codex review、Reviewer fallback、AI Residuals、修正ループ references/review-loop.md
Solo / Breezing 完了報告の生成 references/completion-report.md
テスト/CI 失敗時の再チケット化 references/failure-reticketing.md
仕様正本チェックの基準 docs/plans/spec-ssot.md

重要停止条件

  • Plans.md が旧フォーマットで DoD / Depends / Status を読めない時は停止する。
  • 仕様が実装判断に影響するのに project spec SSOT が見つからない時は、先に仕様正本を作成/更新してから実装する。
  • sprint-contract が required なのに ready でない時は実装に進まない。
  • critical / major review finding が残っている時は完了にしない。
  • テストを弱める、skip する、期待値を実装に合わせて緩める形では解決しない。
  • helper script は host project の scripts/ ではなく ${HARNESS_PLUGIN_ROOT}/scripts/ から呼ぶ。
  • 複数 Plans.md がある場合は、1 run の中で plan を切り替えない。必要なら --plan NAME を明示して新しい run を開始する。

Token Optimization (v2.1.69+): git 操作を伴わない軽量タスクでは plugin settings の includeGitInstructions: false を有効にして プロンプトトークンを削減できる。

Prompt Cache (CC 2.1.108+): 長めの実装や --resume を多用する作業では ENABLE_PROMPT_CACHING_1H=1 を優先する。

スコープダイアログ(引数なし時)

/harness-work
どこまでやりますか?
1) 次のタスク: Plans.md の次の未完了タスク → Solo で実行
2) 全部(推奨): 残りのタスクをすべて完了 → タスク数で自動モード選択
3) 番号指定: タスク番号を入力(例: 3, 5-7)→ 件数で自動モード選択

引数ありなら即実行(対話スキップ):

  • /harness-work all → 全タスク、自動モード選択
  • /harness-work 3-6 → 4件なので Breezing 自動選択

Effort レベル制御(Opus 4.8 / v2.1.111+)

effort はモデルの推論強度を選ぶ正式なノブ。low(○)/medium(◐)/high(●)/xhigh の 4 段階で、 /effort auto でデフォルトにリセットできる(max は v2.1.72 で廃止、xhigh が後継)。

Opus 4.8 では thinking は既定 off で、effort が推論深度の主レバー(過去のどの Opus より effort の影響が大きい)。 「浅い推論」を観測したら prompt で回避せず effort を上げる。 そのため複雑タスクの強化は free-text marker(旧 ultrathink)を spawn prompt に注入する方式を廃止し、 複雑度スコアから Worker spawn の effort tier を選ぶ方式に統一する。 これは docs/model-routing-policy.md(effort を free-text から推測しない)と .claude/rules/opus-4-7-prompt-audit.md 合格条件 5(xhigh は呼び出し側が選ぶ)と整合する。

多要素スコアリング

タスク着手時に以下のスコアを合算する。

要素 条件 スコア
ファイル数 変更対象 4 ファイル以上 +1
ディレクトリ core/, guardrails/, security/ を含む +1
キーワード architecture, security, design, migration を含む +1
失敗履歴 agent memory に同タスクの失敗記録あり +2
明示指定 PM テンプレートに effort: high / effort: xhigh(旧 ultrathink も互換受理)記載あり +3(自動採用)

effort tier の決め方(注入しない)

スコアから effort tier を escalation signal として決める(ultrathink 等の marker 文字列を spawn prompt に 書かない)。 適用 lever は次の 2 つだけ:

  • session /effort: 複雑タスクのバッチに入る前に host が /effort high / /effort xhigh を設定する(session 単位で効く確実な lever)。
  • worker frontmatter: agents/worker.mdeffort(既定 medium)が floor。CC の Agent / Task spawn API は per-spawn の effort 指定を公開しないため、worker 1 体ごとに effort を上げる機構はない。スコアは worker-report.v1task_complexity_note に記録し、Lead が session effort 引き上げの判断材料にする。
スコア code-risk(core/guardrails/security/architecture/migration を含む) effort tier
0-2 不問 medium(Worker frontmatter 既定のまま)
≥ 3 なし high
≥ 3 あり xhigh

breezing モードでも同じロジックを適用する(harness-work が一本化して管理)。 Worker は Sonnet 4.6 のため xhigh は実効 high にダウングレードされるが、tier 引き上げ自体は有効(docs/effort-level-policy.md)。

実行モード詳細

Harness helper script root

Harness が同梱する helper script は、作業対象プロジェクトの scripts/ ではなく、必ず plugin bundle root から呼ぶ。

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi

以降の node "${HARNESS_PLUGIN_ROOT}/scripts/..." / bash "${HARNESS_PLUGIN_ROOT}/scripts/..." は、この解決済み root を前提にする。

Backend-resolved executor path (Solo / Parallel / Breezing)

Solo / Parallel / Breezing は同じ resolver result から実装 executor を選ぶ。 harness-work 3 --cursor と user/project HARNESS_IMPL_BACKEND=cursor は、1 件タスクでも local Read/Write/Edit/Bash に fall through してはいけない。

resolver_backend_arg = ""
if explicit_backend_value in ["claude", "codex", "cursor"]:
    resolver_backend_arg = "--backend {explicit_backend_value}"
backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
if explicit_flag == "--cursor":
    backend = "cursor"
if explicit_flag == "--codex":
    backend = "codex"

if topology in ["solo", "parallel"] and backend in ["cursor", "codex"]:
    BASE_REF = git("rev-parse", "HEAD")
    WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
    worktree_path = ".claude/worktrees/{backend}-{WT_ID}"
    worktree_branch = "{backend}-work/{WT_ID}"
    bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
    companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
    if backend == "cursor":
        companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
    else:
        companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
        companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
    latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
    if backend == "cursor" and git("-C", worktree_path, "status", "--porcelain") != "":
        git("-C", worktree_path, "add", "-A")
        git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: delegated change")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
    if latest_commit == BASE_REF:
        raise EscalationError("{backend} companion produced no commit")
    worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
    enter_non_claude_companion_review_loop(worker_result)
else:
    run_native_solo_or_parallel()

def enter_non_claude_companion_review_loop(worker_result):
    # companion-result.v1 has no worker_id and no worker_result.self_review.
    # Do not use the Worker-only SendMessage/self_review loop for cursor/codex.
    latest_commit = worker_result.commit
    diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
    verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
    review_count = 0
    MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
        previous_commit = latest_commit
        if backend == "cursor":
            companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
        else:
            companion_state_file = "{worker_result.worktreePath}/.claude/state/codex-primary-environment.json"
            companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
        latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
        if backend == "cursor" and git("-C", worker_result.worktreePath, "status", "--porcelain") != "":
            git("-C", worker_result.worktreePath, "add", "-A")
            git("-C", worker_result.worktreePath, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: review fix")
            latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
        if latest_commit == previous_commit:
            raise EscalationError("{backend} companion retry produced no new commit")
        worker_result.commit = latest_commit
        worker_result.summary = companion_output
        diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
        verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
        review_count++
    if verdict == "APPROVE":
        git cherry-pick --no-commit {worker_result.baseCommit}..{worker_result.commit}

Parallel は task ごとにこの resolver path を適用する。 backend=cursor / codex の場合は native Worker spawn を使わず、task ごとに isolated companion worktree を作成して companion-result.v1 に正規化してから non-Claude companion 専用の range review / cherry-pick loop に入る。

Solo モード(1 件時の自動選択)

  1. Plans.md を読み込み、対象タスクを特定
    • Plans.md が存在しない場合: harness-plan create --ci を自動呼び出し → Plans.md を生成して続行
    • ヘッダーに DoD / Depends カラムがない場合: Plans.md が旧フォーマットです。harness-plan create で再生成してください。停止
    • 会話に未記載タスクがある場合: 直前の会話コンテキストから要件を抽出し、Plans.md に cc:TODO で自動追記
      • 抽出ロジック: ユーザー発言からアクション動詞(「〜を追加」「〜を修正」「〜を実装」)を検出
      • 追記時は v2 フォーマット(Task / 内容 / DoD / Depends / Status)に準拠
      • 追記後、ユーザーに「Plans.md に以下を追記しました」と表示(5 秒タイムアウト付きプロンプト、デフォルト: 続行) 1.5. タスク背景確認(30 秒):
    • タスクの「内容」と「DoD」から 目的(このタスクが解く課題)を 1 行で推論表示
    • git grep / Glob影響範囲(変更が及ぶファイル/モジュール)を推論表示
    • 推論に自信がある場合: そのまま実装に進む(フロー遅延なし)
    • 推論に自信がない場合: ユーザーに 1 問だけ確認(「この理解で合っていますか?」) 1.6. 仕様正本 preflight:
    • 既存の project spec SSOT を探す(例: docs/spec/00-project-spec.md, docs/ARCHITECTURE.md, docs/HANDOFF.md, docs/oem/PROJECT_COMPASS.md, docs/specs/
    • task が product behavior / API / data model / permission / billing / integration / tenant boundary を変える場合、spec がなければ docs/spec/00-project-spec.md を作る
    • spec が古い、または task と矛盾する場合は、実装前に spec を更新する
    • typo / format / dependency bump / docs-only / 動作変更なし refactor は skip 理由を残して続行する
    • Worker / Reviewer へ渡す context には spec_path または spec_skip_reason を含める
  2. タスクを cc:WIP に更新
  3. TDD フェーズ[skip:tdd] なし & テストFW存在時): a. テストファイルを先に作成(Red) b. 失敗を確認 c. bash "${HARNESS_PLUGIN_ROOT}/scripts/log-tdd-red.sh".claude/state/tdd-red-log/<task-id>.jsonl に FAIL 証跡を残す。script が利用できない環境では、literal な failing test output を worker-report の self_review evidence に添付する d. --tdd-bypass を使う場合は、HARNESS_TDD_BYPASS=1HARNESS_TDD_BYPASS_REASON="<理由>" を明示し、TDD を省略した理由を sprint-contract / worker-report に残す
  4. node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" <task-id>sprint-contract.json を生成
  5. Reviewer 観点の追記を bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" で加え、bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" で approved を確認
  6. Advisor consult(必要時のみ):
    • 高リスク task(needs-spike / security-sensitive / state-migration)は、初回実行前に 1 回だけ相談する
    • 同じ原因の失敗が 2 回続いたら、3 回目に入る前に相談する
    • plateau(行き詰まり検知)が PIVOT_REQUIRED を返した時は、ユーザーへ止めて投げる前に 1 回だけ相談する
    • 相談結果は advisor-response.v1 で受け取り、PLAN は進め方の組み替え、CORRECTION は局所修正、STOP は即エスカレーションとして扱う
    • 同じ trigger_hash では 1 回しか相談しない。task ごとの相談回数は最大 3 回
  7. backend-resolved executor path でコードを実装(Green)
    • backend=claude: local / native Read/Write/Edit/Bash path で実装
    • backend=cursor / codex: 上記 companion worktree path で実装し、companion-result.v1 を共通 review loop に渡す
  8. /simplify で Auto-Refinement(--no-simplify で省略可)
  9. 自動レビューステージ(「レビューループ」参照):
    • Codex exec 優先でレビュー実行 → フォールバックで内部 Reviewer agent
    • sprint-contract.jsonreviewer_profileruntime の場合は bash "${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh" を実行
    • REQUEST_CHANGES の場合: 指摘を元に修正→再レビュー(MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    • APPROVE で次ステップへ。self-check だけでは完了を確定しない
  10. bash "${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh" で review artifact を正規化して保存(browser profile は --browser-result を渡し、browser_verdict == PENDING_BROWSER の時は static verdict を採用)
  11. git commit で自動コミット(--no-commit で省略可)
  12. タスクを cc:完了 に更新(commit hash 付与)
  • git log --oneline -1 で直近の commit hash(短縮形 7 文字)を取得
  • Plans.md の Status を cc:完了 [a1b2c3d] 形式で更新
  • commit がない場合(--no-commit 時)は hash なしで cc:完了 のみ
  1. リッチ完了報告(「完了報告フォーマット」参照)
  2. 失敗時の自動再計画(テスト/CI 失敗時のみ):
    • テスト実行結果を確認
    • 失敗した場合: 修正タスク案を state に保存し、承認コマンド経由で Plans.md に追加(「失敗タスクの自動再チケット化」参照)
    • 成功した場合: 次タスクへ進む

Parallel モード(2〜3 件時の自動選択 / --parallel N で強制)

[P] マーク付きタスクを N ワーカーで並列実行。 --parallel N で明示指定した場合は、タスク数に関係なくこのモードを使用。 同一ファイルへの書き込みが競合する場合は git worktree で分離。 各 task の実装 executor は Backend-resolved executor path に従う。 --parallel N --cursor--backend cursor、または default HARNESS_IMPL_BACKEND=cursor の場合、Parallel でも native Worker spawn ではなく task ごとの Cursor companion worktree を使う。

Codex モード(--codex 明示時のみ)

公式プラグイン codex-plugin-cc の companion 経由で Codex CLI にタスクを委託する。

# タスク委託(書き込み可能・worktree 分離)
BASE_REF="$(git rev-parse HEAD)"
WT_ID="codex-$(date +%Y%m%d-%H%M%S)-$$"
WORKTREE_PATH=".claude/worktrees/${WT_ID}"
git worktree add -b "codex-work/${WT_ID}" "$WORKTREE_PATH" "$BASE_REF"
HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH/.claude/state/codex-primary-environment.json" \
  bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH" \
  "タスク内容。完了前にこの worktree で exactly one git commit を作成してください。"

# stdin 経由(大きなプロンプト向け)
CODEX_PROMPT=$(mktemp /tmp/codex-prompt-XXXXXX.md)
# タスク内容を書き出し
cat "$CODEX_PROMPT" | HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH/.claude/state/codex-primary-environment.json" \
  bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH"
rm -f "$CODEX_PROMPT"

# Lead review 後に承認されたら range を取り込む
git -C "$WORKTREE_PATH" diff "$BASE_REF..HEAD"
WORKTREE_HEAD="$(git -C "$WORKTREE_PATH" rev-parse HEAD)"
git cherry-pick --no-commit "$BASE_REF..$WORKTREE_HEAD"

companion は App Server Protocol 経由で Codex と通信し、 Job 管理・thread resume・構造化出力を提供する。 結果を検証し、品質基準を満たさない場合は自力で修正。

Cursor モード(adapter candidate、自動選択しない)

Cursor host では .cursor/AGENTS.md.cursor-plugin/plugin.json が bootstrap route。Cursor は candidate のまま — supported claim は禁止。

  • Solo / Parallel: Task tool または .cursor/agents/worker.md subagent
  • Breezing: Worker 並列は non-overlapping file groups のみ; Reviewer / cherry-pick / Advisor は core どおり直列
  • Multitask / background agents: smoke target のみ。Claude Agent Teams parity を主張しない

Model routing:

bash scripts/model-routing.sh --host cursor --role worker --format json

Explicit Task/subagent model が routed default より優先。

検証:

bash tests/test-cursor-adapter-candidate.sh

Breezing モード(4 件以上で自動選択 / --breezing で強制)

Lead / Worker / Advisor / Reviewer の役割分離でチーム実行する。 Codex では spawn_agent, wait, send_input, resume_agent, close_agent を使った native subagent orchestration を前提にし、 古い TeamCreate / TaskCreate ベースの説明を採らない。 Cursor では Task/subagent/background agents へ mapping するが、 review/cherry-pick の直列責務は core 側に残す(adapter smoke target)。

権限ポリシー:

  • 現行の shipped default は bypassPermissions
  • --auto-mode は互換な親セッション向けの opt-in rollout フラグとして扱う
  • permissions.defaultMode や agent frontmatter の permissionMode には未文書化の autoMode 値を書かない

CC v2.1.69+: nested teammates はプラットフォーム側で禁止されるため、 Worker/Reviewer プロンプトには冗長な nested 防止文言を追加しない。

Lead (this agent)
├── Worker (task-worker agent) — 実装担当
├── Advisor (claude-code-harness:advisor) — 方針助言
└── Reviewer (code-reviewer agent) — レビュー担当

Phase A: Pre-delegate(準備):

  1. Plans.md を読み込み、対象タスクを特定
  2. 依存グラフを解析し、実行順序を決定(Depends カラム)
  3. 各タスクの effort スコアリング(effort tier 判定 — high/xhigh)
  4. node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js"sprint-contract.json を生成
  5. bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" で Reviewer 観点を加え、bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" で未承認なら停止

Phase B: Delegate(Worker spawn → 必要時 Advisor → レビュー → cherry-pick):

各タスクについて以下を逐次実行する(依存順):

API 注記: 以下は Claude Code の API 構文で記述。 Codex 環境では Agent(...)spawn_agent(...), SendMessage(...)send_input(...) に読み替え。 詳細は team-composition.md の API マッピング表を参照。

for task in execution_order:
    # B-1. sprint-contract を生成
    contract_path = bash("node \"${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js\" {task.number}")
    contract_path = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh\" {contract_path} --check \"DoD を reviewer 観点で確認\" --approve")
    bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh\" {contract_path}")

    # B-2. Worker spawn(フォアグラウンド、worktree 分離)
    # Agent tool の戻り値に agentId が含まれる — 修正ループで SendMessage に使用
    Plans.md: task.status = "cc:WIP"  # 着手時に更新(未着手タスクは cc:TODO のまま)

    # 逐次 /harness-work を連打している時も universal violations を伝播させる
    # (初回実行時は universal_violations = [] で初期化済み想定)
    briefing_header = ""
    if universal_violations:
        briefing_header = (
            "🚨 同一セッションで既に検出された universal 違反(再発禁止):\n"
            + "\n".join(f"- {v}" for v in universal_violations)
            + "\n\n"
        )

    worker_result = Agent(
        subagent_type="claude-code-harness:worker",
        prompt=briefing_header + "タスク: {task.内容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\nmode: breezing",
        isolation="worktree",
        run_in_background=false  # フォアグラウンドで実行 → Worker 完了まで待機
    )
    worker_id = worker_result.agentId  # SendMessage 用に保持
    # worker_result には {commit, worktreePath, files_changed, summary} が含まれる

    # B-3. Worker が advice request を返した時だけ、Lead が Advisor を呼ぶ
    if worker_result.type == "advisor-request.v1":
        advisor_result = Advisor(
            prompt=worker_result.request_json
        )
        worker_result = SendMessage(
            to=worker_id,
            message="advisor-response.v1: {advisor_result}"
        )

    # B-3.5. self_review ゲート(Reviewer spawn 前、Lead が機械的に検証)
    # Worker の worker-report.v1 に active self_review rules がそろい、全 verified=true かつ evidence 非空であること
    # tdd.enforce.enabled=true かつ tdd_required=true の時は `tdd-red-evidence-attached` も active rule として必須
    # verified=false または evidence=="" が 1 件でもあれば Reviewer を spawn せず Worker に差し戻す
    self_review_failures = 0
    MAX_SELF_REVIEW_RETRIES = 2  # 3 回目 (retries=2) で Lead が escalate
    while True:
        unverified = [
            r for r in worker_result.self_review
            if (not r.get("verified")) or (not r.get("evidence"))
        ]
        if not unverified:
            break  # 全 rule verified → B-4 (実レビュー) へ進む
        self_review_failures += 1
        if self_review_failures > MAX_SELF_REVIEW_RETRIES:
            # 3 回目でも未確認項目あり → Lead に escalate
            Plans.md: task.status = "cc:TODO"  # 着手前に戻す
            raise EscalationError(f"self_review が 3 回の差し戻しでも未確認 (rules: {[u['rule'] for u in unverified]})")
        # Worker に差し戻し (Reviewer spawn せず)
        SendMessage(
            to=worker_id,
            message=f"self_review に未確認 rule があります: {[u['rule'] for u in unverified]}。各 rule の evidence を実コマンド出力または literal テスト結果で埋め、TDD 必須時は .claude/state/tdd-red-log/<task-id>.jsonl または literal failing test output を添えて verified=true にしてから amend してください"
        )
        worker_result = wait_for_response(worker_id)

    # B-4. Lead がレビュー実行(Codex exec 優先)
    diff_text = git("-C", worker_result.worktreePath, "show", worker_result.commit)
    verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
    profile = jq(contract_path, ".review.reviewer_profile")
    review_input = "review-output.json"
    if profile == "runtime":
        review_input = bash("cd {worker_result.worktreePath} && bash \"${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh\" {contract_path}")
        runtime_verdict = jq(review_input, ".verdict")
        if runtime_verdict == "REQUEST_CHANGES":
            verdict = "REQUEST_CHANGES"
        elif runtime_verdict == "DOWNGRADE_TO_STATIC":
            pass  # runtime 検証コマンドなし → static verdict をそのまま使う
    browser_result = ""
    if profile == "browser":
        # browser artifact から route / browser_mode / execution_instructions を再利用して browser runner を起動する。
        browser_artifact = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/generate-browser-review-artifact.sh\" {contract_path}")
        browser_result = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/browser-review-runner.sh\" {browser_artifact}")
        browser_verdict = jq(browser_result, ".browser_verdict")
        if browser_verdict == "REQUEST_CHANGES":
            verdict = "REQUEST_CHANGES"
        elif browser_verdict == "APPROVE" and verdict != "REQUEST_CHANGES":
            verdict = "APPROVE"
        # browser_verdict == PENDING_BROWSER のときは static verdict を維持する
    # review_input が DOWNGRADE_TO_STATIC の場合は static review 結果を使う
    if review_input != "review-output.json" and jq(review_input, ".verdict") == "DOWNGRADE_TO_STATIC":
        review_input = "review-output.json"  # static review の結果にフォールバック
    bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh\" {review_input} {latest_commit} --browser-result {browser_result}")

    # B-5. 修正ループ(REQUEST_CHANGES 時、contract の max_iterations まで)
    # Worker はフォアグラウンドで完了済みだが、SendMessage で再開可能
    # (CC: SendMessage(to: agentId) / Codex: resume_agent(agent_id) + send_input)
    review_count = 0
    # sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
    MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    latest_commit = worker_result.commit
    while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
        SendMessage(to=worker_id, message="指摘内容: {issues}\n修正して amend してください")
        # Worker が修正 → amend → 更新された commit hash を返す
        updated_result = wait_for_response(worker_id)
        latest_commit = updated_result.commit
        diff_text = git("-C", worker_result.worktreePath, "show", latest_commit)
        verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
        review_count++

    # B-6. APPROVE → trunk に cherry-pick(feature ブランチ経由)
    # Worker の Branch Guard により trunk HEAD は動かず、commit は feature ブランチ上にある想定
    if verdict == "APPROVE":
        TRUNK=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' || echo "main")
        git checkout "$TRUNK"  # safety: 既に trunk なら no-op
        # feature ブランチの commit が既に trunk にある(Branch Guard 失敗時のフォールバック)か確認
        if git("merge-base", "--is-ancestor", latest_commit, "HEAD"):
            pass  # 既に trunk 上 — cherry-pick 不要(再入防止)
        else:
            git cherry-pick --no-commit {latest_commit}  # feature branch → trunk
            git commit -m "{task.内容}"
        # Worker の worktree を remove してから feature ブランチを削除
        if worker_result.worktreePath:
            git worktree remove {worker_result.worktreePath} --force
        if worker_result.branch and worker_result.branch not in ["main", "master"] and worker_result.branch != TRUNK:
            git branch -D {worker_result.branch}
        Plans.md: task.status = "cc:完了 [{hash}]"
        # auto-checkpoint 記録(冪等性ガード (c))
        # Plans.md 書き換え直後に呼ぶ。失敗しても fail-open(|| true)でループを止めない
        HASH=$(git rev-parse --short HEAD)
        REVIEW_RESULT_PATH=".claude/state/review-results/${task.number}.review-result.json"
        bash "${HARNESS_PLUGIN_ROOT}/scripts/auto-checkpoint.sh" \
            "${task.number}" "${HASH}" "${contract_path}" "${REVIEW_RESULT_PATH}" \
            || true  # fail-open: harness-mem 未起動環境でも継続
    else:
        → ユーザーにエスカレーション

    # B-7. Progress feed
    print("📊 Progress: Task {completed}/{total} 完了 — {task.内容}")

Advisor Protocol(全モード共通)

Advisor は「実装者」でも「レビュー担当」でもない。 迷った時だけ、実行役が次の一歩を決めるための相談役として入る。

  1. Worker は generic な subagent を増やさず、必要時だけ advisor-request.v1 を返す
  2. Lead が advisor を 1 回だけ呼ぶ
  3. Advisor は PLAN / CORRECTION / STOP のどれかを返す
  4. Lead はその advice を同じ Worker に返して続行させる
  5. Reviewer は最後の成果物だけを見る。advisor の返答に APPROVE / REQUEST_CHANGES を出さない

Solo モードでの Advisor

solo 実行では親セッション自身が Lead を兼ねる。 つまり「自分で実装し、自分で advisor に相談し、最後は独立レビューに回す」形になる。

  • 相談条件は loop / breezing と同じ
  • 相談 budget も task ごとに最大 3 回で同じ
  • STOP はその場で止まり、ユーザー判断へ上げる
  • review artifact の gate は飛ばさない

Sprint Contract

sprint-contract は「このタスクを何で合格にするか」を機械でも人でも同じ意味で読める形にする小さな契約ファイルです。 既定の保存先は .claude/state/contracts/<task-id>.sprint-contract.json です。

node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" 32.1.1

生成物には次を含めます。

  • checks: DoD を分解した確認項目
  • non_goals: 今回やらないこと
  • runtime_validation: test, lint, typecheck などの検証コマンド
  • browser_validation: browser reviewer が残すべき UI フロー検証項目
  • browser_mode: scripted または exploratory
  • route: browser reviewer が playwright / agent-browser / chrome-devtools のどれを使うか
  • risk_flags: needs-spike, security-sensitive, ux-regression など
  • reviewer_profile: static, runtime, browser

Phase C: Post-delegate(統合・報告):

  1. 全タスクの commit log を集計
  2. リッチ完了報告(「完了報告フォーマット」の Breezing テンプレート)を出力
  3. Plans.md の最終確認(全タスク cc:完了 になっているか)

CI 失敗時の対応

CI が失敗した場合:

  1. ログを確認してエラーを特定
  2. 修正を実施
  3. 同一原因で 3 回失敗したら自動修正ループを停止
  4. 失敗ログ・試みた修正・残る論点をまとめてエスカレーション

失敗タスクの自動再チケット化

タスク完了後にテスト/CI が失敗した場合、修正タスク案を自動生成し、承認後に Plans.md へ反映する:

トリガー条件

条件 アクション
cc:完了 後にテスト失敗 修正タスク案を state に保存し、承認を待つ
CI 失敗(3回未満) 修正を実施し、失敗カウントをインクリメント
CI 失敗(3回目) 修正タスク案を提示 + エスカレーション

修正タスクの自動生成

  1. 失敗原因を分類(syntax_error / import_error / type_error / assertion_error / timeout / runtime_error)
  2. .claude/state/pending-fix-proposals.jsonl に修正タスク案を保存:
    • 番号: 元タスク番号 + .fix サフィックス(例: 26.1.fix
    • 内容: fix: [元タスク名] - [失敗原因カテゴリ]
    • DoD: テスト/CI が通ること
    • Depends: 元タスク番号
  3. ユーザーが approve fix <task_id> を送ると Plans.md に cc:TODO で追加
  4. reject fix <task_id> で提案を破棄。pending が1件だけのときは yes / no でも応答可能

レビューループ

実装完了後(ステップ 5 の後)に自動実行される品質検証ステージ。 全モード共通(Solo / Parallel / Breezing)で統一的に適用される。 Parallel モードでは各 Worker が step 10(外部レビュー受付)として同じループを実行する。

レビュー実行の優先順位

1. Codex exec(優先)
   ↓ codex コマンドが存在しない or タイムアウト(120s)
2. 内部 Reviewer agent(フォールバック)

APPROVE / REQUEST_CHANGES の判定基準

レビュアーには以下の閾値基準を渡し、この基準のみで verdict を判定させる。 基準外の改善提案は recommendations として返すが、verdict には影響しない。

重要度 定義 verdict への影響
critical セキュリティ脆弱性、データ損失リスク、本番障害の可能性 1 件でも → REQUEST_CHANGES
major 既存機能の破壊、仕様との明確な矛盾、テスト不通過 1 件でも → REQUEST_CHANGES
minor 命名改善、コメント不足、スタイル不統一 verdict に影響しない
recommendation ベストプラクティス提案、将来の改善案 verdict に影響しない

重要: minor / recommendation のみの場合は 必ず APPROVE を返すこと。 「あったほうが良い改善」は REQUEST_CHANGES の理由にならない。

Codex exec レビュー(公式プラグイン経由)

タスク開始時の HEAD を BASE_REF として保持し、その ref との差分をレビュー対象にする。 公式プラグイン codex-plugin-cc の companion review を使用する。

# タスク開始時に base ref を記録(Step 2 の cc:WIP 更新前に実行)
BASE_REF=$(git rev-parse HEAD)

# ... 実装完了後 ...

# 公式プラグインの構造化レビューを実行
bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" review --base "${BASE_REF}"
REVIEW_EXIT=$?

verdict マッピング(公式プラグイン → Harness 形式):

公式プラグインは review-output.schema.json 準拠の構造化出力を返す。 Harness の verdict 形式への変換ルール:

公式 plugin Harness verdict 影響
approve APPROVE -
needs-attention REQUEST_CHANGES -
findings[].severity: critical critical_issues[] 1件でも → REQUEST_CHANGES
findings[].severity: high major_issues[] 1件でも → REQUEST_CHANGES
findings[].severity: medium/low recommendations[] verdict に影響しない

AI Residuals スキャンは引き続き bash "${HARNESS_PLUGIN_ROOT}/scripts/review-ai-residuals.sh" で実行し、 companion review の結果と合わせて最終 verdict を判定する。

# AI Residuals スキャン(companion review と並行実行可能)
AI_RESIDUALS_JSON="$(bash "${HARNESS_PLUGIN_ROOT}/scripts/review-ai-residuals.sh" --base-ref "${BASE_REF}" --include-untracked 2>/dev/null || echo '{"tool":"review-ai-residuals","scan_mode":"diff","base_ref":null,"include_untracked":true,"files_scanned":[],"untracked_files_scanned":[],"summary":{"verdict":"APPROVE","major":0,"minor":0,"recommendation":0,"total":0},"observations":[]}')"

内部 Reviewer agent フォールバック

Codex exec が使えない場合(command -v codex が失敗、または exit code ≠ 0):

Agent tool: subagent_type="reviewer"
prompt: "以下の変更をレビューしてください。判定基準: critical/major → REQUEST_CHANGES、minor/recommendation のみ → APPROVE。diff: {git diff ${BASE_REF}}"

Reviewer agent は Read-only(Write/Edit/Bash 無効)で安全にレビューを実行する。

修正ループ(REQUEST_CHANGES 時)

review_count = 0
# sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
contract_path = get_sprint_contract_path()  # 例: .claude/state/contracts/<task-id>.sprint-contract.json
MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3

while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
    1. レビュー指摘を解析(critical / major のみ対象)
    2. 各指摘に対して修正を実装
    3. 再度レビューを実行(同じ判定基準・同じ優先順位)
    review_count++

if review_count >= MAX_REVIEWS and verdict != "APPROVE":
    → ユーザーにエスカレーション
    → 「MAX_REVIEWS 回修正しましたが以下の critical/major 指摘が残っています」+ 指摘一覧を表示
    → ユーザー判断を待つ(続行 / 中断)

Breezing モードでの適用

Breezing モードでは Lead がレビューループを実行する(上記 Phase B 参照):

  1. Worker が worktree 内で実装・commit → Lead に結果返却
  2. Lead が Codex exec でレビュー(優先)/ Reviewer agent(フォールバック)
  3. REQUEST_CHANGES → Lead が SendMessage で Worker に修正指示 → Worker が amend
  4. 修正後、再レビュー(MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3 回まで)
  5. APPROVE → Lead が trunk(デフォルトブランチ)に cherry-pick → Plans.md を cc:完了 [{hash}] に更新

完了報告フォーマット

タスク完了時(cc:完了 + commit 後)に自動出力される視覚的サマリ。 非専門家にも変更内容と影響が伝わることを目的とする。

テンプレート

┌─────────────────────────────────────────────┐
│  ✓ Task {N} 完了: {タスク名}                    │
├─────────────────────────────────────────────┤
│                                              │
│  ■ 何をしたか                                 │
│    • {変更内容 1}                              │
│    • {変更内容 2}                              │
│                                              │
│  ■ 何が変わるか                                │
│    Before: {旧動作}                            │
│    After:  {新動作}                            │
│                                              │
│  ■ 変更ファイル ({N} files)                    │
│    {ファイルパス 1}                             │
│    {ファイルパス 2}                             │
│                                              │
│  ■ 残りの課題                                  │
│    • Task {X} ({status}): {内容}  ← Plans.md  │
│    • Task {Y} ({status}): {内容}  ← Plans.md  │
│    (Plans.md に {M} 件の未完了タスクあり)       │
│                                              │
│  commit: {hash} | review: {APPROVE}           │
└─────────────────────────────────────────────┘

生成ルール

  1. 何をしたか: git diff --stat HEAD~1 と commit message から自動抽出。技術用語は最小限にし、動詞で始める
  2. 何が変わるか: タスクの「内容」と「DoD」から Before/After を推論。ユーザー体験の変化を重視
  3. 変更ファイル: git diff --name-only HEAD~1 から取得。5 ファイル超は省略して件数表示
  4. 残りの課題: Plans.md の cc:TODO / cc:WIP タスクを一覧表示。Plans.md に記載済みかどうかを明示
  5. review: レビュー結果(APPROVE / REQUEST_CHANGES → APPROVE)を表示

Parallel モードでの報告

  • 1 タスク--parallel 強制時): Solo テンプレートを使用
  • 複数タスク: Breezing 集約テンプレートを使用(下記参照)

Breezing モードでの報告

全タスク完了後にまとめて出力。各タスクは簡略版(何をしたか + commit hash のみ)で一覧し、 最後に全体サマリ(合計変更ファイル数 + 残り課題)を出力する:

┌─────────────────────────────────────────────┐
│  ✓ Breezing 完了: {N}/{M} タスク             │
├─────────────────────────────────────────────┤
│                                              │
│  1. ✓ {タスク名 1}            [{hash1}]      │
│  2. ✓ {タスク名 2}            [{hash2}]      │
│  3. ✓ {タスク名 3}            [{hash3}]      │
│                                              │
│  ■ 全体の変更                                 │
│    {N} files changed, {A} insertions(+),     │
│    {D} deletions(-)                          │
│                                              │
│  ■ 残りの課題                                  │
│    Plans.md に {K} 件の未完了タスクあり         │
│    • Task {X}: {内容}                         │
│                                              │
└─────────────────────────────────────────────┘

関連スキル

  • harness-plan — 実行するタスクを計画する
  • harness-sync — 実装と Plans.md を同期する
  • harness-review — 実装のレビュー
  • harness-release — バージョンバンプ・リリース
用于整理和维护项目文件,包括归档Plans.md、分割session-log、清理旧日志及压缩状态文件。在系统警告或定期维护时触发,执行前需确保关键信息已同步至SSOT,并提供dry-run预览功能。
/maintenance命令 auto-cleanup-hook检测到文件膨胀 用户要求整理、归档、组织或分割日志
opencode/skills/maintenance/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill maintenance -g -y
SKILL.md
Frontmatter
{
    "name": "maintenance",
    "description": "File cleanup and archiving. Tidies up bloated Plans.md, session-log.md, old logs, and state files. Trigger: \/maintenance, cleanup, archive, organize, split session-log. Do NOT load for: implementation, review, release, new feature development."
}

Maintenance

散らかったファイルを整頓する単一目的スキル。auto-cleanup-hook が警告を出した時、 または定期的な家事として呼び出す。

前提: 破壊的操作(アーカイブ移動・行削除)の前に Plans.md / session-log.md の 重要情報が SSOT (decisions.md / patterns.md) に昇格済みか確認する。 未同期なら /memory sync を先に走らせる。

Quick Reference

サブコマンド 対象 典型トリガー
maintenance plans Plans.md 完了タスクのアーカイブ移動 「Plans.md 整理」「古いタスクを移動」
maintenance session-log session-log.md の月別分割 「session-log 分割」「ログが長い」
maintenance logs .claude/logs/ の古いファイル削除 「ログ掃除」「30日以上前のログ消して」
maintenance state agent-trace.jsonl / harness-usage.json のトリム 「trace 肥大」「state 圧縮」
maintenance all 上記4つを順に実行 「全部整理」「総掃除」

--dry-run を付けると何をするかだけ列挙して実行しない。自由記述の指示(例: 「古いアーカイブも消して」「この session-log だけ残して」)は Step 1 で 受け付けて Step 2 以降の処理パラメータに反映する。

実行手順

  1. ユーザー指示のパース: サブコマンド + 自由記述(除外対象、保存先、日数閾値)を抽出
  2. SSOT 同期チェック: .claude/state/.ssot-synced-this-session が無ければ /memory sync を促す(Plans.md を触る場合のみ必須)
  3. 参照ファイルを開く: ${CLAUDE_SKILL_DIR}/references/cleanup.md を読み対応セクションを実行
  4. Before/After を報告: 行数と削除件数を表示して完了

サブコマンド詳細

対象ごとの実行手順・閾値・アーカイブ先は cleanup.md を参照。

auto-cleanup-hook との連携

PostToolUse hook (scripts/auto-cleanup-hook.sh / Go 版 auto_cleanup_hook.go) は Plans.md・session-log.md・CLAUDE.md の行数超過を検知すると /maintenance で古いタスクをアーカイブすることを推奨します と feedback を返す。 この警告を見たら該当サブコマンドを実行する。

注意事項

  • 進行中タスクは動かさない: cc:WIP, pm:依頼中, cursor:依頼中 はアーカイブ対象外
  • アーカイブ先ディレクトリは固定: .claude/memory/archive/ — 別の場所に移すときは ユーザーに確認する
  • バックアップ: 200 行超のファイルを編集する前に cp <file> <file>.bak.$(date +%s) で ローカルバックアップを取る
  • CLAUDE.md は警告のみ: 自動編集しない。分割提案だけ出す

関連スキル

  • memory — Plans.md 整理前の SSOT 昇格(decisions.md / patterns.md 更新)
  • harness-setup — セットアップ直後の定期メンテは harness-setup 経由でも呼べる
  • session-init — セッション開始時のメンテ推奨通知を制御
负责单一事实来源(SSOT)管理与跨工具搜索。涵盖SSOT初始化、计划合并、项目同步及内存升格等核心功能。优先使用Harness MCP进行通用记录与检索,并协调Layer 1自动记忆与Layer 2项目决策的关系,确保关键知识持久化。
memory SSOT decisions.md patterns.md harness-mem memory search
opencode/skills/memory/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill memory -g -y
SKILL.md
Frontmatter
{
    "name": "memory",
    "description": "SSOT\/memory + cross-tool search. Guards decisions.md, patterns.md. Triggers: memory, SSOT, decisions.md, patterns.md, harness-mem, memory search. Skip for: implementation, review."
}

Memory Skills

メモリとSSOT管理を担当するスキル群です。

機能詳細

機能 詳細
SSOT初期化 See references/ssot-initialization.md
Plans.mdマージ See references/plans-merging.md
移行処理 See references/workflow-migration.md
プロジェクト仕様同期 See references/sync-project-specs.md
メモリ→SSOT昇格 See references/sync-ssot-from-memory.md

Unified Harness Memory(共通DB)

Claude Code / Codex / OpenCode 共通の記録・検索は harness_mem_* MCP を優先する。

  • 検索: harness_mem_search, harness_mem_timeline, harness_mem_get_observations
  • 注入: harness_mem_resume_pack
  • 記録: harness_mem_record_checkpoint, harness_mem_finalize_session, harness_mem_record_event

Claude Code 自動メモリとの関係(D22)

Harness の SSOT メモリ(Layer 2)は Claude Code の自動メモリ(Layer 1)と共存します。 自動メモリは汎用的な学習を暗黙的に記録し、SSOT はプロジェクト固有の意思決定を明示的に管理します。 Layer 1 の知見がプロジェクト全体に重要な場合、/memory ssot で Layer 2 に昇格してください。

詳細: D22: 3層メモリアーキテクチャ

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容に従って実行

SSOT昇格

メモリシステム(Claude-mem / Serena)から重要な学びをSSOTに永続化します。

用于生成NotebookLM YAML和演示文稿幻灯片。通过分类用户请求并参考特定规范文件来创建文档内容。支持针对大型PDF进行高效的页面范围读取,以优化Token消耗和处理速度,避免全量加载。
用户提到 NotebookLM 需要生成 YAML 文件 制作幻灯片或演示文稿
opencode/skills/notebooklm/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill notebooklm -g -y
SKILL.md
Frontmatter
{
    "name": "notebooklm",
    "description": "Generate NotebookLM YAML and slides. Document craftsman shows skill. Use when user mentions NotebookLM, YAML, slides, or presentations. Do NOT load for: implementation work, code fixes, reviews, or deployments."
}

NotebookLM Skill

ドキュメント生成を担当するスキル群です。

機能詳細

機能 詳細
NotebookLM YAML See references/notebooklm-yaml.md
スライド YAML See references/notebooklm-slides.md

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容に従って生成

🔧 PDF ページ範囲読み取り(Claude Code 2.1.49+)

大型 PDF を効率的に扱うための機能です。

ページ範囲指定で読み取り

// ページ範囲指定で読み取り
Read({ file_path: "docs/spec.pdf", pages: "1-10" })

// 目次だけ確認
Read({ file_path: "docs/manual.pdf", pages: "1-3" })

// 特定のセクションのみ
Read({ file_path: "docs/api-reference.pdf", pages: "25-45" })

ユースケース別の推奨アプローチ

ケース 推奨読み取り方法 理由
100ページ超のPDF 目次(1-3) → 関連章のみ トークン消費を最小化
仕様書レビュー セクション単位で範囲指定 必要な部分のみ精読
APIドキュメント エンドポイント一覧(目次)から開始 全体構造を把握してから詳細へ
学術論文 Abstract + 結論 → 本文 要点を先に把握
技術マニュアル 目次 + トラブルシューティング章 実用的な部分を優先

NotebookLM YAML 生成時の活用例

大型PDF(300ページの技術仕様書)からYAMLを生成する場合:

1. **目次を読む**(1-5ページ)
   Read({ file_path: "spec.pdf", pages: "1-5" })
   → 章立てを把握

2. **各章の冒頭を読む**(各章の最初の2ページ)
   Read({ file_path: "spec.pdf", pages: "10-11" })  // 第1章
   Read({ file_path: "spec.pdf", pages: "45-46" })  // 第2章
   → 各章の概要を把握

3. **重要セクションを精読**
   Read({ file_path: "spec.pdf", pages: "78-95" })  // APIリファレンス
   → 詳細な内容を抽出

この方法で、300ページすべてを読むことなく効率的にYAMLを生成できます。

ベストプラクティス

原則 説明
段階的読み込み 目次 → 概要 → 詳細の順に読む
関連ページのみ タスクに必要なページだけ指定
トークン節約 全ページ読み込みは最終手段
構造理解優先 目次で全体像を把握してから詳細へ

従来の方法との比較

方法 トークン消費 処理時間 精度
全ページ読み込み(300ページ) ~150,000 長い
ページ範囲指定(必要な30ページ) ~15,000 短い

90%のトークン削減と処理時間短縮が可能

提供开发原则、安全指南及差分编辑规则的辅助技能。通过分类用户请求并加载对应的参考文件(如一般原则、上下文读取等)来指导操作,不适用于实现或代码审查场景。
需要遵循特定开发原则时 进行安全的差分编辑时 阅读仓库上下文以理解项目结构时
opencode/skills/principles/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill principles -g -y
SKILL.md
Frontmatter
{
    "name": "principles",
    "description": "Explicit helper for development principles, safety guidelines, and diff-aware editing rules. Do NOT load for: implementation, review, workflow coaching, or VibeCoder onboarding."
}

Principles Skills

開発原則とガイドラインを提供するスキル群です。

機能詳細

機能 詳細
基本原則 See references/general-principles.md
差分編集 See references/diff-aware-editing.md
コンテキスト読み取り See references/repo-context-reading.md
VibeCoder See references/vibecoder-guide.md

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容を参照・適用
内部工作流专用技能,根据--resume/--fork标志控制会话的恢复或分叉,更新session.json和session.events.jsonl。严禁用于用户会话管理、登录状态或应用状态处理。
工作流需要恢复会话 工作流需要创建会话分支
opencode/skills/session-control/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-control -g -y
SKILL.md
Frontmatter
{
    "name": "session-control",
    "description": "Controls session resume\/fork(branch) for \/work based on --resume\/--fork flags. Updates session.json and session.events.jsonl. Internal workflow use only. Do NOT load for: user session management, login state, app state handling."
}

Session Control Skill

/work の --resume / --fork フラグに応じてセッション状態を切り替える。

機能詳細

機能 詳細
セッション再開/分岐 See references/session-control.md

実行手順

  1. workflow から渡された変数を確認
  2. scripts/session-control.sh を適切な引数で実行
  3. session.jsonsession.events.jsonl の更新を確認
会话初始化技能,自动检查Git状态、Plans.md任务进度及AGENTS.md约束。通过Unified Harness Memory恢复上下文,识别WIP/TODO任务,生成启动报告以指导用户开始工作。
セッション開始 作業開始 今日の作業を始める 状況を確認して 何をすればいい? start session what should I work on?
opencode/skills/session-init/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-init -g -y
SKILL.md
Frontmatter
{
    "name": "session-init",
    "description": "Internal sub-skill for session startup checks, Plans.md status, git state, and harness-mem resume pack. Invoked by session\/startup workflows only. Do NOT load for: implementation, reviews, or mid-session tasks."
}

Session Init Skill

セッション開始時の環境確認と現在のタスク状況把握を行うスキル。


呼び出し条件

このスキルは session / SessionStart 系フローから内部的に呼び出します。 ユーザー向けの入口は /session または通常のセッション開始フローです。

旧トリガーフレーズ:

  • 「セッション開始」
  • 「作業開始」
  • 「今日の作業を始める」
  • 「状況を確認して」
  • 「何をすればいい?」
  • "start session"
  • "what should I work on?"

概要

Session Init スキルは、Claude Code セッション開始時に自動的に以下を確認します:

  1. Git 状態: 現在のブランチ、未コミットの変更
  2. Plans.md: 進行中タスク、依頼されたタスク
  3. AGENTS.md: 役割分担、禁止事項の確認
  4. 前回セッション: 引き継ぎ事項の確認
  5. 最新 snapshot: 進捗スナップショットの要約と前回差分

実行手順

Step 0: ファイル状態チェック(自動整理)

セッション開始前にファイルサイズをチェック:

# Plans.md の行数チェック
if [ -f "Plans.md" ]; then
  lines=$(wc -l < Plans.md)
  if [ "$lines" -gt 200 ]; then
    echo "⚠️ Plans.md が ${lines} 行です。「整理して」で整理を推奨"
  fi
fi

# session-log.md の行数チェック
if [ -f ".claude/memory/session-log.md" ]; then
  lines=$(wc -l < .claude/memory/session-log.md)
  if [ "$lines" -gt 500 ]; then
    echo "⚠️ session-log.md が ${lines} 行です。「セッションログを整理して」で整理を推奨"
  fi
fi

整理が必要な場合は提案を表示(作業には影響しない)。

Step 0.5: 旧ローカルメモリ互換の扱い(任意)

現在の標準は Step 0.7 の Unified Harness Memory です。 旧ローカルメモリ互換の確認は原則不要で、特別な移行確認が必要な場合だけ個別に参照します。

: 通常運用ではこのステップをスキップし、共通DB の Resume Pack を唯一の再開導線として扱います。

Step 0.7: Unified Harness Memory Resume Pack(必須)

Codex / Claude / OpenCode 共通DB(~/.harness-mem/harness-mem.db)から再開文脈を取得する。

必須呼び出し:

harness_mem_resume_pack(project, session_id?, limit=5, include_private=false)

運用ルール:

  • project は必ず現在プロジェクト名を指定
  • session_id$CLAUDE_SESSION_ID.claude/state/session.json.session_id の順で取得する
  • harness_mem_sessions_list(project, limit=1) の先頭利用は read-only(resume確認)に限定し、record_checkpoint / finalize_session での書き込みには使わない
  • 取得結果はセッション開始時コンテキストに注入
  • 取得失敗時は harness_mem_health() で daemon 状態を確認し、失敗を明示して続行
  • 復旧は scripts/harness-memd doctorscripts/harness-memd cleanup-stalescripts/harness-memd start の順で行う

Step 1: 環境確認

以下を並列で実行:

# Git状態
git status -sb
git log --oneline -3
# Plans.md
cat Plans.md 2>/dev/null || echo "Plans.md not found"
# AGENTS.md の要点
head -50 AGENTS.md 2>/dev/null || echo "AGENTS.md not found"

Step 2: タスク状況の把握

Plans.md から以下を抽出:

  • cc:WIP - 前回から継続中のタスク
  • pm:依頼中 - PM から新規依頼されたタスク(互換: cursor:依頼中)
  • cc:TODO - 未着手だが割り当て済みのタスク

Step 3: 状況レポートの出力

## 🚀 セッション開始

**日時**: {{YYYY-MM-DD HH:MM}}
**ブランチ**: {{branch}}
**セッションID**: ${CLAUDE_SESSION_ID}

---

### 📋 今日のタスク

**優先タスク**:
- {{pm:依頼中(互換: cursor:依頼中) または cc:WIP のタスク}}

**その他のタスク**:
- {{cc:TODO のタスク一覧}}

---

### ⚠️ 注意事項

{{AGENTS.md からの重要な制約・禁止事項}}

---

**作業を開始しますか?**

出力フォーマット

セッション開始時は、以下の情報を簡潔に提示:

項目 内容
現在のブランチ staging など
優先タスク 最も重要な 1-2 件
注意事項 禁止事項の要約
次のアクション 具体的な提案

関連コマンド

  • /work - タスク実行(並列実行対応)
  • /sync-status - Plans.md の進捗サマリー
  • /maintenance - ファイルの自動整理

注意事項

  • AGENTS.md を必ず確認: 役割分担を把握してから作業開始
  • Plans.md が無い場合: /harness-init を案内
  • 前回の作業が中断している場合: 継続するか確認
管理跨会话记忆与学习的内部技能,自动记录决策、模式及会话日志。支持通过特定短语触发,实现项目上下文持久化与无缝续接。
前回何をした? 前回の続きから 履歴を見せて 過去の作業 このプロジェクトについて教えて what did we do last time? continue from before
opencode/skills/session-memory/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-memory -g -y
SKILL.md
Frontmatter
{
    "name": "session-memory",
    "description": "Internal sub-skill for cross-session handoff, durable learning, and memory persistence. Invoked by session\/memory workflows only. Do NOT load for: implementation, review, ad-hoc notes, or SSOT editing."
}

Session Memory Skill

セッション間の学習と記憶を管理するスキル。 過去の作業内容、決定事項、学んだパターンを記録・参照します。


トリガーフレーズ

このスキルは以下のフレーズで自動起動します:

  • 「前回何をした?」「前回の続きから」
  • 「履歴を見せて」「過去の作業」
  • 「このプロジェクトについて教えて」
  • "what did we do last time?", "continue from before"

概要

このスキルは .claude/memory/ に作業履歴を保存し、 セッション間での知識の継続を実現します。

あわせて、重要な情報は「どこに残すべきか」を明確にします(詳細: docs/MEMORY_POLICY.md)。


メモリ構造

.claude/
├── memory/
│   ├── session-log.md      # セッションごとのログ
│   ├── decisions.md        # 重要な決定事項
│   ├── patterns.md         # 学んだパターン
│   └── context.json        # プロジェクトコンテキスト
└── state/
    └── agent-trace.jsonl   # Agent Trace(ツール実行履歴)

推奨運用(SSOT/ローカル分離)

  • SSOT(共有推奨): decisions.md / patterns.md
    • 「決定(Why)」と「再利用できる解法(How)」を集約する
    • 各エントリは タイトル + タグ(例: #decision #db)を付け、先頭に Index を置く
  • ローカル推奨: session-log.md / context.json / .claude/state/
    • ノイズ/肥大化しやすいため、基本は Git 管理しない(必要なら個別に判断)

自動記録される情報

session-log.md

各セッション記録には、実行環境から取得できるセッションIDを付与します。 Claude Code では ${CLAUDE_SESSION_ID} を優先し、Codex では Codex runtime が渡す session / thread ID を優先します。 どちらも取得できない場合は .claude/state/session.json.session_id を読み、最後の fallback として日時ベースのIDを生成します。 これにより、セッション間のトレーサビリティが向上します。

## セッション: 2024-01-15 14:30 (session: abc123def)

### 実行したタスク
- [x] ユーザー認証機能の実装
- [x] ログインページの作成

### 生成したファイル
- src/lib/auth.ts
- src/app/login/page.tsx

### 重要な決定
- 認証方式: Supabase Auth を採用

### 次回への引き継ぎ
- ログアウト機能が未実装
- パスワードリセットも必要

Note: ${CLAUDE_SESSION_ID} は Claude Code が自動設定する環境変数です。 Codex 側ではこの変数が存在しない場合があるため、固定前提にせず、Codex runtime の session / thread ID または .claude/state/session.json を使います。

decisions.md

## 技術選定

| 日付 | 決定事項 | 理由 |
|------|---------|------|
| 2024-01-15 | Supabase Auth | 無料枠あり、セットアップ簡単 |
| 2024-01-14 | Next.js App Router | 最新のベストプラクティス |

## アーキテクチャ

- コンポーネント: `src/components/`
- ユーティリティ: `src/lib/`
- 型定義: `src/types/`

patterns.md

## このプロジェクトのパターン

### コンポーネント命名
- PascalCase
- 例: `UserProfile.tsx`, `LoginForm.tsx`

### API エンドポイント
- `/api/v1/` プレフィックス
- RESTful 設計

### エラーハンドリング
- try-catch で囲む
- エラーメッセージは日本語

context.json

{
  "project_name": "my-blog",
  "created_at": "2024-01-14",
  "stack": {
    "frontend": "next.js",
    "backend": "next-api",
    "database": "supabase",
    "styling": "tailwind"
  },
  "current_phase": "フェーズ2: コア機能",
  "last_session": "2024-01-15T14:30:00Z"
}

処理フロー

セッション開始時

  1. .claude/memory/context.json を読み込み
  2. 前回のセッションログを確認
  3. Agent Trace から直近の編集履歴を取得
  4. 未完了タスクを特定
  5. コンテキストサマリーを生成

Agent Trace 活用:

# 前回の編集ファイル一覧を取得
tail -50 .claude/state/agent-trace.jsonl | jq -r '.files[].path' | sort -u

# プロジェクト情報を取得
tail -1 .claude/state/agent-trace.jsonl | jq '.metadata'

セッション中

  1. 重要な決定を decisions.md に記録
  2. 新しいパターンを patterns.md に追加
  3. ファイル生成を session-log.md に記録

セッション終了時

  1. セッションサマリーを生成
  2. context.json を更新
  3. 次回への引き継ぎ事項を記録

メモリ最適化(CC 2.1.49+)

Claude Code 2.1.49 以降、セッション再開時のメモリ使用量が 68% 削減 されました。

推奨ワークフロー

# 長時間作業は --resume を活用
claude --resume

# 大規模タスクは分割してセッション再開
claude --resume "続きから"
シナリオ 推奨
長時間実装 1-2時間ごとにセッション再開
大規模リファクタ 機能単位でセッション分割
メモリ不足警告 即座に --resume で再開

メモリ効率が大幅に改善されたため、セッション再開を積極的に活用してください。

/recap — セッション中の状況確認(CC 2.1.108+)

CC 2.1.108 で追加された /recap コマンド(/rewind のエイリアス)は、現在のセッション内で これまでに何をしたかを素早く振り返るために使用します。 --resume で別セッションに戻る前や、長時間作業の途中確認に組み合わせると効果的です。

推奨タイミング:

タイミング 使い方
--resume で再開する直前 /recap でコンテキストを整理してから claude --resume
Breezing の Worker 再開前 セッション内の進捗を /recap で確認してから次タスクへ
長時間実装 (1時間超) の中間点 /recap で状況確認 → 必要なら session-log.md に手動追記
# 典型的な使用フロー
# 1. 現在の作業状況を確認
/recap

# 2. 必要に応じて session-log.md に手動追記後、セッションを再開
claude --resume

/recap はセッション内の振り返りのみ。前回セッションの内容は session-log.md または claude --resume でのコンテキスト継承で確認する。


使用例

前回の続きから開始

ユーザー: 「前回の続きから」

Claude Code:
📋 前回のセッション(2024-01-15)

完了したタスク:
- ユーザー認証機能
- ログインページ

未完了:
- ログアウト機能
- パスワードリセット

「ログアウト機能を作って」と言えば続きを実装します。

プロジェクトの状況確認

ユーザー: 「このプロジェクトについて教えて」

Claude Code:
📁 プロジェクト: my-blog

技術スタック:
- Next.js + Tailwind CSS + Supabase

現在のフェーズ: コア機能開発
進捗: 40% 完了

最近の決定:
- Supabase Auth を採用
- App Router を使用

Claude Code 自動メモリとの関係(D22)

Claude Code 2.1.32+ には「自動メモリ」機能があり、~/.claude/projects/<project>/memory/MEMORY.md にセッション間の学習を自動保存します。

Harness のメモリシステムとは3層アーキテクチャとして共存します:

システム 内容 管理
Layer 1 Claude Code 自動メモリ 汎用的な学習(ミス回避、ツール使い方) 暗黙的・自動
Layer 2 Harness SSOT プロジェクト固有の決定事項・パターン 明示的・手動
Layer 3 Agent Memory エージェント別のタスク学習 エージェント定義

使い分け:

  • Layer 1 の知見がプロジェクト全体に重要 → /memory ssot で Layer 2 に昇格
  • 日常的な学習は Layer 1 に任せる(無効化しない)
  • Agent Teams 使用時は並列書き込みに注意

詳細: D22: 3層メモリアーキテクチャ


注意事項

  • 自動保存: hooks/Stop により、セッション終了時に session-log.md へ要約を自動追記する運用を推奨(未導入の場合は手動運用でOK)
  • プライバシー: 機密情報は記録しない
  • Git方針: decisions.md/patterns.mdは共有推奨、session-log.md/context.json/.claude/state/はローカル推奨(詳細: docs/MEMORY_POLICY.md
  • 容量管理: ログが大きくなったら「セッションログを整理して」を推奨
内部会话状态管理技能,依据SESSION_ORCHESTRATION.md执行状态机验证与更新。适用于/work阶段边界、错误升级、会话结束及恢复场景。仅限系统内部调用,禁止用于用户登录或应用状态管理。
/work阶段边界状态更新 发生错误时的状态升级 会话结束时停止状态 会话恢复时初始化状态
opencode/skills/session-state/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-state -g -y
SKILL.md
Frontmatter
{
    "name": "session-state",
    "description": "Manages session state transitions per SESSION_ORCHESTRATION.md. Controls state updates at \/work phase boundaries, escalated transitions on error, and initialized restoration on session resume. Internal workflow use only. Do NOT load for: user session management, login state, app state handling."
}

Session State Skill

セッション状態の遷移を管理する内部スキル。 docs/SESSION_ORCHESTRATION.md に定義された状態機械に従って遷移を検証・実行する。

機能詳細

機能 詳細
状態遷移 See references/state-transition.md

使用タイミング

  • /work フェーズ境界での状態更新
  • エラー発生時の escalated 遷移
  • セッション終了時の stopped 遷移
  • セッション再開時の initialized 復帰

注意事項

  • このスキルは内部使用専用です
  • ユーザーが直接呼び出すことは想定していません
  • 状態遷移ルールは docs/SESSION_ORCHESTRATION.md で定義
统一会话管理技能,支持初始化、记忆持久化、状态控制及跨会话通信。提供列出会话、收件箱检查及广播消息功能。适用于 Claude Code 会话管理,不用于应用登录或认证。
用户需要查看或管理活跃的 Claude Code 会话 使用 /session 命令进行会话初始化、恢复或跨会话通信
opencode/skills/session/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session -g -y
SKILL.md
Frontmatter
{
    "name": "session",
    "description": "Unified session management window. Handles initialization, memory, state all-in-one. Explicit \/session invocation only — sub-skills handle auto-delegation. Use when managing Claude Code sessions, \/session command. Do NOT load for: app user sessions, login state, authentication features."
}

Session Skill (Unified)

Consolidates all session-related functionality into one skill.

Usage

/session              # Show available options
/session list         # Show active sessions
/session inbox        # Check incoming messages
/session broadcast "message"  # Send message to all sessions

Subcommands

/session list - List Active Sessions

Shows all active Claude Code sessions in the current project.

📋 Active Sessions

| Session ID | Status | Last Activity |
|------------|--------|---------------|
| abc123     | active | 2 min ago     |
| def456     | idle   | 15 min ago    |

/session inbox - Check Inbox

Checks for incoming messages from other sessions.

📬 Session Inbox

| From | Time | Message |
|------|------|---------|
| abc123 | 5m ago | "Ready for review" |
| def456 | 10m ago | "API implementation done" |

/session broadcast "message" - Broadcast Message

Sends a message to all active sessions.

/session broadcast "Review complete, ready for merge"

Capabilities

Feature Description Reference
Initialization Start new session, load context See ../session-init/SKILL.md
Memory Persist learnings across sessions See ../session-memory/SKILL.md
State Control Resume/fork session based on flags See references/session-control.md
Communication Cross-session messaging See ../session-state/SKILL.md

メモリ最適化(CC 2.1.49+)

Claude Code 2.1.49 以降、セッション再開時のメモリ使用量が 68% 削減 されました。

長時間セッション管理のベストプラクティス

ワークロード 推奨戦略
通常実装 1-2時間ごとに --resume で再開
大規模リファクタ 機能単位でセッション分割 → 各セッションで --resume
並列タスク /work all で並列実行、長時間なら途中で --resume
メモリ警告時 即座に --resume で再開(以前より高速)

セッション名の自動生成(CC 2.1.41+)

/rename を引数なしで実行すると、会話コンテキストからセッション名を自動生成します。 長時間セッションや --resume を多用するワークフローでセッションの識別が容易になります。

効率的なワークフロー例

# 実装フェーズ1
claude "認証機能を実装"
# → 1時間後

# セッション再開(メモリ効率的)
claude --resume "パスワードリセット機能を追加"
# → 1時間後

# さらに再開
claude --resume "テストを追加"

メモリ管理の推奨事項

推奨事項 理由
積極的なセッション再開 68% メモリ削減で再開コストが低い
定期的な再開 コンテキストを整理し、集中力を維持
機能単位の分割 大規模タスクを小さく分けて再開
Plans.md を活用 再開時の引き継ぎがスムーズ

💡 メモリ効率が大幅に改善されたため、セッション再開を積極的に活用してください。

Codex 0.123.0 の session shell / terminal 修正

Codex 0.123.0 では stale proxy env が shell snapshot から復元されにくくなり、VS Code WSL terminal の Unicode / dead-key input と keyboard 入力も本体側で修正されています。 Harness は proxy snapshot scrubber や key input wrapper を追加せず、本体修正を自動継承します。


When to Use

  • Session initialization (/harness-init)
  • Session resume/fork (/work --resume, /work --fork)
  • Memory persistence (automatic)
  • Cross-session communication (/session broadcast)

Execution Flow

1. Session Initialization

/harness-init
    ↓
├── Load project context
├── Initialize session.json
├── Load previous session memory (if exists)
└── Display session status

2. Session Control (from /work)

/work --resume
    ↓
├── Check session.json exists
├── Load session state
└── Continue from last checkpoint

/work --fork
    ↓
├── Create new session branch
├── Copy relevant context
└── Start fresh with context

3. Memory Persistence

Session end
    ↓
├── Extract learnings (gotchas, patterns)
├── Update .claude/memory/*.md
└── Prepare handoff summary

4. Cross-Session Communication

/session broadcast "message"
    ↓
├── Find active sessions
├── Write to session.events.jsonl
└── Notify all sessions

Files Managed

File Purpose
.claude/state/session.json Current session state
.claude/state/session.events.jsonl Event log for cross-session communication
.claude/memory/*.md Persistent memory files

Migration Note

This skill consolidates:

  • session-init → Session initialization
  • session-memory → Memory persistence
  • session-control → Resume/fork control
  • session-state → State management & communication

The individual skills are deprecated but still work for backward compatibility.

专注于UI组件、表单及反馈界面的生成助手。严格遵循无障碍标准,优先应用基础约束,仅在明确需求时启用增强设计。排除认证、后端及业务逻辑处理,确保前端表现层的高质量实现。
需要生成UI组件或表单 涉及前端界面设计与交互优化
opencode/skills/ui/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill ui -g -y
SKILL.md
Frontmatter
{
    "name": "ui",
    "description": "Explicit helper for UI components, hero sections, forms, feedback, and contact surfaces. Do NOT load for: authentication, backend implementation, database work, or business logic."
}

UI Skills

UIコンポーネントとフォームの生成を担当するスキル群です。

制約の優先順位と適用条件

  1. 基本は ${CLAUDE_SKILL_DIR}/references/ui-skills.md の制約を最優先で適用する。
  2. ${CLAUDE_SKILL_DIR}/references/frontend-design.md は「尖った/独自/表現強め/ブランド強化」などが明示された場合のみ適用する。
  3. UI Skills の MUST/NEVER は原則維持。ただしユーザーが明示的に要求した場合のみ以下の例外を許可する:
    • グラデーション、発光、強い装飾
    • アニメーション(追加・拡張)
    • カスタム easing

機能詳細

機能 詳細
制約セット See references/ui-skills.md / references/frontend-design.md
コンポーネント生成 See references/component-generation.md
フィードバックフォーム See references/feedback-forms.md

実行手順

  1. 制約セットを適用(優先順位に従う)
  2. 品質判定ゲート(Step 0)
  3. ユーザーのリクエストを分類
  4. 上記の「機能詳細」から適切な参照ファイルを読む
  5. その内容に従って生成

Step 0: 品質判定ゲート(a11y チェックリスト)

UI コンポーネント生成時は、アクセシビリティを確保:

♿ アクセシビリティチェックリスト

生成する UI は以下を満たすことを推奨:

### 必須項目
- [ ] 画像に alt 属性を設定
- [ ] フォーム要素に label を関連付け
- [ ] キーボード操作可能(Tab でフォーカス移動)
- [ ] フォーカス状態が視覚的に分かる

### 推奨項目
- [ ] 色だけに依存しない情報伝達
- [ ] コントラスト比 4.5:1 以上(テキスト)
- [ ] aria-label / aria-describedby の適切な使用
- [ ] 見出し構造(h1 → h2 → h3)が論理的

### インタラクティブ要素
- [ ] ボタンに適切なラベル(「詳細」ではなく「製品詳細を見る」)
- [ ] モーダル/ダイアログのフォーカストラップ
- [ ] エラーメッセージがスクリーンリーダーで読まれる

VibeCoder 向け

♿ 誰でも使えるデザインにするために

1. **画像には説明をつける**
   - 「商品画像」ではなく「赤いスニーカー、正面から」

2. **クリックできる場所はキーボードでも操作可能に**
   - Tab キーで移動、Enter で決定

3. **色だけで判断させない**
   - 赤=エラー だけでなく、アイコン+テキストも
面向非技术用户的VibeCoder辅助技能,通过自然语言引导开发流程。根据项目状态(无计划、进行中、报错等)提供下一步行动建议和具体话术示例,避免技术术语,帮助用户安全高效地推进工作。
用户询问下一步操作或当前状态 用户表示困惑、遇到困难或需要帮助 用户希望了解项目功能或使用方法
opencode/skills/vibecoder-guide/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill vibecoder-guide -g -y
SKILL.md
Frontmatter
{
    "name": "vibecoder-guide",
    "description": "Explicit helper for non-technical VibeCoder coaching: what to ask next, how to describe work, and how to stay safe. Do NOT load for: direct implementation, technical review, or Cursor\/PM workflow."
}

VibeCoder Guide Skill

VibeCoder(非技術者)が自然言語だけで開発を進められるようガイドするスキル。 「どうすればいい?」「次は何?」などの質問に自動で応答します。


トリガーフレーズ

このスキルは以下のフレーズで自動起動します:

  • 「どうすればいい?」「どうしたらいい?」
  • 「次は何をすればいい?」「次は?」
  • 「何ができる?」「何をすればいい?」
  • 「困った」「わからない」「助けて」
  • 「使い方を教えて」
  • "what should I do?", "what's next?", "help"

概要

VibeCoder は技術的なコマンドやワークフローを知らなくても、 自然な日本語で質問するだけで次のアクションが分かります。


応答パターン

パターン1: プロジェクトがない場合

🎯 まずはプロジェクトを始めましょう!

言い方の例:

  • 「ブログを作りたい」
  • 「タスク管理アプリを作りたい」
  • 「ポートフォリオサイトを作りたい」

ざっくりで大丈夫です。やりたいことを教えてください。

パターン2: Plans.md があるが進行中タスクがない

📋 計画があります。作業を始めましょう!

現在の計画:

  • フェーズ1: 基盤構築
  • フェーズ2: コア機能
  • ...

言い方の例:

  • 「フェーズ1を始めて」
  • 「最初のタスクをやって」
  • 「全部やって」

パターン3: タスク進行中

🔧 作業中です

現在のタスク: {{タスク名}} 進捗: {{完了数}}/{{全体数}}

言い方の例:

  • 「続けて」
  • 「次のタスク」
  • 「今どこまで進んだ?」

パターン4: フェーズ完了後

フェーズが完了しました!

次にできること:

  • 「動作確認して」→ 開発サーバーを起動
  • 「レビューして」→ コード品質チェック
  • 「次のフェーズへ」→ 次の作業を開始
  • 「コミットして」→ 変更を保存

パターン5: エラー発生時

⚠️ 問題が発生しました

状況: {{エラーの要約}}

言い方の例:

  • 「直して」→ 自動修正を試行
  • 「説明して」→ 問題の詳細を説明
  • 「スキップして」→ 次のタスクへ

よく使うフレーズ対応表

やりたいこと 言い方
プロジェクト開始 「〇〇を作りたい」
計画を見たい 「計画を見せて」「今の状況は?」
作業を開始 「始めて」「作って」「フェーズ1をやって」
続きをやる 「続けて」「次」
動作確認 「動かして」「見せて」
コード確認 「レビューして」「チェックして」
保存する 「コミットして」「保存して」
困った時 「どうすればいい?」「助けて」
全部任せる 「全部やって」「おまかせ」

コンテキスト判定

このスキルは以下を確認して適切な応答を選択:

  1. AGENTS.md の存在 → プロジェクトが初期化済みか
  2. Plans.md の内容 → 計画があるか、進捗状況
  3. 現在のタスク状態cc:WIP マーカーの有無
  4. 直近のエラー → 問題が発生しているか

実装ノート

このスキルが起動したら:

  1. 現在の状態を分析
  2. 適切なパターンを選択
  3. 具体的な「言い方の例」を提示
  4. ユーザーの次のアクションを待つ

重要: 技術用語を避け、平易な日本語で説明する

Cursor与Claude Code双Agent协作流程指南。明确PM与Worker职责、Plans.md任务状态管理及关键命令,规范CI/CD边界与升级机制。
ワークフローについて教えて Cursor との連携方法は? 作業の流れを教えて どうやって進めればいい? how does the workflow work? explain 2-agent workflow
opencode/skills/workflow-guide/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill workflow-guide -g -y
SKILL.md
Frontmatter
{
    "name": "workflow-guide",
    "description": "Explicit helper for Cursor PM ↔ Claude Code two-agent workflow guidance. Do NOT load for: solo implementation, workflow setup, handoff execution, or general process coaching."
}

Workflow Guide Skill

Cursor ↔ Claude Code 2エージェントワークフローのガイダンスを提供するスキル。


トリガーフレーズ

このスキルは以下のフレーズで起動します:

  • 「ワークフローについて教えて」
  • 「Cursor との連携方法は?」
  • 「作業の流れを教えて」
  • 「どうやって進めればいい?」
  • "how does the workflow work?"
  • "explain 2-agent workflow"

概要

このスキルは、Cursor(PM)と Claude Code(Worker)の役割分担と連携方法を説明します。


2エージェントワークフロー

役割分担

エージェント 役割 責務
Cursor PM(プロジェクトマネージャー) タスク割り当て、レビュー、本番デプロイ判断
Claude Code Worker(作業者) 実装、テスト、CI修正、staging デプロイ

ワークフロー図

┌─────────────────────────────────────────────────────────┐
│                    Cursor (PM)                          │
│  ・タスクを Plans.md に追加                              │
│  ・Claude Code に作業を依頼(/handoff-to-claude)            │
│  ・完了報告をレビュー                                    │
│  ・本番デプロイの判断                                    │
└─────────────────────┬───────────────────────────────────┘
                      │ タスク依頼
                      ▼
┌─────────────────────────────────────────────────────────┐
│                  Claude Code (Worker)                   │
│  ・/work でタスク実行(並列実行対応)                   │
│  ・実装 → テスト → コミット                             │
│  ・CI 失敗時は自動修正(3回まで)                        │
│  ・/handoff-to-cursor で完了報告                        │
└─────────────────────┬───────────────────────────────────┘
                      │ 完了報告
                      ▼
┌─────────────────────────────────────────────────────────┐
│                    Cursor (PM)                          │
│  ・変更内容を確認                                        │
│  ・staging 動作確認                                      │
│  ・本番デプロイ実行(承認後)                            │
└─────────────────────────────────────────────────────────┘

Plans.md によるタスク管理

マーカー一覧

マーカー 意味 設定者
pm:依頼中 PM から依頼(互換: cursor:依頼中) PM(Cursor/PM Claude)
cc:TODO Claude Code 未着手 どちらでも
cc:WIP Claude Code 作業中 Claude Code
cc:完了 Claude Code 完了 Claude Code
pm:確認済 PM 確認完了(互換: cursor:確認済) PM(Cursor/PM Claude)
cursor:依頼中 (互換)pm:依頼中 と同義 Cursor
cursor:確認済 (互換)pm:確認済 と同義 Cursor
blocked ブロック中 どちらでも

タスクの状態遷移

pm:依頼中 → cc:WIP → cc:完了 → pm:確認済

主要コマンド

Claude Code 側

コマンド 用途
/harness-init プロジェクトセットアップ
/plan-with-agent 計画・タスク分解
/work タスク実行(並列実行対応)
/handoff-to-cursor 完了報告(Cursor PMへ)
/sync-status 状態確認

スキル(会話で自動起動)

スキル トリガー例
handoff-to-pm 「PMに完了報告」
handoff-to-impl 「実装役に渡して」

Cursor 側(参考)

コマンド 用途
/handoff-to-claude Claude Code にタスク依頼
/review-cc-work 完了報告のレビュー

CI/CD ルール

Claude Code の責務範囲

  • ✅ staging デプロイまで
  • ✅ CI 失敗時の自動修正(3回まで)
  • ❌ 本番デプロイは禁止

3回ルール

CI が 3回連続で失敗した場合:

  1. 自動修正を中止
  2. エスカレーションレポートを生成
  3. Cursor に判断を委ねる

よくある質問

Q: Cursor がいない場合は?

A: 一人で作業する場合も、Plans.md でタスク管理することを推奨します。 本番デプロイは手動で慎重に行ってください。

Q: タスクが不明確な場合は?

A: Cursor に確認を依頼するか、/sync-status で現状を整理してください。

Q: CI が何度も失敗する場合は?

A: 3回以上は自動修正せず、Cursor にエスカレーションしてください。


関連ドキュメント

  • AGENTS.md - 詳細な役割分担
  • CLAUDE.md - Claude Code 固有の設定
  • Plans.md - タスク管理ファイル
Breezing是团队执行模式(Codex版),作为harness-work的向后兼容别名。支持通过CLI参数或环境变量选择Claude、Codex或Cursor后端,实现Lead与Worker分离的多智能体协作流程,默认保持与Claude兼容。
用户需要以团队模式执行代码任务 指定使用Cursor或Codex后端进行并行工作 需要跳过计划讨论直接执行任务
skills-codex/breezing/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill breezing -g -y
SKILL.md
Frontmatter
{
    "base": "harness-work",
    "kind": "workflow",
    "name": "breezing",
    "pair": "harness-review",
    "role": "orchestrator",
    "owner": "harness-core",
    "shape": "wrap",
    "since": "2026-05-05",
    "effort": "high",
    "purpose": "Wrap harness-work with Codex-host team execution orchestration",
    "trigger": "breezing, team execution, do everything, cursor worker, composer, composer 2.5, composer mode, コンポーザー",
    "description": "Team execution mode (Codex host) — backward-compatible alias for harness-work with backend selection, including opt-in Cursor worker delegation. Composer\/composer 2.5 maps to the cursor backend.",
    "allowed-tools": [
        "Read",
        "Bash",
        "spawn_agent",
        "send_input",
        "wait_agent",
        "close_agent"
    ],
    "argument-hint": "[all|N-M|--backend claude|codex|cursor|--cursor|--codex|--max-workers N|--no-discuss]",
    "description-en": "Team execution mode (Codex host) — backward-compatible alias for harness-work with backend selection, including opt-in Cursor worker delegation. Composer\/composer 2.5 maps to the cursor backend.",
    "description-ja": "チーム実行モード(Codex ホスト版)— harness-work のチーム協調エイリアス。Codex からも opt-in で Cursor worker backend に委譲できる。breezing, チーム実行, 全部やって, composer, コンポーザー, composer 2.5 でトリガー。",
    "user-invocable": true
}

Breezing — Team Execution Mode (Codex Host)

この SKILL.md は Codex host 版です。 Claude Code 版は skills/breezing/SKILL.md を参照してください。 backend は resolver で選びます。配布 plugin のフラグなし既定は claude 互換のままです。 --cursor / --backend cursor、または HARNESS_IMPL_BACKEND=cursor を設定した環境では Cursor worker backend を使います。 frontmatter の allowed-tools も、この4つの Codex native tool 名に合わせます。

後方互換エイリアス: harness-work --breezing をチーム実行モードで動かします。

Quick Reference

breezing                        # スコープを聞いてから実行
breezing all                    # resolved backend で ready task を完走(配布既定は claude、現環境は user config で cursor 可)
breezing 3-6                    # resolved backend でタスク3〜6を完走
breezing composer 2.5 all       # 自然言語 trigger: cursor backend として扱う
breezing --backend cursor all    # Cursor worker backend を明示
breezing --backend claude all    # Codex native spawn_agent worker を明示
breezing --codex all             # Codex CLI worker backend を明示
breezing --cursor all            # Cursor worker backend を明示
breezing --max-workers 2 all     # ready task の同時 spawn 上限を2に
breezing --max-workers 1 all     # 旧来の直列挙動に戻す
breezing --no-discuss all       # 計画議論スキップで全タスク完走

Options

Option Description Default
all 全未完了タスクを対象 -
N or N-M タスク番号/範囲指定 -
--backend <claude|codex|cursor> worker backend を明示選択 resolver result(配布既定は claude)
--cursor --backend cursor の別名 false
--codex --backend codex の別名 false
--max-workers N ready task の同時 spawn 数上限(breezing 固有オプション)。1 で旧来の直列挙動 max
--no-commit 非対応(Breezing では Worker の一時 commit と Lead の cherry-pick が必須) -
--no-discuss 計画議論スキップ false

Execution

このスキルは harness-work --breezing に委譲します。 以下の設定で実行してください:

  1. 引数を harness-work --breezing に渡す--max-workers N は breezing 固有オプションとして解釈し、harness-work--parallel とは別概念)
  2. チーム実行モードを強制 — Lead → Worker spawn → 必要時 Advisor → companion review Reviewer の四者分離
  3. Lead は delegate 専念 — コードを直接書かない

Execution Backend (persistent)

バックエンド選択(worker を claude / codex / cursor のどれで実装するか)の正本は harness-work の「Execution Backend Selection(実装バックエンド選択)」を参照する。 そこに precedence、role-scope(review / advisor は Opus 固定)、self_review スキップ、cursor banner が定義されている。 backend 判定は 必ず resolver 経由にし、HARNESS_IMPL_BACKEND env だけを直読みしない。

Codex Breezing も配布 plugin では call-site default を変えない:

bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh"

precedence は --backend / --cursor / --codex > HARNESS_IMPL_BACKEND env > project env.local > user ~/.config/claude-harness/impl-backend.env > call-site default claude。 つまり配布 plugin のフラグなし breezing all は互換性のため claude のまま。 この環境のように user/project config で HARNESS_IMPL_BACKEND=cursor が設定されている場合だけ、 フラグなしで Cursor worker backend になる。Codex native subagent worker を明示する時は --backend claude を指定する。

composer / コンポーザー / Composer で / composer 2.5 / composer モード は、正式に cursor backend の trigger として扱う。 これは --cursor 相当の intent であり、Lead は resolve-impl-backend.sh を経由して backend を確定する。 解決時は明示 override として --backend cursor を渡し、env / project / user file / default より優先させる。 composer は Codex native Worker の内側に spawn する追加 agent ではなく、非 claude backend の規約どおり Lead が cursor-companion.sh を直接呼ぶ。

既定の worker 数は max。 ここでの max は「対象スコープ内で Depends が満たされ、今すぐ実行できる ready task の最大数」を意味する。 無制限に Worker を spawn する意味ではない。 依存待ちのタスクは、前段タスクが完了して ready になるまで spawn しない。 旧来の 1 件ずつ進める直列挙動に戻したい場合は --max-workers 1 を指定する。

Worker の実装は並列化できるが、レビューと main への cherry-pick は直列で行う。 これは同じ main worktree への書き込み競合を避けるため。

harness-work との違い

特徴 harness-work breezing (このスキル)
デフォルトモード Solo / Sequential Breezing(チーム実行)
並列手段 companion task Bash 並列 spawn_agent によるサブエージェント委譲
Lead の役割 調整+実装 delegate (調整専念)
レビュー Lead 自己レビュー companion review 独立レビュー
デフォルトスコープ 次のタスク 全部

Team Composition(Codex Native)

Role 実行方式 権限 責務
Lead (self) 現セッション継承 調整・指揮・タスク分配・cherry-pick
Worker ×N resolver result: spawn_agent / codex-companion.sh / cursor-companion.sh task --write --workspace <worktree> セッション権限継承 実装(git worktree 分離)
Advisor claude-code-harness:advisor 読み取り専用 方針助言 (PLAN / CORRECTION / STOP)
Reviewer companion review --base read-only 独立レビュー

Flow Summary

breezing [scope] [--backend claude|codex|cursor] [--max-workers N] [--no-discuss]
    │
    ↓ Load harness-work --breezing
    │
Phase 0: Planning Discussion (--no-discuss でスキップ)
Phase A: Pre-delegate(チーム初期化 + worktree 準備)
Phase B: Delegate(resolver-selected worker + 必要時 Advisor + companion review レビュー)
Phase C: Post-delegate(統合検証 + Plans.md 更新 + commit)

Advisor Protocol

Worker は generic な subagent を増やさない。 迷った時は構造化 JSON で相談要求だけ返し、Lead が advisor を呼ぶ。

  1. Worker → advisor-request.v1
  2. Lead → Advisor
  3. Advisor → advisor-response.v1
  4. Lead → 同じ Worker に advice を返して続行
  5. Reviewer は最後の成果物だけを見る

相談条件は loop / solo とそろえる。

  • 高リスク task(needs-spike / security-sensitive / state-migration)の初回実行前
  • 同じ原因の失敗が 2 回続いた後
  • plateau により PIVOT_REQUIRED を返す直前
  • 同じ trigger_hash は 1 回だけ。task ごとの相談回数は最大 3 回

Realtime Handoff / Silence Policy

Codex 0.123.0 以降では、background agent が realtime handoff の transcript delta を受け取れる。 Breezing ではこの仕組みを「余計な通知を増やす入口」ではなく、「必要な時だけ判断を更新するための入力」として扱う。

ひとことで: Worker / Advisor / Reviewer は、状態が変わらない transcript delta には反応せず、Lead への報告は material state change に絞る。

たとえると、複数人の作業部屋で全員が独り言を実況するのではなく、担当作業が終わった時、詰まった時、判断待ちの時だけ声をかける形。

報告するもの:

  • Worker の完了 JSON、blocked 理由、必要な advisor-request.v1
  • Advisor の PLAN / CORRECTION / STOP
  • Reviewer の APPROVE / REQUEST_CHANGES
  • validation failure、contract readiness failure、plateau、drift 検知
  • Lead が出す task 完了単位の progress feed

沈黙してよいもの:

  • transcript delta を受け取っただけで、task status、review verdict、advisor decision が変わっていない場合
  • tool stdout の細かな増分で、job log に残っていれば十分なもの
  • parallel spawn 中の待機 heartbeat。待機は wait_agent / job status に任せる

途中報告の頻度:

  • Lead の progress feed は task 完了ごとに 1 回を基本にする。
  • Worker / Reviewer は「完了・差し戻し・ブロック」の結果だけを返し、delta ごとの小報告は避ける。
  • user が明示的に status を求めた場合だけ、Lead がまとめて現在地を返す。

Advisor / Reviewer drift との関係:

  • silence policy は Advisor / Reviewer を黙らせる免除ではない。
  • advisor-request.v1 送信後に response が返らない、reviewer profile に必要な result がない、review loop が plateau した場合は drift として扱う。
  • Advisor は方針助言、Reviewer は品質判定という役割分離を維持し、沈黙は「不要な通知を出さない」ためだけに使う。

Phase 0: Planning Discussion(構造化 3 問チェック)

全タスク実行前に、以下の 3 問で計画の健全性を確認する。 --no-discuss 指定時は全スキップ。

Q1. スコープ確認:

「{{N}} 件のタスクを実行します。スコープは適切ですか?」

Q2. 依存関係確認(Plans.md に Depends カラムがある場合のみ):

「タスク {{X}} は {{Y}} に依存しています。実行順序は合っていますか?」

Q3. リスクフラグ[needs-spike] タスクがある場合のみ):

「タスク {{Z}} は [needs-spike] です。先に spike しますか?」

Phase A: Pre-delegate

  1. Plans.md を読み込み、対象タスクを特定
  2. 依存グラフを解析し、実行順序を決定
  3. 各タスク用に git worktree を作成

Phase B: Delegate(Codex Host Orchestration)

for task in execution_order:
    # B-0. 作業ディレクトリ分離
    worktree_path = "/tmp/worker-{task.number}-$$"
    branch_name = "worker-{task.number}-$$"
    git worktree add -b {branch_name} {worktree_path}
    TASK_BASE_REF = git rev-parse HEAD

    # B-1. sprint-contract を生成
    contract_path = bash("node \"${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js\" {task.number}")
    contract_path = bash("scripts/enrich-sprint-contract.sh {contract_path} --check \"DoD を reviewer 観点で確認\" --approve")
    bash("scripts/ensure-sprint-contract-ready.sh {contract_path}")

    # B-2. Worker 委託
    Plans.md: task.status = "cc:WIP"

    resolver_backend_arg = ""
    if explicit_backend_value in ["claude", "codex", "cursor"]:
        resolver_backend_arg = "--backend {explicit_backend_value}"
    backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
    if explicit_flag == "--cursor":
        backend = "cursor"
    if explicit_flag == "--codex":
        backend = "codex"

    if backend == "cursor":
        print("🚀 cursor / $(bash \"${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh\" --host cursor --role worker --field model) / {branch_name} / {task.ID}")
        companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
        companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if git("-C", worktree_path, "status", "--porcelain") != "":
            git("-C", worktree_path, "add", "-A")
            git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: breezing delegated change")
            latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if latest_commit == TASK_BASE_REF:
            raise EscalationError("cursor companion produced no commit")
        worker_result = {type: "companion-result.v1", baseCommit: TASK_BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: branch_name, files_changed: git("-C", worktree_path, "diff", "--name-only", "{TASK_BASE_REF}..HEAD"), summary: companion_output}
        worker_id = null
    elif backend == "codex":
        companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
        companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
        companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if latest_commit == TASK_BASE_REF:
            raise EscalationError("codex companion produced no commit")
        worker_result = {type: "companion-result.v1", baseCommit: TASK_BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: branch_name, files_changed: git("-C", worktree_path, "diff", "--name-only", "{TASK_BASE_REF}..HEAD"), summary: companion_output}
        worker_id = null
    else:
        print("🚀 claude / native-subagent / {branch_name} / {task.ID}")
        worker_id = spawn_agent({
            message: "作業ディレクトリ: {worktree_path} で作業してください。\n\nタスク: {task.内容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\n\n実装してください。完了後 git commit してください。\n\n完了時、以下の JSON を返してください:\n{\"commit\": \"<hash>\", \"files_changed\": [...], \"summary\": \"...\"}",
            fork_context: true
        })
        worker_result = wait_agent({ targets: [worker_id] })

    # B-3. Worker が advice request を返した時だけ、Lead が Advisor を呼ぶ
    if backend == "claude" and worker_result.type == "advisor-request.v1":
        advisor_id = spawn_agent({
            agent_type: "default",
            message: worker_result.request_json,
            fork_context: true
        })
        advisor_result = wait_agent({ targets: [advisor_id] })
        close_agent({ target: advisor_id })
        send_input({
            target: worker_id,
            message: "advisor-response.v1: {advisor_result}"
        })
        worker_result = wait_agent({ targets: [worker_id] })

    # B-4. Lead がレビュー実行(TASK_BASE_REF 起点)
    # 公式プラグイン companion review を使用(harness-work の「レビューループ」参照):
    #   bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" review --base {TASK_BASE_REF}
    #   → verdict マッピング: approve→APPROVE, needs-attention→REQUEST_CHANGES
    VERDICT = review_task(worktree_path, TASK_BASE_REF)  # static review(harness-work 参照)
    PROFILE = jq(contract_path, ".review.reviewer_profile")
    BROWSER_MODE = jq(contract_path, ".review.browser_mode // \"scripted\"")
    REVIEW_INPUT = "review-output.json"
    if PROFILE == "runtime":
        # worktree 内で runtime checks を実行
        REVIEW_INPUT = bash("cd {worktree_path} && scripts/run-contract-review-checks.sh {contract_path}")
        RUNTIME_VERDICT = jq(REVIEW_INPUT, ".verdict")
        if RUNTIME_VERDICT == "REQUEST_CHANGES":
            VERDICT = "REQUEST_CHANGES"
        elif RUNTIME_VERDICT == "DOWNGRADE_TO_STATIC":
            REVIEW_INPUT = "review-output.json"  # static review にフォールバック
    if PROFILE == "browser":
        # browser artifact は PENDING_BROWSER scaffold。reviewer agent が後続で実行。
        BROWSER_ARTIFACT = bash("scripts/generate-browser-review-artifact.sh {contract_path}")
        # REVIEW_INPUT は static review のまま維持
    if REVIEW_INPUT != "review-output.json" and jq(REVIEW_INPUT, ".verdict") == "DOWNGRADE_TO_STATIC":
        REVIEW_INPUT = "review-output.json"
    bash("scripts/write-review-result.sh {REVIEW_INPUT} {commit_hash}")

    # B-5. 修正ループ(REQUEST_CHANGES 時、contract の max_iterations まで)
    review_count = 0
    # sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
    MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    while VERDICT == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
        if backend == "claude":
            send_input({
                target: worker_id,
                message: "指摘内容: {issues}\n修正して git commit --amend してください。修正後 JSON を再出力してください。"
            })
            wait_agent({ targets: [worker_id] })
        elif backend == "cursor":
            previous_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"Review findings:\n{issues}\n\nFix the findings and create one new git commit before returning.\"")
            latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            if git("-C", worktree_path, "status", "--porcelain") != "":
                git("-C", worktree_path, "add", "-A")
                git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: breezing review fix")
                latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            if latest_commit == previous_commit:
                raise EscalationError("cursor companion retry produced no new commit")
        else:
            previous_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
            bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"Review findings:\n{issues}\n\nFix the findings and create one new git commit before returning.\"")
            latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
            if latest_commit == previous_commit:
                raise EscalationError("codex companion retry produced no new commit")
        VERDICT = review_task(worktree_path, TASK_BASE_REF)
        review_count++

    # B-6. Worker 終了
    if backend == "claude":
        close_agent({ target: worker_id })

    # B-7. 結果処理
    if VERDICT == "APPROVE":
        commit_hash = git("-C", worktree_path, "rev-parse", "HEAD")
        git cherry-pick --no-commit {TASK_BASE_REF}..{commit_hash}
        git commit -m "{task.内容}"
        Plans.md: task.status = "cc:完了 [{short_hash}]"
    else:
        → ユーザーにエスカレーション(Plans.md は cc:WIP のまま)
        → 後続タスクも停止

    # B-8. Worktree クリーンアップ
    git worktree remove {worktree_path}
    git branch -D {branch_name}

    # B-9. Progress feed
    print("📊 Progress: Task {completed}/{total} 完了 — {task.内容}")

ready task の並列 spawn(既定 max / --max-workers N 指定時)

Depends が満たされた ready task が複数ある場合、既定では ready task の数まで同時 spawn する。 --max-workers N を指定すると、同時 spawn 数を N 件までに制限する。 --max-workers 1 は旧来の直列挙動に戻す escape hatch。

wait_agent のセマンティクス: wait_agent({targets: [a, b]}) は最初に完了した1つを返す(全完了待ちではない)。 したがって、全 Worker の完了を待つにはループで個別に wait_agent を呼ぶ。

# 独立タスク A, B を並列 spawn(各自 worktree 分離済み)
worker_a = spawn_agent({ message: "作業ディレクトリ: /tmp/worker-a-$$ ...", fork_context: true })
worker_b = spawn_agent({ message: "作業ディレクトリ: /tmp/worker-b-$$ ...", fork_context: true })

# 各 Worker の完了を個別に待ち → レビュー → cherry-pick(直列)
# wait_agent は最初の1つを返すので、残りの Worker はまだ動作中
for worker_id in [worker_a, worker_b]:
    wait_agent({ targets: [worker_id] })    # この Worker の完了を待つ
    VERDICT = review_task(worktree_path, TASK_BASE_REF)  # harness-work 参照
    # 修正ループ(必要なら)...
    close_agent({ target: worker_id })
    if VERDICT == "APPROVE":
        cherry-pick → Plans.md 更新

制約: 並列化できるのは Depends が満たされた ready task のみ。 max は ready task 数の上限であり、無制限 spawn ではない。 レビュー → cherry-pick は直列実行(main への書き込みが競合するため)。

Worker の出力契約

Worker プロンプトには、完了時に以下の JSON を返すことを明示する:

{
  "commit": "a1b2c3d",
  "files_changed": ["src/foo.ts", "tests/foo.test.ts"],
  "summary": "foo モジュールに bar 機能を追加"
}

Lead はこの JSON を解析して commit hash とファイル一覧を取得する。

Progress Feed(Phase B 中の進捗通知)

📊 Progress: Task 1/5 完了 — "harness-work に失敗再チケット化を追加"
📊 Progress: Task 2/5 完了 — "harness-sync に --snapshot を追加"

完了報告(Phase C)

全タスク完了後、Lead が以下の手順でリッチ完了報告を生成:

  1. git log --oneline {session_base_ref}..HEAD で全 cherry-pick コミットを収集
  2. git diff --stat {session_base_ref}..HEAD で全体の変更規模を取得
  3. Plans.md の残タスクを抽出
  4. Breezing テンプレートに従い出力

Claude Code 版との差分

項目 Claude Code 版 Codex ネイティブ版(本ファイル)
Worker spawn Claude Code Agent tool + worktree isolation resolver result: spawn_agent, codex-companion.sh, or cursor-companion.sh + git worktree add
完了待ち Agent の戻り値 wait_agent({targets: [id]})
修正指示 Claude Code message tool send_input({target, message})
Worker 終了 自動 close_agent({target})
レビュー Codex exec → Reviewer agent fallback companion review --base(構造化出力)
権限 bypassPermissions + hooks companion task --write / spawn_agent: セッション権限継承
Agent Teams CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS 環境変数 Codex native(標準機能)
Worktree isolation="worktree" 自動管理 git worktree add/remove 手動管理
モード昇格 タスク4件以上で自動 --breezing 明示時のみ

Related Skills

  • harness-work — 単一タスクからチーム実行まで(本体)
  • harness-sync — 進捗同期
  • harness-review — コードレビュー
Codex原生长循环后台运行器,自动执行Breezing就绪任务批次。支持范围过滤、并行控制及状态监控,适用于需持续自主推进的复杂开发任务,不适用于一次性实现或常规审查。
需要长时间后台自动执行任务 启动自主循环处理未完结工作项 管理多步骤并行开发流程
skills-codex/harness-loop/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-loop -g -y
SKILL.md
Frontmatter
{
    "base": "harness-work",
    "kind": "workflow",
    "name": "harness-loop",
    "pair": "harness-sync",
    "role": "orchestrator",
    "owner": "harness-core",
    "shape": "delegate",
    "since": "2026-05-05",
    "purpose": "Run long-lived Codex ready-batch execution loops",
    "trigger": "long-running, loop, autonomous, background, Codex",
    "description": "HAR: Codex-native long-running loop runner. Uses a real background runner that executes one ready batch per cycle through Breezing by default, with status\/stop controls. Trigger: long-running, loop, autonomous, background, Codex. Do NOT load for: one-shot implementation, normal review, release.",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "argument-hint": "[all|TASK|START-END|START..END] [--max-cycles N] [--max-workers N|max] [--executor breezing|task] [--pacing worker|ci|plateau|night]",
    "description-en": "HAR: Codex-native long-running loop runner. Uses a real background runner that executes one ready batch per cycle through Breezing by default, with status\/stop controls. Trigger: long-running, loop, autonomous, background, Codex. Do NOT load for: one-shot implementation, normal review, release.",
    "description-ja": "HAR: Codex 専用の長時間ループ実行。実際のバックグラウンドランナーが ready batch を Breezing で進め、status \/ stop で監視できる。長時間、loop、ループ、autonomous、background、Codex で起動。",
    "disable-model-invocation": true
}

Harness Loop

Codex 版の harness-loop は、説明だけの擬似ループではなく、 実際にバックグラウンドで回るランナーを起動する。

ひとことで

$harness-loop は、1 回だけの実装依頼ではなく、 「今すぐ実行できる未完了タスクのまとまりを、Breezing で自動実行し続ける当番」を起動する入口。

ここでいう ready batch は、Depends が満たされていて、今すぐ並列実行できる cc:TODO / cc:WIP のまとまり。 1 cycle は 1 task ではなく、原則として 1 ready batch を処理する。

たとえると

人が横でずっと見張る代わりに、 「同時に進められる作業をまとめて見つける → Breezing に任せる → 結果を確認する → 次のまとまりへ進む」 を繰り返す監督係を、裏で常駐させるイメージ。

Quick Reference

入力 動作
$harness-loop all 未完了タスク全体を長時間ループで開始
$harness-loop 41.1-41.4 範囲を絞って開始
$harness-loop JLB3R-02..JLB3R-08 Plans.md の task ID 順で範囲を絞って開始
$harness-loop all --max-cycles 3 最大 3 サイクルで停止
$harness-loop all --max-workers 4 1 cycle の ready batch を最大 4 worker までに制限
$harness-loop all --max-workers max ready batch 内で実行可能なタスク数を上限として並列化
$harness-loop all --plan roadmap named Plans の roadmap を対象にループ実行
$harness-loop all --executor task 旧来の 1 task per cycle local worker 実行へ逃がす
$harness-loop all --pacing night サイクル間の待機を長めにする
$harness-loop status 現在の実行状況を確認
$harness-loop stop 進行中ジョブを止めてループ停止要求を出す

実行コマンド

開始

harness codex-loop start all

範囲指定:

harness codex-loop start 41.1-41.4 --max-cycles 5 --pacing worker
harness codex-loop start JLB3R-02..JLB3R-08 --max-cycles 5 --pacing worker
harness codex-loop start all --max-workers max --pacing worker
harness codex-loop start all --plan roadmap --max-cycles 5
harness codex-loop start all --executor task --max-cycles 5

START..END は、Plans.md に並んでいる task ID をそのまま使う範囲指定。 英字やハイフンを含む task ID は .. を優先する。 41.1-41.4 のような従来の数値レンジも引き続き使える。

--max-workers は、Breezing が 1 cycle で同時に動かす worker 数の上限。 max は、選択範囲内で Depends が満たされた ready task の数をそのまま上限にする。 --executor task は、Breezing ではなく local worker に 1 task だけ渡す互換用の逃げ道。 問題切り分けや、並列実行したくない危険な作業で使う。 複数 Plans.md がある repo では、長時間 run の起動時に --plan NAME を明示する。 runner は開始時に解決した Plans file を cycle 間で保持するため、途中で active plan を切り替えない。

状態確認

harness codex-loop status
harness codex-loop status --json

停止

harness codex-loop stop

どう動くか

  1. project root の .claude/state/codex-loop/ に Harness loop の実行状態を書き出す
  2. 受け取った selection を Plans.md から正規化する
  3. Plans.md から Depends が満たされた cc:TODO / cc:WIP を集め、ready batch を作る
  4. --max-workers で ready batch の同時実行数を制限する
  5. 既定では Breezing executor が ready batch を Lead / Worker / Reviewer 分離で実行する
  6. --executor task の時だけ、互換用 local worker が 1 task per cycle で codex exec を起動する(CODEX_LOOP_TASK_DRIVER=companion の時だけ bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --background --write ... を使う)
  7. 高リスク task / 2 回目失敗 / plateau 直前では advisor consult を挟む
  8. ready batch 完了後に review / checkpoint / plateau 判定を行う
  9. まだ対象タスクが残っていれば、待機後に次サイクルへ進む

Realtime Handoff / Silence Policy

Codex 0.123.0 以降の background agent は realtime handoff で transcript delta を受け取れる。 この delta は「状況把握用の追記」であり、毎回ユーザーへ返答する合図ではない。

ひとことで: background agent は、必要な時だけ報告し、何も判断が変わらない時は明示的に沈黙する。

たとえると、見張り役が廊下でずっと実況するのではなく、異常・完了・判断待ちだけを知らせる形。

報告してよいタイミング:

  • loop 開始、停止、already runningstop 受理など、ユーザー操作に関わる lifecycle 境界
  • 1 ready batch cycle の最終結果、commit、RESULT: APPROVED / RESULT: BLOCKED
  • Breezing Lead が task 完了を progress feed としてまとめて出す時
  • task が blocked、validation failure、review REQUEST_CHANGES、plateau、advisor STOP で止まる時
  • user が status を実行した時、または明示的に途中状況を聞いた時
  • advisor / reviewer drift、contract readiness failure など、放置すると品質判定がずれる時

沈黙するタイミング:

  • transcript delta を受け取っただけで、task / review / advisor の状態が変わっていない時
  • runner.log / jobs/*.log に既に残る細かな stdout だけが増えた時
  • pacing 待機中で、次 cycle まで新しい判断材料がない時

途中報告の頻度:

  • default は「1 ready batch cycle につき最終報告 1 回」。
  • Breezing の task-level progress feed は、batch 内の完了数が動いた時だけ出す。
  • 長い cycle でも、material state change がない限り heartbeat は出さない。
  • 詳細な流れは harness codex-loop status --json と project root の .claude/state/codex-loop/runner.log に寄せ、会話側には要点だけ出す。

Advisor / Reviewer drift との関係:

  • silence policy は drift 検知を弱めるためのものではない。
  • advisor-request.v1 に response がない、review-result.v1 が返らない、contract が未承認などの異常は必ず state / log に残し、必要ならユーザーへ報告する。
  • Advisor は PLAN / CORRECTION / STOP の相談役、Reviewer は最終品質判定役のまま分離する。

pacing

用途 待機秒数
worker 通常の開発ループ 270
ci 短めに確認したい時 270
plateau 行き詰まり気味の再試行 1200
night 長めの放置実行 3600

State Path Policy

Codex 版 harness-loop は、Codex native の会話・実行キャッシュと、Harness が共有する project state を分けて扱う。

  • Harness 共通 state: project root の .claude/state/ 配下に置く。Claude 側の advisor / review / checkpoint と共有するため、harness codex-loop status もここを読む。
  • Codex loop runner state: project root の .claude/state/codex-loop/ 配下に置く。これは「Codex 全体の正本」ではなく、Harness loop runner の job / cycle / log 用 state。
  • Codex native state: ${CODEX_HOME:-~/.codex} 配下に残る Codex 自身の thread / transcript / cache。Harness loop の task status、advisor history、review result の正本にはしない。
  • 禁止: .Codex/~/.Codex を正本 path として案内しない。大文字 Codex ディレクトリは historical drift と見なす。

つまり、.claude/state/codex-loop/ は「この project の Harness loop state」であり、Codex native state 全体の固定保存先ではない。

状態ファイル

以下はすべて project root 基準。

  • .claude/state/codex-loop/run.json
  • .claude/state/codex-loop/cycles.jsonl
  • .claude/state/codex-loop/runner.log
  • .claude/state/codex-loop/current-job.json
  • .claude/state/codex-loop/jobs/*.json
  • .claude/state/codex-loop/jobs/*.log
  • .claude/state/codex-loop/jobs/*.out
  • .claude/state/advisor/history.jsonl
  • .claude/state/advisor/last-request.json
  • .claude/state/advisor/last-response.json
  • .claude/state/locks/codex-loop.lock.d

Advisor Consult

Advisor は「代わりに実装する役」ではなく、「次の一手だけ返す相談役」。 loop では次の 3 箇所でだけ呼ぶ。

タイミング reason_code 何をするか
高リスク task の初回実行前 high-risk-preflight 先に固める観点を聞く
同じ原因の 2 回目失敗後 retry-threshold 方針変更か局所修正かを聞く
plateau による停止直前 plateau-pre-escalation 本当に止めるべきかを聞く

decision は 3 種だけ。

decision loop の扱い
PLAN advice を次の executor prompt 先頭に足して再実行
CORRECTION 局所修正の指示として再実行
STOP loop を停止し、理由を state と runner.log に残す

同じ trigger は trigger_hash = task_id + reason_code + normalized_error_signature で 1 回だけ相談する。 相談回数は task ごとに最大 3 回で、それ以上はユーザー判断に上げる。

注意点

  • これは 本当に裏で動く。説明だけ返して終わるスキルではない。
  • 同時に 2 本は起動できない。既に走っている場合は already running で止まる。
  • 既定 executor は Breezing。旧来の 1 task per cycle 挙動が必要な時だけ --executor task を使う。
  • 失敗したタスクを無理に飛ばして次へ進めるのではなく、基本はその場で止まって理由を残す。
  • statusrunner.log を見れば、今どこで止まっているか追いやすい。

具体例

「Phase 41 の残タスクを、今日の間は自動で回したい」なら:

harness codex-loop start 41.1-41.4 --max-cycles 8 --max-workers max --pacing worker

途中で様子を見る:

harness codex-loop status

夜になって止めたい:

harness codex-loop stop

なぜこの形か

Codex では Claude の /loop と同じ wake-up 機構をそのまま使えない。 その代わり、Codex loop runner を土台にして、 Harness 側で状態管理と再入制御を持ち、実作業は Breezing の batch 実行に寄せる。 そうすると、長時間タスクでも「止める」「再開する」「今の状態を見る」が素直になり、 依存関係を満たした作業だけを安全にまとめて進められる。

集成执行 Plans.md 任务,支持单人、并行及团队全自动运行。根据任务数自动选择模式,支持指定后端(Claude/Codex/Cursor)及恢复 CI 失败,适用于实现与执行场景。
implement execute do everything breezing team run parallel composer composer 2.5
skills-codex/harness-work/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-work -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-work",
    "pair": "harness-review",
    "role": "executor",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "high",
    "purpose": "Execute Plans.md tasks end to end through Codex-native tools",
    "trigger": "implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5, composer mode, コンポーザー",
    "description": "HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Grep",
        "Glob",
        "Bash",
        "spawn_agent",
        "send_input",
        "wait_agent",
        "close_agent"
    ],
    "argument-hint": "[all] [task-number|range] [--backend claude|codex|cursor] [--cursor] [--codex] [--parallel N] [--no-commit] [--resume id] [--breezing] [--auto-mode] [--tdd-bypass]",
    "description-en": "HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup.",
    "description-ja": "HAR:Plans.md タスクを1件から全並列チーム実行まで担当。実装して、実行して、全部やって、breezing、チーム実行、parallel、composer、コンポーザー、composer 2.5 で起動。プランニング・レビュー・リリース・セットアップには使わない。"
}

Harness Work

Harness の統合実行スキル。 以下の旧スキルを統合:

  • work — Plans.md タスクの実装(スコープ自動判断)
  • impl — 機能実装(タスクベース)
  • breezing — チームフル自動実行
  • parallel-workflows — 並列ワークフロー最適化
  • ci — CI 失敗時の復旧

Quick Reference

ユーザー入力 モード 動作
harness-work auto タスク数で自動判定(下記参照)
harness-work all auto 全未完了タスクを自動モードで実行
harness-work 3 solo タスク3だけ即実行
harness-work --parallel 5 parallel 5ワーカーで並列実行(強制)
harness-work --codex codex Codex CLI に委託(明示時のみ)
harness-work --breezing all breezing resolved backend でチーム実行(配布既定は claude、user/project default で cursor 可)
harness-work --breezing --backend cursor all breezing Cursor worker backend を明示してチーム実行
harness-work --breezing --backend claude all breezing Codex native subagent worker を明示してチーム実行
harness-work --breezing breezing チーム実行を強制
harness-work 3 --plan roadmap solo named Plans の roadmap からタスク3を実行

Execution Mode Auto Selection(フラグなし時の自動判定)

明示的なモードフラグ(--parallel, --breezing, --codex)がない場合、 対象タスク数に応じて最適なモードを自動選択する:

対象タスク数 自動選択モード 理由
1 件 Solo オーバーヘッド最小。直接実装が最速
2〜3 件 Parallel(Task tool) Worker 分離のメリットが出始める閾値
4 件以上 Breezing Lead 調整 + Worker 並列 + Reviewer 独立の三者分離が効果的

ルール

  1. 明示フラグは常にオートモードを上書きする
    • --parallel N → Parallel モード(タスク数に関係なく)
    • --breezing → Breezing モード(タスク数に関係なく)
    • --codex → Codex モード(タスク数に関係なく)
  2. --codex は明示時のみ発動。Codex CLI が未インストールの環境があるため、自動選択しない
  3. --codex は他モードと組み合わせ可能: --codex --breezing → Codex + Breezing

Execution Backend Selection(実装バックエンド選択)

バックエンド(どのランタイムが実装するか)は、トポロジー(実行モード: solo / parallel / breezing)と直交する。 トポロジーが「何ワーカーで・どう分割して回すか」を決めるのに対し、バックエンドは「実装の手を誰が動かすか」を決める。 この契約は host-neutral であり(spec.md「Execution Backend Contract」)、Codex host から harness を駆動しても Claude Code から駆動しても同じに振る舞う。

backend 実装の担い手 委託コマンド
claude(global fallback) Codex native subagent(spawn_agent({message, fork_context}) spawn_agent で worker を spawn
codex Codex CLI bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write "<prompt>"
cursor cursor-agent(model composer-2.5-fast bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task --write --workspace <worktree> "<prompt>"

解決手順

run 開始時に 1 回だけ解決する。backend 判定は 必ず resolver 経由にし、HARNESS_IMPL_BACKEND env だけを直読みして判定しない:

bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh"

precedence(高い順): --backend <v> / --cursor / --codex フラグ > HARNESS_IMPL_BACKEND 環境変数 > プロジェクト env.local の同名行 > ユーザー ~/.config/claude-harness/impl-backend.env の同名行 > call-site default。 明示フラグ(--backend / --cursor / --codex)は env / file / default を常に上書きする。プロジェクト設定はユーザースコープを上書きする。

Codex host の --breezing / breezing も配布 plugin では call-site default を変えない。 フラグなしは resolve-impl-backend.sh の結果に従い、未設定時の fallback は claude。 Cursor を既定にしたい環境は HARNESS_IMPL_BACKEND=cursor を env / project env.local / user-scope config に設定する。 明示的に Cursor を使う場合は --backend cursor / --cursor、Codex native subagent worker へ戻す場合は --backend claude を渡す。

モデル名の正本は model-routing.sh。本ドキュメント中の composer-2.5-fast は参照値であり、実解決は bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model に従う(drift 防止)。

自然言語 backend trigger

ユーザーが composer / コンポーザー / Composer で / composer 2.5 / composer モード と言った場合は、cursor backend 指定として扱う。 これは --cursor と同じ intent だが、backend の確定値は必ず resolve-impl-backend.sh で解決する。 解決時は明示 override として --backend cursor を渡し、env / project / user file / default より優先させる。 Lead は composer を Codex native Worker 内の追加 agent と解釈せず、非 claude backend の規約どおり Worker agent を挟まずに cursor-companion.sh を直接呼ぶ。

role-scoped 制約

バックエンドは role-scoped。解決済みバックエンドを使うのは実装(worker)ロールだけ。 Reviewer と Advisor の両ロールは常に brain(--host claude、Opus)に固定する。 Reviewer を cursor / codex バックエンドに routing しない(実装したバックエンドが自分の出力をレビューしてはならない)。

claude バックエンドの self_review ゲート

backend が codex または cursor の場合、worker-report.v1self_review 配列も生成されない。 そのため Lead は self_review ゲートをスキップし、Lead の diff レビューを唯一の品質ゲートとする(既存の codex path と同じ扱い)。

cursor バックエンドの banner(委託前に必須)

backend が cursor のとき、Lead は委託前に次の 1 行 banner を必ず出力する:

⚠️ cursor backend: model=composer-2.5-fast / R01-R13 ガードレールは cursor-agent 内部に適用されない / 出力は Lead レビューまで untrusted

cursor の write 委託は専用 .git を持つ worktree 内で実行し、Lead が main へ cherry-pick する(cherry-pick 経路で R01-R13 が適用される)。 ガバナンス詳細は .claude/rules/cursor-cli-only.md を参照。

オプション

オプション 説明 デフォルト
all 全未完了タスクを対象 -
N or N-M タスク番号/範囲指定 -
--parallel N 並列ワーカー数 auto
--sequential 直列実行強制 -
--codex Codex CLI で実装委託(明示時のみ、自動選択しない) false
--backend <claude|codex|cursor> 明示バックエンド選択(worker ロールのみ適用、precedence 最上位) resolver result(未設定時は claude)
--cursor cursor backend(--backend cursor の別名) false
--plan NAME plans/manifest.json の named plan を使う active/default
--no-commit 自動コミット抑制 false
--resume <id|latest> 前回セッション再開 -
--breezing Lead/Worker/Reviewer のチーム実行 false
--no-tdd TDD フェーズスキップ false
--tdd-bypass 緊急時だけ TDD 強制を bypass。HARNESS_TDD_BYPASS_REASON または明示理由を audit に残す false
--no-simplify Auto-Refinement スキップ false
--auto-mode Auto Mode rollout を明示。親セッションの permission mode が互換な場合のみ採用を検討 false

Progressive Disclosure

まずこの本文で入口、自動選択、停止条件だけを確認する。 詳細は必要になった時だけ読む。

詳細 参照
Codex native Solo / Parallel / Breezing の具体手順 references/execution-modes.md
companion review、Reviewer fallback、AI Residuals、修正ループ references/review-loop.md
完了報告の生成 references/completion-report.md
テスト/CI 失敗時の再チケット化 references/failure-reticketing.md
仕様正本チェックの基準 docs/plans/spec-ssot.md

重要停止条件

  • Plans.md が旧フォーマットで DoD / Depends / Status を読めない時は停止する。
  • 仕様が実装判断に影響するのに project spec SSOT が見つからない時は、先に仕様正本を作成/更新してから実装する。
  • sprint-contract が required なのに ready でない時は実装に進まない。
  • critical / major review finding が残っている時は完了にしない。
  • テストを弱める、skip する、期待値を実装に合わせて緩める形では解決しない。
  • helper script は host project の scripts/ ではなく ${HARNESS_PLUGIN_ROOT}/scripts/ から呼ぶ。
  • 複数 Plans.md がある場合は、1 run の中で plan を切り替えない。必要なら --plan NAME を明示して新しい run を開始する。

Token Optimization (v2.1.69+): git 操作を伴わない軽量タスクでは plugin settings の includeGitInstructions: false を有効にして プロンプトトークンを削減できる。

スコープダイアログ(引数なし時)

harness-work
どこまでやりますか?
1) 次のタスク: Plans.md の次の未完了タスク → Solo で実行
2) 全部(推奨): 残りのタスクをすべて完了 → タスク数で自動モード選択
3) 番号指定: タスク番号を入力(例: 3, 5-7)→ 件数で自動モード選択

引数ありなら即実行(対話スキップ):

  • harness-work all → 全タスク、自動モード選択
  • harness-work 3-6 → 4件なので Breezing 自動選択

Effort レベル制御(Opus 4.8 / v2.1.111+)

effort はモデルの推論強度を選ぶ正式なノブ。low(○)/medium(◐)/high(●)/xhigh の 4 段階で、 /effort auto でデフォルトにリセットできる(max は v2.1.72 で廃止、xhigh が後継)。

Opus 4.8 では thinking は既定 off で、effort が推論深度の主レバー(過去のどの Opus より effort の影響が大きい)。 「浅い推論」を観測したら prompt で回避せず effort を上げる。 そのため複雑タスクの強化は free-text marker(旧 ultrathink)を spawn prompt に注入する方式を廃止し、 複雑度スコアから Worker spawn の effort tier を選ぶ方式に統一する。

多要素スコアリング

タスク着手時に以下のスコアを合算する。

要素 条件 スコア
ファイル数 変更対象 4 ファイル以上 +1
ディレクトリ core/, guardrails/, security/ を含む +1
キーワード architecture, security, design, migration を含む +1
失敗履歴 agent memory に同タスクの失敗記録あり +2
明示指定 PM テンプレートに effort: high / effort: xhigh(旧 ultrathink も互換受理)記載あり +3(自動採用)

effort tier の決め方(注入しない)

スコアから effort tier を escalation signal として決める(ultrathink 等の marker 文字列を spawn prompt に 書かない)。 適用 lever は次の 2 つだけ:

  • session /effort: 複雑タスクのバッチに入る前に host が /effort high / /effort xhigh を設定する(session 単位で効く確実な lever)。
  • worker frontmatter: agents/worker.mdeffort(既定 medium)が floor。CC の Agent / Task spawn API は per-spawn の effort 指定を公開しないため、worker 1 体ごとに effort を上げる機構はない。スコアは worker-report.v1task_complexity_note に記録し、Lead が session effort 引き上げの判断材料にする。
スコア code-risk(core/guardrails/security/architecture/migration を含む) effort tier
0-2 不問 medium(Worker frontmatter 既定のまま)
≥ 3 なし high
≥ 3 あり xhigh

breezing モードでも同じロジックを適用する(harness-work が一本化して管理)。

実行モード詳細

Harness helper script root

Harness が同梱する helper script は、作業対象プロジェクトの scripts/ ではなく、必ず plugin bundle root から呼ぶ。

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi

以降の node "${HARNESS_PLUGIN_ROOT}/scripts/..." / bash "${HARNESS_PLUGIN_ROOT}/scripts/..." は、この解決済み root を前提にする。

Backend-resolved executor path (Solo / Parallel / Breezing)

Solo / Parallel / Breezing は同じ resolver result から実装 executor を選ぶ。 harness-work 3 --cursor と user/project HARNESS_IMPL_BACKEND=cursor は、1 件タスクでも local Read/Write/Edit/Bash に fall through してはいけない。

resolver_backend_arg = ""
if explicit_backend_value in ["claude", "codex", "cursor"]:
    resolver_backend_arg = "--backend {explicit_backend_value}"
backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
if explicit_flag == "--cursor":
    backend = "cursor"
if explicit_flag == "--codex":
    backend = "codex"

if topology in ["solo", "parallel"] and backend in ["cursor", "codex"]:
    BASE_REF = git("rev-parse", "HEAD")
    WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
    worktree_path = ".claude/worktrees/{backend}-{WT_ID}"
    worktree_branch = "{backend}-work/{WT_ID}"
    bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
    companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
    if backend == "cursor":
        companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
    else:
        companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
        companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
    latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
    if backend == "cursor" and git("-C", worktree_path, "status", "--porcelain") != "":
        git("-C", worktree_path, "add", "-A")
        git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: delegated change")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
    if latest_commit == BASE_REF:
        raise EscalationError("{backend} companion produced no commit")
    worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
    enter_shared_review_loop(worker_result)
else:
    run_native_solo_or_parallel()

Parallel は task ごとにこの resolver path を適用する。 backend=cursor / codex の場合は native Worker spawn を使わず、task ごとに isolated companion worktree を作成して companion-result.v1 に正規化してから共通 review / cherry-pick loop に入る。

Solo モード(1 件時の自動選択)

  1. Plans.md を読み込み、対象タスクを特定
    • Plans.md が存在しない場合: harness-plan create --ci を自動呼び出し → Plans.md を生成して続行
    • ヘッダーに DoD / Depends カラムがない場合: Plans.md が旧フォーマットです。harness-plan create で再生成してください。停止
    • 会話に未記載タスクがある場合: 直前の会話コンテキストから要件を抽出し、Plans.md に cc:TODO で自動追記
      • 抽出ロジック: ユーザー発言からアクション動詞(「〜を追加」「〜を修正」「〜を実装」)を検出
      • 追記時は v2 フォーマット(Task / 内容 / DoD / Depends / Status)に準拠
      • 追記後、ユーザーに「Plans.md に以下を追記しました」と表示(5 秒タイムアウト付きプロンプト、デフォルト: 続行) 1.5. タスク背景確認(30 秒):
    • タスクの「内容」と「DoD」から 目的(このタスクが解く課題)を 1 行で推論表示
    • git grep / Glob影響範囲(変更が及ぶファイル/モジュール)を推論表示
    • 推論に自信がある場合: そのまま実装に進む(フロー遅延なし)
    • 推論に自信がない場合: ユーザーに 1 問だけ確認(「この理解で合っていますか?」) 1.6. 仕様正本 preflight:
    • 既存の project spec SSOT を探す(例: docs/spec/00-project-spec.md, docs/ARCHITECTURE.md, docs/HANDOFF.md, docs/oem/PROJECT_COMPASS.md, docs/specs/
    • task が product behavior / API / data model / permission / billing / integration / tenant boundary を変える場合、spec がなければ docs/spec/00-project-spec.md を作る
    • spec が古い、または task と矛盾する場合は、実装前に spec を更新する
    • typo / format / dependency bump / docs-only / 動作変更なし refactor は skip 理由を残して続行する
    • Worker / Reviewer へ渡す context には spec_path または spec_skip_reason を含める
  2. タスクを cc:WIP に更新
  3. TDD フェーズ[skip:tdd] なし & テストFW存在時): a. テストファイルを先に作成(Red) b. 失敗を確認 c. bash "${HARNESS_PLUGIN_ROOT}/scripts/log-tdd-red.sh".claude/state/tdd-red-log/<task-id>.jsonl に FAIL 証跡を残す。script が利用できない環境では、literal な failing test output を worker-report の self_review evidence に添付する d. --tdd-bypass を使う場合は、HARNESS_TDD_BYPASS=1HARNESS_TDD_BYPASS_REASON="<理由>" を明示し、TDD を省略した理由を sprint-contract / worker-report に残す
  4. node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" <task-id>sprint-contract.json を生成
  5. Reviewer 観点の追記を bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" で加え、bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" で approved を確認
  6. Advisor consult(必要時のみ):
    • 高リスク task(needs-spike / security-sensitive / state-migration)は、初回実行前に 1 回だけ相談する
    • 同じ原因の失敗が 2 回続いたら、3 回目に入る前に相談する
    • plateau(行き詰まり検知)が PIVOT_REQUIRED を返した時は、ユーザーへ止めて投げる前に 1 回だけ相談する
    • 相談結果は advisor-response.v1 で受け取り、PLAN は進め方の組み替え、CORRECTION は局所修正、STOP は即エスカレーションとして扱う
    • 同じ trigger_hash では 1 回しか相談しない。task ごとの相談回数は最大 3 回
  7. backend-resolved executor path でコードを実装(Green)
    • backend=claude: local / native Read/Write/Edit/Bash path で実装
    • backend=cursor / codex: 上記 companion worktree path で実装し、companion-result.v1 を共通 review loop に渡す
  8. /simplify で Auto-Refinement(--no-simplify で省略可)
  9. 自動レビューステージ(「レビューループ」参照):
    • Codex exec 優先でレビュー実行 → フォールバックで内部 Reviewer agent
    • sprint-contract.jsonreviewer_profileruntime の場合は bash "${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh" を実行
    • REQUEST_CHANGES の場合: 指摘を元に修正→再レビュー(MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    • APPROVE で次ステップへ。self-check だけでは完了を確定しない
  10. bash "${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh" で review artifact を正規化して保存(browser profile は --browser-result を渡し、browser_verdict == PENDING_BROWSER の時は static verdict を採用)
  11. git commit で自動コミット(--no-commit で省略可)
  12. タスクを cc:完了 に更新(commit hash 付与)
  • git log --oneline -1 で直近の commit hash(短縮形 7 文字)を取得
  • Plans.md の Status を cc:完了 [a1b2c3d] 形式で更新
  • commit がない場合(--no-commit 時)は hash なしで cc:完了 のみ
  1. リッチ完了報告(「完了報告フォーマット」参照)
  2. 失敗時の自動再計画(テスト/CI 失敗時のみ):
    • テスト実行結果を確認
    • 失敗した場合: 修正タスク案を state に保存し、承認コマンド経由で Plans.md に追加(「失敗タスクの自動再チケット化」参照)
    • 成功した場合: 次タスクへ進む

Parallel モード(2〜3 件時の自動選択 / --parallel N で強制)

[P] マーク付きタスクを N ワーカーで並列実行。 --parallel N で明示指定した場合は、タスク数に関係なくこのモードを使用。 同一ファイルへの書き込みが競合する場合は git worktree で分離。 各 task の実装 executor は Backend-resolved executor path に従う。 --parallel N --cursor--backend cursor、または default HARNESS_IMPL_BACKEND=cursor の場合、Parallel でも native Worker spawn ではなく task ごとの Cursor companion worktree を使う。

Codex モード(--codex 明示時のみ)

公式プラグイン codex-plugin-cc の companion 経由で Codex CLI にタスクを委託する。

# タスク委託(書き込み可能・worktree 分離)
BASE_REF="$(git rev-parse HEAD)"
WT_ID="codex-$(date +%Y%m%d-%H%M%S)-$$"
WORKTREE_PATH=".claude/worktrees/${WT_ID}"
git worktree add -b "codex-work/${WT_ID}" "$WORKTREE_PATH" "$BASE_REF"
HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH/.claude/state/codex-primary-environment.json" \
  bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH" \
  "タスク内容。完了前にこの worktree で exactly one git commit を作成してください。"

# stdin 経由(大きなプロンプト向け)
CODEX_PROMPT=$(mktemp /tmp/codex-prompt-XXXXXX.md)
# タスク内容を書き出し
cat "$CODEX_PROMPT" | HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH/.claude/state/codex-primary-environment.json" \
  bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH"
rm -f "$CODEX_PROMPT"

# Lead review 後に承認されたら range を取り込む
git -C "$WORKTREE_PATH" diff "$BASE_REF..HEAD"
WORKTREE_HEAD="$(git -C "$WORKTREE_PATH" rev-parse HEAD)"
git cherry-pick --no-commit "$BASE_REF..$WORKTREE_HEAD"

companion は App Server Protocol 経由で Codex と通信し、 Job 管理・thread resume・構造化出力を提供する。 結果を検証し、品質基準を満たさない場合は自力で修正。

Breezing モード(4 件以上で自動選択 / --breezing で強制)

Lead / Worker / Advisor / Reviewer の役割分離でチーム実行する。 Codex host の Breezing は resolver result に従う。配布 plugin のフラグなし fallback は claude なので、 spawn_agent, wait_agent, send_input, close_agent を使った Codex native subagent orchestration が互換既定。 --backend cursor / --cursor、または user/project config の HARNESS_IMPL_BACKEND=cursor がある時だけ cursor-companion.sh で Cursor worker に委託する。 古い TeamCreate / TaskCreate ベースの説明は採らない。

権限ポリシー:

  • 現行の shipped default は bypassPermissions
  • --auto-mode は互換な親セッション向けの opt-in rollout フラグとして扱う
  • permissions.defaultMode や agent frontmatter の permissionMode には未文書化の autoMode 値を書かない

CC v2.1.69+: nested teammates はプラットフォーム側で禁止されるため、 Worker/Reviewer プロンプトには冗長な nested 防止文言を追加しない。

Lead (this agent)
├── Worker (resolver result: Codex native spawn_agent / codex-companion / cursor-companion) — 実装担当
├── Advisor (claude-code-harness:advisor) — 方針助言
└── Reviewer (code-reviewer agent) — レビュー担当

Phase A: Pre-delegate(準備):

  1. Plans.md を読み込み、対象タスクを特定
  2. 依存グラフを解析し、実行順序を決定(Depends カラム)
  3. 各タスクの仕様正本 preflight を行い、必要なら docs/spec/00-project-spec.md または既存 spec を実装前に更新
  4. 各タスクの effort スコアリング(effort tier 判定 — high/xhigh)
  5. node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js"sprint-contract.json を生成
  6. bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" で Reviewer 観点を加え、bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" で未承認なら停止

Phase B: Delegate(Worker spawn → 必要時 Advisor → レビュー → cherry-pick):

各タスクについて以下を逐次実行する(依存順):

API 注記: 以下は Codex native の subagent API 構文で記述する。 backend=claude の時だけ spawn_agent(...), send_input(...), wait_agent(...), close_agent(...) をそのまま使う。 backend=cursor / codex の時は Worker agent を spawn せず、Lead が companion を直接呼ぶ。 Claude Code 向けのサブエージェント構文やメッセージ送信構文は混ぜない。

for task in execution_order:
    # B-0. backend 解決(配布 fallback は claude、user/project default で cursor 可)
    resolver_backend_arg = ""
    if explicit_backend_value in ["claude", "codex", "cursor"]:
        resolver_backend_arg = "--backend {explicit_backend_value}"
    backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
    if explicit_flag == "--cursor":
        backend = "cursor"
    if explicit_flag == "--codex":
        backend = "codex"

    # B-1. sprint-contract を生成
    contract_path = bash("node \"${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js\" {task.number}")
    contract_path = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh\" {contract_path} --check \"DoD を reviewer 観点で確認\" --approve")
    bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh\" {contract_path}")

    # B-2. Worker 委託(worktree 分離)
    Plans.md: task.status = "cc:WIP"  # 着手時に更新(未着手タスクは cc:TODO のまま)

    if backend == "cursor":
        BASE_REF = git("rev-parse", "HEAD")
        WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
        worktree_path = ".claude/worktrees/cursor-{WT_ID}"
        worktree_branch = "cursor-work/{WT_ID}"
        bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
        print("🚀 cursor / $(bash \"${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh\" --host cursor --role worker --field model) / {branch} / {task.number}")
        companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
        companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if git("-C", worktree_path, "status", "--porcelain") != "":
            git("-C", worktree_path, "add", "-A")
            git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: delegated change")
            latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if latest_commit == BASE_REF:
            raise EscalationError("cursor companion produced no commit")
        worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
        worker_id = null
    elif backend == "codex":
        BASE_REF = git("rev-parse", "HEAD")
        WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
        worktree_path = ".claude/worktrees/codex-{WT_ID}"
        worktree_branch = "codex-work/{WT_ID}"
        bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
        companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
        companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
        companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
        if latest_commit == BASE_REF:
            raise EscalationError("codex companion produced no commit")
        worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
        worker_id = null
    else:
        print("🚀 claude / native-subagent / {branch} / {task.number}")
        worker_id = spawn_agent({
            message: "タスク: {task.内容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\nspec_path: {spec_path}\nspec_skip_reason: {spec_skip_reason}\nmode: breezing\n\n作業は分離 worktree で行い、完了後に git commit してください。\n完了時は {commit, worktreePath, branch, files_changed, summary} を返してください。",
            fork_context: true
        })
        worker_result = wait_agent({ targets: [worker_id] })
    # worker_result には {commit, worktreePath, branch, files_changed, summary} が含まれる
    # backend=cursor/codex では Lead が companion stdout を companion-result.v1 に正規化する。

    # B-3. Worker が advice request を返した時だけ、Lead が Advisor を呼ぶ
    if backend == "claude" and worker_result.type == "advisor-request.v1":
        advisor_id = spawn_agent({
            message: worker_result.request_json,
            agent_type: "default",
            fork_context: true
        })
        advisor_result = wait_agent({ targets: [advisor_id] })
        close_agent({ target: advisor_id })
        send_input({
            target: worker_id,
            message: "advisor-response.v1: {advisor_result}"
        })
        worker_result = wait_agent({ targets: [worker_id] })

    # B-4. Lead がレビュー実行(Codex exec 優先)
    if backend == "claude":
        diff_text = git("-C", worker_result.worktreePath, "show", worker_result.commit)
    else:
        diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
    verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
    profile = jq(contract_path, ".review.reviewer_profile")
    review_input = "review-output.json"
    if profile == "runtime":
        review_input = bash("cd {worker_result.worktreePath} && bash \"${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh\" {contract_path}")
        runtime_verdict = jq(review_input, ".verdict")
        if runtime_verdict == "REQUEST_CHANGES":
            verdict = "REQUEST_CHANGES"
        elif runtime_verdict == "DOWNGRADE_TO_STATIC":
            pass  # runtime 検証コマンドなし → static verdict をそのまま使う
    browser_result = ""
    if profile == "browser":
        # browser artifact から route / browser_mode / execution_instructions を再利用して browser runner を起動する。
        browser_artifact = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/generate-browser-review-artifact.sh\" {contract_path}")
        browser_result = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/browser-review-runner.sh\" {browser_artifact}")
        browser_verdict = jq(browser_result, ".browser_verdict")
        if browser_verdict == "REQUEST_CHANGES":
            verdict = "REQUEST_CHANGES"
        elif browser_verdict == "APPROVE" and verdict != "REQUEST_CHANGES":
            verdict = "APPROVE"
        # browser_verdict == PENDING_BROWSER のときは static verdict を維持する
    # review_input が DOWNGRADE_TO_STATIC の場合は static review 結果を使う
    if review_input != "review-output.json" and jq(review_input, ".verdict") == "DOWNGRADE_TO_STATIC":
        review_input = "review-output.json"  # static review の結果にフォールバック
    bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh\" {review_input} {latest_commit} --browser-result {browser_result}")

    # B-5. 修正ループ(REQUEST_CHANGES 時、contract の max_iterations まで)
    review_count = 0
    # sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
    MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    latest_commit = worker_result.commit
    while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
        if backend == "claude":
            send_input({
                target: worker_id,
                message: "指摘内容: {issues}\n修正して amend してください"
            })
            # Worker が修正 → amend → 更新された commit hash を返す
            updated_result = wait_agent({ targets: [worker_id] })
            latest_commit = updated_result.commit
        elif backend == "cursor":
            previous_commit = latest_commit
            companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
            latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
            if git("-C", worker_result.worktreePath, "status", "--porcelain") != "":
                git("-C", worker_result.worktreePath, "add", "-A")
                git("-C", worker_result.worktreePath, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: review fix")
                latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
            if latest_commit == previous_commit:
                raise EscalationError("cursor companion retry produced no new commit")
            worker_result.commit = latest_commit
            worker_result.summary = companion_output
        else:
            previous_commit = latest_commit
            companion_state_file = "{worker_result.worktreePath}/.claude/state/codex-primary-environment.json"
            companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
            latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
            if latest_commit == previous_commit:
                raise EscalationError("codex companion retry produced no new commit")
            worker_result.commit = latest_commit
            worker_result.summary = companion_output
        if backend == "claude":
            diff_text = git("-C", worker_result.worktreePath, "show", latest_commit)
        else:
            diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
        verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
        review_count++

    # B-6. Worker 終了
    if backend == "claude":
        close_agent({ target: worker_id })

    # B-7. APPROVE → trunk に cherry-pick(feature ブランチ経由)
    # Worker の Branch Guard により trunk HEAD は動かず、commit は feature ブランチ上にある想定
    if verdict == "APPROVE":
        TRUNK=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' || echo "main")
        git checkout "$TRUNK"  # safety: 既に trunk なら no-op
        # feature ブランチの commit が既に trunk にある(Branch Guard 失敗時のフォールバック)か確認
        if git("merge-base", "--is-ancestor", latest_commit, "HEAD"):
            pass  # 既に trunk 上 — cherry-pick 不要(再入防止)
        else:
            if backend == "claude":
                git cherry-pick --no-commit {latest_commit}  # feature branch → trunk
            else:
                git cherry-pick --no-commit {worker_result.baseCommit}..{latest_commit}  # companion range → trunk
            git commit -m "{task.内容}"
        # Worker の worktree を remove してから feature ブランチを削除
        if worker_result.worktreePath:
            git worktree remove {worker_result.worktreePath} --force
        if worker_result.branch and worker_result.branch not in ["main", "master"] and worker_result.branch != TRUNK:
            git branch -D {worker_result.branch}
        Plans.md: task.status = "cc:完了 [{hash}]"
        # auto-checkpoint 記録(冪等性ガード (c))
        # Plans.md 書き換え直後に呼ぶ。失敗しても fail-open(|| true)でループを止めない
        HASH=$(git rev-parse --short HEAD)
        REVIEW_RESULT_PATH=".claude/state/review-results/${task.number}.review-result.json"
        bash "${HARNESS_PLUGIN_ROOT}/scripts/auto-checkpoint.sh" \
            "${task.number}" "${HASH}" "${contract_path}" "${REVIEW_RESULT_PATH}" \
            || true  # fail-open: harness-mem 未起動環境でも継続
    else:
        → ユーザーにエスカレーション

    # B-8. Progress feed
    print("📊 Progress: Task {completed}/{total} 完了 — {task.内容}")

Advisor Protocol(全モード共通)

Advisor は「実装者」でも「レビュー担当」でもない。 迷った時だけ、実行役が次の一歩を決めるための相談役として入る。

  1. Worker は generic な subagent を増やさず、必要時だけ advisor-request.v1 を返す
  2. Lead が advisor を 1 回だけ呼ぶ
  3. Advisor は PLAN / CORRECTION / STOP のどれかを返す
  4. Lead はその advice を同じ Worker に返して続行させる
  5. Reviewer は最後の成果物だけを見る。advisor の返答に APPROVE / REQUEST_CHANGES を出さない

Solo モードでの Advisor

solo 実行では親セッション自身が Lead を兼ねる。 つまり「自分で実装し、自分で advisor に相談し、最後は独立レビューに回す」形になる。

  • 相談条件は loop / breezing と同じ
  • 相談 budget も task ごとに最大 3 回で同じ
  • STOP はその場で止まり、ユーザー判断へ上げる
  • review artifact の gate は飛ばさない

Sprint Contract

sprint-contract は「このタスクを何で合格にするか」を機械でも人でも同じ意味で読める形にする小さな契約ファイルです。 既定の保存先は .claude/state/contracts/<task-id>.sprint-contract.json です。

node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" 32.1.1

生成物には次を含めます。

  • checks: DoD を分解した確認項目
  • non_goals: 今回やらないこと
  • runtime_validation: test, lint, typecheck などの検証コマンド
  • browser_validation: browser reviewer が残すべき UI フロー検証項目
  • browser_mode: scripted または exploratory
  • route: browser reviewer が playwright / agent-browser / chrome-devtools のどれを使うか
  • risk_flags: needs-spike, security-sensitive, ux-regression など
  • reviewer_profile: static, runtime, browser

Phase C: Post-delegate(統合・報告):

  1. 全タスクの commit log を集計
  2. リッチ完了報告(「完了報告フォーマット」の Breezing テンプレート)を出力
  3. Plans.md の最終確認(全タスク cc:完了 になっているか)

CI 失敗時の対応

CI が失敗した場合:

  1. ログを確認してエラーを特定
  2. 修正を実施
  3. 同一原因で 3 回失敗したら自動修正ループを停止
  4. 失敗ログ・試みた修正・残る論点をまとめてエスカレーション

失敗タスクの自動再チケット化

タスク完了後にテスト/CI が失敗した場合、修正タスク案を自動生成し、承認後に Plans.md へ反映する:

トリガー条件

条件 アクション
cc:完了 後にテスト失敗 修正タスク案を state に保存し、承認を待つ
CI 失敗(3回未満) 修正を実施し、失敗カウントをインクリメント
CI 失敗(3回目) 修正タスク案を提示 + エスカレーション

修正タスクの自動生成

  1. 失敗原因を分類(syntax_error / import_error / type_error / assertion_error / timeout / runtime_error)
  2. .claude/state/pending-fix-proposals.jsonl に修正タスク案を保存:
    • 番号: 元タスク番号 + .fix サフィックス(例: 26.1.fix
    • 内容: fix: [元タスク名] - [失敗原因カテゴリ]
    • DoD: テスト/CI が通ること
    • Depends: 元タスク番号
  3. ユーザーが approve fix <task_id> を送ると Plans.md に cc:TODO で追加
  4. reject fix <task_id> で提案を破棄。pending が1件だけのときは yes / no でも応答可能

レビューループ

実装完了後(ステップ 5 の後)に自動実行される品質検証ステージ。 全モード共通(Solo / Parallel / Breezing)で統一的に適用される。 Parallel モードでは各 Worker が step 10(外部レビュー受付)として同じループを実行する。

レビュー実行の優先順位

1. Codex exec(優先)
   ↓ codex コマンドが存在しない or タイムアウト(120s)
2. 内部 Reviewer agent(フォールバック)

APPROVE / REQUEST_CHANGES の判定基準

レビュアーには以下の閾値基準を渡し、この基準のみで verdict を判定させる。 基準外の改善提案は recommendations として返すが、verdict には影響しない。

重要度 定義 verdict への影響
critical セキュリティ脆弱性、データ損失リスク、本番障害の可能性 1 件でも → REQUEST_CHANGES
major 既存機能の破壊、仕様との明確な矛盾、テスト不通過 1 件でも → REQUEST_CHANGES
minor 命名改善、コメント不足、スタイル不統一 verdict に影響しない
recommendation ベストプラクティス提案、将来の改善案 verdict に影響しない

重要: minor / recommendation のみの場合は 必ず APPROVE を返すこと。 「あったほうが良い改善」は REQUEST_CHANGES の理由にならない。

Codex exec レビュー(公式プラグイン経由)

タスク開始時の HEAD を BASE_REF として保持し、その ref との差分をレビュー対象にする。 公式プラグイン codex-plugin-cc の companion review を使用する。

# タスク開始時に base ref を記録(Step 2 の cc:WIP 更新前に実行)
BASE_REF=$(git rev-parse HEAD)

# ... 実装完了後 ...

# 公式プラグインの構造化レビューを実行
bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" review --base "${BASE_REF}"
REVIEW_EXIT=$?

verdict マッピング(公式プラグイン → Harness 形式):

公式プラグインは review-output.schema.json 準拠の構造化出力を返す。 Harness の verdict 形式への変換ルール:

公式 plugin Harness verdict 影響
approve APPROVE -
needs-attention REQUEST_CHANGES -
findings[].severity: critical critical_issues[] 1件でも → REQUEST_CHANGES
findings[].severity: high major_issues[] 1件でも → REQUEST_CHANGES
findings[].severity: medium/low recommendations[] verdict に影響しない

AI Residuals スキャンは引き続き bash "${HARNESS_PLUGIN_ROOT}/scripts/review-ai-residuals.sh" で実行し、 companion review の結果と合わせて最終 verdict を判定する。

# AI Residuals スキャン(companion review と並行実行可能)
AI_RESIDUALS_JSON="$(bash "${HARNESS_PLUGIN_ROOT}/scripts/review-ai-residuals.sh" --base-ref "${BASE_REF}" 2>/dev/null || echo '{"tool":"review-ai-residuals","scan_mode":"diff","base_ref":null,"files_scanned":[],"summary":{"verdict":"APPROVE","major":0,"minor":0,"recommendation":0,"total":0},"observations":[]}')"

内部 Reviewer agent フォールバック

Codex exec が使えない場合(command -v codex が失敗、または exit code ≠ 0):

Agent tool: subagent_type="reviewer"
prompt: "以下の変更をレビューしてください。判定基準: critical/major → REQUEST_CHANGES、minor/recommendation のみ → APPROVE。diff: {git diff ${BASE_REF}}"

Reviewer agent は Read-only(Write/Edit/Bash 無効)で安全にレビューを実行する。

修正ループ(REQUEST_CHANGES 時)

review_count = 0
# sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
contract_path = get_sprint_contract_path()  # 例: .claude/state/contracts/<task-id>.sprint-contract.json
MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3

while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
    1. レビュー指摘を解析(critical / major のみ対象)
    2. 各指摘に対して修正を実装
    3. 再度レビューを実行(同じ判定基準・同じ優先順位)
    review_count++

if review_count >= MAX_REVIEWS and verdict != "APPROVE":
    → ユーザーにエスカレーション
    → 「MAX_REVIEWS 回修正しましたが以下の critical/major 指摘が残っています」+ 指摘一覧を表示
    → ユーザー判断を待つ(続行 / 中断)

Breezing モードでの適用

Breezing モードでは Lead がレビューループを実行する(上記 Phase B 参照):

  1. Worker が worktree 内で実装・commit → Lead に結果返却
  2. Lead が Codex exec でレビュー(優先)/ Reviewer agent(フォールバック)
  3. REQUEST_CHANGES → Lead が send_input で Worker に修正指示し、wait_agent で再応答を待つ → Worker が amend
  4. 修正後、再レビュー(MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3 回まで)
  5. APPROVE → Lead が trunk(デフォルトブランチ)に cherry-pick → Plans.md を cc:完了 [{hash}] に更新

完了報告フォーマット

タスク完了時(cc:完了 + commit 後)に自動出力される視覚的サマリ。 非専門家にも変更内容と影響が伝わることを目的とする。

テンプレート

┌─────────────────────────────────────────────┐
│  ✓ Task {N} 完了: {タスク名}                    │
├─────────────────────────────────────────────┤
│                                              │
│  ■ 何をしたか                                 │
│    • {変更内容 1}                              │
│    • {変更内容 2}                              │
│                                              │
│  ■ 何が変わるか                                │
│    Before: {旧動作}                            │
│    After:  {新動作}                            │
│                                              │
│  ■ 変更ファイル ({N} files)                    │
│    {ファイルパス 1}                             │
│    {ファイルパス 2}                             │
│                                              │
│  ■ 残りの課題                                  │
│    • Task {X} ({status}): {内容}  ← Plans.md  │
│    • Task {Y} ({status}): {内容}  ← Plans.md  │
│    (Plans.md に {M} 件の未完了タスクあり)       │
│                                              │
│  commit: {hash} | review: {APPROVE}           │
└─────────────────────────────────────────────┘

生成ルール

  1. 何をしたか: git diff --stat HEAD~1 と commit message から自動抽出。技術用語は最小限にし、動詞で始める
  2. 何が変わるか: タスクの「内容」と「DoD」から Before/After を推論。ユーザー体験の変化を重視
  3. 変更ファイル: git diff --name-only HEAD~1 から取得。5 ファイル超は省略して件数表示
  4. 残りの課題: Plans.md の cc:TODO / cc:WIP タスクを一覧表示。Plans.md に記載済みかどうかを明示
  5. review: レビュー結果(APPROVE / REQUEST_CHANGES → APPROVE)を表示

Parallel モードでの報告

  • 1 タスク--parallel 強制時): Solo テンプレートを使用
  • 複数タスク: Breezing 集約テンプレートを使用(下記参照)

Breezing モードでの報告

全タスク完了後にまとめて出力。各タスクは簡略版(何をしたか + commit hash のみ)で一覧し、 最後に全体サマリ(合計変更ファイル数 + 残り課題)を出力する:

┌─────────────────────────────────────────────┐
│  ✓ Breezing 完了: {N}/{M} タスク             │
├─────────────────────────────────────────────┤
│                                              │
│  1. ✓ {タスク名 1}            [{hash1}]      │
│  2. ✓ {タスク名 2}            [{hash2}]      │
│  3. ✓ {タスク名 3}            [{hash3}]      │
│                                              │
│  ■ 全体の変更                                 │
│    {N} files changed, {A} insertions(+),     │
│    {D} deletions(-)                          │
│                                              │
│  ■ 残りの課題                                  │
│    Plans.md に {K} 件の未完了タスクあり         │
│    • Task {X}: {内容}                         │
│                                              │
└─────────────────────────────────────────────┘

関連スキル

  • harness-plan — 実行するタスクを計画する
  • harness-sync — 実装と Plans.md を同期する
  • harness-review — 実装のレビュー
  • harness-release — バージョンバンプ・リリース
基于agent-browser CLI的浏览器自动化工具,支持页面导航、表单填写、截图及UI调试。核心流程为获取AI快照后通过引用操作元素。适用于自动化测试与网页交互,不适用于链接分享或图片编辑。
页面打开与URL确认 点击与表单输入操作 UI界面检查与测试 截取屏幕快照
skills/agent-browser/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill agent-browser -g -y
SKILL.md
Frontmatter
{
    "name": "agent-browser",
    "context": "fork",
    "description": "Browser automation through the repo agent-browser CLI. Explicit helper for navigation, forms, screenshots, scraping, and web-app checks. Prefer Browser Use or Playwright when available. Do NOT load for: sharing URLs, embedding links, or editing screenshot files.",
    "allowed-tools": [
        "Bash",
        "Read"
    ],
    "argument-hint": "[url] [--headless]",
    "description-en": "Browser automation through the repo agent-browser CLI. Explicit helper for navigation, forms, screenshots, scraping, and web-app checks. Prefer Browser Use or Playwright when available. Do NOT load for: sharing URLs, embedding links, or editing screenshot files.",
    "description-ja": "repo の agent-browser CLI でブラウザ操作を行う明示補助スキル。ページ遷移、フォーム、スクショ、スクレイピング、Webアプリ確認向け。利用可能なら Browser Use \/ Playwright を優先。URL共有、リンク埋め込み、スクショ画像編集には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Agent Browser Skill

ブラウザ自動化を行うスキル。agent-browser CLI を使用して、UI デバッグ・検証・自動操作を実行します。


トリガーフレーズ

このスキルは以下のフレーズで自動起動します:

  • 「ページを開いて」「URLを確認して」
  • 「クリックして」「入力して」「フォームに」
  • 「スクリーンショットを撮って」
  • 「UIを確認して」「画面をテストして」
  • "open this page", "click on", "fill the form", "screenshot"

機能詳細

機能 詳細
ブラウザ自動化 See references/browser-automation.md
AI スナップショットワークフロー See references/ai-snapshot-workflow.md

実行手順

Step 0: agent-browser の確認

# インストール確認
which agent-browser

# 未インストールの場合
npm install -g agent-browser
agent-browser install

Step 1: ユーザーのリクエストを分類

リクエストタイプ 対応アクション
URL を開く agent-browser open <url>
要素をクリック スナップショット → agent-browser click @ref
フォーム入力 スナップショット → agent-browser fill @ref "text"
状態確認 agent-browser snapshot -i -c
スクリーンショット agent-browser screenshot <path>
デバッグ agent-browser --headed open <url>

Step 2: AI スナップショットワークフロー(推奨)

ほとんどの操作で、まずスナップショットを取得してから要素参照で操作します:

# 1. ページを開く
agent-browser open https://example.com

# 2. スナップショット取得(AI 向け、インタラクティブ要素のみ)
agent-browser snapshot -i -c

# 出力例:
# - link "Home" [ref=e1]
# - button "Login" [ref=e2]
# - input "Email" [ref=e3]
# - input "Password" [ref=e4]
# - button "Submit" [ref=e5]

# 3. 要素参照で操作
agent-browser click @e2           # Login ボタンをクリック
agent-browser fill @e3 "user@example.com"
agent-browser fill @e4 "password123"
agent-browser click @e5           # Submit

Step 3: 結果の確認

# 現在の状態をスナップショットで確認
agent-browser snapshot -i -c

# または URL を確認
agent-browser get url

# スクリーンショットを取得
agent-browser screenshot result.png

クイックリファレンス

基本操作

コマンド 説明
open <url> URL を開く
snapshot -i -c AI 向けスナップショット
click @e1 要素をクリック
fill @e1 "text" フォームに入力
type @e1 "text" テキストを入力
press Enter キーを押す
screenshot [path] スクリーンショット
close ブラウザを閉じる

ナビゲーション

コマンド 説明
back 戻る
forward 進む
reload リロード

情報取得

コマンド 説明
get text @e1 テキスト取得
get html @e1 HTML 取得
get url 現在の URL
get title ページタイトル

待機

コマンド 説明
wait @e1 要素を待機
wait 1000 1秒待機

デバッグ

コマンド 説明
--headed ブラウザを表示
console コンソールログ
errors ページエラー
highlight @e1 要素をハイライト

セッション管理

複数のタブ/セッションを並列管理:

# セッションを指定
agent-browser --session admin open https://admin.example.com
agent-browser --session user open https://example.com

# セッション一覧
agent-browser session list

# 特定セッションで操作
agent-browser --session admin snapshot -i -c

MCP ブラウザツールとの使い分け

ツール 推奨度 用途
agent-browser ★★★ 第一選択。AI 向けスナップショットが強力
chrome-devtools MCP ★★☆ Chrome が既に開いている場合
playwright MCP ★★☆ 複雑な E2E テスト

原則: まず agent-browser を試し、うまくいかない場合のみ MCP ツールを使用。


注意事項

  • agent-browser はヘッドレスモードがデフォルト
  • --headed オプションでブラウザを表示可能
  • セッションは明示的に close するまで維持される
  • 認証が必要なサイトはセッションを活用
专用于实现基于Clerk、Supabase Auth或Stripe的认证与支付功能。通过安全质量门禁和检查清单,确保密码哈希、会话管理及支付数据安全性,防止信息泄露和篡改,不适用于UI或数据库设计。
用户请求实现登录、注册等认证逻辑 用户请求集成Stripe等第三方支付网关
skills/auth/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill auth -g -y
SKILL.md
Frontmatter
{
    "name": "auth",
    "description": "Explicit helper for authentication and payment implementation with Clerk, Supabase Auth, or Stripe. Do NOT load for: general UI work, database design, or non-auth features.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "description-en": "Explicit helper for authentication and payment implementation with Clerk, Supabase Auth, or Stripe. Do NOT load for: general UI work, database design, or non-auth features.",
    "description-ja": "Clerk、Supabase Auth、Stripe を使う認証・決済実装の明示補助スキル。一般的なUI作業、データベース設計、認証以外の機能には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Auth Skills

認証と決済機能の実装を担当するスキル群です。

機能詳細

機能 詳細
認証機能 See references/authentication.md
決済機能 See references/payments.md

実行手順

  1. 品質判定ゲート(Step 0)
  2. ユーザーのリクエストを分類(認証 or 決済)
  3. 上記の「機能詳細」から適切な参照ファイルを読む
  4. その内容に従って実装

Step 0: 品質判定ゲート(セキュリティチェックリスト)

認証・決済機能は常にセキュリティリスクが高いため、作業開始前に必ず以下を表示:

🔐 セキュリティチェックリスト

この作業はセキュリティ上重要です。以下を確認してください:

### 認証関連
- [ ] パスワードはハッシュ化(bcrypt/argon2)
- [ ] セッション管理は安全か(HTTPOnly Cookie)
- [ ] CSRF 対策は実装されているか
- [ ] レート制限(ブルートフォース対策)

### 決済関連
- [ ] 機密情報(カード番号等)をサーバーに保存しない
- [ ] Stripe/決済プロバイダの SDK を正しく使用
- [ ] Webhook の署名検証
- [ ] 金額改ざん防止(サーバー側で金額を確定)

### 共通
- [ ] エラーメッセージが詳細すぎないか(情報漏洩防止)
- [ ] ログに機密情報を出力していないか

セキュリティ重要度表示

⚠️ 注意レベル: 🔴 高

この機能は以下のリスクがあります:
- 認証情報の漏洩
- 不正アクセス
- 決済の不正操作

専門家によるレビューを推奨します。

VibeCoder 向け

🔐 安全にログイン・決済機能を作るために

1. **パスワードは「ハッシュ化」する**
   - 元のパスワードを復元できない形で保存
   - 万が一データが漏れても安全

2. **カード情報はサーバーに保存しない**
   - Stripe などの専用サービスに任せる
   - 自分のサーバーには一切保存しない

3. **エラーメッセージは曖昧に**
   - 「パスワードが違います」ではなく「認証に失敗しました」
   - 悪意ある人にヒントを与えない
Breezing是团队执行模式,作为harness-work的别名。支持通过CLI或自然语言(如composer/cursor)触发任务执行、代码审查及并行处理。遵循极简UX规范,启动时输出简短计划,禁止冗长解释,旨在高效协同完成多步骤开发任务。
需要以团队模式执行代码实现或审查任务 用户输入 /breezing 相关命令或提及 composer/cursor backend 需要将任务委托给特定后端(如Codex或Cursor)进行自动化处理
skills/breezing/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill breezing -g -y
SKILL.md
Frontmatter
{
    "base": "harness-work",
    "kind": "workflow",
    "name": "breezing",
    "pair": "harness-review",
    "role": "orchestrator",
    "owner": "harness-core",
    "shape": "wrap",
    "since": "2026-05-05",
    "purpose": "Wrap harness-work with team execution orchestration",
    "trigger": "breezing, team execution, do everything, composer, composer 2.5, composer mode, コンポーザー",
    "description": "Team execution mode — backward-compatible alias for harness-work with team orchestration. Composer\/composer 2.5 maps to the cursor backend.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Grep",
        "Glob",
        "Task",
        "WebSearch",
        "Monitor"
    ],
    "argument-hint": "[all|N-M|--codex|--cursor|--reviewer-only|--parallel N|--no-commit|--no-discuss|--auto-mode]",
    "description-en": "Team execution mode — backward-compatible alias for harness-work with team orchestration. Composer\/composer 2.5 maps to the cursor backend.",
    "description-ja": "チーム実行モード — harness-work のチーム協調エイリアス。breezing, チーム実行, 全部やって, composer, コンポーザー, composer 2.5 でトリガー。",
    "user-invocable": true
}

Breezing — Team Execution Mode

後方互換エイリアス: harness-work をチーム実行モードで動かします。

Narration Rules (UX Contract)

敵は 冗長さ であって進捗報告ではない。起動時に実行計画を簡潔に明示してから実行を開始する。見やすい進捗報告は歓迎する。冗長な繰り返し・中身のない前置きだけを禁ずる。

起動時に必ず出すもの (banner + plan、合計 5 行以内)

最初の応答で、何を・どの順で進めるかを示してから tool 実行に入る:

🚀 cursor / composer-2.5-fast / feat/hah-11-golden-rule-lint / Reviewer
これから:
1. backend/model を resolve
2. composer に diff レビューを委譲 (read-only)
3. verdict を 3-5 行で要約 → Plans.md 更新

banner 1 行 (🚀 <backend> / <model> / <branch> / <task>) + 計画 2-4 行。1 秒以内に出し、即 Step 1 へ。

進捗報告は出してよい (見やすい範囲で)

  • 各ステップの開始・完了を 1 行ステータスで (✓ backend=cursor / model=composer-2.5-fast)
  • 判断に必要な中間結果 (pre-check の要点、resolved model、検出した branch 等)
  • なぜこの分岐を取るかの理由を 1 行で (例: 「Reviewer のみ委譲: Worker は別系統で完了済み」)

禁止 (= 冗長さ)

  • 同じ事実の 2 回言い換え: 一度言ったことを後段で再説明しない
  • 中身のない前置き: 「使い方を確認します」だけの行など、tool call で自明な宣言
  • 3 行以上の経緯振り返り: 結論を引き伸ばす長い前置き。経緯が必要なら 1 行に圧縮
  • 起動シーケンス中の ★ Insight ブロック: Insight は最終 report で 1 回のみ

違反例 (冗長):

× 「composer 2.5 使うモード」= cursor backend で Composer に委託、ですね(と解釈の言い換え)
× 「前回 Reviewer が止まったので別系統に逃がすのは理にかなっています」(3 行以上の振り返り)
× 「使い方を確認します」 → bash → 「呼べます」(中身のない前置き + 同じ事実の 2 回言い換え)

正常例 (簡潔 + 計画明示):

🚀 cursor / composer-2.5-fast / feat/hah-11-golden-rule-lint / Reviewer
これから: backend resolve → composer に diff レビュー委譲 (read-only) → verdict 要約

Quick Reference

/breezing                       # スコープを聞く(claude backend)
/breezing all                   # 全タスク完走(claude backend)
/breezing 3-6                   # タスク3〜6を完走
/breezing --codex all           # Codex CLI で全タスク委託
/breezing --cursor              # cursor backend lean path (--no-discuss all 既定)
/breezing --cursor --reviewer-only  # Reviewer のみ cursor に委譲(Worker は別系統で既完了)
/breezing composer 2.5 all      # 自然言語 trigger: cursor backend として扱う
/breezing --parallel 2 all      # 2並列で全タスク完走
/breezing --no-discuss all      # 計画議論スキップで全タスク完走
/breezing --auto-mode all       # 互換な親セッションで Auto Mode rollout を試す

Options

Option Description Default
all 全未完了タスクを対象 -
N or N-M タスク番号/範囲指定 -
--codex Codex CLI で実装委託 false
--cursor cursor backend lean path (HARNESS_IMPL_BACKEND=cursor 相当)。Worker 介在 / self_review / sprint-contract 3 段チェーン / Phase 0 を skip し、起動 → 委譲を 3 秒以内に開始する false
--reviewer-only Reviewer のみ独立系統に委譲(Worker 実装は既完了前提)。--cursor と併用で Composer に逃がす false
--parallel N Implementer 並列数 auto
--no-commit 自動コミット抑制 false
--no-discuss 計画議論スキップ --cursor で true 既定
--auto-mode Harness 側の Auto Mode rollout を明示。CC 2.1.111 で不要になった --enable-auto-mode とは別物 false

Natural Language Backend Triggers

composer / コンポーザー / Composer で / composer 2.5 / composer モード は、正式に cursor backend の trigger として扱う。 これは --cursor 相当の intent であり、Lead は resolve-impl-backend.sh を経由して backend を確定する。 解決時は明示 override として --backend cursor を渡し、env / project / user file / default より優先させる。

入力例 解釈 実行経路
composer 2.5 で cursor backend Lead → cursor-companion.sh task --write --workspace <wt>
コンポーザーで全部 cursor backend Lead → cursor-companion.sh task --write --workspace <wt>
composer モード cursor backend Lead → cursor-companion.sh task --write --workspace <wt>

composer は Claude Worker の内側に spawn する追加 agent ではない。 非 claude backend のトポロジーに従い、Lead が Worker agent を挟まずに cursor-companion.sh を直接呼ぶ。

CC 2.1.111 note: Opus 4.7 では literal に /effort xhigh が使える。 built-in /ultrareview は明示要求時だけ追加で使い、既定レビューは置き換えない。

長時間セッション推奨 (CC 2.1.108+): セッション長が 30 分を超える見込みの場合、plugin bundle root 解決後に bash "${HARNESS_PLUGIN_ROOT}/scripts/enable-1h-cache.sh" を実行して 1 時間 prompt cache を opt-in すること。 このスクリプトは env.localexport ENABLE_PROMPT_CACHING_1H=1 を追記する (冪等)。 5 分 TTL の既定キャッシュでは breezing の 1 時間超セッションで cache miss が累積し input token コストが最大 12 倍になりうるため、長時間 team 実行では明示的に opt-in する。 Codex CLI 子プロセス (scripts/codex-companion.sh task --write 等) は通常 env 継承で ENABLE_PROMPT_CACHING_1H を読むが、CLAUDE_CODE_SUBPROCESS_ENV_SCRUB=1 が有効な場合は 明示的に export を維持する shell wrapper が必要。詳細は docs/long-running-harness.md を参照。

Execution

このスキルは harness-work に委譲します。 以下の設定で harness-work を実行してください:

  1. 引数をそのまま harness-work に渡す
  2. チーム実行モードを強制 — Lead → Worker spawn → Reviewer spawn の三者分離
  3. Lead は delegate 専念 — コードを直接書かない
  4. Auto Mode は opt-in 扱い--auto-mode は互換な親セッションでの rollout 用フラグとして受け付ける
  5. Advisor は必要時のみ — Worker が advisor-request.v1 を返した時だけ Lead が advisor を呼ぶ

harness-work との違い

特徴 harness-work breezing (このスキル)
並列手段 必要数に応じた自動分割 Lead/Worker/Reviewer の役割分離
Lead の役割 調整+実装 delegate (調整専念)
レビュー Lead 自己レビュー 独立 Reviewer
デフォルトスコープ 次のタスク 全部

Team Composition

Role Agent Type Mode 責務
Lead (self) - 調整・指揮・タスク分配
Worker ×N claude-code-harness:worker bypassPermissions(現行) / Auto Mode(follow-up)* 実装
Advisor claude-code-harness:advisor 読み取り専用 方針助言 (PLAN / CORRECTION / STOP)
Reviewer claude-code-harness:reviewer bypassPermissions(現行) / Auto Mode(follow-up)* 独立レビュー

*親セッションまたは frontmatter が bypassPermissions の場合はそちらが優先される。配布テンプレートは現在も bypassPermissions を使うため、Auto Mode は follow-up の rollout 対象であり、既定挙動ではない。

Codex Mode (--codex)

公式プラグイン codex-plugin-cc 経由で Codex CLI にすべての実装を委託するモード:

# タスク委託(書き込み可能)
bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write "タスク内容"

# stdin 経由(大きなプロンプト向け)
CODEX_PROMPT=$(mktemp /tmp/codex-prompt-XXXXXX.md)
# タスク内容を書き出し
cat "$CODEX_PROMPT" | bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write
rm -f "$CODEX_PROMPT"

Execution Backend (persistent)

HARNESS_IMPL_BACKEND=cursorbash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" cursor で設定)にすると、 per-run フラグなしで cursor が既定の worker バックエンドになる。review / advisor ロールは Opus に固定したまま。 バックエンド選択の正本(precedence、role-scope、self_review スキップ、cursor banner)は harness-work の「Execution Backend Selection(実装バックエンド選択)」を参照する。

下の Cursor Backend Fast Path は per-run フラグ (--cursor) で同等の lean path を有効化する別軸であり、本節と併読する。

Cursor Backend Fast Path (--cursor / lean mode)

--cursor 指定時、または env HARNESS_IMPL_BACKEND=cursor の時に有効。Worker 層を介在させず Lead が直接 cursor-companion.sh を呼ぶ(Phase 85 SSOT、.claude/rules/cursor-cli-only.md Topology 節)。

削除される step(claude backend と比べて節約)

Step 削除理由 節約秒数
claude-code-harness:worker agent spawn cursor backend は Worker 介在なし 5-30s
self_review 5 件ゲート worker-report.v1 が cursor では生成されないため不要 10-60s × retry
sprint-contract 3 段チェーン (generate→enrich→ensure) Worker 契約不要なら contract 不要 2-5s × N
Phase 0 Q1-Q3 interactive --no-discuss all 既定 (Plans/Depends は Lead が直読み) 15-30s
Effort スコアリング cursor backend では ultrathink 注入不要 0.5-1s × N
Plans.md re-parse (per task) session 内 cache (mtime+hash で短絡) 3-8s

合計 baseline 15-35s → target 3-7s で 1 タスク目の cursor 委譲開始までを短縮。

既定 flow(cursor backend)

  1. banner + 実行計画 (🚀 cursor / <model> / <branch> / <task> + これから進める 2-4 step、合計 5 行以内、1 秒以内)
  2. 1 bash で並列 pre-check: git branch --show-current + cat VERSION + Plans.md tail + cursor-agent --version
  3. 1 bash で resolve: bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" + bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model
  4. 即 委譲: bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task --write --workspace <wt> "<task>"
  5. cursor 出力を Lead が diff レビュー → cherry-pick → Plans.md cc:done [hash] 更新

Reviewer-only mode (--cursor --reviewer-only) — read = lean

Worker 実装は既完了(別系統 = claude / Codex で済んだ)、Reviewer のみ独立系統 (Composer) で回したい時の lean path。read-only 委譲なので worktree 不要・cherry-pick 不要・Lead diff review 不要:

  1. banner + 計画: 🚀 cursor / composer-2.5-fast / review + 「これから: diff レビューを composer に委譲 → verdict 要約」
  2. bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task "diff レビュー: <base_ref>..HEAD"--write--workspace も付けない
    • companion は --write 未指定で default --mode ask (hard read-only stop) になる (cursor-companion.sh の workspace guard は --write 時のみ発火)
    • cursor 側はファイル書込・コマンド実行が disabled、worktree 隔離不要
  3. cursor 出力 (REQUEST_CHANGES / APPROVE 相当) を Lead が解釈し、dual_review.cursor_verdict に advisory として格納
  4. primary verdict は Opus reviewer から取る。cursor 単独では APPROVE を確定しない (harness-work/SKILL.md「実装したバックエンドが自分の出力をレビューしてはならない」不変ルールと整合)
  5. APPROVE なら Plans.md cc:done [hash] を Lead が更新

read mode で省略できるもの: 専用 .git worktree / Lead diff review / cherry-pick / worker-report.v1 / self_review 5 件。 read mode でも保持必要: .cursorignore / egress allowlist (*.cursor.sh) / permissions.json (best-effort)。詳細は .claude/rules/cursor-cli-only.md 「Read mode delegation (lean path)」節を参照。

用途:

  • Anthropic 側 server rate limit で Reviewer が止まった時の逃げ道
  • Worker 完了済みで Reviewer だけ別系統に分散
  • Codex review が auth 失敗した時の manual fallback

Cursor adapter support claim

Cursor は依然 internal-compatible tier(Phase 87 / PR #174 で promotion)。supported public claim は CI-gated workflow smoke 充足まで継続 gate。--cursor lean path は support tier を昇格させない。

Bootstrap route: .cursor/AGENTS.md + .cursor-plugin/plugin.json

Verification:

bash tests/test-cursor-adapter-candidate.sh
bash tests/test-support-claim-wording.sh

Flow Summary

breezing [scope] [--codex] [--parallel N] [--no-discuss] [--auto-mode]
    │
    ↓ Load harness-work with team mode
    │
Phase 0: Planning Discussion (--no-discuss でスキップ)
Phase A: Pre-delegate(チーム初期化)
Phase B: Delegate(Worker 実装 + 必要時 Advisor + Reviewer レビュー)
Phase C: Post-delegate(統合検証 + Plans.md 更新 + commit)

Advisor Protocol

Worker は generic な subagent を増やさない。 迷った時は構造化 JSON で相談要求だけ返し、Lead が advisor を呼ぶ。

  1. Worker → advisor-request.v1
  2. Lead → Advisor
  3. Advisor → advisor-response.v1
  4. Lead → 同じ Worker に advice を返して続行
  5. Reviewer は最後の成果物だけを見る

相談条件は loop / solo とそろえる。

  • 高リスク task(needs-spike / security-sensitive / state-migration)の初回実行前
  • 同じ原因の失敗が 2 回続いた後
  • plateau により PIVOT_REQUIRED を返す直前
  • 同じ trigger_hash は 1 回だけ。task ごとの相談回数は最大 3 回

Progress Feed(Phase B 中の進捗通知)

Lead は Worker のタスク完了ごとに、以下のフォーマットで進捗を出力する:

📊 Progress: Task {completed}/{total} 完了 — "{task_subject}"

出力例:

📊 Progress: Task 1/5 完了 — "harness-work に失敗再チケット化を追加"
📊 Progress: Task 2/5 完了 — "harness-sync に --snapshot を追加"
📊 Progress: Task 3/5 完了 — "breezing にプログレスフィードを追加"

設計意図: breezing は長時間実行になることが多い。 ユーザーがターミナルをチラ見した時に「今どこまで進んでいるか」が一目で分かるようにする。 task-completed.sh フックが systemMessage で同等の情報を出力するため、Lead の出力と補完し合う。

Silence Policy(長時間実行の通知整理)

Codex 0.123.0 の realtime handoff では、background agent が transcript delta を受け取り、必要ない時は明示的に沈黙できる。 Breezing の progress feed はこの前提に合わせ、通知を「作業の節目」に絞る。

報告するもの:

  • task 完了、blocked、validation failure、review REQUEST_CHANGES
  • Advisor の PLAN / CORRECTION / STOP
  • Reviewer の APPROVE / REQUEST_CHANGES
  • advisor / reviewer drift、plateau、contract readiness failure
  • user が明示的に status を求めた時の要約

沈黙してよいもの:

  • transcript delta を受け取っただけで、判定や status が変わっていない時
  • tool stdout の細かな増分で、log に残っていれば十分な時
  • 並列 Worker の待機中 heartbeat

頻度は「task 完了ごとに 1 回」を基本にする。 heartbeat を増やして安心感を作るのではなく、status / log / drift 検知に責務を分ける。 ただし Advisor request 未応答、Reviewer result 未到着、plateau 直前の警告は silence 対象にしない。

Monitor ツール活用ガイド (CC 2.1.98+)

長時間実行コマンドを監視する時は、ポーリング (Read で定期的にファイル末尾を読む) ではなく Monitor ツール を使用する。Monitor はバックグラウンドプロセスの stdout 各行を逐次通知として Lead に届けるため、polling より低レイテンシかつ低トークン消費で状況を把握できる。

適用例:

  • go test ./... -v の実行中進捗監視
  • gh run watch による GitHub Actions 進捗追跡
  • npm run build --watch / vite build --watch のビルドエラー即時検知
  • codex-companion.sh status <job-id> での Codex job 完了検知
  • docker-compose logs -f / kubectl logs -f のデプロイログ追跡

使い分けの判断基準:

対象 Monitor 使う? 理由
Agent (Worker / Reviewer) の完了監視 不要 Agent 層が自前で完了通知する
run_in_background: true で投げた shell process 推奨 stdout 各行を逐次通知で拾える
短時間の一発コマンド (go test 1 回実行) 不要 通常の Bash tool 実行で十分
長時間 tail / watch / stream 系コマンド 推奨 polling より効率的

Breezing Lead での典型パターン:

Lead:
  Task(Worker1, ...)           ← Agent 完了待ち (Monitor 不要)
  Task(Worker2, ...)           ← 同上
  Bash(run_in_background, "gh run watch --exit-status")
  Monitor(tailCommand="...")   ← CI 失敗を即時検知 → Worker に修正指示

これにより Lead が「Worker 完了 → CI 失敗検知 → 修正指示」の反応速度を上げられる。

Review Policy(全モード統一)

Breezing モードでもレビューは Codex exec 優先 → 内部 Reviewer フォールバック の統一ポリシーに従う。 詳細は harness-work の「レビューループ」セクションを参照。

  • Worker が worktree 内で実装・commit → worker-report.v1 (self_review 5 件) を Lead に返却
  • self_review ゲート (Reviewer spawn 前): Lead が self_review[].verifiedevidence を機械検証。1 件でも verified:false or evidence:"" なら Reviewer を spawn せず Worker に自動差し戻し(同一セッション内 最大 2 回、3 回目で escalate)
  • Lead が Codex exec でレビュー(120s タイムアウト、フォールバック: Reviewer agent)
  • REQUEST_CHANGES → Lead が SendMessage で Worker に修正指示、Worker が amend(最大 MAX_REVIEWS 回。MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
  • APPROVE → Lead が main に cherry-pick → Plans.md を cc:完了 [{hash}] に更新

完了報告(Phase C — Lead が生成)

全タスク完了後、Lead が以下の手順でリッチ完了報告を生成する:

  1. git log --oneline {base_ref}..HEAD で全 cherry-pick コミットを収集
  2. git diff --stat {base_ref}..HEAD で全体の変更規模を取得
  3. Plans.md の cc:TODO / cc:WIP 残タスクを抽出
  4. harness-work の「完了報告フォーマット」の Breezing テンプレートに従い出力

生成者は Lead。Worker や hook ではない。Lead が Phase C で git + Plans.md を読んで生成する。

Phase 0: Planning Discussion(構造化 3 問チェック)

全タスク実行前に、以下の 3 問で計画の健全性を確認する。 --no-discuss 指定時は全スキップ。

Q1. スコープ確認:

「{{N}} 件のタスクを実行します。スコープは適切ですか?」

多すぎる場合は優先度(Required > Recommended > Optional)で絞り込みを提案。

Q2. 依存関係確認(Plans.md に Depends カラムがある場合のみ):

「タスク {{X}} は {{Y}} に依存しています。実行順序は合っていますか?」

Depends カラムを読み取り、依存チェーンを表示。循環依存があればエラー。

Q3. リスクフラグ[needs-spike] タスクがある場合のみ):

「タスク {{Z}} は [needs-spike] です。先に spike しますか?」

spike 未完了の [needs-spike] タスクがある場合、spike を先行実行するか確認。

3 問とも問題なければ、Phase A に進む(合計 30 秒で完了する設計)。

Universal Violations Injection(セッション内 Worker 間の学習伝播)

同一 /breezing 起動内で蓄積された Reviewer の universal gotchas を次 Worker の briefing 冒頭に自動注入する。同一セッション内のみ有効(セッション終了で破棄、session-memory には書かない)。

# Phase A 開始時に Lead プロセスの in-memory 配列を初期化
universal_violations = []  # List[str] — このセッション内で蓄積

# Phase B で Worker を spawn する直前、briefing 冒頭に注入:
def build_worker_briefing(task, contract_path):
    header = ""
    if universal_violations:
        header = (
            "🚨 同一セッションで既に検出された universal 違反(再発禁止):\n"
            + "\n".join(f"- {v}" for v in universal_violations)
            + "\n\n"
        )
    return header + f"タスク: {task.内容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\nmode: breezing"

# Reviewer が review-result.v1 を返した後、Lead が scope="universal" のみ抽出して累積:
for update in reviewer_result.memory_updates:
    # 後方互換: 文字列は task-specific 扱い → 無視
    if isinstance(update, str):
        continue
    if update.get("scope") == "universal":
        universal_violations.append(update["text"])

方針: 過剰設計回避のため、session-memorydecisions.md への永続化は行わない。Lead プロセスの in-memory 配列に保持するだけで、/breezing セッション終了時に破棄する(issue #87 本文の方針)。

依存グラフに基づくタスク割り当て

Plans.md に Depends カラムがある場合(v2 フォーマット)、依存グラフに従ってタスクを実行する:

  1. Depends が - のタスクを先に実行。独立タスクが複数あれば並列 spawn 可能
  2. 各 Worker 完了後、Lead がレビュー→cherry-pick(harness-work Phase B 参照)
  3. 依存元タスクが main に cherry-pick されたら、そのタスクに依存していたタスクを次に実行
  4. 全タスクが完了するまで繰り返す

注意: 各タスクの「Worker 完了→レビュー→cherry-pick」は逐次処理。 並列化できるのは独立タスク(Depends が -)の Worker spawn 部分のみ。

Codex Native Orchestration

Codex では native subagent を使う。 代表的な制御面は spawn_agent, wait, send_input, resume_agent, close_agent

Claude Code vs Codex の通信 API(SSOT: team-composition.md の API マッピング表):

  • Claude Code: SendMessage(to: agentId, message: "...") で Worker に修正指示
  • Codex: resume_agent(agent_id) で Worker を再開 → send_input(agent_id, "...") で指示送信

harness-work の擬似コードは Claude Code 構文で記述。Codex 環境では上記に読み替えること。

Related Skills

  • harness-work — 単一タスクからチーム実行まで(本体)
  • harness-sync — 進捗同期
  • harness-review — コードレビュー(breezing 内で自動起動)
用于双Agent工作流,将头脑风暴内容发送至Cursor PM进行可行性验证。提取目标与技术选型,生成验证请求并更新Plans.md,引导人工复制指令至Cursor执行,最后接收回传结果以推进实现。
Cursor PM交接 双Agent计划验证 头脑风暴评审
skills/cc-cursor-cc/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cc-cursor-cc -g -y
SKILL.md
Frontmatter
{
    "name": "cc-cursor-cc",
    "description": "Validate brainstorm with Cursor PM, update Plans.md, handoff back. Cursor↔CC 2-agent workflow. Triggers: Cursor PM handoff, 2-agent plan validation, brainstorm review. Skip for: implementation, single-agent.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "description-en": "Validate brainstorm with Cursor PM, update Plans.md, handoff back. Cursor↔CC 2-agent workflow. Triggers: Cursor PM handoff, 2-agent plan validation, brainstorm review. Skip for: implementation, single-agent.",
    "description-ja": "Cursor PM でアイデアを検証し Plans.md を更新してバトンタッチ。Cursor ↔ Claude Code 2-Agent ワークフロー対応。Use when user mentions Cursor PM handoff, 2-agent plan validation, CC-Cursor round trip, or brainstorm review. Do NOT load for: implementation work, single-agent tasks, or direct coding.",
    "user-invocable": false,
    "disable-model-invocation": true
}

CC-Cursor-CC Skill (Plan Validation Round Trip)

Supports the flow of sending brainstormed content from Claude Code to Cursor (PM) for feasibility validation.

Prerequisites

This skill assumes 2-agent operation.

Role Agent Description
PM Cursor Validate plans, update Plans.md
Impl Claude Code Brainstorming, implementation

Execution Flow

Step 1: Extract Brainstorming Context

Extract from recent conversation:

  1. Goal (feature/purpose)
  2. Technology choices
  3. Decisions made
  4. Undecided items
  5. Concerns

Step 2: Add Provisional Tasks to Plans.md

## 🟠 Under Validation: {{Project}} `pm:awaiting-validation`

### Provisional Tasks (To Validate)
- [ ] {{task1}} `awaiting-validation`
- [ ] {{task2}} `awaiting-validation`

### Undecided Items
- {{item1}} → **Requesting PM decision**

Step 3: Generate Validation Request for Cursor

Generate text to copy-paste to Cursor:

## 📋 Plan Validation Request

**Goal**: {{summary}}

**Provisional tasks**:
1. {{task1}}
2. {{task2}}

### ✅ Requesting Cursor (PM) to:
1. Validate feasibility
2. Break down tasks
3. Decide undecided items
4. Update Plans.md (awaiting → cc:TODO)

Step 4: Guide Next Action

  1. Copy & paste request to Cursor
  2. Run /plan-with-cc in Cursor
  3. Cursor updates Plans.md
  4. Cursor runs /handoff-to-claude
  5. Copy & paste back to Claude Code

Overall Flow

Claude Code (Brainstorm)
    ↓ /cc-cursor-cc
Cursor (PM validates & breaks down)
    ↓ /handoff-to-claude
Claude Code (/work implements)
用于审查Claude/Codex更新PR,防止Feature Table仅记录文档而无实际实现。通过A/B/C/P分类判定变更性质:A为已实现,B为仅文档需整改,C为自动继承。确保每项新增功能均有对应代码、测试或明确计划,保障集成质量。
审查Claude Code或Codex上游更新PR时 检测到docs/CLAUDE-feature-table.md有新行增加时 /harness-review命令判定为上游更新整合PR时 审查claude-codex-upstream-update技能更新时
skills/cc-update-review/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cc-update-review -g -y
SKILL.md
Frontmatter
{
    "name": "cc-update-review",
    "description": "Quality guardrail for Claude\/Codex update integration. Detects doc-only Feature Table additions and requires implementation or explicit planning. Internal use only.",
    "allowed-tools": [
        "Read",
        "Grep",
        "Glob",
        "Bash"
    ],
    "description-en": "Quality guardrail for Claude\/Codex update integration. Detects doc-only Feature Table additions and requires implementation or explicit planning. Internal use only.",
    "description-ja": "Claude\/Codex upstream update 統合の品質ガードレール。Feature Table 追加時に「書いただけ」を検出し、実装または Plans 化を強制する。内部専用。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Claude/Codex Update Review ガードレール

Claude Code / OpenAI Codex のアップデート統合時に「Feature Table に書いただけ」を防止する品質ガードレール。 Feature Table への追加が実装・検証・明示的な将来タスク化を伴っているかを分類し、不足があれば実装案を強制出力する。

Quick Reference

以下の状況でこのスキルがトリガーされる:

  • Claude Code / Codex upstream update 統合 PR のレビュー時
  • docs/CLAUDE-feature-table.md に新行が追加された diff を検出した時
  • /harness-review が upstream update 統合 PR と判定した場合の内部呼び出し
  • claude-codex-upstream-update スキル更新のレビュー時

トリガーしない状況:

  • 通常の実装作業
  • Feature Table / upstream 追従に関係しない変更
  • セットアップ・初期化作業

差分入力の取得

このスキルは diff-aware review 専用のため、必ず以下のどちらかでレビュー対象差分を確定する。

  1. 呼び出し元の /harness-review が PR diff / changed files / Feature Table 追加行を渡す
  2. このスキル自身が read-only Bash で git status --short, git diff --name-only, git diff -- docs/CLAUDE-feature-table.md, git show --stat --name-only などを実行して確認する

Bash は read-only git inspection のみに使う。テスト実行、format、生成、network access、ファイル変更を伴うコマンドは実行しない。 diff が取得できない場合は B: 書いただけ 0 件 と推定せず、「差分未提供のため分類不能」としてレビューを止める。

前提チェック

レビュー冒頭で必ず確認する:

  • diff source が呼び出し元提供または read-only git inspection のどちらかで確定しているか
  • skills/hooks/ を編集した PR の場合、直後に /reload-plugins を実行して runtime cache を更新したか({skills,hooks}/** ガイドライン準拠)
  • upstream のバージョン別分解表があるか
  • Claude Code の一次情報 URL が anthropics/claude-code または公式 docs になっているか
  • Codex の一次情報 URL が openai/codex/releases または OpenAI 公式記事になっているか
  • B: 書いただけ が残っていないか
  • skill mirror を触る場合、skills/, codex/.codex/skills/, .agents/skills/ の差分が意図通りか

禁止する古い参照:

  • 旧 TypeScript guardrail path
  • 旧 TypeScript implementation glob
  • 旧 Codex feature-table path
  • 旧 Codex plugin directory
  • 旧 Codex state directory を現行正本として扱う記述
  • 存在しない Anthropic 側 Codex repo URL

A/B/C/P 分類

Feature Table に追加された各項目を、以下の A/B/C/P のいずれかに分類する。

(A) 実装あり

定義: Feature Table の追加に対応する hooks / settings / Go / scripts / agents / skills / tests の変更が同じ PR に含まれている。

判定条件:

  • Feature Table の行で言及されている機能に関連するファイルが変更されている
  • hooks/hooks.json, .claude-plugin/hooks.json, .claude-plugin/settings.json, go/internal/guardrail/, go/internal/hookhandler/, scripts/, agents/, skills/, tests/ のいずれかに実体差分がある
  • 対象テストまたは検証スクリプトで固定されている

例:

Feature Table 追加 対応する実装変更 判定
AskUserQuestion updatedInput Go handler + hooks wiring + upstream integration test A
sandbox.network.deniedDomains .claude-plugin/settings.json + jq test A
find -delete hardening go/internal/guardrail/ + unit test A

結果: OK。追加のアクション不要。


(B) 書いただけ

定義: Feature Table にのみ行が追加され、Harness 側の実装変更も Plans 化もない。かつ upstream 自動継承にも該当しない。

判定条件:

  • Feature Table に新行がある
  • 同じ PR 内で関連する実装 / test / skill / Plans の変更がない
  • Harness が独自の付加価値を提供すべき機能である

例:

Feature Table 追加 対応する実装変更 判定
PreCompact hook なし B
permission hardening settings / guardrail / tests の確認なし B
Codex marketplace Plans への切り出しなし B

結果: NG。PR をブロックし、実装案または Plans 化を要求する。


(C) upstream 自動継承

定義: Claude Code / Codex 本体のパフォーマンス改善・バグ修正・内部最適化等で、Harness 側の変更が不要な項目。

判定条件:

  • upstream 本体の修正であり、Harness がラップ・拡張する余地がない
  • Harness の settings / hooks / guardrail / workflow / tests に影響しない
  • Feature Table に「upstream 自動継承」または「CC 自動継承 / Codex 側自動継承」と明記されている

注意:

  • permission / sandbox / security / Bash allowlist / MCP trust boundary は安易に C にしない
  • その項目が Harness の独自 guardrail や settings に影響しないことを確認してから C にする
  • Claude Code 2.1.113 の hardening は、sandbox.network.deniedDomains, wrapper Bash deny, find -exec/-delete, macOS dangerous rm paths を確認するまで C 判定しない

例:

Feature Table 追加 理由 判定
Agent Teams permission dialog crash fix CC 本体の crash fix。Harness 側変更不要 C
Codex Guardian timeout wording Codex 側 UX 修正。Harness surface なし C

結果: OK。ただし理由を明記する。


(P) Plans 化

定義: 今回は直接実装しないが、Harness に取り込む価値があるため Plans.md に明示タスクとして残す項目。

判定条件:

  • Feature Table の付加価値列が A: 将来タスク化 または P: Plans 化 として読める
  • Plans.md に対応タスクがあり、setup / guardrails / memory / Codex workflow など実装面が明記されている
  • alpha release や大規模設計変更など、即実装しない理由が書かれている

例:

Feature Table 追加 Plans への切り出し 判定
Codex marketplace / MCP Apps Codex workflow 比較軸タスク P
Codex 0.122.0-alpha stable 化後の compare 調査タスク P

結果: OK。次回 cycle で拾える。

Upstream update PR チェックリスト

## Claude/Codex update 統合チェックリスト

### 1. 一次情報と分解表
- [ ] diff source が呼び出し元提供または read-only git inspection のどちらかで確定している
- [ ] Claude / Codex の公式 URL を確認した
- [ ] Version / Upstream item / Category / Harness surface / Action の表がある
- [ ] alpha / stable / docs-only の区別がある

### 2. Feature Table 差分
- [ ] `docs/CLAUDE-feature-table.md` の追加行を列挙した
- [ ] 各行に A / C / P のいずれかが付いている
- [ ] B が 0 件である

### 3. カテゴリ別の確認
- [ ] (A) 実装あり: 対応する実装ファイルとテストがある
- [ ] (B) 書いただけ: 0 件。残る場合は PR ブロック
- [ ] (C) 自動継承: permission / sandbox / security / workflow 影響を確認済み
- [ ] (P) Plans 化: `Plans.md` に将来タスクがある

### 4. Mirror と stale path
- [ ] `skills/` と `codex/.codex/skills/` の意図しない drift がない
- [ ] `.agents/skills/` が存在する場合、Claude/Codex 表記が壊れていない
- [ ] 旧 TypeScript guardrail path、旧 Codex plugin directory、旧 Codex feature-table path などの旧参照がない

### 5. CHANGELOG / tests
- [ ] CHANGELOG に「今まで / 今後」または相当する user-facing 説明がある
- [ ] upstream integration test または対象 unit test が追加 / 更新されている

カテゴリ B 検出時の出力フォーマット

カテゴリ B が 1 件以上検出された場合、以下のフォーマットで実装案を出力する。 このフォーマットの出力は必須であり、省略は許可されない。

## カテゴリ B 検出: 実装案

### B-{番号}. {Feature Table の項目名}

**現状**: Feature Table に記載のみ。Harness 側の実装 / 検証 / Plans 化なし。

**Harness ならではの付加価値**:
{この機能を Harness がどう活用すべきかの具体的な説明}

**実装案**:

| 対象ファイル | 変更内容 |
|------------|---------|
| `{ファイルパス}` | {具体的な変更内容} |
| `{ファイルパス}` | {具体的な変更内容} |

**ユーザー体験の改善**:
- 今まで: {現在のユーザー体験}
- 今後: {実装後のユーザー体験}

**実装の優先度**: {高 / 中 / 低}
**推定工数**: {小 / 中 / 大}

関連スキル

  • claude-codex-upstream-update - upstream 差分調査と実装 cycle
  • harness-review - コードレビュー
  • harness-work - カテゴリ B / P の実装
  • memory - 分類基準の SSOT 化
用于解决CI/CD流水线失败问题,包括构建错误、测试未通过等。执行失败分析、测试修复及原因定位,严禁跳过测试或绕过检查,支持复杂情况下的子代理协作。
用户提到CI失败、构建错误或测试不通过 请求排查流水线日志或修复CI问题
skills/ci/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill ci -g -y
SKILL.md
Frontmatter
{
    "name": "ci",
    "context": "fork",
    "description": "CI red? Call us. Pipeline fire brigade deploys. Use when user mentions CI failures, build errors, test failures, or pipeline issues. Do NOT load for: local builds, standard implementation work, reviews, or setup.",
    "allowed-tools": [
        "Read",
        "Grep",
        "Bash",
        "Task",
        "Monitor"
    ],
    "argument-hint": "[analyze|fix|run]",
    "description-en": "CI red? Call us. Pipeline fire brigade deploys. Use when user mentions CI failures, build errors, test failures, or pipeline issues. Do NOT load for: local builds, standard implementation work, reviews, or setup.",
    "description-ja": "CIが赤くなったら呼んで。パイプライン消防隊、出動します。Use when user mentions CI failures, build errors, test failures, or pipeline issues. Do NOT load for: local builds, standard implementation work, reviews, or setup.",
    "user-invocable": true
}

CI/CD Skills

CI/CD パイプラインに関する問題を解決するスキル群です。


発動条件

  • 「CIが落ちた」「GitHub Actionsが失敗」
  • 「ビルドエラー」「テストが通らない」
  • 「パイプラインを直して」

機能詳細

機能 詳細 トリガー
失敗分析 See references/analyzing-failures.md 「ログを見て」「原因を調べて」
テスト修正 See references/fixing-tests.md 「テストを直して」「修正案を出して」

実行手順

  1. テスト vs 実装判定(Step 0)
  2. ユーザーの意図を分類(分析 or 修正)
  3. 複雑度を判定(下記参照)
  4. 上記の「機能詳細」から適切な参照ファイルを読む、または ci-cd-fixer サブエージェント起動
  5. 結果を確認し、必要に応じて再実行

Step 0: テスト vs 実装判定(品質判定ゲート)

CI 失敗時、まず原因の切り分けを行う:

CI 失敗報告
    ↓
┌─────────────────────────────────────────┐
│           テスト vs 実装判定             │
├─────────────────────────────────────────┤
│  エラーの原因を分析:                    │
│  ├── 実装が間違い → 実装を修正          │
│  ├── テストが古い → ユーザーに確認      │
│  └── 環境問題 → 環境修正                │
└─────────────────────────────────────────┘

禁止事項(改ざん防止)

⚠️ CI 失敗時の禁止事項

以下の「解決策」は禁止です:

| 禁止 | 例 | 正しい対応 |
|------|-----|-----------|
| テスト skip 化 | `it.skip(...)` | 実装を修正 |
| アサーション削除 | `expect()` を消す | 期待値を確認 |
| CI チェック迂回 | `continue-on-error` | 根本原因修正 |
| lint ルール緩和 | `eslint-disable` | コードを修正 |

判断フロー

🔴 CI が失敗しています

**判断が必要です**:

1. **実装が間違い** → 実装を修正 ✅
2. **テストの期待値が古い** → ユーザーに確認を求める
3. **環境の問題** → 環境設定を修正

⚠️ テストの改ざん(skip化、アサーション削除)は禁止です

どれに該当しますか?

承認が必要な場合

テスト/設定の変更がやむを得ない場合:

## 🚨 テスト/設定変更の承認リクエスト

### 理由
[なぜこの変更が必要か]

### 変更内容
[差分]

### 代替案の検討
- [ ] 実装の修正で解決できないか確認した

ユーザーの明示的な承認を待つ

Git log 拡張フラグの活用(CC 2.1.49+)

CI 失敗時の原因コミット特定に構造化ログを活用します。

原因コミットの特定

# 構造化フォーマットでコミット分析
git log --format="%h|%s|%an|%ad" --date=short -10

# トポロジカル順序で時系列分析
git log --topo-order --oneline -20

# 変更ファイルと原因の紐付け
git log --raw --oneline -5

主な活用場面

用途 フラグ 効果
失敗原因の特定 `--format="%h %s"`
時系列での追跡 --topo-order マージ順序を考慮した追跡
変更影響の把握 --raw ファイル変更の詳細表示
マージ除外分析 --cherry-pick --no-merges 実コミットのみを抽出

出力例

🔍 CI 失敗原因分析

最近のコミット(構造化):
| Hash | Subject | Author | Date |
|------|---------|--------|------|
| a1b2c3d | feat: update API | Alice | 2026-02-04 |
| e4f5g6h | test: add tests | Bob | 2026-02-03 |

変更ファイル(--raw):
├── src/api/endpoint.ts (Modified) ← 型エラー発生
├── tests/api.test.ts (Modified)
└── package.json (Modified)

→ a1b2c3d のコミットが原因の可能性大
  型エラー: src/api/endpoint.ts:42

サブエージェント連携

以下の条件を満たす場合、Task tool で ci-cd-fixer を起動:

  • 修正 → 再実行 → 失敗のループが 2回以上 発生
  • または、エラーが複数ファイルにまたがる複雑なケース

起動パターン:

Task tool:
  subagent_type="ci-cd-fixer"
  prompt="CI失敗を診断・修正してください。エラーログ: {error_log}"

ci-cd-fixer は安全第一で動作(デフォルト dry-run モード)。 詳細は agents/ci-cd-fixer.md を参照。


VibeCoder 向け

🔧 CI が壊れたときの言い方

1. **「CI が落ちた」「赤くなった」**
   - 自動テストが失敗している状態

2. **「なんで失敗してるの?」**
   - 原因を調べてほしい

3. **「直して」**
   - 自動で修正を試みる

💡 重要: テストを「ごまかす」修正は禁止です
   - ❌ テストを消す、スキップする
   - ⭕ コードを正しく直す

「テストが間違ってそう」と思ったら、
まず確認してから対応を決めましょう
为指定实体自动生成生产级CRUD功能,包含API端点、Zod验证、RBC授权及测试用例。支持Next.js/Express等框架,自动检测现有Schema并生成完整代码结构。
用户要求为特定实体创建增删改查功能 用户请求生成带分页、搜索或权限控制的CRUD接口
skills/crud/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill crud -g -y
SKILL.md
Frontmatter
{
    "name": "crud",
    "description": "Explicit helper for CRUD scaffolding and API endpoint generation. Do NOT load for: UI components, form design, database schema discussion, or general implementation.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Grep",
        "Glob"
    ],
    "argument-hint": "<entity-name>",
    "description-en": "Explicit helper for CRUD scaffolding and API endpoint generation. Do NOT load for: UI components, form design, database schema discussion, or general implementation.",
    "description-ja": "CRUD足場作成とAPIエンドポイント生成の明示補助スキル。UIコンポーネント、フォーム設計、データベース設計相談、通常の実装には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

CRUD Skill

Auto-generates CRUD functionality for specified entities (tables) at production-ready level.

Quick Reference

  • "Create CRUD for task management" → /crud tasks
  • "Want search and pagination too" → Includes all together
  • "Include permissions (who can view/edit)" → Sets up authorization/rules together

Deliverables

  • CRUD + validation + authorization + tests, complete production-safe set
  • Minimize diff to match existing DB/code

Features:

  • Validation (Zod) auto-add
  • Auth/authorization (Row Level Security) auto-config
  • Relations (one-to-many, many-to-many) support
  • Pagination, search, filters
  • Auto-generated test cases

Auto-invoke Skills

This skill must explicitly invoke the following skills with the Skill tool:

Skill Purpose When to Call
impl Implementation (parent skill) CRUD feature implementation
verify Verification (parent skill) Post-implementation verification

Execution Flow

Detailed steps are described in the phases below.

Phase 1: Entity Analysis

  1. Parse entity name from $ARGUMENTS
  2. Detect existing schema (Prisma, Drizzle, raw SQL)
  3. Infer field types and relations

Phase 2: CRUD Generation

  1. Generate model/schema if needed
  2. Create API endpoints (REST or tRPC)
  3. Add validation schemas (Zod)
  4. Configure authorization rules

Phase 3: Test Generation

  1. Create unit tests for each endpoint
  2. Add integration tests
  3. Generate test fixtures

Phase 4: Verification

  1. Run type check
  2. Run tests
  3. Verify build

Supported Frameworks

Framework Detection Generated Files
Next.js + Prisma prisma/schema.prisma API routes, Prisma client
Next.js + Drizzle drizzle.config.ts API routes, Drizzle queries
Express express in package.json Controllers, routes
Hono hono in package.json Route handlers

Output Structure

src/
├── lib/
│   └── validations/
│       └── {entity}.ts        # Zod schemas
├── app/api/{entity}/
│   ├── route.ts              # GET (list), POST (create)
│   └── [id]/
│       └── route.ts          # GET, PUT, DELETE
└── tests/
    └── {entity}.test.ts      # Test cases

Related Skills

  • impl - Feature implementation
  • verify - Build verification
  • auth - Authentication/authorization
只读委托技能,用于向Cursor Composer发起提问、代码调查、设计咨询及敌对性审查。通过禁止写入确保操作安全隔离,避免复杂工作区管理,要求回复简洁并遵循特定UX规范。
ask cursor cursor:ask second opinion sanity check
skills/cursor-ask/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-ask -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-ask",
    "description": "Read-only cursor-agent delegate for questions\/sanity checks (no writes). Triggers: ask cursor, cursor:ask, second opinion, sanity check. Skip for: implementation (use cursor:do).",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "argument-hint": "[question]",
    "description-en": "Read-only cursor-agent delegate for questions\/sanity checks (no writes). Triggers: ask cursor, cursor:ask, second opinion, sanity check. Skip for: implementation (use cursor:do).",
    "description-ja": "cursor-agent (Composer) への読み取り専用デリゲート。質問・調査・設計相談・敵対的視点(sanity check)用。worktree 不要、cherry-pick 不要、Lead diff review 不要。cursor は ask mode 固定で書き込み不可。Use when user says: cursor に聞いて, cursor に相談, セカンドオピニオン, 敵対的レビュー, 設計相談, cursor で調査, cursor:ask. Do NOT load for: 実装、リファクタ、ファイル編集、コミット\/プッシュ作業、書き込みが必要な作業 (代わりに cursor:do \/ breezing --cursor を使う)。",
    "user-invocable": true
}

cursor:ask — Read-Only Cursor Delegate

cursor-agent (Composer) に read-only で質問・調査・設計相談・敵対的レビューを委譲する軽量スキル。

cursor-companion.sh task は引数なしで --mode ask (hard read-only stop) が自動で付くため、--write を渡さない限り cursor 側は ファイル書き込み・コマンド実行ができない。これにより worktree 隔離・cherry-pick・Lead diff review がすべて不要になる。

Quick Reference

cursor:ask "この設計判断、Composer 視点でどう思う?"
cursor:ask "TASK_BASE_REF からの diff を読んで、見落としを 3 つ挙げて"
cursor:ask "harness-mem の cross-project N-call、楽観的すぎる前提はある?"

用途:

ケース
質問 "この型エラーの根本原因は?"
調査 "scripts/ 配下で curl を使ってる箇所を全部挙げて理由付きで"
設計相談 "この abstraction、3 年後に保守できる?"
敵対的視点 "この PR の最大の弱点を 1 つだけ挙げて"

Narration Rules (UX Contract)

敵は 冗長さ であって進捗報告ではない。起動時に何を聞くか・どう進めるかを簡潔に明示してから実行する。冗長な繰り返し・中身のない前置きだけを禁ずる。

起動時に必ず出すもの (banner + plan、3 行以内)

🚀 cursor / composer-2.5-fast / ask
これから: <質問の要点> を composer に投げて、結果を 3-5 行で要約

banner 1 行 + 計画 1-2 行。1 秒以内に出し、即 Step 2 へ。

進捗報告は出してよい

  • 委譲開始の 1 行 (→ composer に問い合わせ中)
  • 判断に必要な経緯を 1 行で

禁止 (= 冗長さ)

  • 同じ事実の 2 回言い換え: cursor-companion の結果を後段で再説明しない
  • 中身のない前置き: 「使い方を確認します」だけの行など tool call で自明な宣言
  • 3 行以上の経緯振り返り: 必要なら 1 行に圧縮
  • 起動シーケンス中の ★ Insight ブロック: Insight は最終要約で 1 回のみ

違反例 (冗長):

× 「cursor に質問を投げる準備をします」→ bash → 「投げます」(中身のない前置き + 言い換え)
× 「ask モードは読み取り専用なので安全です」と再説明(既知事実の繰り返し)
× ★ Insight ──── まず cursor の状態を確認します: ...

正常例 (簡潔 + 計画明示):

🚀 cursor / composer-2.5-fast / ask
これから: 設計の弱点を composer に問い、結果を 3-5 行で要約

Execution Flow

Step 0: 起動時 banner + plan

上記 Narration Rules に従い、banner + 計画 (3 行以内) を出してから Step 1 へ。

Step 1: banner 確認

Step 0 で banner + 計画 (3 行以内) は出し切っているので、ここでは banner 行が出ていることを確認する。banner は:

🚀 cursor / composer-2.5-fast / ask

以降は委譲開始の 1 行ステータス等で進捗を見せてよい。冗長な繰り返しのみ避ける。

composer-2.5-fastscripts/model-routing.sh --host cursor --role worker --field model で解決される値の代表表記。実際の resolved model は cursor-companion 側のログに出る。

Step 2: helper root 解決 + cursor-companion 直接実行

$ARGUMENTS を質問文として渡す。--write は絶対に付けないscripts/cursor-companion.sh を相対パスで呼ぶと consumer repo の cwd 直下に見えず exit するため、CLAUDE_PLUGIN_ROOT / HARNESS_PLUGIN_ROOT を hooks.json と同じ valid_root パターンで解決する (Issue #193 §2):

QUESTION="$ARGUMENTS"
if [ -z "$QUESTION" ]; then
  echo "ERROR: question required. Usage: cursor:ask \"<your question>\"" >&2
  exit 1
fi

bash -c '
  set -euo pipefail
  valid_root() {
    [ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
  }
  HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
  ROOT="$HARNESS_PLUGIN_ROOT"
  if ! valid_root "$ROOT"; then
    ROOT=""
    if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && ! valid_root "$probe"; do
        probe="$(cd "$probe/.." && pwd)"
      done
      valid_root "$probe" && ROOT="$probe"
    fi
  fi
  if ! valid_root "$ROOT"; then
    ROOT=""
    for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
             "$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
             "$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
      if valid_root "$c"; then ROOT="$c"; break; fi
    done
  fi
  if ! valid_root "$ROOT"; then
    echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
    exit 2
  fi
  HARNESS_PLUGIN_ROOT="$ROOT"
  bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task "$1"
' _ "$QUESTION"

これだけで cursor-agent 側は --mode ask (hard read-only stop) に locked される。--force / --yolo も付かない。

Step 3: 結果を host が 3-5 行で要約

cursor の出力をそのまま貼らない。host (Claude/Codex) が読んで 3-5 行に要約 する:

  • 結論
  • なぜそう言えるか (cursor が挙げた根拠の核)
  • 注意点 / 追加調査が必要な点
  • 次の一手 (もしあれば)

要約後、最後に literal で次の一文を出力する:

↑この結果は host が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。

Trust Boundary

cursor は不透明なサブプロセスであり、Harness のガードレール (R01-R13) は内部に適用されない。read-only 委譲でも以下の前提条件を満たすこと。

必須前提

項目 内容 設定場所
Secret 遮断 .cursorignore.env / *.pem / *.key / .ssh / .aws / .git を読取対象から除外 repo root .cursorignore
Egress allowlist ~/.claude/settings.jsonsandbox.network.allowedDomains*.cursor.sh を追加 user settings
Filesystem allowlist sandbox.filesystem.allowWrite~/.cursor を追加 (cursor-agent が状態書込を行うため) user settings
permissions.json ~/.cursor/permissions.jsonterminalAllowlist / mcpAllowlist は read mode でも有効 (allowlist は best-effort、security boundary ではない) user config

詳細は .claude/rules/cursor-cli-only.md を参照。

ask mode で省略できるもの

通常の cursor 委譲で必要 ask mode では不要 理由
隔離 worktree 不要 cursor は書き込みできない
Lead diff review 不要 差分が生まれない
cherry-pick 不要 同上
worker-report.v1 / self_review 5 件 不要 実装をしないため

それでも残るリスク

  • 読み取り漏洩: .cursorignore を怠ると秘密ファイルが cursor 推論に渡る
  • 誤った情報の鵜呑み: cursor 出力は untrusted。Step 3 の要約で必ず host が判断軸を残す
  • allowlist 過信: Cursor 公式は "Allowlists are best-effort convenience. They are not a security guarantee." と明言。allowlist に依存しない

Topology

Lead (Claude/Codex) ──[cursor-companion.sh task]──> cursor-agent (--mode ask, locked read-only)
       │
       └──[Step 3: 3-5 行要約]──> User

Worker 介在なし。Reviewer 介在なし。worker-report.v1 / review-result.v1 契約は発生しない。

Related Skills / Rules

  • cursor-do — 書込タスク委譲(worktree + Lead review + cherry-pick の full containment)
  • breezing --cursor — Reviewer のみ cursor に逃がす lean second-opinion レーン
  • harness-review --cursor — レビューを cursor (composer-2.5-fast) に second-opinion として依頼
  • .claude/rules/cursor-cli-only.md — Cursor backend governance (trust boundary, prohibited flags)
将单任务开发委托给Cursor Composer,在隔离worktree中执行。Lead审查diff后cherry-pick至主分支。强调简洁沟通,避免冗余报告,确保1任务1提交的高效流程。
cursor:do delegate to cursor composer write refactor with cursor
skills/cursor-do/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-do -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-do",
    "description": "Delegate write task to Cursor Composer in isolated worktree, Lead-review + cherry-pick. Triggers: cursor:do, delegate to cursor, composer write, refactor with cursor. Skip for: planning, review-only, multi-task.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Glob",
        "Grep"
    ],
    "argument-hint": "[task-description]",
    "description-en": "Delegate write task to Cursor Composer in isolated worktree, Lead-review + cherry-pick. Triggers: cursor:do, delegate to cursor, composer write, refactor with cursor. Skip for: planning, review-only, multi-task.",
    "description-ja": "1 件の write タスクを Cursor Composer に委譲するスキル。専用 worktree (.claude\/worktrees\/cursor-do-<id>) を切って `cursor-companion.sh task --write --workspace <wt>` を直接呼び、Lead が diff レビュー → main へ cherry-pick → Plans.md `cc:done [hash]` 更新まで一気通貫する。Use when user mentions cursor:do, cursor で実装して, composer に書かせて, カーソルにやらせて, refactor を Cursor に, ファイル編集を Composer に. Do NOT load for: 計画 (harness-plan), レビューのみ (harness-review), 読み取り調査 (cursor:ask), 複数タスク並列 (breezing --cursor を使う).",
    "user-invocable": true
}

cursor:do — Single-Task Write Delegate to Cursor Composer

1 件の実装タスクを Cursor Composer (composer-2.5-fast) に専用 worktree 内で委譲し、Lead が diff をレビューしてから main へ cherry-pick する skill。breezing の team フローを起こさず、1 タスク 1 cherry-pick を最短経路で回す。

封じ込めは Cursor 側にはない (.claude/rules/cursor-cli-only.md)。専用 .git を持つ worktree + Lead diff review + cherry-pick (R01-R13 経路) の 3 点だけが実効的な境界。cursor の出力は Lead レビューまで untrusted として扱う。

Step 0 — NARRATION RULES (UX Contract)

敵は 冗長さ であって進捗報告ではない。breezing と同じ契約。起動時に banner + 実行計画を簡潔に明示してから実行する。見やすい進捗報告は歓迎、冗長な繰り返しのみ禁止。

起動時に必ず出すもの (banner + plan、合計 5 行以内)

🚀 cursor / composer-2.5-fast / feat/foo-bar / Add login form validation
これから:
1. pre-check (branch / cursor-agent) → 専用 worktree 作成
2. composer に実装委譲 (--write)
3. diff レビュー → cherry-pick → Plans.md 更新

banner 1 行 (🚀 cursor / composer-2.5-fast / <branch> / <task>) + 計画 2-4 行。1 秒以内に出し、即 Step 1 へ。

進捗報告は出してよい (見やすい範囲で)

  • 各ステップの開始・完了を 1 行ステータスで (✓ worktree 作成: .claude/worktrees/cursor-do-...)
  • pre-check / resolve の要点、cherry-pick した SHA
  • なぜこの分岐を取るかの理由を 1 行で

禁止 (= 冗長さ)

  • 同じ事実の 2 回言い換え: pre-check 結果を後段で再説明しない
  • 中身のない前置き: tool call で自明な宣言だけの行
  • 3 行以上の経緯振り返り: 必要なら 1 行に圧縮
  • 起動シーケンス中の ★ Insight ブロック: Insight は最終 report で 1 回のみ

違反例 (冗長):

× 「composer 2.5 で実装する流れですね、まず確認します」(中身のない前置き)
× 「Cursor を呼ぶ前に branch を見ます」 → bash → 「branch を確認しました」(言い換え)
× ★ Insight ──── Cursor の強みは…

正常例 (簡潔 + 計画明示):

🚀 cursor / composer-2.5-fast / feat/foo-bar / Add login form validation
これから: worktree 作成 → composer に実装委譲 → diff レビュー → cherry-pick

Step 1 — banner + plan を出し切る (1 秒以内)

引数 $ARGUMENTS をタスク説明として受ける。引数が空なら以下のマーカーを出力してユーザーに 1 行タスクを要求し、入力後に Step 2 へ進む:

CURSOR_DO_AWAITING_TASK: provide a one-line task description as $ARGUMENTS

引数があれば、即 1 行 echo:

🚀 cursor / composer-2.5-fast / <current-branch> / <task-first-60-chars>

<current-branch> は Step 2 で取得する値だが、Step 1 では未取得のため でも可。Step 2 直後に確定値を 1 行で再出力する。Step 0 の banner + 実行計画 (5 行以内) はここで出し切り、以降は各ステップの 1 行ステータスで進捗を見せる。冗長な繰り返しのみ避ける。

Step 2 — 並列 pre-check (1 bash)

1 つの bash 呼び出しで以下を並列に取り、結果だけを 1 ブロックで受ける。個別の説明は出さない。

bash -c '
  set +e
  echo "==BRANCH=="; git branch --show-current
  echo "==VERSION=="; cat VERSION 2>/dev/null
  echo "==PLANS_TAIL=="; tail -n 12 Plans.md 2>/dev/null
  echo "==CURSOR_AGENT=="
  CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
  if [ -z "$CURSOR_AGENT_BIN" ]; then
    if command -v cursor-agent >/dev/null 2>&1; then
      CURSOR_AGENT_BIN="$(command -v cursor-agent)"
    elif [ -x "$HOME/.local/bin/cursor-agent" ]; then
      CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
    fi
  fi
  if [ -z "$CURSOR_AGENT_BIN" ]; then
    echo "NOT_INSTALLED"
  else
    "$CURSOR_AGENT_BIN" --version 2>/dev/null || echo "NOT_INSTALLED"
  fi
'

判定:

  • CURSOR_AGENT=NOT_INSTALLEDERROR: cursor-agent not found (exit 3 expected from companion). Install via setup-cursor.sh. を出し終了。
  • BRANCHmain / masterWARN: on protected branch — cherry-pick target is HEAD of this branch. Confirm intent or switch. を出し継続。

Step 3 — plugin root + backend + model resolve (1 bash)

HARNESS_PLUGIN_ROOT / CLAUDE_PLUGIN_ROOT が未設定だと :-. fallback が consumer repo の cwd に解決し、scripts/cursor-companion.sh が見えず起動不能になる (Issue #193 §2)。hooks.json と同じ valid_root パターンで堅牢に解決する。

bash -c '
  set -euo pipefail
  valid_root() {
    [ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
  }
  HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
  ROOT="$HARNESS_PLUGIN_ROOT"
  if ! valid_root "$ROOT"; then
    ROOT=""
    if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && ! valid_root "$probe"; do
        probe="$(cd "$probe/.." && pwd)"
      done
      valid_root "$probe" && ROOT="$probe"
    fi
  fi
  if ! valid_root "$ROOT"; then
    ROOT=""
    for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
             "$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
             "$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
      if valid_root "$c"; then ROOT="$c"; break; fi
    done
  fi
  if ! valid_root "$ROOT"; then
    echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
    exit 2
  fi
  HARNESS_PLUGIN_ROOT="$ROOT"
  BACKEND=$(bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --backend cursor --role worker)
  MODEL=$(bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model)
  echo "PLUGIN_ROOT=${HARNESS_PLUGIN_ROOT}"
  echo "BACKEND=$BACKEND"
  echo "MODEL=$MODEL"
'

返却値: PLUGIN_ROOT (Step 5 で使う) / BACKEND (必ず cursor) / MODEL (通常 composer-2.5-fast)。BACKEND または MODEL が空なら ERROR: backend/model resolution failed を 1 行で出して終了。PLUGIN_ROOT 解決失敗は上記スクリプトが exit 2 で報告する。

Step 4 — 専用 worktree 作成

衝突しない id を作って worktree を切る。main tree や $HOME を指してはならない (companion 側 guard で exit 2 になる)。WT_DIR は絶対パスで作る (Step 5 の --workspace は companion の is not a directory ガードで相対パスを exit 2 にすることがあるため、Issue #193 §4)。

bash -c '
  set -euo pipefail
  REPO_ROOT="$(git rev-parse --show-toplevel)"
  cd "$REPO_ROOT"
  ID="$(date +%Y%m%d-%H%M%S)-$$"
  WT_DIR="$REPO_ROOT/.claude/worktrees/cursor-do-${ID}"
  BASE_REF="$(git rev-parse HEAD)"
  BASE_BRANCH="$(git branch --show-current)"
  WT_BRANCH="cursor-do/${ID}"
  mkdir -p "$REPO_ROOT/.claude/worktrees"
  git worktree add -b "${WT_BRANCH}" "${WT_DIR}" "${BASE_REF}"
  echo "REPO_ROOT=${REPO_ROOT}"
  echo "WT_DIR=${WT_DIR}"
  echo "WT_BRANCH=${WT_BRANCH}"
  echo "BASE_REF=${BASE_REF}"
  echo "BASE_BRANCH=${BASE_BRANCH}"
'

返却された WT_DIR / WT_BRANCH / BASE_REF / BASE_BRANCH を以降の Step で使う。失敗時 (branch 名衝突等) は ID を作り直して 1 回だけ retry。2 回連続失敗で ERROR: worktree creation failed を出し終了。

Step 5 — cursor-companion.sh task --write で委譲

Lead が直接 companion を呼ぶ (.claude/rules/cursor-cli-only.md Topology 節 — 非 claude backend では Worker 介在なし)。プロンプトは引数の task そのまま + 必要な追補のみ。冗長な前置きは付けない。

bash -c '
  set -euo pipefail
  valid_root() {
    [ -n "${1:-}" ] && [ -f "$1/scripts/cursor-companion.sh" ] && { [ -f "$1/.claude-plugin/plugin.json" ] || [ -f "$1/.codex-plugin/plugin.json" ] || [ -f "$1/.cursor-plugin/plugin.json" ]; }
  }
  HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
  ROOT="${PLUGIN_ROOT:-$HARNESS_PLUGIN_ROOT}"
  if ! valid_root "$ROOT"; then
    ROOT=""
    if [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && ! valid_root "$probe"; do
        probe="$(cd "$probe/.." && pwd)"
      done
      valid_root "$probe" && ROOT="$probe"
    fi
  fi
  if ! valid_root "$ROOT"; then
    ROOT=""
    for c in "${CLAUDE_PROJECT_DIR:-}" "$PWD" \
             "$HOME/.claude/plugins/marketplaces/claude-code-harness-marketplace" \
             "$HOME/.claude/plugins/cache/claude-code-harness-marketplace/claude-code-harness/"*; do
      if valid_root "$c"; then ROOT="$c"; break; fi
    done
  fi
  if ! valid_root "$ROOT"; then
    echo "ERROR: claude-code-harness plugin root not found (no scripts/cursor-companion.sh)" >&2
    exit 2
  fi
  HARNESS_PLUGIN_ROOT="$ROOT"
  PROMPT="<task-description>

Constraints:
- Modify only files relevant to the task.
- Keep existing tests green. Add tests when the task is verifiable.
- Match existing code style and naming.
- Create exactly one git commit if your environment supports it; otherwise leave one dirty changeset for Lead auto-commit.
- Do not touch .claude-plugin/settings*, .claude/settings*, .eslintrc*, biome.json, tsconfig*.json."
  bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task \
    --write \
    --workspace "${WT_DIR}" \
    "${PROMPT}"
' 2>&1

判定:

  • exit 0 + result text → Step 6 へ
  • exit 1 (result-error) → companion stderr を 1 行要約して ERROR: cursor returned is_error/empty result を出し終了。worktree は Step 8 のクリーンアップで削除
  • exit 2 (bad-guard) → 設定不備。原因 (workspace 指定誤り等) を 1 行で示し終了
  • exit 3 (not-found) → Step 2 で検出済みのはずだが、再度遭遇したら同様に終了

Step 6 — Lead diff review

worktree 内で Composer が作成した変更を読み、目視レビュー + contract grep の二段ゲートを通す (harness-work 「Lead の cherry-pick 前ゲート」と同じ契約)。

注意 (Issue #193 §1): Cursor Composer は --write でファイル編集を行うが commit は作らないことがある。worktree が dirty なまま放置すると Step 7 の cherry-pick 対象から漏れ、ユーザー視点で「完了したのに main に何も入らない」状態になる。本 Step 冒頭で dirty なら、既存 commit がある場合は amend、commit がない場合は Lead 側で 1 commit にまとめる。

bash -c '
  set -euo pipefail
  cd "${WT_DIR}"
  # Composer は dirty changeset を返すことがあるため、既存 commit に fold する
  if [ -n "$(git status --porcelain)" ]; then
    git add -A
    if [ "$(git rev-list --count "${BASE_REF}..HEAD")" -gt 0 ]; then
      git -c user.name="cursor-composer" -c user.email="cursor-composer@local" \
        commit --amend --no-edit --no-verify
      echo "==AUTO_AMENDED=="
    else
      git -c user.name="cursor-composer" -c user.email="cursor-composer@local" \
        commit --no-verify -m "cursor: ${TASK_SUMMARY:-cursor-do delegated change}"
      echo "==AUTO_COMMITTED=="
    fi
    git log -1 --oneline
  fi
  echo "==LOG=="
  git log --oneline "${BASE_REF}..HEAD"
  echo "==STAT=="
  git diff --stat "${BASE_REF}..HEAD"
  echo "==DIFF=="
  git diff "${BASE_REF}..HEAD"
'

TASK_SUMMARY は引数 task の先頭 60 文字以内に圧縮した文字列を Lead が事前に export しておく (例: TASK_SUMMARY="Add login form validation")。未設定なら fallback メッセージ cursor-do delegated change を使う。--no-verify を付けるのは worktree 内の編集を「Lead レビュー前の中間 commit」として扱うため (cherry-pick 後の main commit で R01-R13 と pre-commit hook を通す)。

Lead は diff 全文を Read し、以下を確認する:

  • 変更が依頼タスクの範囲内か (関係ないファイルを触っていないか)
  • protected path (.claude-plugin/settings*, .eslintrc*, etc.) を変更していないか
  • secret / .env / 認証情報を含まないか
  • 公開 support tier 表記を破壊していないか。contract gates は必ず candidate worktree (WT_DIR) 内で実行する:
    [ ! -f "${WT_DIR}/tests/test-support-claim-wording.sh" ] || (cd "${WT_DIR}" && bash tests/test-support-claim-wording.sh)
    [ ! -f "${WT_DIR}/scripts/ci/check-consistency.sh" ] || (cd "${WT_DIR}" && bash scripts/ci/check-consistency.sh)
    [ ! -f "${WT_DIR}/tests/validate-plugin.sh" ] || (cd "${WT_DIR}" && bash tests/validate-plugin.sh)
    

判定:

  • 問題なし → Step 7 へ
  • 範囲外変更あり → 該当 commit を git reset で巻き戻すか、Cursor に再委譲 (Step 5 を 1 回だけ retry)。2 回失敗で REQUEST_CHANGES: <理由> を出し、worktree を残したまま終了
  • protected path / secret 検出 → 即 abort。ABORT: protected path violation を出し worktree 削除

Step 7 — cherry-pick + Plans.md cc:done 更新

worktree から main tree に cherry-pick する。Cursor prompt は exactly one commit 契約だが、Composer は dirty changeset を返すことがあるため Step 6 で commit/amend する。複数 commit が残った場合は main tree を触る前に停止する。 さらに cherry-pick 前に Plans.md の staged / unstaged 差分がないことを確認する。理由: 既存差分がある状態で後続の git add Plans.md && git commit --amend を行うと、task と無関係な plan/status 編集を Cursor の code commit に巻き込むため。 SHA 直接指定 (branch 名経由ではない) で reviewer state drift を避ける (MEMORY: reviewer_state_drift)。

bash -c '
  set -euo pipefail
  COMMIT_COUNT="$(cd "${WT_DIR}" && git rev-list --count "${BASE_REF}..HEAD")"
  if [ "${COMMIT_COUNT}" -eq 0 ]; then
    echo "ERROR: no commits to cherry-pick"
    exit 1
  fi
  if [ "${COMMIT_COUNT}" -ne 1 ]; then
    echo "ERROR: cursor returned ${COMMIT_COUNT} commits; expected exactly one. Keep worktree for manual review: ${WT_DIR}"
    exit 1
  fi
  if ! git diff --quiet -- Plans.md || ! git diff --cached --quiet -- Plans.md; then
    echo "ERROR: Plans.md has pre-existing local edits; refusing to cherry-pick before the cursor:do marker amend"
    exit 1
  fi
  SHA="$(cd "${WT_DIR}" && git rev-parse HEAD)"
  git cherry-pick "${SHA}"
  echo "==CHERRY_PICKED=="
  git log --oneline -n 1
'

cherry-pick で conflict が出たら git cherry-pick --abort し、CHERRY_PICK_CONFLICT: <files> を 1 行で示して終了 (worktree は残す、ユーザー判断)。

cherry-pick 後、Plans.md に対応行があれば該当タスクのマーカーを更新する。 上記の clean precondition を通過しているため、ここで発生する Plans.md 差分は marker-only diff として扱う:

| <task> | ... | cc:done [<merged-sha>] |

該当行の特定: 引数 task 文字列の先頭 40 文字で grep し、ヒットした最初の cc:TODO / cc:WIP / cc:todo 行を cc:done [<sha>] に置換する。ヒットなしなら更新スキップ (Plans.md 外のタスクとして扱う)。

マーカーを更新した場合、その編集は cherry-pick commit に含める。未コミットの Plans.md を残して cleanup / 完了報告へ進んではならない。 以下の amend block は、上記 precondition 通過後に実行した marker-only diff だけを対象にする:

bash -c '
  set -euo pipefail
  if git diff --quiet -- Plans.md; then
    echo "PLANS_UPDATED=0"
  else
    git add Plans.md
    git commit --amend --no-edit
    echo "PLANS_UPDATED=1"
    echo "MERGED_SHA=$(git rev-parse HEAD)"
  fi
'

Step 8 — worktree cleanup + 完了報告 (1 ブロック)

cherry-pick 成功後、worktree を delete する。失敗 path では呼ばれない(worktree を残してユーザー判断)。

bash -c '
  set -euo pipefail
  git worktree remove --force "${WT_DIR}"
  git branch -D "${WT_BRANCH}" 2>/dev/null || true
  echo "==CLEANUP=="
  git worktree list | grep -v "cursor-do-" || true
'

完了報告は 1 ブロック で出す。中間ナレーションなし:

cursor:do completed
   task: <task-first-60-chars>
   commits: <count>
   base: <BASE_REF> → cherry-picked into <BASE_BRANCH>
   plans: <updated|skipped (no match)>
   files: <changed-file-count> changed, +<inserts> -<deletes>

Full Containment (write mode 必須)

役割 skip 可否
専用 .git worktree cursor の書込を main tree から隔離 不可(必須)
Lead diff review untrusted cursor 出力の品質ゲート 不可(必須)
contract-grep ゲート docs / locale / matrix 固定文字列の保護 不可(必須)
cherry-pick → main R01-R13 guard rail を通す唯一の経路 不可(必須)
Plans.md cc:done 更新 台帳との sync 該当行なければ skip 可

Prohibited

  • --force / --yolo を companion に渡す(Cursor 公式 "Never use")
  • cursor 出力を Lead レビュー前に main へ直接 commit する
  • protected path (.claude-plugin/settings*, .eslintrc*, tsconfig*.json, etc.) を Step 5 の prompt で許可する
  • $HOME / / / main tree を --workspace に指定する
  • Plans.md の cc:* マーカーを task と無関係に書き換える

Related Skills / Rules

  • cursor:ask — 読取専用の質問・調査・敵対的視点 (worktree 不要)
  • breezing --cursor — 複数タスクを team フローで cursor 委譲する場合
  • harness-work — claude backend の default フロー (Worker agent 経由)
  • .claude/rules/cursor-cli-only.md — Cursor backend governance + Topology
诊断并修复 Harness 工作流中 Cursor 后端故障。用于处理 cursor:rescue 调用、Cursor 委派失败、cursor-agent 缺失、setup-cursor 错误或后端意外回退至 claude 的场景,提供根因分析与最小化修复方案。
用户调用 cursor:rescue Cursor 委派失败 cursor-agent 缺失 setup-cursor 失败 后端解析意外回退到 claude
skills/cursor-rescue/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-rescue -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-rescue",
    "description": "Diagnose and recover Cursor backend failures for Harness workflows. Use when user invokes cursor:rescue, Cursor delegation fails, cursor-agent is missing, setup-cursor fails, or backend resolution unexpectedly falls back to claude.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Grep"
    ],
    "argument-hint": "[failure summary]",
    "description-en": "Diagnose and recover Cursor backend failures for Harness workflows. Use when user invokes cursor:rescue, Cursor delegation fails, cursor-agent is missing, setup-cursor fails, or backend resolution unexpectedly falls back to claude.",
    "description-ja": "Harness の Cursor backend 失敗を診断・復旧するスキル。cursor:rescue、Cursor 委譲が失敗した、cursor-agent が見つからない、setup-cursor が失敗した、backend が想定外に claude fallback した時に使う。",
    "user-invocable": true
}

cursor:rescue - Cursor Backend Recovery

Cursor backend の failure path を短く切り分ける skill。変更は最小限にし、破壊的操作はしない。

Quick Reference

cursor:rescue "breezing fell back to claude"
cursor:rescue "cursor-agent not found"

Diagnosis Order

Run one compact diagnostic block:

set +e
HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi
if [ -z "$HARNESS_PLUGIN_ROOT" ]; then
  echo "ERROR: HARNESS_PLUGIN_ROOT is not set and could not be derived from CLAUDE_PLUGIN_ROOT or CLAUDE_SKILL_DIR" >&2
  exit 2
fi
echo "==RESOLVED_BACKEND=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --role worker
echo "==USER_OR_PROJECT_DEFAULT=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
echo "==CURSOR_MODEL=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model
echo "==CURSOR_AGENT=="
CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
if [ -z "$CURSOR_AGENT_BIN" ]; then
  if command -v cursor-agent >/dev/null 2>&1; then
    CURSOR_AGENT_BIN="$(command -v cursor-agent)"
  elif [ -x "$HOME/.local/bin/cursor-agent" ]; then
    CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
  fi
fi
if [ -z "$CURSOR_AGENT_BIN" ]; then
  echo "NOT_INSTALLED: cursor-agent not found in PATH or $HOME/.local/bin"
else
  "$CURSOR_AGENT_BIN" --version
fi
echo "==CURSOR_PACKAGE_CHECK=="
bash "${HARNESS_PLUGIN_ROOT}/scripts/setup-cursor.sh" --check

Common Fixes

Symptom Fix
cursor-agent missing Install / sign in to Cursor CLI, then rerun cursor:setup --check.
backend resolves to claude unexpectedly Run bash scripts/set-impl-backend.sh --show; set user default with cursor:setup --user-default or project default with cursor:setup --project-default.
setup-cursor.sh --check fails Report the first failing [ERR] line and the missing file path.
companion exits 2 Workspace guard or forbidden path. Recreate an isolated worktree and retry.
companion exits 3 cursor-agent not found in PATH or $HOME/.local/bin.

Output

Return:

  • root cause candidate
  • exact failing command
  • minimal fix command
  • whether retrying the original workflow is safe
作为辅助审查技能,调用 Cursor Composer 对代码差异提供只读的第二意见。用于用户显式请求审查或校验 diff 时,分析缺陷与回归风险,但不拥有最终审批权,最终裁决由主审查者做出。
用户执行 cursor:review 命令 用户要求 Cursor 进行代码审查 用户希望 Composer 校验代码差异
skills/cursor-review/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-review -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-review",
    "description": "Run a Cursor Composer review as an advisory second opinion while keeping the primary review verdict on the host brain. Use when user invokes cursor:review, asks Cursor to review, or wants composer to sanity-check a diff. Cursor never owns APPROVE\/REQUEST_CHANGES.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Grep"
    ],
    "argument-hint": "[--base <ref>] [review-scope]",
    "description-en": "Run a Cursor Composer review as an advisory second opinion while keeping the primary review verdict on the host brain. Use when user invokes cursor:review, asks Cursor to review, or wants composer to sanity-check a diff. Cursor never owns APPROVE\/REQUEST_CHANGES.",
    "description-ja": "Cursor Composer に advisory second opinion としてレビューさせるスキル。cursor:review、Cursor にレビューして、composer で差分を sanity check して、という時に使う。primary verdict は常に host brain が持ち、Cursor は APPROVE\/REQUEST_CHANGES を所有しない。",
    "user-invocable": true
}

cursor:review - Advisory Cursor Review

Cursor Composer (composer-2.5-fast) を read-only second opinion として使う review skill。primary verdict は host brain (Opus / Claude role) が出す。

Quick Reference

cursor:review --base origin/main
cursor:review "Phase 88.5 command namespace diff"

Rules

  • Cursor review is advisory. The final verdict must come from the host reviewer.

  • Do not pass --write to cursor-companion.sh.

  • Use resolver/model routing, not direct env checks:

    bash scripts/resolve-impl-backend.sh --backend cursor --role reviewer
    bash scripts/model-routing.sh --host cursor --role worker --field model
    
  • Prefer the existing harness-review contract when a full review is requested. This command exists for users who explicitly ask for the Cursor lane.

Flow

  1. Resolve the Harness helper root:

    HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
    if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
      probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
      while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
        probe="$(cd "$probe/.." && pwd)"
      done
      [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
    fi
    if [ -z "$HARNESS_PLUGIN_ROOT" ]; then
      echo "ERROR: HARNESS_PLUGIN_ROOT is not set and could not be derived from CLAUDE_PLUGIN_ROOT or CLAUDE_SKILL_DIR" >&2
      exit 2
    fi
    
  2. Determine review scope:

    BASE_REF="${TASK_BASE_REF:-origin/main}"
    REVIEW_SCOPE="${ARGUMENTS:-}"
    if [ -n "${REVIEW_SCOPE}" ]; then
      set -- ${REVIEW_SCOPE}
      while [ "$#" -gt 0 ]; do
        case "$1" in
          --base)
            BASE_REF="${2:?--base requires a ref}"
            shift 2
            ;;
          --base=*)
            BASE_REF="${1#--base=}"
            shift
            ;;
          *)
            shift
            ;;
        esac
      done
    fi
    DIFF_STAT="$(git diff --stat "${BASE_REF}..HEAD")"
    DIFF_TEXT="$(git diff "${BASE_REF}..HEAD")"
    
  3. Ask Cursor in read-only mode:

    PROMPT="$(cat <<EOF
    

Review this diff as an advisory second opinion. Base ref: ${BASE_REF} Requested scope: ${ARGUMENTS:-full diff}

Focus on bugs, regressions, missing tests, and unsafe assumptions. Do not propose broad refactors.

Diff stat: ${DIFF_STAT}

Diff: ${DIFF_TEXT} EOF )" bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task "${PROMPT}"


4. Host reads Cursor's output and performs the primary review:

- Findings first, ordered by severity.
- Mark Cursor-originated points as advisory when used.
- `APPROVE` / `REQUEST_CHANGES` must be the host decision, not a copied Cursor verdict.

## Output

Use the standard review shape:

- findings
- open questions
- validation run
- final host verdict
用于配置和验证 Cursor 后端环境。支持检查就绪状态、设置用户或项目级默认值为 Cursor,以及撤销更改。严格限制仅修改本地环境,不改变分发默认值,确保操作安全可控。
用户希望将 Cursor 设为默认 AI 后端 需要验证 Cursor 安装及配置是否正确 用户请求取消当前的 Cursor 默认设置
skills/cursor-setup/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill cursor-setup -g -y
SKILL.md
Frontmatter
{
    "name": "cursor-setup",
    "description": "Configure and verify Cursor backend for CCH. Triggers: cursor:setup, set Cursor as local default, check Cursor readiness. Distribution default stays opt-in; only local env changes on request.",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "argument-hint": "[--check | --user-default | --project-default | --unset]",
    "description-en": "Configure and verify Cursor backend for CCH. Triggers: cursor:setup, set Cursor as local default, check Cursor readiness. Distribution default stays opt-in; only local env changes on request.",
    "description-ja": "Claude Code Harness の Cursor backend を設定・検証するスキル。cursor:setup、Cursor を現環境の default 実装 backend にしたい、Cursor plugin\/agent readiness を確認したい時に使う。配布 plugin の default は opt-in のまま維持し、明示依頼がある場合だけ local env\/user 設定を変更する。",
    "user-invocable": true
}

cursor:setup - Cursor Backend Setup

Cursor backend の setup / verification 用 skill。配布 plugin の fallback は claude のままにし、現在の repo / user 環境だけ cursor default にする時に使う。

Quick Reference

cursor:setup --check
cursor:setup --user-default
cursor:setup --project-default
cursor:setup --unset

Rules

  • Do not change distribution defaults or plugin manifests to make Cursor the shipped fallback.
  • Use scripts/resolve-impl-backend.sh / scripts/set-impl-backend.sh; do not infer from HARNESS_IMPL_BACKEND alone.
  • Treat ~/.cursor/permissions.json, .cursorignore, and Claude sandbox allowlists as manual/user-owned setup surfaces unless the user explicitly asks to edit a local file.

Flow

First resolve the Harness helper root. Keep the current working directory as the target project so project-scoped env.local writes still land in the user's repo:

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi
if [ -z "$HARNESS_PLUGIN_ROOT" ]; then
  echo "ERROR: HARNESS_PLUGIN_ROOT is not set and could not be derived from CLAUDE_PLUGIN_ROOT or CLAUDE_SKILL_DIR" >&2
  exit 2
fi
  1. For --check, run:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/setup-cursor.sh" --check
    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
    bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --role worker
    CURSOR_AGENT_BIN="${CURSOR_AGENT_BIN:-}"
    if [ -z "$CURSOR_AGENT_BIN" ]; then
      if command -v cursor-agent >/dev/null 2>&1; then
        CURSOR_AGENT_BIN="$(command -v cursor-agent)"
      elif [ -x "$HOME/.local/bin/cursor-agent" ]; then
        CURSOR_AGENT_BIN="$HOME/.local/bin/cursor-agent"
      fi
    fi
    if [ -z "$CURSOR_AGENT_BIN" ]; then
      echo "ERROR: cursor-agent not found in PATH or $HOME/.local/bin" >&2
      exit 3
    fi
    "$CURSOR_AGENT_BIN" --version
    
  2. For --user-default, run:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --user cursor
    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
    
  3. For --project-default, run:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" cursor
    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show
    
  4. For --unset, ask whether the target is user or project scope if not clear from the request, then run exactly one matching unset command:

    Project scope:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --unset
    

    User scope:

    bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --unset --user
    

Output

Report three facts only:

  • resolved backend (claude / codex / cursor)
  • Cursor package readiness (setup-cursor.sh --check)
  • next manual step if Cursor is not ready
负责部署至Vercel/Netlify、配置分析工具及执行环境健康检查的技能。当用户提及部署、监控或相关平台时触发,不适用于代码实现、本地开发或审查场景。
用户提到部署需求 提及Vercel或Netlify平台 需要配置数据分析功能 请求进行服务健康检查
skills/deploy/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill deploy -g -y
SKILL.md
Frontmatter
{
    "name": "deploy",
    "context": "fork",
    "description": "Deploy to Vercel\/Netlify. One-way ticket to production arranged. Use when user mentions deployment, Vercel, Netlify, analytics, or health checks. Do NOT load for: implementation work, local development, reviews, or setup.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Monitor"
    ],
    "argument-hint": "[vercel|netlify|health]",
    "description-en": "Deploy to Vercel\/Netlify. One-way ticket to production arranged. Use when user mentions deployment, Vercel, Netlify, analytics, or health checks. Do NOT load for: implementation work, local development, reviews, or setup.",
    "description-ja": "VercelやNetlifyへいざ出陣。本番環境への片道切符を手配します。Use when user mentions deployment, Vercel, Netlify, analytics, or health checks. Do NOT load for: implementation work, local development, reviews, or setup.",
    "user-invocable": false,
    "disable-model-invocation": true
}

Deploy Skills

デプロイとモニタリングの設定を担当するスキル群です。

機能詳細

機能 詳細
デプロイ設定 See references/deployment-setup.md
アナリティクス See references/analytics.md
環境診断 See references/health-checking.md

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容に従って設定
通过Nano Banana Pro API自动生成项目介绍幻灯片。支持3种风格各2张候选图,经质量评分筛选后输出最佳3张,需显式命令触发。
用户输入/generate-slide命令 父级媒体工作流内部调用
skills/generate-slide/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill generate-slide -g -y
SKILL.md
Frontmatter
{
    "name": "generate-slide",
    "description": "Generate project intro slides with Nano Banana Pro. Internal\/manual workflow only; use from an explicit \/generate-slide command or a parent media workflow.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Glob",
        "Grep",
        "AskUserQuestion"
    ],
    "argument-hint": "[project-path|description]",
    "description-en": "Generate project intro slides with Nano Banana Pro. Internal\/manual workflow only; use from an explicit \/generate-slide command or a parent media workflow.",
    "description-ja": "Nano Banana Proでプロジェクト紹介スライドを自動生成。明示的な \/generate-slide または親メディアワークフローからのみ使う。通常発話からの自動起動はしない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Generate Slide Skill

プロジェクトの内容を紹介・説明する1枚スライド画像を、Nano Banana Pro(Gemini 3 Pro Image Preview)API で自動生成します。

起動契約

このスキルは user-invocable: false かつ disable-model-invocation: true です。 通常のユーザー発話(例: 「スライド作って」)から Claude が自動選択する前提ではありません。

  • 明示的な /generate-slide コマンド、または親メディアワークフローから内部的に起動される時だけ使います。
  • allowed-tools は Claude Code 用です。Claude ではユーザー確認に AskUserQuestion を使えます。
  • Codex mirror では同等の確認は request_user_input 相当の計画モード入力に読み替えます。通常実行でそのツールがない場合は、既定値を提示して停止せず進め、重要な未確定事項だけユーザーへ確認します。
  • disable-model-invocation: true は「説明文だけを見てモデルが勝手に起動しない」という意味です。slash や親 workflow から明示起動された場合は本文手順に従います。

概要

3パターン x 各2枚候補 = 計6枚生成 → パターンごとに品質チェック → NG ならリトライ → 各パターンの最良1枚、計3枚を出力。

前提条件

  • GOOGLE_AI_API_KEY 環境変数が設定済み
  • Google AI Studio で Nano Banana Pro(Gemini 3 Pro Image Preview)が有効化済み

機能詳細

機能 詳細
スライド画像生成 See references/slide-generator.md
品質判定 See references/slide-quality-check.md

実行フロー

/generate-slide
    |
    +--[Step 1] 情報収集
    |   +-- ユーザー指定テキスト or コードベース自動分析(README, package.json 等)
    |   +-- プロジェクト名・概要・主要機能・技術スタックを抽出
    |
    +--[Step 2] 仕様確認(AskUserQuestion)
    |   +-- サイズ・アスペクト比(デフォルト: 16:9 / 2K)
    |   +-- トーン(テック、カジュアル、コーポレート等)
    |   +-- 強調したいポイント(曖昧な場合のみ質問)
    |
    +--[Step 3] 3パターン x 2枚生成(Nano Banana Pro API x 6回)
    |   +-- Pattern A: Minimalist(2枚)
    |   +-- Pattern B: Infographic(2枚)
    |   +-- Pattern C: Hero Visual(2枚)
    |
    +--[Step 4] パターンごとに品質チェック
    |   +-- 各パターンの2枚を Claude が Read で読み込み
    |   +-- 5段階スコアリング → 高い方を採用候補
    |   +-- 両方スコア2以下 → プロンプト改善してリトライ(最大3回)
    |   +-- リトライ上限到達 → ユーザーに報告、続行 or スキップを選択
    |
    +--[Step 5] 最良3枚を出力
        +-- 各パターンのベスト1枚を selected/ にコピー
        +-- 結果一覧(パス + スコア + 評価コメント)をユーザーに提示

デザインパターン

パターン コンセプト 特徴
Minimalist 余白とタイポグラフィ主体 clean, whitespace, typography-driven, elegant
Infographic データ/フロー可視化 data visualization, metrics, flow diagram, structured
Hero Visual 大ビジュアル + キャッチコピー bold visual, impactful, hero image, catchy headline

出力先

out/slides/
+-- minimalist_1.png       # Pattern A 候補1
+-- minimalist_2.png       # Pattern A 候補2
+-- infographic_1.png      # Pattern B 候補1
+-- infographic_2.png      # Pattern B 候補2
+-- hero_1.png             # Pattern C 候補1
+-- hero_2.png             # Pattern C 候補2
+-- selected/
|   +-- minimalist.png     # Pattern A 最良
|   +-- infographic.png    # Pattern B 最良
|   +-- hero.png           # Pattern C 最良
+-- quality-report.md      # 品質チェック結果レポート

実行手順

Step 1: 情報収集

プロジェクト情報を以下の優先順位で収集:

  1. ユーザー指定テキスト: 引数でプロジェクト説明が渡された場合はそれを使用
  2. コードベース自動分析: 引数がない場合、以下を自動分析
    • README.md — プロジェクト概要
    • package.json / Cargo.toml / pyproject.toml — プロジェクト名・説明・依存関係
    • CLAUDE.md — プロジェクト構成・目的
    • Plans.md — 進行中のタスク(存在する場合)

抽出する情報:

項目
プロジェクト名 Claude Code Harness
概要(1-2文) Claude Code を Plan-Work-Review で自律運用するプラグイン
主要機能(3-5個) スキル管理、品質チェック、並列実行
技術スタック TypeScript, Node.js, Claude Code Plugin
カラー(あれば) ブランドカラー or 推測

Step 2: 仕様確認

AskUserQuestion で以下を確認(デフォルト値があるため、曖昧な場合のみ質問):

質問1: スライドのサイズ・アスペクト比は?
  - 16:9 / 2K(推奨)
  - 4:3 / 2K
  - 1:1 / 2K
  - カスタム

質問2: トーンは?
  - テック(ダークテーマ、コード感)
  - カジュアル(明るい、フレンドリー)
  - コーポレート(フォーマル、信頼感)
  - クリエイティブ(大胆、アート寄り)

Step 3: 画像生成

slide-generator.md の手順に従い、3パターン x 2枚 = 6枚を生成。

各パターンの生成は独立しているため、可能な限り並列で curl を実行:

# 並列実行例(3パターン x 2枚)
for pattern in minimalist infographic hero; do
  for i in 1 2; do
    # slide-generator.md の curl パターンを実行
    # → out/slides/${pattern}_${i}.png に保存
  done
done

Step 4: 品質チェック

slide-quality-check.md の基準に従い、各パターンの2枚を評価:

  1. 各画像を Read で読み込み
  2. 5段階スコアリング(情報伝達力、レイアウト、テキスト可読性、プロフェッショナル感、ブランド整合性)
  3. パターン内でスコアが高い方を採用候補
  4. 両方スコア2以下 → プロンプト改善して再生成(最大3回)

Step 5: 結果出力

# 最良画像を selected/ にコピー
mkdir -p out/slides/selected
cp out/slides/minimalist_best.png out/slides/selected/minimalist.png
cp out/slides/infographic_best.png out/slides/selected/infographic.png
cp out/slides/hero_best.png out/slides/selected/hero.png

品質レポート(out/slides/quality-report.md)を生成:

# Slide Quality Report

## 生成情報
- プロジェクト: {project_name}
- 生成日時: {datetime}
- アスペクト比: {aspect_ratio}
- トーン: {tone}

## 結果サマリー

| パターン | 候補1 | 候補2 | 採用 | スコア |
|---------|-------|-------|------|--------|
| Minimalist | 3/5 | 4/5 | 候補2 | 4/5 |
| Infographic | 4/5 | 3/5 | 候補1 | 4/5 |
| Hero Visual | 5/5 | 4/5 | 候補1 | 5/5 |

## 詳細評価
...

エラーハンドリング

GOOGLE_AI_API_KEY 未設定

GOOGLE_AI_API_KEY が設定されていません。

設定方法:
1. Google AI Studio でAPIキーを取得: https://ai.google.dev/aistudio
2. export GOOGLE_AI_API_KEY="your-api-key"

全パターンでリトライ上限到達

AskUserQuestion で選択肢を提示:

パターン {pattern} の画像が3回のリトライでも基準を満たしませんでした。

選択肢:
1. 最も高スコアの画像を採用して続行
2. このパターンをスキップ
3. プロンプトを手動で指定して再生成

関連スキル

  • generate-video — プロダクトデモ動画生成(画像生成エンジンを共有)
  • notebookLM — ドキュメント・スライド生成(別アプローチ)
通过显式命令或工作流触发,结合代码分析、场景规划与并行生成技术,自动制作产品演示视频。支持Remotion框架及AI图像生成,覆盖多种营销漏斗场景。
用户输入/generate-video命令 父级媒体工作流内部调用
skills/generate-video/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill generate-video -g -y
SKILL.md
Frontmatter
{
    "name": "generate-video",
    "context": "fork",
    "description": "Auto-generate product demo videos. Internal\/manual workflow only; use from an explicit \/generate-video command or a parent media workflow. Requires Remotion setup.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Grep",
        "Glob",
        "Bash",
        "Task",
        "AskUserQuestion",
        "WebFetch"
    ],
    "argument-hint": "[demo|arch|release]",
    "description-en": "Auto-generate product demo videos. Internal\/manual workflow only; use from an explicit \/generate-video command or a parent media workflow. Requires Remotion setup.",
    "description-ja": "プロダクトデモ動画を自動生成。明示的な \/generate-video または親メディアワークフローからのみ使う。通常発話からの自動起動はしない。Remotion セットアップが必要。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Generate Video Skill

プロダクト説明動画の自動生成を担当するスキル群です。

起動契約

このスキルは user-invocable: false かつ disable-model-invocation: true です。 通常のユーザー発話(例: 「動画を作って」)で Claude が自動選択する前提にはしません。

  • 明示的な /generate-video コマンド、または親メディアワークフローから内部的に起動される時だけ使います。
  • allowed-tools は Claude Code 用です。Claude ではユーザー確認に AskUserQuestion を使えます。
  • Codex mirror では同等の確認は request_user_input 相当の計画モード入力に読み替えます。通常実行でそのツールがない場合は、既定値を提示して停止せず進め、重要な未確定事項だけユーザーへ確認します。
  • disable-model-invocation: true は「説明文だけを見てモデルが勝手に起動しない」という意味です。slash や親 workflow から明示起動された場合は本文手順に従います。

概要

/generate-video コマンドの内部で使用されるスキルです。 コードベース分析 → シナリオ提案 → 並列生成のフローを実行します。

機能詳細

機能 詳細
ベストプラクティス See references/best-practices.md
コードベース分析 See references/analyzer.md
シナリオプランニング See references/planner.md
並列シーン生成 See references/generator.md
視覚効果ライブラリ See references/visual-effects.md
AI画像生成 See references/image-generator.md
画像品質判定 See references/image-quality-check.md

Prerequisites

  • Remotion がセットアップ済み(/remotion-setup
  • Node.js 18+
  • (オプション)GOOGLE_AI_API_KEY - AI画像生成用

/generate-video フロー

/generate-video
    │
    ├─[Step 1] 分析(analyzer.md)
    │   ├─ フレームワーク検出
    │   ├─ 主要機能検出
    │   ├─ UIコンポーネント検出
    │   └─ プロジェクト資産解析(Plans.md, CHANGELOG等)
    │
    ├─[Step 2] シナリオ提案(planner.md)
    │   ├─ 動画タイプ自動判定
    │   ├─ シーン構成提案
    │   └─ ユーザー確認
    │
    ├─[Step 2.5] 素材生成(image-generator.md)← NEW
    │   ├─ 素材必要判定(イントロ、CTA等)
    │   ├─ Nano Banana Pro で2枚生成
    │   ├─ Claude が品質判定(image-quality-check.md)
    │   └─ OK → 採用 / NG → 再生成(最大3回)
    │
    └─[Step 3] 並列生成(generator.md)
        ├─ シーン並列生成(Task tool)
        ├─ 統合 + トランジション
        └─ 最終レンダリング

実行手順

  1. ユーザーが /generate-video を実行
  2. Remotion セットアップ確認
  3. analyzer.md でコードベース分析
  4. planner.md でシナリオ提案 + ユーザー確認
  5. generator.md で並列生成
  6. 完了報告

動画タイプ(ファネル別)

タイプ ファネル 長さ目安 自動判定条件 構成の芯
LP/広告ティザー 認知〜興味 30-90秒 新規プロジェクト 痛み→結果→CTA
Introデモ 興味→検討 2-3分 UI変更検出 1ユースケース完走
リリースノート 検討→確信 1-3分 CHANGELOG更新 Before/After重視
アーキテクチャ解説 確信→決裁 5-30分 大規模構造変更 実運用+証拠
オンボーディング 継続・活用 30秒-数分 初回セットアップ Aha体験への最短パス

詳細: references/best-practices.md

シーンテンプレート

90秒ティザー(LP/広告向け)

時間 シーン 内容
0-5秒 Hook 痛み or 望む結果
5-15秒 Problem+Promise 対象ユーザーと約束
15-55秒 Workflow 象徴ワークフロー
55-70秒 Differentiator 差別化の根拠
70-90秒 CTA 次の一手

3分Introデモ(検討向け)

時間 シーン 内容
0-10秒 Hook 結論+痛み
10-30秒 UseCase ユースケース宣言
30-140秒 Demo 実画面で完走
140-170秒 Objection よくある不安1つ潰す
170-180秒 CTA 行動喚起

共通シーン

シーン 推奨時間 内容
イントロ 3-5秒 ロゴ + タグライン
機能デモ 10-30秒 Playwrightキャプチャ
アーキテクチャ図 10-20秒 Mermaid → アニメーション
CTA 3-5秒 URL + 連絡先

詳細テンプレート: ${CLAUDE_SKILL_DIR}/references/best-practices.md

音声同期ルール(重要)

ナレーション付き動画では以下を厳守:

ルール
音声開始 シーン開始 + 30f(1秒待機)
シーン長さ 30f + 音声長さ + 20f余白
トランジション 15f(隣接シーンとオーバーラップ)
シーン開始計算 前シーン開始 + 前シーン長 - 15f

事前確認: ffprobe で音声長さを確認してからシーン設計

詳細: ${CLAUDE_SKILL_DIR}/references/generator.md

BGM サポート

項目 推奨値
ナレーションあり bgmVolume: 0.20 - 0.30
ナレーションなし bgmVolume: 0.50 - 0.80
ファイル配置 public/BGM/

詳細: ${CLAUDE_SKILL_DIR}/references/generator.md

字幕サポート

ルール
字幕開始 音声開始と同じ
字幕duration 音声長 + 10f
フォント Base64埋め込み推奨

詳細: ${CLAUDE_SKILL_DIR}/references/generator.md

視覚効果ライブラリ

インパクトのある動画向けエフェクト集:

エフェクト 用途
GlitchText Hook、タイトル
Particles 背景、CTA収束
ScanLine 解析中演出
ProgressBar 並列処理表示
3D Parallax カード表示

詳細: references/visual-effects.md

Notes

  • Remotion未セットアップの場合は /remotion-setup を案内
  • 並列生成数はシーン数に応じて自動調整(max 5)
  • 生成された動画は out/ ディレクトリに出力
  • AI生成画像は out/assets/generated/ に保存
  • GOOGLE_AI_API_KEY 未設定時は画像生成をスキップ(既存素材 or プレースホルダー使用)
规范 gogcli 操作 Google Workspace(Drive/Sheets/Docs/Slides)的流程。涵盖认证管理、URL转ID解析、只读优先策略及读写确认机制,支持多账户切换与结构化输出,适用于文件管理与数据交互场景。
用户请求查询或修改 Google Drive 文件 需要读取或编辑 Google Sheets 表格数据 处理 Google Docs 文档内容 管理 Google Slides 演示文稿 解析 Google 服务 URL 获取资源 ID
skills/gogcli-ops/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill gogcli-ops -g -y
SKILL.md
Frontmatter
{
    "name": "gogcli-ops",
    "description": "gogcli for Google Workspace ops (Drive\/Sheets\/Docs\/Slides). Triggers: list\/search\/export\/read\/update Google files, URL\/ID parsing, auth selection. Skip for: non-Google storage, generic shell.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Grep",
        "Glob"
    ],
    "description-en": "gogcli for Google Workspace ops (Drive\/Sheets\/Docs\/Slides). Triggers: list\/search\/export\/read\/update Google files, URL\/ID parsing, auth selection. Skip for: non-Google storage, generic shell.",
    "description-ja": "gogcli でGoogle Workspace操作(Drive\/Sheets\/Docs\/Slides)。ユーザーがGoogleファイルの確認・検索・エクスポート・読み取り・更新をgogcliで依頼する時に使用。Trigger when a user asks to check, list, search, export, read, or update Google files via gogcli; when a Google URL\/ID needs parsing; when auth\/account selection or safe read-only workflows are needed; or when troubleshooting gogcli access\/errors. Do NOT load for: general file operations, non-Google cloud storage, or standard shell commands.",
    "disable-model-invocation": true
}

Gogcli Ops

Overview

Standardize gogcli usage: verify auth, resolve IDs from URLs, default to read-only checks, then run the minimum command needed.

Quick start

  • Confirm gogcli is available: gog --version
  • List accounts and pick one explicitly if more than one: gog auth list
  • Resolve URL to ID with python3 scripts/gog_parse_url.py "<url-or-id>"
  • Run a read-only metadata command first (Drive/Sheets/Docs/Slides)

Workflow decision tree

  1. Identify target type: sheet | doc | slide | file | folder | id | unknown via scripts/gog_parse_url.py.
  2. Choose the smallest read-only command to confirm access:
    • Sheets: gog sheets metadata <spreadsheetId>
    • Docs: gog docs info <docId>
    • Slides: gog slides info <presentationId>
    • Drive file/folder: gog drive get <fileId> or gog drive permissions <fileId>
  3. Only proceed to write operations (update/append/move/share/delete) after explicit user confirmation.

Core tasks

Auth and account selection

  • Show stored accounts: gog auth list
  • Show auth configuration: gog auth status
  • Add/authorize account: gog auth add <email>
  • Always use --account <email> when multiple accounts exist.

Resolve IDs from URLs

  • Parse a URL or ID:
    • python3 scripts/gog_parse_url.py "<url-or-id>"
  • If output type is unknown, ask for a direct ID or a different URL.

Drive (files/folders)

  • List root or a folder: gog drive ls
  • Search by query: gog drive search "<query>"
  • Get metadata: gog drive get <fileId>
  • Download/export: gog drive download <fileId>
  • Permissions check: gog drive permissions <fileId>

Sheets

  • Metadata: gog sheets metadata <spreadsheetId>
  • Read values: gog sheets get <spreadsheetId> <range>
  • Export: gog sheets export <spreadsheetId>
  • Write operations (update/append/clear/format): require explicit confirmation and exact range.

Docs

  • Metadata: gog docs info <docId>
  • Read text: gog docs cat <docId>
  • Export: gog docs export <docId>

Slides

  • Metadata: gog slides info <presentationId>
  • Export: gog slides export <presentationId>

Output modes

  • Use --plain for stable TSV output.
  • Use --json when a caller wants structured output.
  • Use --no-input in non-interactive flows to avoid hanging.

Error handling

  • 403/404: verify account (gog auth list), check permissions (gog drive permissions <fileId>), and confirm the ID.
  • If access fails, request the user to share the file with the selected account or provide the correct account.

Resources

  • See ${CLAUDE_SKILL_DIR}/references/gogcli-cheatsheet.md for a compact command list.
  • Use scripts/gog_parse_url.py to normalize URLs into IDs before running commands.
面向非技术人员提供验收演示HTML,用于ship/wait/reject决策。读取预设验收标准,基于通过率计算推荐结果,仅搜索当前项目数据,不执行写入操作。
接受判断 ship/wait/reject决策 验收评审 acceptance demo
skills/harness-accept/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-accept -g -y
SKILL.md
Frontmatter
{
    "name": "harness-accept",
    "description": "Acceptance Demo HTML for ship\/wait\/reject decision — reads stored acceptance_criteria. Triggers: 受け入れ判断, ship\/wait\/reject, 検収レビュー, acceptance demo. Skip for: implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "argument-hint": "[task-description]",
    "description-en": "Acceptance Demo HTML for ship\/wait\/reject decision — reads stored acceptance_criteria. Triggers: 受け入れ判断, ship\/wait\/reject, 検収レビュー, acceptance demo. Skip for: implementation, review, release.",
    "description-ja": "実装完了直後の受け入れ判断 (ship \/ wait \/ reject) 前に Acceptance Demo HTML を生成する。harness-plan-brief が `personal-preference.v1` で書き込んだ acceptance_criteria を `user_request_hash` 経由で取得し、各基準ごとに verified \/ unverified を表示。`recommendation` を ship \/ wait \/ reject の 3 値で算出し、根拠を HTML 上で可視化する。Use when: 受け入れ判断, 受入レビュー, ship\/wait\/reject 判定, 検収レビュー。Do NOT load for: 実装作業, code review, release。",
    "user-invocable": true
}

harness-accept

非エンジニアの発注者・プロデューサー職向けに、実装完了タスクの受け入れ判断 (ship / wait / reject) を HTML 1 枚 で提示するスキル。 発注者の認知負荷ピーク (3) 受け入れ判断の段階で使う。

Phase 65.1.x (harness-plan-brief) の対構造として動作し、Plan Brief で承認した acceptance_criteria を read 側で取り戻して評価する。

Quick Reference

  • Acceptance Demo を作って」 → このスキル
  • 受け入れ判断したい」 → このスキル
  • ship/wait/reject 判定」 → このスキル

責任境界

範囲 このスキルの責務
検索 現プロジェクトのみ (project: <current>, strict_project: true を必ず指定)
クロスプロジェクト やらない (Phase 65.3 以降で --cross-project-group <name> flag で opt-in 解放)
Plan Brief 連携 user_request_hash を join key として personal-preference.v1 (Phase 65.1.4) を read
書き込み やらない (Acceptance 承認後の memory write は accept-record-decision.sh の責務)
recommendation 算出 verified / 全 criteria の比率で 0.8 / 0.5 閾値判定。ロジックは scripts/render-html.sh 直前で計算

入力

引数 [task-description] にユーザーの request を渡す (Plan Brief 時と同じ文を使う)。 引数なしの場合は対話形式で受け取る。

出力

出力 パス 形式
Acceptance Demo HTML .claude/state/views/accept-<timestamp>.html 単独で開ける HTML (no server, no JS framework)
Acceptance context JSON .claude/state/views/accept-<timestamp>.context.json acceptance-context.v1 schema

Schema: acceptance-context.v1

{
  "schema": "acceptance-context.v1",
  "user_request": "string",
  "user_request_hash": "sha256 hex (Plan Brief 側の personal-preference.v1 と join)",
  "demo_artifacts": [
    { "kind": "video|screenshot|text", "path": "string" }
  ],
  "verified_criteria": [
    { "name": "string", "passed": true, "evidence": "string" }
  ],
  "tdd_verified": "yes|no|not-required|skip:<reason>",
  "unverified_caveats": ["string"],
  "past_issue_patterns": [
    { "pattern_id": "P5", "title": "string", "verified_in_current_task": true }
  ],
  "recommendation": "ship|wait|reject",
  "recommendation_evidence": ["string"],
  "project": "string",
  "generated_at": "ISO8601"
}

完全 schema は schemas/acceptance-context.v1.schema.json を参照。

Recommendation 算出ロジック

verified_count    = count of verified_criteria where passed=true
total_criteria    = count of verified_criteria
ratio             = verified_count / total_criteria  (total=0 のときは 0)

  ratio >= 0.8 → "ship"
  ratio >= 0.5 → "wait"
  ratio <  0.5 → "reject"
  total = 0    → "reject" (criteria 0 件は判定不能、安全側 reject)

評価根拠は recommendation_evidence に literal な数値で残す。 例: "verified 4 件 / 全 5 件 (80%) → ship 閾値以上"

Execution Flow

スキル起動時、Claude は以下の手順で動作する。

Step 1: project name と user_request_hash を解決

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)")"
USER_REQUEST_HASH="$(printf '%s' "$USER_REQUEST" | sha256sum | awk '{print $1}')"

PROJECT_NAME が空 (git 外) の場合は current をデフォルトに使う。

Step 2: harness-mem を project-only で検索し、Plan Brief 側 record を取得 (default)

引数に --cross-project-group <name> flag がない場合 (default behavior):

mcp__harness__harness_mem_search を以下のパラメータで呼び出す:

project: <PROJECT_NAME>
strict_project: true
tags: ["personal-preference", "plan-brief-approval"]
limit: 10

重要: project パラメータは必須strict_project: true を指定し、cross-project な検索は絶対に行わない

取得した record を data.user_request_hash == <USER_REQUEST_HASH> でフィルタし、最も新しい 1 件を選ぶ。 これが Plan Brief 時の承認内容 (chosen_option / acceptance_criteria 等) を保持している。

Step 2 (alt): cross-project search (Phase 65.3.5 opt-in)

引数に --cross-project-group <name> flag がある場合のみ、横断 group 内の他プロジェクトでの 類似 plan-brief-approval / acceptance-decision 履歴を取得する (D43 Option α):

MEMBERS_JSON="$(bash scripts/load-cross-project-groups.sh --group "<name>" 2>/dev/null)" || {
  echo "ERROR: cross-project group not found: <name>" >&2
  exit 1
}

MEMBERS_JSON[] の場合は default の単一 project search に fallback。

MEMBERS_JSON が非空の場合、各 member project ごとに MCP search を 1 回発行:

for each project in MEMBERS_JSON:
  mcp__harness__harness_mem_search(
    project: <member>,
    strict_project: true,
    tags: ["personal-preference", "plan-brief-approval"],
    limit: 10
  )

結果を client 側でマージし、data.user_request_hash == <USER_REQUEST_HASH> でフィルタ。 hash 一致は基本的に同一 user request 由来のため複数 project での重複は稀だが、念のため id 単位で dedupe。

cross-project 由来の record を採用すると過去他案件の chosen_option / acceptance_criteria が混入する 可能性があるため、HTML 出力時は --with-redaction flag を必ず使用 すること:

bash scripts/render-html.sh --template accept ... --with-redaction

詳細は .claude/rules/cross-repo-handoff.md の「Phase 65.3 実装決定事項 (D43)」を参照。

Step 3: 過去の問題パターンを取得 (Phase 65.2.2 委譲)

bash scripts/accept-past-issues.sh --project "$PROJECT_NAME" --task "$USER_REQUEST" > "$PAST_ISSUES_JSON"

このスクリプトは patterns.md (P1-P33) と過去の acceptance-context.v1 record を semantic search し、 最大 3 件の past-issue.v1 を返す。各々 verified_in_current_task: bool 付き。

Step 4: verified_criteria を組み立てる

Plan Brief 時の acceptance_criteria 各項目について、現タスクの状態を評価する。 ユーザー (もしくは Claude) が「verify した evidence」を提示し、evidence 文字列を埋める。

evidence が空文字列の場合、HTML 上で警告表示される (DoD c)。

TDD が必要な task では、Acceptance Demo に TDD verified: yes|no の 1 行を必ず出す。 TDD 不要または skip の場合は TDD verified: not-required または TDD verified: skip:<reason> と表示する。 yes にできるのは .claude/state/tdd-red-log/<task-id>.jsonl の Red 証跡、または literal failing test output が確認できる時だけ。

Step 5: recommendation を算出する

上記「Recommendation 算出ロジック」に従って ship / wait / reject を決定する。

Step 6: HTML を生成する

scripts/render-html.sh (Phase 65.1.1) を templates/html/accept.html.template で呼ぶ:

bash scripts/render-html.sh \
  --template accept \
  --data "$CONTEXT_JSON" \
  --out "$HTML_OUT"

Step 7: ブラウザで自動 open する

scripts/plan-brief-open.sh (Phase 65.1.2 で導入された 汎用 OS dispatcher) を再利用:

bash scripts/plan-brief-open.sh "$HTML_OUT"

: スクリプト名に「plan-brief」が入っているが、実体は OS 別 browser open dispatcher で kind 中立。 Phase 65.1.2 で先に導入されたため historical name。Layer 3 (HTML 直前最終 scan) 等の他用途でも再利用される。 BROWSER=true の env が設定されている場合 (CI 環境)、open は skip され printf で path だけ出力する。

Step 8: ユーザー判断待ち

「ship / wait / reject の recommendation を採用するか、override するか」を確認する。 判断後の memory write は別スキル (accept-record-decision.sh、Phase 65.2.3) の責務。

失敗時の挙動

失敗 挙動
mcp__harness__harness_mem_search 不達 警告を表示し、verified_criteria を空配列で続行 (recommendation = reject)
Plan Brief 側 record が見つからない warning を出し、verified_criteria を空配列で続行
git rev-parse --show-toplevel 失敗 PROJECT_NAME=current で続行
accept-past-issues.sh 失敗 past_issue_patterns: [] で続行 (best-effort)
render-html.sh 失敗 エラーを stderr に出力し exit 1

Related

  • harness-plan-brief (Phase 65.1.2) — 計画段階の対構造スキル。本スキルは Plan Brief 時の personal-preference.v1user_request_hash で join して read
  • scripts/accept-past-issues.sh (Phase 65.2.2) — 過去の問題パターン取得 (read side)
  • scripts/accept-record-decision.sh (Phase 65.2.3) — 承認 memory write (acceptance-decision.v1)
  • scripts/render-html.sh (Phase 65.1.1) — HTML テンプレートエンジン
  • scripts/plan-brief-open.sh (Phase 65.1.2) — 汎用 OS browser dispatcher
  • harness-progress skill (Phase 65.4.1) — 進行管理スキル (3 surface のうち真ん中)
结合/loop和ScheduleWakeup实现长时间任务循环执行。每次唤醒时携带新上下文重新进入,内部调用harness-work完成任务。适用于需持续运行的自主任务,不适用于一次性任务、审查或规划。
长时间运行任务 需要循环执行的流程 自动唤醒与恢复场景
skills/harness-loop/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-loop -g -y
SKILL.md
Frontmatter
{
    "base": "harness-work",
    "kind": "workflow",
    "name": "harness-loop",
    "pair": "harness-sync",
    "role": "orchestrator",
    "owner": "harness-core",
    "shape": "delegate",
    "since": "2026-05-05",
    "purpose": "Re-enter long-running Plans.md execution with fresh context",
    "trigger": "long-running, loop, wake-up, autonomous",
    "description": "Long-running task loop using \/loop (Claude Code dynamic mode) and ScheduleWakeup to re-enter with fresh context on each wake-up. Internally invokes harness-work through Agent. Trigger: long-running, loop, wake-up, autonomous. Do NOT load for: one-shot task execution, review, release, planning.",
    "allowed-tools": [
        "Read",
        "Edit",
        "Bash",
        "Task",
        "ScheduleWakeup",
        "mcp__harness__harness_mem_resume_pack",
        "mcp__harness__harness_mem_record_checkpoint"
    ],
    "argument-hint": "[all|N-M] [--max-cycles N] [--pacing worker|ci|plateau|night]",
    "description-en": "Long-running task loop using \/loop (Claude Code dynamic mode) and ScheduleWakeup to re-enter with fresh context on each wake-up. Internally invokes harness-work through Agent. Trigger: long-running, loop, wake-up, autonomous. Do NOT load for: one-shot task execution, review, release, planning.",
    "description-ja": "長時間タスクを \/loop と ScheduleWakeup で wake-up 毎に fresh context で再入実行。harness-work を内部で Agent 呼び出し。長時間、ループ、loop、wake-up、autonomous に対応。",
    "user-invocable": true
}

harness-loop

/loop(CC dynamic mode)と ScheduleWakeup を組み合わせ、 長時間タスクを wake-up 毎に fresh context で再入実行 するメタスキル。

各 wake-up で harness-work --breezing を Agent 経由で呼び出し、 1 サイクル = 1 タスク完結の再入可能ループを構成する。

Long-session helpers (CC 2.1.108+): 人が戻ってきたら /recap で要約を取り直してから /harness-loop status を見る。 長めの離席や再入が多い運用では ENABLE_PROMPT_CACHING_1H=1 を優先する。

長時間セッション推奨 (CC 2.1.108+): セッション長が 30 分を超える見込みの場合、plugin bundle root 解決後に bash "${HARNESS_PLUGIN_ROOT}/scripts/enable-1h-cache.sh" を実行して 1 時間 prompt cache を opt-in すること。

Codex 0.123.0 automatic bug fix inheritance: manual shell follow-up queue と /copy after rollback は Codex 本体の TUI 修正として自動継承する。 loop runner は追加入力 queue、copy wrapper、rollback workaround を追加しない。 長時間作業中に manual shell へ follow-up を投げた時の queueing は Codex runtime に任せる。

Quick Reference

入力 動作
/harness-loop all 全未完了タスクをループ実行(default: max 8 サイクル)
/harness-loop all --max-cycles 3 3 サイクルで停止
/harness-loop 41.1-41.3 --pacing ci タスク範囲を CI pacing で実行
/harness-loop all --plan roadmap named Plans の roadmap を対象にループ実行
/harness-loop all --pacing night 深夜バッチ(3600s 間隔)
/harness-loop status 進行中ランナーの状態確認
/harness-loop stop 進行中ランナーの停止要求

オプション

オプション 説明 デフォルト
all 全未完了タスクを対象 -
N-M タスク番号範囲指定 -
--plan NAME plans/manifest.json の named plan を使う active/default
--max-cycles N 最大サイクル数 8
--pacing <mode> wake-up 間隔モード worker(270s)

pacing 値マッピング

pacing delaySeconds 用途
worker 270 Worker 完了直後(5 min 以内で cache warm)
ci 270 CI 短時間ジョブ待ち
plateau 1200 20 min(plateau 検知後の再試行間隔)
night 3600 深夜の長時間放置

制約: ScheduleWakeupdelaySeconds はランタイムで [60, 3600] に clamp される。 worker / ci の 270s および night の 3600s はこの範囲内。 plateau の 1200s も範囲内。値を直接指定する場合は必ず 60 以上 3600 以下にすること。

起動フロー(wake-up 毎のエントリ)

詳細版: ${CLAUDE_SKILL_DIR}/references/flow.md

plugin bundle root 解決

harness-loop は host project の cwd ではなく、plugin bundle root 配下の helper script を呼ぶ。 たとえると、作業机(host project)と工具箱(plugin bundle)を分けて扱う。

各 wake-up の冒頭で次の順に HARNESS_PLUGIN_ROOT を決める:

  1. CLAUDE_PLUGIN_ROOT があり、scripts/ を含むならそれを使う
  2. CLAUDE_PLUGIN_ROOT がなければ、CLAUDE_SKILL_DIR から plugin bundle root を逆算する
    • skills/harness-loop 配布なら ${CLAUDE_SKILL_DIR}/../..
    • .agents/skills/harness-loop mirror 配布なら ${CLAUDE_SKILL_DIR}/../../..
  3. どちらでも解けない場合は停止し、CLAUDE_PLUGIN_ROOT を plugin bundle root に設定して再実行する

Plans.md.claude/state/... は host project 側に置く。 helper script だけを ${HARNESS_PLUGIN_ROOT}/scripts/... から呼ぶ。

複数 Plans.md がある repo では、長時間 run の起動時に --plan NAME を明示する。 runner は開始時に解決した Plans file を cycle 間で保持するため、途中で active plan を切り替えない。

wake-up
  │
  ▼
[Step 0] plugin bundle root を HARNESS_PLUGIN_ROOT に解決
  CLAUDE_PLUGIN_ROOT が有効ならそれを使用
  なければ CLAUDE_SKILL_DIR から plugin bundle root を逆算
  ※ host project cwd の scripts/ は参照しない
  │
  ▼
[Step 1] Plans.md を先に読む
  cc:WIP / cc:TODO の先頭タスクを特定(task_id を得る)
  ※ 未完了タスクなし → ループ終了(正常完了)
  │
  ▼
[Step 2] sprint-contract 存在確認 & 生成
  .claude/state/contracts/${task_id}.sprint-contract.json の有無を確認
  無ければ node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" ${task_id} で生成
  生成直後(初回のみ): bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" <contract-path> \
    --check "wake-up 自動承認(harness-loop のため DoD を reviewer 観点で確認)" \
    --approve  ← draft → approved に昇格
  (既存 contract は approved 済みのためスキップ)
  │
  ▼
[Step 3] contract readiness チェック
  bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" <contract-path>
  │
  ▼
[Step 4] Resume pack 再読込
  harness-mem resume-pack(コンテキスト再注入)
  │
  ▼
[Step 4.5] Advisor consult(必要時のみ)
  高リスク task の初回実行前 / 同じ原因の 2 回目失敗後 / plateau 直前で
  `advisor-request.v1` を組み立てて相談する
  │
  ├── PLAN        → 次回 executor prompt に advice を prepend
  ├── CORRECTION  → 局所修正の指示として再実行
  └── STOP        → その場で loop を停止し、理由を残す
  │
  ▼
[Step 5] 1 タスクサイクル実行
  worker_result = Agent(
      subagent_type="claude-code-harness:worker",  # worker エージェント(harness-work ではない)
      prompt="タスク: ${task_id}\nDoD: <Plans.md から抽出>\ncontract_path: ${CONTRACT_PATH}\nmode: breezing",
      isolation="worktree",
      run_in_background=false
  )
  # worker_result: { commit, branch, worktreePath, files_changed, summary }
  │
  ▼
[Step 5.5] Lead レビュー実行
  diff_text = git show worker_result.commit
  verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
  ※ 詳細は flow.md 参照
  │
  ▼
[Step 5.6] APPROVE → main に cherry-pick / REQUEST_CHANGES → 修正ループ(contract の max_iterations 回、デフォルト 3)
  APPROVE: git cherry-pick → Plans.md を cc:完了 [{hash}] に更新 → feature branch 削除
  REQUEST_CHANGES x MAX_REVIEWS 後も否決: エスカレーション
  ※ 詳細は flow.md 参照
  │
  ▼
[Step 6] plateau 判定
  bash "${HARNESS_PLUGIN_ROOT}/scripts/detect-review-plateau.sh" ${current_task_id}
  │
  ├── PIVOT_REQUIRED(exit 2)  → ループ停止 + ユーザーエスカレーション
  ├── INSUFFICIENT_DATA(exit 1)→ 続行
  └── PIVOT_NOT_REQUIRED(exit 0)→ 続行
  │
  ▼
[Step 7] サイクル数チェック
  │
  ├── cycles >= max_cycles → ループ停止(上限到達)
  │
  ▼
[Step 8] checkpoint 記録
  harness_mem_record_checkpoint(
      session_id, title, content=サイクル結果サマリ
  )
  │
  ▼
[Step 9] 次 wake-up 予約
  ScheduleWakeup(
      delaySeconds=<pacing値>,
      prompt="/harness-loop <同じ引数>",
      reason="サイクル {N}/{max} 完了 — 次タスクへ"
  )

サイクル停止条件

条件 停止種別 対応
cycles >= max_cycles 正常停止(上限到達) ユーザーに報告
PIVOT_REQUIRED(exit 2) 異常停止(エスカレーション) ユーザーに判断を仰ぐ
未完了タスクなし 正常停止(全完了) 完了報告を出力

--max-cycles 3 指定時は 3 サイクル完了後に停止する。 default(--max-cycles 8)時は 8 サイクルで停止する。

途中報告 / Silence Policy

長時間 loop では、途中報告は「安心のための heartbeat」ではなく「判断が変わった時の通知」として扱う。 Codex 0.123.0 の background agent が transcript delta を受け取れる環境では、delta 到着だけを理由に返答せず、必要ない時は明示的に沈黙する。

報告するもの:

  • cycle 完了、上限到達、全完了、blocked
  • validation failure、review REQUEST_CHANGES、plateau、advisor STOP
  • advisor / reviewer drift、contract readiness failure
  • user が status を求めた時の要約

沈黙してよいもの:

  • transcript delta だけが増え、task / review / advisor の状態が変わっていない時
  • log に残る細かな stdout だけが増えた時
  • 次 wake-up までの pacing 待機中

default は「1 cycle につき最終報告 1 回」。 ただし Advisor request 未応答、Reviewer result 未到着、plateau 直前の警告は silence policy より優先して報告する。

/loop との連携

このスキルは CC の /loop(dynamic mode)と組み合わせて使用する。

/loop を有効にすると CC は自律的な再入実行を継続し、 各サイクルの末尾で ScheduleWakeup を呼ぶことで次回 wake-up を予約する。

/loop のセンチネル: <<autonomous-loop-dynamic>>

各 wake-up は fresh context で開始されるため、前サイクルのコンテキスト汚染を防ぐ。 harness-mem resume-pack による resume pack 再読込が必須(Step 2)。

checkpoint 記録

harness_mem_record_checkpoint スキーマ:

{
  "session_id": "<セッション ID>",
  "title": "harness-loop cycle {N}/{max}: {タスク名}",
  "content": "cycle_result の 1 行サマリ + commit hash"
}

Advisor Strategy

この skill の主役は executor で、advisor は必要な時だけ呼ぶ。 たとえると、担当者が普段は自走し、難所だけベテランに相談する形。

相談条件は固定で、自然言語の「自信が低い」判定は使わない。

条件 相談するか
needs-spike / security-sensitive / state-migration する
<!-- advisor:required --> する
同じ原因の 2 回目失敗 する
plateau で停止する直前 する

同じ trigger は 1 回しか相談しない。 その判定には trigger_hash = task_id + reason_code + normalized_error_signature を使う。

関連スキル

  • harness-work — 各サイクルで実行されるタスク実装スキル
  • harness-plan — ループ対象タスクの計画
  • harness-review — 個別タスクのレビュー
  • session-control — セッション状態管理
用于可视化分析 Claude/Codex/Cursor 等后端工具的委托使用频率与时长。支持生成 HTML 评分卡或终端摘要,帮助用户了解 AI 辅助开发的投入分布及效率数据。
scorecard backend usage 自慢
skills/harness-orchestration/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-orchestration -g -y
SKILL.md
Frontmatter
{
    "name": "harness-orchestration",
    "description": "Backend orchestration scorecard (Claude\/Codex\/Cursor) — HTML + terminal summary. Triggers: scorecard, backend usage, 自慢. Skip for: implementation, review, planning, release.",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "argument-hint": "[--out <path>|--no-open|--terminal]",
    "description-en": "Backend orchestration scorecard (Claude\/Codex\/Cursor) — HTML + terminal summary. Triggers: scorecard, backend usage, 自慢. Skip for: implementation, review, planning, release.",
    "description-ja": "このセッション\/プロジェクトでどれだけマルチバックエンド (Claude \/ Codex \/ Cursor) を活用したかを見せる。ledger と累計から HTML スコアカード + ターミナルサマリを on-demand で生成する。「オーケストレーション活用」「scorecard」「どのバックエンド使った」「Codex\/Cursor どれだけ使った」「累計」「自慢」で発動。実装・レビュー・計画・リリースでは読み込まない。",
    "disallowed-tools": [
        "Write",
        "Edit",
        "MultiEdit"
    ]
}

Harness Orchestration Scorecard

このセッション/プロジェクトの backend 活用度(Claude=ホスト / Codex / Cursor への委譲)を可視化する read-only スキル。 記録の正本は .claude/state/orchestration-ledger.jsonl(companion が委譲ごとに追記、Phase 90.1.1)と .claude/state/orchestration-totals.json(セッション終了/完了時に冪等 roll up、Phase 90.1.2)。

表示は on-demand のみ。作業中は出さず、見たい時にこのスキルで出す。 全タスク完了時の 1 回だけは task-completed が自動でターミナルサマリを出す(このスキルとは別経路)。

Quick Reference

  • オーケストレーション活用度見せて」→ HTML スコアカードを生成して開く
  • どのバックエンド使った」「Codex/Cursor どれだけ」→ ターミナルサマリ
  • 累計見せて」「自慢できるやつ」→ HTML スコアカード(lifetime totals が主役)

Deliverables

出力 生成物
HTML スコアカード scripts/orchestration-scorecard.sh --format html-datascripts/render-html.sh --template orchestration で単一 HTML
ターミナルサマリ scripts/orchestration-scorecard.sh --format terminal(3-5 行)

tri-state: used(count>0)/ available(設定済み未使用)/ not-configured(binary 不在=中立、壊れではない)。 委譲ゼロなら "no delegations observed" に degrade。

Execution

helper script は plugin bundle root から呼ぶ:

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"

ターミナルサマリ(--terminal

bash "${HARNESS_PLUGIN_ROOT}/scripts/orchestration-scorecard.sh" --format terminal

3-5 行を要約してそのまま提示する。

HTML スコアカード(既定 / --out / --no-open

OUT="${1:-.claude/state/orchestration-scorecard.html}"   # --out <path> で上書き
bash "${HARNESS_PLUGIN_ROOT}/scripts/orchestration-scorecard.sh" --format html-data \
  | bash "${HARNESS_PLUGIN_ROOT}/scripts/render-html.sh" --template orchestration --data - --out "$OUT"
  • --no-open 指定がなければ生成後にパスを提示し、ブラウザで開くよう案内する(自動 open は環境依存なのでパス提示を基本とする)
  • redaction は使わない: scorecard データは構造的に非機密(カウント + backend 名 + repo basename + 時刻のみ)。no-secret 保証は上流の ledger 契約が担保する

Related Skills

  • harness-progress — 進捗ダッシュボード(タスク進捗。本スキルは backend 活用度に特化)
  • harness-work / breezing — 実装(backend を実際に使う側)
为项目经理生成实施前计划预览HTML,基于当前项目记忆搜索历史决策与模式。用于非技术人员快速理解计划、评估选项及风险,严格限制在项目范围内,不执行跨项目搜索或写入操作。
plan brief planning preview 計画概要 計画レビュー
skills/harness-plan-brief/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-plan-brief -g -y
SKILL.md
Frontmatter
{
    "name": "harness-plan-brief",
    "description": "Plan Brief HTML for pre-implementation preview (searches harness-mem for past decisions\/patterns). Triggers: plan brief, planning preview, 計画概要, 計画レビュー. Skip for: implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "argument-hint": "[task-description]",
    "description-en": "Plan Brief HTML for pre-implementation preview (searches harness-mem for past decisions\/patterns). Triggers: plan brief, planning preview, 計画概要, 計画レビュー. Skip for: implementation, review, release.",
    "description-ja": "実装着手前に Plan Brief HTML を生成する。現プロジェクトのみで harness-mem を検索し (`strict_project: true`)、過去 decision \/ pattern \/ Plans archive から類似案件を抽出して `plan-brief-context.v1` schema に整形、`render-html.sh` で単独 HTML を生成しブラウザ自動 open する。Use when: 計画概要, 非エンジニア向け事前共有, 提案前 review。Do NOT load for: 実装作業, code review, release。",
    "user-invocable": true
}

harness-plan-brief

非エンジニアの発注者・プロデューサー職向けに、Claude が着手しようとしている計画を HTML 1 枚 で提示するスキル。 発注者の認知負荷ピーク (1) 計画理解の段階で使う。

Quick Reference

  • Plan Brief を作って」 → このスキル
  • 実装前にざっくり整理」 → このスキル
  • 非エンジニア向けに計画を見せて」 → このスキル

責任境界

範囲 このスキルの責務
検索 現プロジェクトのみ (project: <current>, strict_project: true を必ず指定)
クロスプロジェクト やらない (Phase 65.3 以降で --cross-project-group <name> flag で opt-in 解放)
書き込み やらない (Plan Brief 承認後の memory write は plan-brief-record-decision.sh の責務)
confidence 算出 65.1.3 で実装される scripts/plan-brief-compile.sh に委譲

入力

引数 [task-description] にユーザーの request を渡す。 引数なしの場合は対話形式で受け取る。

出力

出力 パス 形式
Plan Brief HTML .claude/state/views/plan-brief-<timestamp>.html 単独で開ける HTML (no server, no JS framework)
Plan Brief context JSON .claude/state/views/plan-brief-<timestamp>.context.json plan-brief-context.v1 schema

Schema: plan-brief-context.v1

{
  "schema": "plan-brief-context.v1",
  "user_request": "string (ユーザーの request 原文)",
  "my_understanding": "string (Claude の理解を 1-3 段落で)",
  "options": [
    { "name": "string", "summary": "string", "pros": ["string"], "cons": ["string"] }
  ],
  "risks": [
    { "kind": "string", "severity": "info|warn|critical", "description": "string", "mitigation": "string" }
  ],
  "acceptance_criteria": [
    { "id": "string", "description": "string", "verifiable_by": "string" }
  ],
  "tdd_required": "yes|no|skip:<reason>",
  "confidence": 0,
  "confidence_evidence": ["string"],
  "related_decisions": [
    { "id": "string", "title": "string", "relevance": "string" }
  ],
  "similar_past_plans": [
    { "archive_path": "string", "phase": "string", "outcome": "cc:完了|cc:WIP|cc:TODO|skipped", "relevance": "string" }
  ],
  "project": "string",
  "generated_at": "ISO8601"
}

完全 schema は schemas/plan-brief-context.v1.schema.json を参照。

Execution Flow

スキル起動時、Claude は以下の手順で動作する。

Step 1: project name を解決

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)")"

PROJECT_NAME が空 (git 外) の場合は current をデフォルトに使う。

Step 2: harness-mem を project-only で検索する (default)

引数に --cross-project-group <name> flag がない場合 (default behavior):

mcp__harness__harness_mem_search必ず 以下のパラメータで呼び出す:

project: <PROJECT_NAME>
strict_project: true
query: <user request>
expand_links: true
limit: 5

重要: project パラメータは必須。空文字列や null を渡してはならない。 strict_project: true を指定し、cross-project な検索は絶対に行わない。 必要なら tags filter で decision / pattern を絞ってもよいが、project は固定。

過去 decision (D1-D41) / pattern (P1-P33) / Plans archive 28 件から類似案件を最大 5 件取得する。

Step 2 (alt): cross-project search (Phase 65.3.5 opt-in)

引数に --cross-project-group <name> flag がある場合のみ:

D43 Option α (MCP N-call) に従い、以下の手順で cross-project 検索を行う。

# (a) group → member projects に解決 (yaml SSOT)
MEMBERS_JSON="$(bash scripts/load-cross-project-groups.sh --group "<name>" 2>/dev/null)" || {
  echo "ERROR: cross-project group not found: <name>" >&2
  exit 1
}
# MEMBERS_JSON は ["proj1","proj2",...] 形式の JSON 配列

MEMBERS_JSON[] (空配列) の場合は warning を出して default の単一 project search に fallback。

MEMBERS_JSON が非空の場合、各 member project に対して MCP search を 1 回ずつ発行 する:

for each project in MEMBERS_JSON:
  mcp__harness__harness_mem_search(
    project: <member>,
    strict_project: true,
    query: <user request>,
    expand_links: true,
    limit: 5
  )

各 search 結果を client 側でマージ・dedupe (id 単位)・relevance_score 降順 sort し、最大 5 件に絞る。 合計呼び出し数が多くなる (group が 5 project なら 5 回) ため、レイテンシは増える点に注意。

D43 判断 1 の根拠: MCP tool schema には projects: [array]strict_project: false も exposed されていないため、横断検索は client 側 N-call が唯一の選択肢。 詳細は .claude/rules/cross-repo-handoff.md の「Phase 65.3 実装決定事項 (D43)」参照。

cross-project 結果には Layer 2/3 (Phase 65.3.2-65.3.4) の redaction を必ず通すこと:

  • HTML レンダリング時に bash scripts/render-html.sh ... --with-redaction を使用
  • これにより辞書 + NER + final scan の 3 段で固有名詞が漏れない

Step 3: context JSON を組み立てる

scripts/plan-brief-compile.sh (Phase 65.1.3 で実装) を使って、 mem search 結果から plan-brief-context.v1 schema 準拠の JSON を構築する。

65.1.3 が未実装の段階では、Claude が直接 jq で以下を組み立てる:

jq -n \
  --arg req "$USER_REQUEST" \
  --arg proj "$PROJECT_NAME" \
  --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
  '{
    schema: "plan-brief-context.v1",
    user_request: $req,
    my_understanding: "(まだ未着手)",
    options: [],
    risks: [],
    acceptance_criteria: [],
    confidence: 0,
    confidence_evidence: ["(stub) 65.1.3 で算出ロジック実装"],
    tdd_required: "no",
    related_decisions: [],
    similar_past_plans: [],
    project: $proj,
    generated_at: $ts
  }' > "$CONTEXT_JSON"

Step 4: HTML を生成する

scripts/render-html.sh (Phase 65.1.1) を templates/html/plan-brief.html.template で呼ぶ:

HTML には TDD 判定を 1 行で表示する。 形式は tdd_required: yestdd_required: no、または tdd_required: skip:<reason> のいずれかにする。

bash scripts/render-html.sh \
  --template plan-brief \
  --data "$CONTEXT_JSON" \
  --out "$HTML_OUT"

Step 5: ブラウザで自動 open する

scripts/plan-brief-open.sh で OS 別 dispatch:

bash scripts/plan-brief-open.sh "$HTML_OUT"

BROWSER=true の env が設定されている場合 (CI 環境)、open は skip され printf で path だけ出力する。

Step 6: ユーザー承認待ち

「この理解で実装に進んでよいか」を確認する。 承認後の memory write は別スキル (Phase 65.1.4 の plan-brief-record-decision.sh) の責務。

失敗時の挙動

失敗 挙動
mcp__harness__harness_mem_search 不達 警告を表示し、related_decisions / similar_past_plans を空配列で続行
git rev-parse --show-toplevel 失敗 PROJECT_NAME=current で続行
render-html.sh 失敗 エラーを stderr に出力し exit 1
plan-brief-open.sh 失敗 HTML path を stdout に出力するだけで exit 0 (browser open は best-effort)

Related

  • scripts/render-html.sh (Phase 65.1.1) — HTML テンプレートエンジン
  • scripts/plan-brief-compile.sh (Phase 65.1.3) — context compilation
  • scripts/plan-brief-record-decision.sh (Phase 65.1.4) — 承認 memory write
  • harness-accept skill (Phase 65.2.1) — 受け入れ判断スキル (対構造)
  • harness-progress skill (Phase 65.4.1) — 進行管理スキル (対構造)
用于研发任务的计划制定、Plans.md管理与进度同步。支持创建计划、添加任务、更新状态及检查一致性,确保多视角验证与规范对齐。不适用于代码实现、审查或发布环节。
需要制定项目或功能计划时 向 Plans.md 添加新任务时 更新任务完成状态时 检查实现与计划的同步进度时
skills/harness-plan/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-plan -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-plan",
    "pair": "harness-sync",
    "role": "generator",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "medium",
    "purpose": "Maintain co-required planning output for the spec.md product contract and Plans.md task contract",
    "trigger": "create a plan, add tasks, update Plans.md, check progress",
    "description": "HAR: Research-backed, team-validated task planning, Plans.md management, progress sync. Trigger: create a plan, add tasks, update Plans.md, mark complete, check progress. Do NOT load for: implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "Grep",
        "Glob",
        "WebSearch",
        "Task"
    ],
    "argument-hint": "[create|add|update|sync|sync --no-retro|--ci]",
    "description-en": "HAR: Research-backed, team-validated task planning, Plans.md management, progress sync. Trigger: create a plan, add tasks, update Plans.md, mark complete, check progress. Do NOT load for: implementation, review, release.",
    "description-ja": "HAR:調査・採点・記憶確認・TeamAgent\/サブエージェント検証つきのタスク計画、Plans.md管理、進捗同期を担当。計画作って、タスク追加、Plans.md更新、完了マーク、進捗確認で起動。実装・レビュー・リリースには使わない。",
    "user-invocable": true
}

Harness Plan

Harness の統合プランニングスキル。 以下の3つの旧スキルを統合:

  • planning (plan-with-agent) — アイデア → Plans.md への落とし込み
  • plans-management — タスク状態管理・マーカー更新
  • sync-status — Plans.md と実装の同期確認

Quick Reference

ユーザー入力 サブコマンド 動作
"計画を作って" / /harness-plan create create Spec delta / skip reason → Plans.md task 生成
"タスクを追加して" / /harness-plan add add Plans.md に新タスク追加
"完了にして" / /harness-plan update update タスクマーカーを cc:完了 に変更
"今どこ?" / /harness-plan sync sync 実装とPlans.mdを照合・同期
/harness-sync sync 進捗確認(独立 sync surface と同等)
/harness-plan create create spec.md / Plans.md 二正本の計画作成
/harness-plan list list plans/manifest.json の named Plans を一覧
/harness-plan switch <name> switch active plan を .claude/state/active-plan.json に保存

Literal companion commands(CC 2.1.108+)

  • /recap: 久しぶりに戻った時に要約を取り直してから sync へ入る
  • /undo: /rewind の別名。直前の plan 更新を即座に戻したい時にそのまま使う

サブコマンド詳細

標準の計画品質契約

See references/planning-quality.md

harness-plan は、spec.md product contract and Plans.md task contract の co-required planning output を作る planning surface である。 precedence は spec.md > sub-spec > Plans.md のまま維持する。 Plans.md は task ledger、root spec.md は product contract であり、上下関係は崩さない。 渡された情報をそのまま Plans.md に落とさない。 計画作成や大きな task 追加では、最新情報・既存仕様・記憶・TeamAgent / サブエージェントによる複数視点の議論を確認し、 このプロダクトに取り入れるべき要素だけを task contract に変換する。 /harness-plan createSpec delta または Spec skip reasonPlans.md task 生成をセットで返す。 出力には必ず Spec delta または Spec skip reason を含める。 Spec delta / Spec skip reason は Harness が生成し、consumer は承認・修正だけ行う。

Non-trivial planning gate:

単発・軽微タスクでない planning は、TeamAgent またはサブエージェント前提で扱う。 ここでの non-trivial は、複数 task / 複数 file / 複数 session / product behavior / API / data model / 権限 / 課金 / 外部連携 / 配布面 / セキュリティに影響する依頼を指す。 Task tool が使える場合は Product / Architecture / Security / QA / Skeptic の独立視点を走らせる。 使えない場合は サブエージェント未使用 と明示し、同じ観点を単独で分けて評価する。

non-trivial planning の出力には、次の検証を必ず含める。

  • team_validation_mode: not_required_lightweight / native / subagent / manual-pass / unavailable
  • spec.md / sub-spec / Plans.md の整合性
  • harness-mem / harness-recall / repo memory による車輪の再発明防止確認
  • プロダクト目的から外れていないか
  • セキュリティ、権限、秘密情報、サプライチェーンに問題がないか
  • lint / formatter baseline があるか。source code changes を含む plan で未設定なら、実装 task の前に setup task を置く
  • ちゃんと動く計画か。つまり test / smoke / CI / review / release gate が task DoD に落ちているか

軽量 task は team_validation_mode: not_required_lightweight でよい。 non-trivial planning は native / subagent / manual-pass のいずれかを使う。 unavailable のまま Required にしてはいけない。 Product / Architecture / Security / QA / Skeptic は検証 perspective であり、agent_type 名ではない。 利用可能な TeamAgent / Task サブエージェントに perspective として依頼し、任意 agent spawn を要求しない。 Security gate は秘密情報の実読取を要求しない。 .env や secret の read が必要になる場合は Risk Gate として止め、許可された既存 guard / evidence で確認する。

適用する場面:

  • create で新しい計画を作る
  • add で product behavior / API / 権限 / 課金 / 外部連携 / 配布面に影響する task を足す
  • ユーザーが外部プロダクト、競合、仕様案、改善案、比較材料を渡した
  • 既存仕様や過去判断との衝突リスクがある

軽く扱ってよい場面:

  • marker 更新だけの update
  • status 照合だけの sync
  • typo、format、README/CHANGELOG のみ
  • 既存 spec とテストで正解が固定されている狭い変更

品質フロー:

  1. 入力情報を分解し、評価対象・採点軸・不確かな事実を明示する
  2. 最新情報を取得する。外部事実は WebSearch / 公式ドキュメント / 一次情報を優先し、重要点は複数ソースでクロスチェックする
  3. 既存仕様・root spec.md・Plans.md・README・docs・CLAUDE.md・関連 skill を確認する
  4. harness-mem / harness-recall / .claude/agent-memory/ / .claude/state/ など、利用可能な記憶面を project-scoped で確認する
  5. non-trivial planning では TeamAgent / Task サブエージェントを使い、Product / Architecture / Security / QA / Skeptic など異なる視点で独立レビューする
  6. source code changes を含む plan では lint / formatter baseline を確認し、未設定なら setup task を先行させる
  7. 中立的な採点レビューを出し、Required / Recommended / Optional / Reject に分類する
  8. $easy 形式で、提案内容・理由・どうなるのかを報告する
  9. 採用する案だけを root spec.md / Plans.md / test task へ落とし込む

create — 計画作成

See references/create.md

アイデア・要件をヒアリングし、実行可能な Plans.md を生成する。

フロー:

  1. 会話コンテキスト確認(直前の議論から抽出 or 新規ヒアリング)
  2. 何を作るか聞く(max 3問)
  3. 計画品質チェック(最新情報、既存仕様、記憶、TeamAgent / サブエージェント複数視点レビュー、採点)
  4. 技術調査(WebSearch)
  5. 機能リスト抽出
  6. spec.md / Plans.md 二正本チェック(Spec delta または Spec skip reason + Plans.md task)
  7. 優先度マトリクス(Required / Recommended / Optional / Reject)
  8. TDD 採用判断(テスト設計)
  9. Plans.md 生成(cc:TODO マーカー付き)
  10. 次のアクション案内

spec.md / Plans.md 二正本チェック(デフォルト)

Plans.md は「やるべきこと」の task contract、root spec.md は「何が正しいか」の product contract として扱う。 co-required planning output は両方の出力を必須にするという意味であり、precedence は spec.md > sub-spec > Plans.md のまま維持する。 実装がぶれる可能性がある時は、Plans.md 生成前に root spec.md を更新する。 create と product-impacting add は毎回 root spec.md を読む。

優先する保存先:

  1. root spec.md
  2. consumer repo に root spec.md がない時だけ、既存の project spec / architecture / product compass
  3. consumer repo に root spec.md がない時だけ、docs/spec/00-project-spec.md
  4. 既存規約がある repo では、その規約に沿った spec path

作成/更新が必要な条件:

  • ユーザーに見える振る舞い、API、データモデル、権限、課金、外部連携を決める task
  • 複数の実装方針があり、選び方で product behavior が変わる task
  • 過去または今回の会話で「仕様が曖昧で実装がぶれた」兆候がある task
  • Plans.md には作業内容があるが、project としての正解条件が安定文書にない task

不要な条件:

  • typo、format、dependency bump、README/CHANGELOG のみ
  • 動作変更なしの狭い refactor
  • 既存 spec とテストで正解が十分に固定されている修正

出力契約:

  • Spec delta: product contract を更新する時に、対象 spec path と変更点を書く
  • Spec skip reason: product contract を更新しない時に、理由を書く
  • Spec delta / Spec skip reason は Harness が生成し、consumer は承認・修正だけ行う
  • docs-only / mechanical task でも Spec skip reason を task context / sprint contract に残す
  • missing search result、unavailable memory、未読ファイルを absent と断定しない。not_observed != absent
  • ユーザーに spec を一から書かせない。agent が既存 spec と入力から最小 delta を作り、曖昧な時だけ判断分岐を出す

参照:

  • docs/plans/spec-ssot.md

create 完了時のセッション起動案内(必須)

create が終わったら、説明だけで終わらせず、新しいセッションの起動コマンド起動後にそのまま入れる最初の指示プロンプト をセットで案内する。

優先順位は次の通り:

  1. 未完了タスクが 1 件だけ、または最初の 1 件だけ始めるのが自然
    • 起動コマンド: claude
    • 最初の入力: /harness-work <task番号>
  2. 依存の薄いタスクが複数あり、まとめて進めるのが自然
    • 起動コマンド: claude
    • 最初の入力: /breezing all
    • 代替: /harness-work all
  3. 長時間実行や再入が前提
    • 起動コマンド: ENABLE_PROMPT_CACHING_1H=1 claude
    • 最初の入力: /harness-loop all
    • 代替: /breezing all

最低でも次の 3 行を含める:

  • 新しいセッションの起動コマンド:
  • 起動後の最初の入力:
  • 向いている場面:

例:

新しいセッションの起動コマンド: claude
起動後の最初の入力: /breezing all
向いている場面: Phase 1 の task が複数あり、まとめて進めるほうが自然なため

長時間系を勧める場合は、Claude Code セッション起動コマンドも併記する:

新しいセッションの起動コマンド: ENABLE_PROMPT_CACHING_1H=1 claude
起動後の最初の入力: /harness-loop all
向いている場面: 5 分を超える待機や resume をまたぐ長時間タスクのため

補足:

  • scripts/claude-longrun.sh はこのリポジトリの開発補助スクリプトで、plugin install 後の consumer 環境には配布されない
  • そのため、consumer 向け案内では常に ENABLE_PROMPT_CACHING_1H=1 claude の 1 行コマンドを優先する
  • リポジトリ開発中だけ同等のラッパーを使いたい場合、bash scripts/claude-longrun.sh はローカル checkout 上では利用してよい

CI モード (--ci): ヒアリングなし。既存の Plans.md をそのまま利用してタスク分解のみ行う。

add — タスク追加

Plans.md に新しいタスクを追加する。 product-impacting な追加では、上の「spec.md / Plans.md 二正本チェック」に従い Spec delta または Spec skip reason も出力する。

/harness-plan add タスク名: 詳細説明 [--phase フェーズ番号]

タスクは cc:TODO マーカーで追加される。

update — マーカー更新

タスクのステータスマーカーを変更する。

/harness-plan update [タスク名|タスク番号] [WIP|完了|blocked]

マーカー対応表:

コマンド マーカー
WIP cc:WIP
完了 / done cc:完了
blocked blocked
TODO cc:TODO

sync — 進捗同期

実装状況と Plans.md を照合し、差分を検出・更新する。

See references/sync.md

フロー:

  1. Plans.md の現状取得
  2. Plans.md フォーマット検出(v1: 3 カラム / v2: 5 カラム)
  3. git status / git log から実装状況取得
  4. エージェントトレース確認(.claude/state/agent-trace.jsonl
  5. Plans.md と実装の差分検出
  6. 未更新マーカーの自動修正提案
  7. 次のアクション提示

レトロスペクティブ(デフォルト ON): cc:完了 タスクが 1 件以上あれば自動的に振り返りを実行する。 見積もり精度、ブロック原因パターン、スコープ変動を分析し、学びを記録。 sync --no-retro で明示的にスキップ可能。

team mode / issue bridge

Plans.md は正本のまま維持し、GitHub Issue 連携は opt-in の team mode だけで使う。

  • solo 開発では bridge を使わない
  • team mode は tracking issue を 1 つ作り、その配下に task ごとの sub-issue payload を dry-run で生成する
  • scripts/plans-issue-bridge.sh は実際に GitHub を更新せず、常に dry-run の payload を返す
  • Plans.md への変更はこの bridge では行わない

参照:

  • docs/plans/team-mode.md

named Plans

複数の Plans.md を使う場合は plans/manifest.json を正本にして、名前で選択する。

scripts/plan-registry.sh list
scripts/plan-registry.sh switch roadmap
scripts/plans-issue-bridge.sh --plan roadmap --format markdown
node scripts/generate-sprint-contract.js --plan roadmap 9.1.1

運用ルール:

  • 1 run では 1 つの named plan だけを使う
  • long-running / CI / issue bridge では active pointer に頼らず --plan <name> を渡す
  • manifest path は project root 相対のみ。絶対パス、..、repo 外 symlink は拒否される

参照:

  • docs/plans/named-plans.md

Plans.md フォーマット規約

フォーマット

# [プロジェクト名] Plans.md

作成日: YYYY-MM-DD

---

## Phase N: フェーズ名

| Task | 内容 | DoD | Depends | Status |
|------|------|-----|---------|--------|
| N.1  | 説明 | テスト通過 | - | cc:TODO |
| N.2  | 説明 | lint エラー 0 | N.1 | cc:WIP |
| N.3  | 説明 | マイグレーション実行可能 | N.1, N.2 | cc:完了 |

DoD(Definition of Done): 検証可能な完了条件を 1 行で記述。「いい感じ」「ちゃんと動く」は禁止。Yes/No で判定できる形にする。

Depends: タスク間の依存関係。-(依存なし)、タスク番号(N.1)、カンマ区切り(N.1, N.2)、フェーズ依存(Phase N)。

TDD tags

Plans.md の task には、TDD 判定を明示するタグを内容または DoD に書ける。

タグ 意味 tdd_required 推論
[tdd:required] この task は先に失敗テストを書く必要がある true
[tdd:skip:<reason>] この task は理由つきで TDD を省略する false, skip_tdd_reason=<reason>

<reason> は空にしない。 例: [tdd:skip:docs-only][tdd:skip:no-test-framework-detected]

タグがない場合の tdd_required は次の順で推論する。

  1. Plans.md tag: [tdd:required] / [tdd:skip:<reason>]
  2. files: src/, app/, cmd/, lib/, pkg/, internal/, go/ など source 実装を含むなら required
  3. TDD 推論: docs-only や test framework なしなら skip reason を付けて not required

optional briefs / manifest

harness-plan create は、必要なときだけ brief を付ける。

  • project spec SSOT は project 全体の正解条件を固定する文書で、必要時だけ作る
  • UI を含むタスクでは design brief
  • API を含むタスクでは contract brief
  • brief は「何を作るか」を短く固定する補助資料で、Plans.md や spec SSOT を置き換えない
  • skill frontmatter の一覧は scripts/generate-skill-manifest.sh で machine-readable JSON にできる

参照:

  • docs/plans/briefs-manifest.md
  • docs/plans/spec-ssot.md

マーカー一覧

マーカー 意味
pm:依頼中 PM から依頼済み
cc:TODO 未着手
cc:WIP 作業中
cc:完了 Worker 作業完了
pm:確認済 PM レビュー完了
blocked ブロック中(理由を必ず記載)

関連スキル

  • harness-sync — 実装と Plans.md を同期する
  • harness-work — 計画したタスクを実装する
  • harness-review — 実装のレビュー
  • harness-setup — プロジェクト初期化
生成项目进度追踪HTML,汇总Plans.md中待办、进行中及已完成任务数量,计算完成率、耗时与成本,并显示偏差警告。旨在让非技术人员快速掌握当前会话整体进展。
progress tracker 進捗確認 進捗ボード dashboard
skills/harness-progress/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-progress -g -y
SKILL.md
Frontmatter
{
    "name": "harness-progress",
    "description": "Progress Tracker HTML showing cc:WIP\/cc:TODO\/cc:完了 counts + drift alerts from Plans.md. Triggers: progress tracker, 進捗確認, 進捗ボード, dashboard. Skip for: implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Write",
        "Bash"
    ],
    "argument-hint": "[--out <path>] [--no-open]",
    "description-en": "Progress Tracker HTML showing cc:WIP\/cc:TODO\/cc:完了 counts + drift alerts from Plans.md. Triggers: progress tracker, 進捗確認, 進捗ボード, dashboard. Skip for: implementation, review, release.",
    "description-ja": "進捗 Tracker HTML を生成する。Plans.md を SoT として cc:WIP \/ cc:TODO \/ cc:完了 件数・%、経過分数・コスト・drift alert を 1 枚 HTML で表示。PostToolUse hook で 60 秒に 1 回自動再生成。Use when: 進捗確認, 進捗ボード, dashboard。Do NOT load for: 実装作業, code review, release。"
}

Harness Progress Tracker

Phase 65.4 (Progress Tracker) — 3rd surface of the cognitive-load HTML triplet. Plan Brief / Acceptance Demo に続く 3 つ目の HTML surface で、進行中セッションの全体像を 1 枚の紙で把握 できるようにする。

Quick Reference

入力 動作
/harness-progress 現プロジェクトの進捗 snapshot HTML を生成し開く
/harness-progress --no-open 生成のみ (browser 開かない、PostToolUse hook 用)
/harness-progress --out <path> 出力先指定 (default: out/progress-snapshot.html)

Mission

"今のセッションは何件のタスクをどこまで終わらせて、いつ終わる見込みで、いくら使ったか" を、 エンジニアじゃない vibecoder が 3 秒でブラウザで把握 できる HTML 1 枚を生成する。

やる:

  • Plans.md の cc:TODO / cc:WIP / cc:完了 件数を集計
  • progress_pct (完了率) を計算 (cc:完了 ÷ 総タスク × 100)
  • 経過分数 / 推定総分数 / コスト so-far / コスト estimate を表示
  • drift alert を表示 (Phase 65.4.3 以降で populate)

やらない (本 cycle):

  • WebSocket / SSE による live update (静的 HTML、再生成で更新)
  • 過去 session の history 比較 (Phase 65.4.4 で別軸)
  • 他 project の cross-project view (Phase 65.3 と独立)

Schema: progress-snapshot.v1

詳細仕様: schemas/progress-snapshot.v1.schema.json

schema:        progress-snapshot.v1
project:       <basename of git repo>
current_task:  <cc:WIP の最初の項目 1 行サマリ、なければ空文字>
progress_pct:  <0-100 の整数、cc:完了 ÷ 総タスク × 100 の四捨五入>
todo_tasks:    [{number, title}]    ← cc:TODO のみ
wip_tasks:     [{number, title}]    ← cc:WIP のみ
done_tasks:    [{number, title, commit}]   ← cc:完了 [hash] のみ、hash は 7 chars
elapsed_minutes:          <int, state file から>
estimated_total_minutes:  <int, state file から>
cost_so_far_usd:          <float, state file から>
cost_estimate_usd:        <float, state file から>
alerts:                    []   ← Phase 65.4.3 以降で populate
generated_at:             <ISO8601 UTC>

Execution Flow

Step 0: PROJECT_NAME を取得

PROJECT_NAME="$(basename "$(git rev-parse --show-toplevel)" 2>/dev/null || echo "current")"

Step 1: snapshot を組み立て

SNAPSHOT_JSON="$(mktemp /tmp/progress-snapshot-XXXX.json)"
bash scripts/progress-snapshot.sh \
  --plans Plans.md \
  --project "$PROJECT_NAME" \
  > "$SNAPSHOT_JSON"

scripts/progress-snapshot.sh (Phase 65.4.1 で実装) は Plans.md を parse し progress-snapshot.v1 schema 準拠の JSON を出力する。

Step 2: HTML をレンダリング

OUT_PATH="${OUT_PATH:-out/progress-snapshot.html}"
mkdir -p "$(dirname "$OUT_PATH")"

bash scripts/render-html.sh \
  --template progress \
  --data "$SNAPSHOT_JSON" \
  --out "$OUT_PATH"

Step 3: ブラウザで開く

--no-open flag がない場合のみ実行 (PostToolUse hook からの背景再生成では skip):

bash scripts/plan-brief-open.sh --path "$OUT_PATH"

Cross-project search (default OFF)

Phase 65.4.4 で --cross-project-group <name> flag が追加される。本 cycle (65.4.1) では default OFF、現プロジェクトのみ集計する。

Failure modes

状態 動作
Plans.md が無い progress-snapshot.sh が exit 1 (clear error message)
Plans.md にタスクが 1 件もない progress_pct: 0, 空配列 で snapshot 生成 (HTML は「タスクなし」表示)
state file (経過分数等) が無い elapsed_minutes: 0, cost_so_far_usd: 0 で fallback (warning なし)
git 不在 / git repo 外 project: "current" で fallback

Related

  • harness-plan-brief (Phase 65.1.x) — 1st surface (実装前の説明会)
  • harness-accept (Phase 65.2.x) — 2nd surface (検収判断)
  • harness-progress (本 skill, Phase 65.4.x) — 3rd surface (進捗ダッシュボード)
  • 65.4.2 (PostToolUse auto-regen)、65.4.3 (drift alert 5 種)、65.4.4 (過去判断 lookup) で機能拡張
面向使用Keep a Changelog和GitHub的项目,提供通用发布自动化。经单次确认后,自动执行版本检测、日志更新、合并、打标签及发布流程。支持无参触发,严格遵循完成定义与运行时限制。
用户输入 release, /release 或指定版本类型 检测到版本变更 用户要求发布
skills/harness-release/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-release -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-release",
    "pair": "harness-review",
    "role": "orchestrator",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "high",
    "context": "fork",
    "purpose": "Release projects through changelog, version, PR\/main merge, tag, and GitHub Release gates",
    "trigger": "release, version bump, publish",
    "description": "Generic release automation for projects using Keep a Changelog + GitHub. Single confirmation gate then end-to-end automation: bump detection, CHANGELOG promotion, PR\/main merge, tag, GitHub Release. Trigger: release, version bump, publish. Do NOT load for: implementation, review, planning, setup.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "AskUserQuestion",
        "Skill"
    ],
    "argument-hint": "[patch|minor|major|--dry-run]",
    "description-en": "Generic release automation for projects using Keep a Changelog + GitHub. Single confirmation gate then end-to-end automation: bump detection, CHANGELOG promotion, PR\/main merge, tag, GitHub Release. Trigger: release, version bump, publish. Do NOT load for: implementation, review, planning, setup.",
    "description-ja": "汎用リリース自動化スキル。Keep a Changelog と GitHub を使うあらゆるプロジェクトで動作。単一確認ゲートで bump 判定・CHANGELOG 昇格・PR\/main 反映・タグ・GitHub Release まで全自動実行する。リリース、バージョンバンプ、タグ作成、公開で起動。実装・コードレビュー・プランニング・セットアップには使わない。",
    "user-invocable": true
}

Harness Release (汎用)

Keep a Changelog + GitHub を使うあらゆるプロジェクト向けの汎用リリース自動化スキル。

設計原則: 単一確認ゲート。ユーザーは 1 回だけ全体計画を見て承認する。承認後はファイル書き換え → commit → branch push → PR 作成/更新 → default branch へ merge → default branch 上で tag → GitHub Release までを中断なく実行する。

Release complete の定義: release は「tag と GitHub Release を作った」だけでは完了ではない。対象 work と release bump が default branch(通常 main)に merge 済みで、release tag が default branch 到達可能 commit を指し、GitHub Release がその tag を公開している状態を完了とする。

Literal invocation note: この skill の入口は harness-release, /release, /release patch, /release --dry-run のような literal command をそのまま使う。

CC runtime hard floor との関係

Claude Code 2.1.183+ の runtime hard floor は GitHub CLI release publish 系コマンドを構造的に deny する (Anthropic 製品仕様、settings.jsonpermissions.ask で覆せない)。本 skill は publish 自体を実行せず、.github/workflows/release.yml (tag push trigger) に委譲する。skill は tag push までで責務を完了し、その後 scripts/release-verify-publish.sh で workflow による公開を verify する。

Revert 条件: CC が runtime hard floor に user explicit approval path を提供したら、Post-Gate に直接 publish step を戻すことを検討する。

Bare invocation contract

if $ARGUMENTS == "": → 「今までの作業をコミットし、PR/main 反映まで完了してリリースしたい」と解釈し、Review Gate 検出を実行する → 対象 work が 1 つに確定できる場合だけ Step 0 (Review Gate) へ自動進行する → 対象が不明または review state が無い場合は AskUserQuestion で選択肢を出してから進める

引数なし呼び出し時の最初の応答で必ず次の literal marker を出力する:

RELEASE_AUTOSTART: target=<work-summary>, base_ref=<ref>, mode=<patch|minor|major|auto>

「タスクが不明確」「指示を待ちます」「タスクがありません」「追加の指示をお待ちします」は禁止行動。

Output Contract (P35: 「止まったように見える」UX 対策)

skill 結論時の output の 最後の 1 行は必ず P35 footer を含め、footer は本文 (user-facing prose) と同じ言語で出力する(言語解決は既存の言語ルールに従い、footer 契約は言語を再定義しない)。これは <local-command-stdout> 経由の表示で user が「止まった」と感じる UX 問題への明示的な instruction (patterns.md P35) で、意図は言語に依存しないため literal は言語ごとに切り替える (#208):

  • ja: ↑この結果は Claude が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。
  • en: ↑Claude will summarize this result. Press Enter to continue, or send a new prompt for a different instruction.
  • その他の言語: 同じ意味の 1 行を本文と同じ言語で出力する

Language

User-facing prose follows the explicit session or project language. If no language is configured, use English. Use Japanese only when i18n.language: ja, CLAUDE_CODE_HARNESS_LANG=ja, or an explicit session instruction requests Japanese output. Machine-readable values stay English.

harness-release / /release だけが入力された場合、これは 「今までの作業をコミットし、PR/main 反映まで完了してリリースしたい」 という意味として扱う。 旧表現の 「今までの作業をコミットしてリリースしたい」 も同じ意図だが、完了条件には PR/main 反映を必ず含める。 「タスクがありません」「指示を待ちます」で止まってはいけない。

bare release では、通常の release preflight の前に Review GateWork Commit Gate を実行する。

  1. git status --porcelaingit log @{upstream}..HEAD / main..HEAD を確認し、「今までの作業」の対象を特定する
  2. .claude/state/review-result.json.claude/state/review-approved.json を確認し、対象 work に APPROVE 済み review があるか確認する
  3. APPROVE 済み review が無い場合は AskUserQuestion で確認する
  4. ユーザーが「レビューから開始」を選んだら、harness-review を起動し、APPROVE になるまで release へ進まない
  5. harness-reviewREQUEST_CHANGES を返した場合は release を保留し、harness-work で修正してから harness-review を再実行する。これを APPROVE までループする
  6. harness-reviewAPPROVE を返した後、working tree の作業 commit を作る
  7. working tree clean になってから通常の release preflight / confirmation gate / PR merge / tag / GitHub Release へ進む

Review Gate AskUserQuestion

harness-release 実行時に review approval が確認できない場合は、推測で release しない。 次の Ask を出す。

question: "harness-release は今までの作業をコミットしてリリースしますが、この作業の APPROVE review が見つかりません。どう進めますか?"
options:
  - label: "レビューから開始 (Recommended)"
    description: "harness-review を実行し、APPROVE になった場合だけ commit/release へ進みます。"
  - label: "release dry-run"
    description: "ファイルを書き換えず、release 計画と不足 gate だけ確認します。"
  - label: "中止"
    description: "review も release も行わず止めます。"

ユーザーが「レビューから開始」を選んだ場合は、同じセッション内で harness-review から始める。 harness-review の対象決定は harness-review 側の bare review contract に従う。 review が APPROVE なら、そのまま harness-release の Work Commit Gate へ戻る。 review が REQUEST_CHANGES なら release は保留し、harness-work で修正してから harness-review を再実行する。 この修正後再レビュー loop は APPROVE まで継続する。

Persist Verdict after Review Gate (required / #218 fix)

harness-review 委譲後、必ず .claude/state/review-result.json に verdict が永続化されている ことを確認する。harness-review 側の Persist Verdict step が踏まれていれば既に保存済みだが、 踏み忘れ時の 二段防御として、Review Gate 側でも次の check + 補完保存を行う。これを欠かすと Work Commit Gate (Step 6) の git commit が PreToolUse commit guard でブロックされる

# 1. 保存済みか確認
if [ -f .claude/state/review-result.json ] \
   && [ "$(jq -r '.verdict // empty' .claude/state/review-result.json 2>/dev/null)" = "APPROVE" ]; then
  echo "review-result.json already persisted with APPROVE"
else
  # 2. 未保存なら orchestrator が in-context の verdict JSON を一時ファイルへ書き出し
  mkdir -p .claude/state
  cat > .claude/state/tmp-review-result.json <<'JSON'
{ "schema_version": "review-result.v1", "verdict": "APPROVE", ... }
JSON
  bash "${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-$PWD}}/scripts/write-review-result.sh" \
    .claude/state/tmp-review-result.json \
    "$(git rev-parse --short HEAD 2>/dev/null || true)"
  rm -f .claude/state/tmp-review-result.json
fi

multi-commit セーフティ: Phase 94.1.3 で PostToolUse commit-cleanup が VERSION / .claude-plugin/plugin.json / harness.toml / CHANGELOG.md のみの bookkeeping commit を認識し承認削除を skip するようになったため、 Post-Gate の version bump commit (Step 11) は harness-release の自動 commit でそのまま通過する。 それ以前のバージョン (4.15.0 以前) を使う場合は、Work Commit Gate と version bump commit の間に 再度 Persist Verdict を行うこと。

ユーザーに戻してよいのは次の場合だけ。

  1. 修正に仕様正本 / Plans.md / API / permission / migration / billing などの意思決定が必要で、AskUserQuestion が必要
  2. 修正方針が複数あり、どれを採るかでユーザー価値や互換性が変わる
  3. ユーザーが Ask で release dry-run または 中止 を選んだ

REQUEST_CHANGES 単体を最終停止理由にしてはいけない。

Work Commit Gate

bare release で working tree に未コミット変更がある場合、release version bump commit とは別に、 review 済み work commit を先に作る。

git status --short
git diff --stat
git add <reviewed files>
git commit -m "<type>: <summary>"

commit message は review summary / Plans.md task / branch name から短く生成する。 判断できない場合は AskUserQuestion で 2〜3 個の commit message 候補を出す。 work commit 作成後に .claude/state/review-result.jsoncommit_hash を確認または更新し、 release preflight へ進む。

通常の release preflight に入った後は、これまで通り working tree dirty を fail とする。 dirty tree のまま version bump / tag / GitHub Release に進まない。

Quick Reference

/release              # 今までの作業を review gate → commit → PR/main merge → release する
/release patch        # bump を patch に明示指定
/release minor        # bump を minor に明示指定
/release major        # bump を major に明示指定
/release --dry-run    # 計画の表示のみ、実行しない

前提条件

このスキルが動くプロジェクトは以下を満たす必要があります:

  1. CHANGELOG.mdKeep a Changelog 形式
  2. [Unreleased] セクションが存在する
  3. 以下のいずれかの version file を持つ:
    • VERSION (単独ファイル)
    • package.json (npm)
    • pyproject.toml (Python, [project] または [tool.poetry])
    • Cargo.toml (Rust, [package])
  4. gh CLI がインストール済みで、認証済み
  5. git リモート origin が GitHub を指す
  6. Claude Code plugin project の場合は、claude CLI が plugin tag をサポートしている

これらが満たされない場合、Preflight で detect して abort します。

prUrlTemplate による multi-host review URL は将来候補として認識するが、 このスキルの release automation は今も gh CLI と GitHub remote を primary path とする。 owner / branch / release asset / CI metadata の自動取得は host ごとの差が大きいため、Phase 56.2.3 では docs-only に留める。

単一ゲートフロー

[Bare release only: 作業 review/commit 前段]
  ↓
  0. Review Gate (未レビューなら AskUserQuestion → harness-review)
  0.5 Work Commit Gate (review APPROVE 済み work を release bump と分けて commit)
  ↓
[Pre-Gate: 情報収集のみ、ファイル未変更]
  ↓
  1. Preflight (working tree clean / CHANGELOG / gh 等の確認)
  2. Version file 自動検出
  3. 現在バージョンの読み取り
  4. Claude plugin tag preflight (plugin project の場合のみ)
  5. [Unreleased] 内容の解析 → bump level 推定
  6. 新バージョン算出
  7. CHANGELOG 差分ドラフト作成 (メモリ上)
  8. GitHub Release notes ドラフト作成 (メモリ上)

★━━━━━━ 単一確認ゲート ━━━━━━★
  ユーザーに全計画を 1 回だけ提示:
    - 検出された version file
    - 現バージョン → 新バージョン
    - bump 判定理由 ("[Unreleased] に ### Added があるため minor" 等)
    - CHANGELOG 変更プレビュー
    - GitHub Release notes ドラフト
    - コミット対象ファイル一覧
    - 最終アクション (branch push + PR merge + tag + release publish)

  ユーザー応答:
    "yes"        → Post-Gate へ進む
    "<修正指示>"  → 指示に応じて draft を再生成、再確認
    "cancel/no"  → 何もせず終了
★━━━━━━━━━━━━━━━━━━━━━━━★
  ↓
[Post-Gate: 承認後、中断なし]

  9. Version file 書き換え
  10. CHANGELOG.md 書き換え ([Unreleased] → [X.Y.Z] 昇格 + compare link)
  11. git add + commit
  12. release branch push
  13. PR 作成/更新
  14. default branch へ merge
  15. default branch を fetch/checkout し、release commit が到達可能であることを確認
  16. Claude plugin tag validation + tag (plugin project の場合のみ)
  17. GitHub Release 用 semver tag (必要な project のみ)
  18. git push origin <default-branch> --tags
  19. tag push 後、`.github/workflows/release.yml` が release を公開し、`release-verify-publish.sh` で verify
  20. 完了報告

Pre-Gate 詳細

1. Preflight

# 必須ツール
command -v gh >/dev/null || { echo "gh CLI がありません"; exit 1; }
command -v python3 >/dev/null || { echo "python3 が必要です"; exit 1; }

# working tree
if [ -n "$(git status --porcelain)" ]; then
  echo "working tree に未コミット変更があります"; exit 1;
fi

# CHANGELOG
[ -f CHANGELOG.md ] || { echo "CHANGELOG.md がありません"; exit 1; }
grep -q "^## \[Unreleased\]" CHANGELOG.md || { echo "[Unreleased] セクションがありません"; exit 1; }

# plugin/mirror projects
scripts/release-preflight.sh

この working tree clean check は通常 release preflight の gate である。 bare release で「今までの作業」を commit したい場合は、この check の前に Review Gate と Work Commit Gate を完了させる。 未レビューの dirty tree をこの check だけで abort して終わらせてはいけない。

scripts/release-preflight.sh は tag 作成前に opencode/, skills-codex/, codex/.codex/skills/ の mirror drift も検出する。node scripts/build-opencode.js が差分を生成した場合は release を止め、その差分を commit してから tag に進む。

2. Version File 自動検出

以下を優先順で探索。最初に見つかったものを正本とする:

# Python snippet to run inline
import os, json, re
import tomllib  # Python 3.11+

def detect_version_file():
    if os.path.exists("VERSION"):
        with open("VERSION") as f:
            return ("VERSION", f.read().strip(), None)
    if os.path.exists("package.json"):
        with open("package.json") as f:
            data = json.load(f)
        return ("package.json", data["version"], None)
    if os.path.exists("pyproject.toml"):
        with open("pyproject.toml", "rb") as f:
            data = tomllib.load(f)
        if "project" in data:
            return ("pyproject.toml", data["project"]["version"], "[project]")
        if "tool" in data and "poetry" in data["tool"]:
            return ("pyproject.toml", data["tool"]["poetry"]["version"], "[tool.poetry]")
    if os.path.exists("Cargo.toml"):
        with open("Cargo.toml", "rb") as f:
            data = tomllib.load(f)
        return ("Cargo.toml", data["package"]["version"], "[package]")
    raise RuntimeError("No supported version file found")

詳細: version-files.md

3. Claude Plugin Tag Preflight

.claude-plugin/plugin.json が存在する project では、通常の GitHub Release tag とは別に Claude plugin release tag も作る。

ひとことで言うと、git tag -a を手で組み立てる前に、Claude Code 本体の plugin validation に通してから {plugin-name}--v{version} tag を作る。

Pre-Gate ではファイルを書き換えず、以下を確認する。 version sync は grep / sed で拾わず、JSON は structured parser で読む:

command -v claude >/dev/null || { echo "claude CLI がありません"; exit 1; }
claude plugin validate .claude-plugin/plugin.json

HARNESS_PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-.}"
python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .

claude plugin tag .claude-plugin --dry-run

${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py は、存在する release surface をすべて読み取り、canonical を VERSION > package.json > .claude-plugin/plugin.json > .codex-plugin/plugin.json の順で決める。 そのうえで、以下の不一致・欠落が 1 つでもあれば tag / release に進まない:

  • VERSION
  • package.json.version
  • .claude-plugin/plugin.json.version
  • .codex-plugin/plugin.json.version
  • .claude-plugin/marketplace.json.metadata.version
  • .claude-plugin/marketplace.json.plugins[].version(配列内の各 plugin entry)

不一致時は、どの surface が canonical と違うか、またはどの field が missing / invalid かを表示する。 機械処理や CI で読む場合は --json を使う:

python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root . --json

この check は 3 つの事故を防ぐためにある:

  • VERSION.claude-plugin/plugin.json の version がずれたまま tag を切る事故
  • package.json / marketplace entry の version が古いまま release workflow に進む事故
  • plugin manifest / marketplace entry の validation を通さず、あとで plugin install / update 側で詰まる事故

--dry-run では claude plugin tag が実際に作る tag 名と内部の git tag -a / push 相当コマンドが見える。ここで見えた command を Confirmation Gate の plan に含める。

4. Bump 自動推定

[Unreleased] 直下の見出しを解析して bump level を決定:

[Unreleased] 内の見出し 推定 bump
### Breaking Changes または ### Removed を含む major
### Added を含む (Removed/Breaking なし) minor
### Fixed / ### Changed / ### Security のみ patch
空セクション error: リリース対象なし

ユーザーが /release patch|minor|major で明示指定した場合はそちらを優先。 詳細: bump-detection.md

5. CHANGELOG ドラフト作成 (メモリ上)

以下を計算、まだ書き込まない:

  1. ## [Unreleased] の本文を切り出し
  2. ## [Unreleased]## [<previous>] の間に ## [<new>] - YYYY-MM-DD を挿入した形を作成
  3. 末尾 compare link:
    • [Unreleased]: .../compare/v<prev>...HEADv<new>...HEAD
    • [<new>]: .../compare/v<prev>...v<new> を追加
  4. repo URL は既存の [Unreleased]: 行から動的抽出

6. Release Notes ドラフト作成 (メモリ上)

## [<new>] セクションの内容を元に、GitHub Release 用のマークダウンを生成:

## What's Changed

**<リリーステーマ(1行)>**

### Before / After
<テーブル>

### Added / Changed / Fixed / Removed
<該当セクションをコピー>

---

🤖 Generated with [Claude Code](https://claude.com/claude-code)

詳細: release-notes.md

Confirmation Gate

すべてのドラフトが揃ったら、ユーザーに 1 回だけ提示:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Release Plan: v<old> → v<new> (<bump>)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 Version file: <detected file>
 Bump reason:  <why this level was chosen>

 CHANGELOG changes:
   [Unreleased] に <N> 項目の変更を検出
   [<new>] - YYYY-MM-DD として確定
   Compare link を追加

 GitHub Release notes preview:
   <最初の 10 行>
   ...

 Files to modify:
   - <version file>
   - CHANGELOG.md

 Final actions:
   - git commit -m "chore: release v<new>"
   - git push origin <release-branch>
   - gh pr create/update + gh pr merge into <default-branch>
   - git fetch origin <default-branch> && git checkout <default-branch>
   - claude plugin tag .claude-plugin --push --remote origin  # plugin project の場合。default branch 上で実行
   - git tag -a v<new>                                        # GitHub Release 用 semver tag が必要な場合。default branch 上で作成
   - git push origin <default-branch> --tags
   - (tag push 後は GitHub Actions release workflow が自動で release 公開)

Proceed? [yes / cancel / <修正指示>]

Post-Gate 詳細

承認後は中断なしで実行。失敗時は以下の方針:

失敗箇所 復旧
ファイル書き換え失敗 そこで abort、ローカルは dirty なまま人間が判断
commit 失敗 hook 拒否等。ユーザーに原因を提示して修正を促す
PR 作成/merge 失敗 release を未完了として停止。tag / GitHub Release には進まない
plugin tag validation 失敗 VERSION / .claude-plugin/plugin.json / marketplace entry の不一致を修正し、tag 作成には進まない
push 失敗 リモート側の問題。ローカル commit/tag は残す

PR / Main Merge Gate

Post-Gate の release commit 後は、tag を作る前に GitHub PR を default branch へ merge する。

release_branch="$(git branch --show-current)"
default_branch="${HARNESS_RELEASE_DEFAULT_BRANCH:-main}"

git push -u origin "$release_branch"
gh pr create --base "$default_branch" --head "$release_branch" --title "chore: release v<new>" --body "<release summary>"
gh pr merge --merge --delete-branch=false

git fetch origin "$default_branch" --tags
git checkout "$default_branch"
git pull --ff-only origin "$default_branch"
git merge-base --is-ancestor "<release-commit>" "origin/$default_branch"

既存 PR がある場合は新規作成せず、既存 PR の body を更新して merge する。repository policy が squash merge を要求する場合は、release commit hash ではなく release bump の内容(version files + CHANGELOG + source commits)が default branch に含まれることを確認する。

tag はこの Gate 完了後、default branch の HEAD もしくは release commit 到達可能な commit に対して作る。release branch 上だけに存在する commit を指す tag で GitHub Release を作ってはいけない。

Claude plugin project の tag 作成

.claude-plugin/plugin.json がある project では、PR/main merge 後に default branch 上でもう一度 version sync を確認してから plugin tag を作る:

HARNESS_PLUGIN_ROOT="${CLAUDE_PLUGIN_ROOT:-.}"
python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .

claude plugin tag .claude-plugin --dry-run
claude plugin tag .claude-plugin --push --remote origin

claude plugin tag が作る tag は {plugin-name}--v{version} 形式。既存の GitHub Release workflow が vX.Y.Z tag を前提にしている project では、plugin tag とは別に git tag -a v<new> を作る。plugin 配布の tag は claude plugin tag に任せ、GitHub Release 用 semver tag は release automation の互換 surface として扱う。

Verify Workflow Publish

Tag push 後、.github/workflows/release.yml が release を自動公開する。skill は以下で結果を verify する:

OWNER="$(git remote get-url origin | sed 's|.*github.com[:/]\([^/]*/[^/]*\)\.git|\1|')"
bash scripts/release-verify-publish.sh "v${NEW_VERSION}" "${OWNER}"

タイムアウト: 5 秒間隔 × 60 回 = 最大 5 分 polling。

  • exit 0: PASS — draft=false 且つ assets 4 platform 揃って公開済
  • exit 2: WARN — timeout (tag は push 済のため abort せず人間判断を促す)
  • exit 3: ERROR — API error (権限/認証問題、手動調査が必要)

Verify は gh api 経由 (gh release prefix は CC runtime hard floor で deny されるため)。

--dry-run モード

Pre-Gate 全てを実行し、Confirmation Gate までの内容を表示するが、gate で止まり Post-Gate に進まない

Claude plugin project の場合、dry-run でも python3 "${HARNESS_PLUGIN_ROOT}/scripts/check-release-version-sync.py" --root .claude plugin tag .claude-plugin --dry-run を実行し、実際に作られる plugin tag 名と push 対象を表示する。ここで VERSION / package.json / .claude-plugin/plugin.json / .codex-plugin/plugin.json / .claude-plugin/marketplace.json の version surface が不一致または欠落していれば、dry-run の時点で止める。

環境変数

プロジェクトごとの調整に使用:

変数 説明
HARNESS_RELEASE_PROJECT_ROOT リポジトリルート (デフォルト: $(pwd))
HARNESS_RELEASE_BRANCH push 対象ブランチ (デフォルト: 現在のブランチ)
HARNESS_RELEASE_DEFAULT_BRANCH PR merge 先 default branch (デフォルト: main)
HARNESS_RELEASE_HEALTHCHECK_CMD Preflight で追加実行するコマンド
HARNESS_RELEASE_SKIP_GH 1 で GitHub Release 作成をスキップ

CHANGELOG 書き方ルール

[Unreleased] セクションは必ず以下のいずれかのサブセクションを持つ:

## [Unreleased]

### Added       ← minor
### Changed     ← patch
### Deprecated  ← minor
### Removed     ← major
### Fixed       ← patch
### Security    ← patch
### Breaking Changes  ← major (Keep a Changelog 非標準だが一般的)

このスキルはこれらの見出しを機械的に解析するため、見出しの表記揺れ(### Fix / ### Bug Fixes 等)は認識できません。KaCL 標準の見出しを使用してください。

関連スキル

  • harness-release-internal - 本体 claude-code-harness のリリース時に追加で走らせる harness 固有 preflight/finalization(配布対象外)
  • harness-plan - Plans.md 管理
  • harness-review - リリース前のコードレビュー

設計思想

  • 単一ゲート: ユーザーの判断タイミングは 1 回だけ。mini-confirmation を挟むとラバースタンプ化して意味を失う
  • 事前に全て描く: Post-Gate に入ってからの「考え直し」を禁ずる。Gate 前に全 draft を揃える
  • main 反映が完了条件: release tag / GitHub Release は default branch 反映後にだけ作る。branch-only release は未完了として扱う
  • 失敗は transparent: 途中で失敗したら自動ロールバックは試みず、ユーザーに現状を提示して判断させる
  • プロジェクト非依存: VERSION file 形式、mirror、residue check など特定環境の前提を持たない。本体 harness 固有の処理は harness-release-internal に分離
用于多角度代码、计划和范围的审查,包含安全与质量检查。支持自动检测或指定目标,提供多种审查模式如快速审查、安全审查及双人复核等,仅执行只读审查操作,不自动提交或推送。
review code review plan review scope analysis
skills/harness-review/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-review -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-review",
    "pair": "harness-work",
    "role": "evaluator",
    "owner": "harness-core",
    "shape": "evaluate",
    "since": "2026-05-05",
    "effort": "high",
    "context": "fork",
    "purpose": "Review code, plans, scope, and evidence before acceptance",
    "trigger": "review, レビューして, code review, plan review, scope analysis",
    "description": "HAR: Multi-angle code, plan, scope review. Security\/quality check. Trigger: review, code review, plan review, scope analysis. Do NOT load for: implementation, new features, bugfix, setup, release.",
    "allowed-tools": [
        "Read",
        "Grep",
        "Glob",
        "Bash",
        "Task",
        "Monitor",
        "AskUserQuestion"
    ],
    "argument-hint": "[code|plan|scope|--quick|--codex-closeout|--dual|--team-debate|--security|--ui-rubric]",
    "description-en": "HAR: Multi-angle code, plan, scope review. Security\/quality check. Trigger: review, code review, plan review, scope analysis. Do NOT load for: implementation, new features, bugfix, setup, release.",
    "description-ja": "HAR:コード・プラン・スコープを多角的にレビュー。セキュリティ・品質チェック。レビューして、レビュー、コードレビュー、プランレビュー、スコープ分析で起動。実装・新機能・バグ修正・セットアップ・リリースには使わない。",
    "user-invocable": true
}

Harness Review

Harness の統合レビュースキル。 この SKILL.md は薄い dispatcher であり、詳細な品質基準は references/ を読む。

if $ARGUMENTS == "": → 「今までの作業のレビュー」と解釈し、Review target detection を実行する → review target が 1 つに確定できる場合だけ自動開始する → review target が不明または複数候補の場合は AskUserQuestion で選択肢を出し、認識を揃えてから開始する

Output Contract (P35: 「止まったように見える」UX 対策)

skill 結論時の output の 最後の 1 行は必ず P35 footer を含め、footer は本文 (user-facing prose) と同じ言語で出力する(言語解決は既存の言語ルールに従い、footer 契約は言語を再定義しない)。これは <local-command-stdout> 経由の表示で user が「止まった」と感じる UX 問題への明示的な instruction (patterns.md P35) で、意図は言語に依存しないため literal は言語ごとに切り替える (#208):

  • ja: ↑この結果は Claude が要約します。Enter キーで次へ進むか、新規 prompt で別の指示を出してください。
  • en: ↑Claude will summarize this result. Press Enter to continue, or send a new prompt for a different instruction.
  • その他の言語: 同じ意味の 1 行を本文と同じ言語で出力する

Dispatcher Contract

この skill の責務は review 判定だけ。 commit / push / release は既定では行わない。

  • review default read-only boundary: 既定は read-only。APPROVE でも自動 commit しない
  • Do not push just to review: review 目的だけで push しない
  • commit が必要な場合は、ユーザー明示依頼、harness-work、または harness-release の Work Commit Gate に委譲する
  • --commit-on-approve のような明示 opt-in が設計されるまで、この skill 単体の default side effect は禁止

Quick Reference

Command Mode Purpose
/harness-review code 今までの作業を自動検出して review
/harness-review --quick quick 小さな dirty change を軽く closeout
/harness-review --codex-closeout codex-closeout Codex 助言 + focused tests で closeout
/harness-review --dual dual Claude + Codex second opinion
/harness-review --cursor code+cursor-second-opinion core review gates に cursor (composer-2.5-fast) second-opinion を加算 (read = lean、Opus reviewer 必須併走)
HARNESS_IMPL_BACKEND=cursor harness-review code+cursor-second-opinion default ON 時も core review gates に cursor second-opinion を自動加算。primary verdict は Opus/brain 固定
/harness-review --team-debate team-debate TeamAgent Debate を強制
/harness-review --security security security 専用 review
/harness-review plan plan Plans.md の計画 review
/harness-review scope scope scope creep / 漏れ review

Mode Decision

引数から実行 mode を決定し、必要な references/ を選択ロードする。

入力 mode 読む reference
引数なし / code code references/code-review.md, references/governance.md
--quick quick references/codex-closeout.md, references/code-review.md
--codex-closeout codex-closeout references/codex-closeout.md
--dual dual references/dual-review.md, references/team-debate.md
--team-debate team-debate references/team-debate.md, references/governance.md
--security security references/security-profile.md, references/governance.md
--ui-rubric ui-rubric references/ui-rubric.md
plan plan references/plan-review.md, references/governance.md
scope scope references/scope-review.md, references/governance.md
--cursor or resolver result cursor for no-arg / code review only code+cursor-second-opinion references/code-review.md, references/governance.md, references/cursor-review.md, references/dual-review.md
full full references/code-review.md, references/team-debate.md, references/dual-review.md

quickcodex-closeout は軽量 path。 小さな dirty change、single commit、PR branch の closeout を速く見る。 品質 gate を捨てるものではない。

Cursor Default ON

mode 判定時、明示 mode words (plan, scope, full) と明示フラグを先に確定する。no-arg / code review の場合だけ helper root を解決して resolver を 1 回だけ実行し、resolver 不在時は claude とみなす。

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"; if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"; while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do probe="$(cd "$probe/.." && pwd)"; done; [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"; fi
if [ -x "${HARNESS_PLUGIN_ROOT:-}/scripts/resolve-impl-backend.sh" ]; then resolved_backend="$(bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh" --role reviewer)"; else resolved_backend="claude"; fi

no-arg / code review で結果が cursor の場合は --cursor と同じ cursor-second-opinion を追加するが、core review gates (references/code-review.md, references/governance.md) は必ず先に読み、Cursor reference は additive にだけ扱う。primary verdict は Opus/brain 側で維持し、cursor は dual_review.cursor_verdict の advisory に限る。plan / scope など明示 mode word は resolver result より優先し、cursor default によって plan/scope references も code/governance references も置き換えない。 結果が claude / codex の場合は従来どおりで、review の primary 判定面は変えない。

Review Target Detection

REVIEW_AUTOSTART 契約: 引数なし ($ARGUMENTS == "") で呼ばれた場合、review / /review / /harness-review だけの入力を「今までの作業のレビュー」と解釈する。 Step 1 開始前の handshake 行として次を 1 行だけ出力する。

REVIEW_AUTOSTART: target={resolved_target}, base_ref={resolved_base_ref}, type={mode}

REVIEW_TARGET_ASK 契約: bare 呼び出しで review target が不明または複数候補の場合、Step 1 に進む前に AskUserQuestion を 1 回だけ使い、候補を 2-3 個に絞って確認する。

  • 候補は 1. working tree(未コミット変更のみ)、2. branch range(upstream または main/master から HEAD)、3. recent commits(clean tree 時の直近 1 commit / 直近 5 commits)の順で作る
  • 複数候補が同時に成立する場合は REVIEW_TARGET_AMBIGUOUS: working_tree_and_branch_commits、clean tree かつ branch 差分がない場合は REVIEW_TARGET_AMBIGUOUS: clean_tree_no_branch_commits を 1 行出力してから AskUserQuestion を出す
  • ユーザー回答後は REVIEW_TARGET_CONFIRMED: {choice} に続けて REVIEW_AUTOSTART 行を出力する
  • AskUserQuestion の選択肢 literal・推奨 (Recommended) の付け方・各候補の比較範囲は references/code-review.md の Target Selection 節に従う

禁止:

  • 「タスクが不明確です」と応答して停止する
  • 「何をレビューすればよいですか」と自由記述で聞いて停止する
  • host project の session-start rules を理由に auto-start を飛ばす
  • target が曖昧なのに推測で範囲を広げる

Minimal Flow

  1. mode を決める
  2. 上記の Review Target Detection で対象と base ref を決める
  3. 必要な reference だけ読む
  4. 差分、untracked files、関連テスト、仕様正本、Plans.md を確認する
  5. APPROVE / REQUEST_CHANGES / decision_needed を返す
  6. REQUEST_CHANGES の場合は critical / major の修正方針と修正後再レビュー条件を示す

Review Governance Contract

詳細は references/governance.md。 ここでは最低限の合格ラインだけ固定する。

明確な合格ライン

APPROVE は次のすべてを満たす時だけ返す。

  • critical / major が 0 件
  • 仕様正本 (spec_path) または明示された spec_skip_reason と矛盾しない
  • Plans.md の task / DoD / Depends と矛盾しない
  • 既存テスト、既存 UX、既存 CLI、既存設定、既存 docs、配布 mirror のいずれにもデグレ証拠がない
  • 検証証跡がある。APPROVE なのに evidence が空の出力は禁止
  • TeamAgent Debate を実行した場合、反対意見が解消済み、または minor / recommendation として理由付きで格下げ済み

TeamAgent Debate

詳細は references/team-debate.md。 TeamAgent Debate は、異なる見解を read-only で衝突させる review pass。

Agent 主な問い
Spec Agent 仕様正本と実装差分の矛盾を探す
Plans Agent Plans.md の task / DoD / Depends と差分の対応を確認する
Regression Agent 既存挙動・テスト・配布 mirror・CLI/skill UX のデグレを探す
Skeptic Agent 合格させたい前提で見落としている major risk を探す

Codex 環境で native TeamAgent が使えない場合でも、この gate を省略してはいけない。 codex-companion.sh review、利用可能な reviewer subagent、または明示的に分けた read-only manual-pass で同じ 2-4 視点を再現し、team_agent_modenative / codex-companion / manual-pass / unavailable を記録する。

Code Review Summary

詳細は references/code-review.md。 通常 code review は次を見る。

  • Security
  • Performance
  • Quality
  • Accessibility
  • AI Residuals
  • Spec Alignment
  • Plans Alignment
  • Regression Safety
  • TDD compliance

仕様正本 alignment check は必須。 spec_path がある場合は差分が仕様正本と矛盾しないか確認し、仕様正本が必要なのに無い場合は spec_skip_reason の妥当性を見る。 Plans.md alignment check とデグレ alignment check も同じ gate で扱う。

AI Residualsscripts/review-ai-residuals.shscripts/review-weak-supervision-report.sh を優先して使う。 untracked も見る場合は --include-untracked を使う。 mockData, dummy, fake, localhost, TODO, FIXME, it.skip, test.skip, expect(true).toBe(true) などは候補であり、diff 文脈で severity を決める。 finding 段階は網羅優先。minor と判定した指摘も observations[] / recommendations[] に残し、gate は verdict 段階だけで行う(Opus 4.8 は low-severity の報告を絞る癖がある。references/code-review.md の Finding coverage 参照)。

TDD compliance check

TDD が required の task では skip_tdd_reason、red-log、focused tests の証跡を確認する。 証跡なしで APPROVE しない。

Quick / Codex Closeout Summary

詳細は references/codex-closeout.md

軽量 path の原則:

  • target selection を先に固定する
  • Codex 指摘は advisory として扱い、実コードで確認してから採否を決める
  • final report には review command / tests / accepted findings / rejected findings / clean result を含める
  • stop-on-clean: clean result 後に、見栄えのためだけの追加 review をしない
  • Codex が使えない場合は full manual pass に fallback し、失敗を成功扱いしない

helper:

bash scripts/harness-review-closeout.sh --dry-run --uncommitted
bash scripts/harness-review-closeout.sh --base origin/main --parallel-tests --test "bash tests/test-harness-review-governance.sh"
bash scripts/harness-review-closeout.sh --commit HEAD

Plan Review Summary

詳細は references/plan-review.md。 Plan Review は Plans.md の DoD / Depends / Status と実装順序を見る。 仕様正本が必要なタスクで spec_path がない場合は、decision_needed として止める。

Scope Review Summary

詳細は references/scope-review.md。 Scope Review は、要求・差分・テスト・docs の境界が膨らんでいないかを見る。 範囲変更が必要なら、推測で進めず AskUserQuestion または plan 更新に戻す。

Security / UI / Dual

  • Security: references/security-profile.md
  • UI rubric: references/ui-rubric.md
  • high-res vision flow: references/vision-high-res-flow.md
  • Dual review: references/dual-review.md

/ultrareview は Harness flow 内では既定で呼ばない。 Harness flow の review-result.v1、commit guard、sprint-contract との接続を置き換えないため。 claude ultrareview [target] --json は CI / script からの second-opinion としてだけ扱う。

PR Host Boundary

GitHub-first。 PR host 上の review 事実は GitHub を正とし、local diff は補助証拠として扱う。 ただし local uncommitted review は GitHub に push しない。

Output Contract

User-facing prose follows the explicit session or project language. If no language is configured, use English. Use Japanese only when i18n.language: ja, CLAUDE_CODE_HARNESS_LANG=ja, or an explicit session instruction requests Japanese output. Machine-readable values stay English.

Start with the result summary.

## Review Result

### {APPROVE | REQUEST_CHANGES | decision_needed} - {one-line conclusion}

Target: `{BASE_REF}..HEAD` or `{target}`
Verification: {commands run}

Strengths:
- ...

Findings:
- [severity] file:line - issue and evidence

Next Actions:
- ...

Details:
```json
{
  "schema_version": "review-result.v1",
  "verdict": "APPROVE | REQUEST_CHANGES",
  "decision_needed": {
    "required": false,
    "ask_tool": "AskUserQuestion"
  },
  "accepted_findings": [],
  "rejected_findings": [],
  "acceptance_bar": {
    "critical_major_zero": true,
    "spec_alignment": "pass | fail | not_applicable",
    "plans_alignment": "pass | fail | not_applicable",
    "regression_safety": "pass | fail | not_applicable",
    "verification_evidence": "pass | fail | not_applicable"
  },
  "team_debate": {
    "required": false,
    "mode": "native | codex-companion | manual-pass | unavailable",
    "team_agent_mode": "native | codex-companion | manual-pass | unavailable",
    "agents": [],
    "disagreements": []
  },
  "critical_issues": [],
  "major_issues": [],
  "observations": [],
  "recommendations": []
}
```

Persist Verdict (required for commit guard / #218 fix)

Output Contract の JSON ブロックを出力したら、verdict が .claude/state/review-result.json必ず永続化されるよう以下の step を最後に実行する。これを踏み忘れると、PreToolUse commit guard が 後続 git commitAPPROVE 無しでブロックする (harness-work step 10 と同じ pattern)。

# 1. 上の JSON ブロックを一時ファイルへ書き出す (verdict / acceptance_bar 等を実値で)
mkdir -p .claude/state
cat > .claude/state/tmp-review-result.json <<'JSON'
{ "schema_version": "review-result.v1", "verdict": "APPROVE", ... }
JSON

# 2. write-review-result.sh で正規化保存 (commit_hash は省略可)
bash "${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-$PWD}}/scripts/write-review-result.sh" \
  .claude/state/tmp-review-result.json \
  "$(git rev-parse --short HEAD 2>/dev/null || true)"

# 3. 一時ファイル削除
rm -f .claude/state/tmp-review-result.json

verdictREQUEST_CHANGES でも保存する (commit guard は APPROVE のみ通過させ、REQUEST_CHANGES は履歴として残す)。 harness-release の Review Gate から委譲された場合も同じ step を踏む。

reviewer subagent は read-only (allowed-tools: Read, Grep, Glob) のため、上記 write 操作は orchestrator (skill を呼んだ main agent) が行う。

Codex Environment

Codex 環境では使える tool が異なる。 それでも、合格ライン、仕様正本、Plans.md、デグレ、修正後再レビュー、AskUserQuestion / decision_needed.v1 の契約は同じ。

通常環境 Codex fallback
Task tool の TeamAgent Debate reviewer subagent / codex-companion.sh review / manual-pass
AskUserQuestion 使えない場合は decision_needed.v1 を stdout に出し、推測で進めない
TaskList Plans.md を直接読む

Related Skills

  • harness-work: REQUEST_CHANGES 後の修正実行
  • harness-plan: plan / scope / spec の更新
  • harness-release: review 済み work の commit / release
用于项目初始化、CI/CD配置、Codex集成、内存设置及技能镜像同步。涵盖子命令init/ci/codex等,支持多语言检测、Go二进制验证及健康检查。禁止用于实现、审查或规划阶段。
setup init new project CI/Codex setup harness-mem mirror
skills/harness-setup/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-setup -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-setup",
    "pair": "harness-sync",
    "role": "generator",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "medium",
    "purpose": "Initialize and repair Harness project configuration",
    "trigger": "setup, init, new project, CI\/Codex setup, harness-mem, mirror",
    "description": "HAR: Project init, tool setup, agent config, memory setup, skill mirror sync. Trigger: setup, init, new project, CI\/Codex setup, harness-mem, mirror. Do NOT load for: implementation, review, release, planning.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Grep",
        "Glob",
        "Bash"
    ],
    "argument-hint": "[init|ci|codex|harness-mem|mirrors|agents|localize]",
    "description-en": "HAR: Project init, tool setup, agent config, memory setup, skill mirror sync. Trigger: setup, init, new project, CI\/Codex setup, harness-mem, mirror. Do NOT load for: implementation, review, release, planning.",
    "description-ja": "HAR:プロジェクト初期化・ツール設定・エージェント構成・メモリ設定・skill mirror 同期を担当。セットアップ、初期化、新規プロジェクト、CI\/Codex CLI セットアップ、harness-mem、mirror で起動。実装・レビュー・リリース・プランニングには使わない。",
    "user-invocable": true
}

Harness Setup

Harness の統合セットアップスキル。 以下の旧スキルを統合:

  • setup — 統合セットアップハブ
  • harness-init — プロジェクト初期化
  • harness-update — Harness アップデート
  • maintenance — ファイル整理・クリーンアップ

Quick Reference

サブコマンド 動作
/harness-setup init 新規プロジェクト初期化(CLAUDE.md + Plans.md + hooks + sync + doctor)
/harness-setup ci CI/CD パイプライン設定
/harness-setup codex Codex CLI インストール・設定
/harness-setup harness-mem harness-mem 統合・メモリ設定
/harness-setup mirrors skills/ → 公開 mirror bundle 更新
/harness-setup agents agents/ エージェント設定
/harness-setup localize CLAUDE.md ルールのローカライズ

Built-in slash discovery (CC 2.1.108+): /init のような built-in slash command も発見される。 Harness 固有の bootstrap が必要な時だけ /harness-setup init と使い分ける。

Claude Code setup guidance (CC 2.1.120+): MCP alwaysLoad${CLAUDE_EFFORT}claude plugin pruneclaude project purgeANTHROPIC_BEDROCK_SERVICE_TIERclaude_code.skill_activated.invocation_trigger、 Windows PowerShell primary shell、forked skills / subagents の deferred tools は docs/claude-code-setup-mcp-telemetry-provider.md を正本として扱う。

Codex plugin workflows: Codex /goalPlans.md を二重管理しない。 plugin-bundled hooks は opt-in、external agent import は ownership 明記、 MultiAgentV2 / agents.max_threads = 8 は上限として扱い、 sticky environments / app-server artifacts は safe default を優先する。 Codex 0.130.0 stable の codex remote-control、large thread pagination、 selected-environment view_image、live app-server config refresh、 accurate turn diffs、plugin details bundled hooks、sharing discoverability controls は docs/codex-plugin-workflows-policy.md を正本として扱う。 詳細は docs/codex-plugin-workflows-policy.md を参照。

サブコマンド詳細

init — プロジェクト初期化

新規プロジェクトに Harness を導入する。

生成ファイル:

project/
├── CLAUDE.md            # プロジェクト設定
├── Plans.md             # タスク管理(空テンプレート)
├── .claude/
│   ├── settings.json    # Claude Code 設定
│   └── hooks.json       # フック設定(Go バイナリ)
└── hooks/
    ├── pre-tool.sh      # 薄いシム(→ core/src/index.ts)
    └── post-tool.sh     # 薄いシム(→ core/src/index.ts)

フロー:

  1. プロジェクト種別を検出(Node.js/Python/Go/Rust/その他)
  2. 最小限の CLAUDE.md を生成
  3. Plans.md テンプレートを生成
  4. hooks.json を配置
  5. Go バイナリ検証: harness version でバイナリが利用可能か確認(v4.0 以降 Node.js 不要)
  6. プラグインファイル同期: harness sync.claude-plugin/ 配下のファイルを最新に同期。harness.toml が無く sync が失敗する場合は先に harness init を実行する(Setup hook 導入前にブートストラップされたプロジェクトの復旧経路)
  7. ヘルスチェック: harness doctor で全チェック項目をパス。問題があれば修正案を提示

Go バイナリ検証

# バイナリの存在と動作を確認
harness version
# 例: harness v4.0.0 (go1.22.0, darwin/arm64)

v4.0 以降、Harness のコアエンジンは Go バイナリに移行した。 Node.js は不要。バイナリは bin/harness(または PATH 上の harness)を使用する。

プラグインファイル同期

# .claude-plugin/ 配下のファイルを最新に同期
harness sync

# 同期内容の確認のみ(変更なし)
harness sync --dry-run

harness sync は skills/ の SSOT から各 mirror(codex/.codex/skills/、opencode/skills/)へ 変更を伝播させる。init 後に必ず実行すること。

ヘルスチェック

# 全チェック項目を実行
harness doctor

harness doctor は以下を確認する:

チェック項目 内容
バイナリ harness version が正常に返るか
プラグイン設定 .claude-plugin/plugin.json の形式が正しいか
hooks 配置 hooks が正しいパスに存在するか
mirror 同期 skills/ と mirror の内容が一致しているか
CLAUDE.md 必須セクションが存在するか

問題が検出された場合は修正コマンドを提示する。

ci — CI/CD 設定

GitHub Actions ワークフローを設定する。

# .github/workflows/ci.yml 生成例
name: CI
on:
  push:
    branches: [main]
  pull_request:
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm test

codex — Codex CLI 設定

# インストール確認(Codex CLI は Node.js ベース。Harness 本体とは別物)
which codex || npm install -g @openai/codex

# タイムアウトコマンド確認(macOS)
TIMEOUT=$(command -v timeout || command -v gtimeout || echo "")
# macOS の場合: brew install coreutils

注意: Harness v4.0 本体(harness コマンド)は Node.js 不要の Go バイナリ。 Codex CLI(codex コマンド)は別ツールであり、引き続き Node.js が必要。

Codex provider / model metadata policy (0.123.0+ / 0.130.0)

Codex 0.123.0 以降の provider / model guidance と、Codex 0.130.0 stable の Bedrock aws login guidance は docs/codex-provider-setup-policy.md を正本として扱う。

要点:

  • Bedrock を使う場合は、Codex built-in provider の amazon-bedrock を使う。
  • AWS profile は user / project の Codex config で [model_providers.amazon-bedrock.aws] に置く。
  • AWS console-login credentials from aws login profiles は AWS 側の profile material として扱う。
  • Harness は AWS credential、console-login cache、provider endpoint を書き込まない。
  • Harness の配布用 Codex config には model = "gpt-5.4" を setup default として固定しない。
  • Harness の配布用 Codex config には model_provider = "amazon-bedrock" も setup default として固定しない。
  • gpt-5.4 は Codex 本体の current model metadata として扱い、古い gpt-5.2-codex などを推奨 sample として残さない。
  • Claude Code 側の CLAUDE_CODE_USE_BEDROCK / ANTHROPIC_DEFAULT_* / modelOverrides guidance と、Codex の model_provider = "amazon-bedrock" は混ぜない。

Bedrock を使う user / project だけが、必要に応じて次を追加する:

model_provider = "amazon-bedrock"

[model_providers.amazon-bedrock.aws]
profile = "codex-bedrock"

Claude Code 側の provider / MCP / telemetry guidance は docs/claude-code-setup-mcp-telemetry-provider.md を参照する。 特に ANTHROPIC_BEDROCK_SERVICE_TIER は Bedrock 利用者の provider 環境だけで扱い、 Harness の plugin default / template / shared project settings には入れない。

Codex app-server / plugin workflow policy (0.130.0)

Codex 0.130.0 stable (rust-v0.130.0, published 2026-05-08T23:09:55Z) の app-server / plugin workflow guidance は docs/codex-plugin-workflows-policy.md を正本として扱う。

要点:

  • codex remote-control は headless remotely controllable app-server の明示起動 entrypoint。Harness setup は remote-control defaults を config に書かない。
  • App-server clients can page large threads。長い loop / Breezing transcript は必要な page 範囲を確認する。
  • view_image は multi-environment session の selected environments 経由で file を解決できる。artifact report には environment / workdir を添える。
  • Live app-server threads pick up config changes without restart。ただし secret / provider / hook policy の変更は diff と verification で扱う。
  • Turn diffs stay accurate across apply_patch including partial failures。最終判断は git diff と tests で確認する。
  • Plugin details now show bundled hooks。install / share 前に bundled hooks を確認し、Harness bundled hooks は opt-in のままにする。
  • Plugin sharing exposes link metadata and discoverability controls。公開範囲と metadata は release surface として確認する。
  • Configurable OpenTelemetry trace metadata は debugging / triage 補助に限定し、個人情報・顧客情報・secret を入れない。
  • Built-in MCPs first-class runtime servers は Codex runtime owned surface として扱い、plugin-provided MCP と所有者を混ぜない。
  • CODEX_HOME environments TOML provider は user-level environment source。選択 environment を報告し、write turn は one primary environment に固定する。
  • Remove skills list extra roots に依存せず、Harness mirror install または [[skills.config]] path-based loading を明示する。

Codex MCP diagnostics / plugin loading (0.123.0+)

Codex 0.123.0 以降の MCP diagnostics / plugin MCP loading guidance は docs/codex-mcp-diagnostics.md を正本として扱う。

要点:

  • Codex TUI では、普段は /mcp で軽量に server 状態だけ確認する。
  • MCP server が見えない、resources が出ない、resource templates が読めない時だけ /mcp verbose を使う。
  • /mcp verbose では diagnostics / resources / resource templates を確認する。
  • plugin 内 .mcp.jsonmcpServers 形式と top-level server map 形式の両方を受け取れる前提で案内する。
  • 新規 plugin では共有しやすい mcpServers 形式を優先する。
  • 既存 plugin が top-level server map 形式なら、Codex 側の loading 改善を利用し、不要な書き換えを避ける。
  • Claude Code 側の claude mcp ....claude/mcp.json、hook type: "mcp_tool" guidance と混ぜない。

mcpServers 形式:

{
  "mcpServers": {
    "docs": {
      "command": "node",
      "args": ["server.js"]
    }
  }
}

top-level server map 形式:

{
  "docs": {
    "command": "node",
    "args": ["server.js"]
  }
}

Codex sandbox / execution policy (0.123.0+)

Codex 0.123.0 以降の remote_sandbox_configcodex exec shared flags guidance は docs/codex-sandbox-execution-policy.md を正本として扱う。

要点:

  • remote_sandbox_configrequirements.toml の host-specific sandbox policy として案内する。
  • remote devbox / ephemeral CI runner / shared host のように、remote environment ごとの allowed_sandbox_modes を比較して決める。
  • host matching は便利な分類だが、強い device authentication ではない。高リスク環境では broad wildcard を避ける。
  • Harness の配布用 codex/.codex/config.toml には organization-specific な remote_sandbox_config を書かない。
  • Codex 0.123.0 以降は codex exec が root-level shared flags を継承するため、wrapper 側で重複した --approval-policy / --sandbox pairs を追加しない。
  • scripts/codex-companion.sh task --write--sandbox workspace-write を付けるのは、Harness の「書き込みタスク」という意図を exec-local に変換しているためであり、root shared flags の重複転送ではない。
  • scripts/codex/codex-exec-wrapper.sh--full-auto は 53.2.4 では維持する。変更する場合は別 task で approval / sandbox behavior の回帰テストを追加する。

requirements example:

allowed_sandbox_modes = ["read-only"]

[[remote_sandbox_config]]
hostname_patterns = ["devbox-*.corp.example.com"]
allowed_sandbox_modes = ["read-only", "workspace-write"]

使用パターン(公式プラグイン経由):

bash scripts/codex-companion.sh task --write "タスク内容"
# または stdin 経由
cat /tmp/prompt.md | bash scripts/codex-companion.sh task --write

Cursor 実装バックエンド導入(脳 Opus / 体 composer)

Cursor を Harness の実装(worker)バックエンドとして使うための導入手順。 レビュー / advisor ロールは Opus に固定し、cursor バックエンドへ切り替えない(.claude/rules/cursor-cli-only.md の Role scope)。

1. AI 実行可(バックエンド選択の永続化)

set-impl-backend.sh でバックエンドを永続化する。Harness / AI がこのステップを実行できる。

# プロジェクトスコープ(このプロジェクトの env.local に書く)
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" cursor

# ユーザースコープ(全プロジェクト共通: ${HOME}/.config/claude-harness/impl-backend.env)
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --user cursor

# 現在解決されるバックエンドを表示して確認
bash "${HARNESS_PLUGIN_ROOT}/scripts/set-impl-backend.sh" --show

解決の優先順位: プロジェクト env.local がユーザースコープより優先される。

2. ユーザー手動(AI は編集不可。protected path + sandbox のため)

以下 3 ファイルは Edit/Write(.claude/settings*) deny と self-audit guard、および ~/.cursor/* が plugin write 対象外であるため Harness / AI が編集できない。ユーザー自身がターミナル / エディタで設定する。

  • ~/.cursor/permissions.json: terminalAllowlist / mcpAllowlist を追加する。 テンプレートは .claude/rules/cursor-cli-only.md~/.cursor/permissions.json テンプレートを使う。 --force / Run Everything(--yolo)は使わない(Cursor 公式が "Never use")。
  • .cursorignore: secrets(.env, *.pem, *.key, .ssh, .aws, .git)を列挙する。 テンプレートは .claude/rules/cursor-cli-only.md.cursorignore テンプレートを使う。
  • ~/.claude/settings.json の sandbox(2 点): (1) network.allowedDomains*.cursor.sh を追加、 (2) 公式キー sandbox.filesystem.allowWrite~/.cursor を追加する(cursor-agent は実行時に ~/.cursor/projects/...~/.cursor/cli-config.json.tmp へ状態を書くため、未許可だと EPERM で失敗する)。⚠️ キー名は allowWrite: write という名前にすると未知キーとして 無視され設定が効かない(実測で確認)。~/ は sandbox 側で展開される(公式例 ["~/.kube"])。 両方揃うと per-run の sandbox 無効化なしで実行できる。手順は docs/sandbox-allowlist-recipe.md の jq merge レシピと .claude/rules/cursor-cli-only.md の「Sandbox 要件」に従う。CC 完全再起動後に有効化される。

3. 境界(cursor は candidate のまま)

cursor バックエンドは candidate の位置づけ。安全性は Cursor の allowlist(best-effort、bypass 可能)ではなく、 専用 .git を持つ worktree での隔離実行 + Lead による diff レビュー + cherry-pick での本流取り込みで担保する。 cursor-agent の出力は Lead レビューまで untrusted として扱う。詳細は .claude/rules/cursor-cli-only.md を参照。

harness-mem — メモリ設定

Unified Harness Memory の設定を行う。

# メモリディレクトリ作成
mkdir -p .claude/agent-memory/claude-code-harness-worker
mkdir -p .claude/agent-memory/claude-code-harness-reviewer

# MEMORY.md テンプレート配置
cat > .claude/agent-memory/claude-code-harness-worker/MEMORY.md << 'EOF'
# Worker Agent Memory

## Project Context
[プロジェクト概要]

## Patterns
[学習パターン]
EOF

mirrors — 公開 skill bundle 同期

Windows の core.symlinks=false では repository symlink が通常ファイルになり、harness-* skill が command 一覧に出なくなることがあります。公開 bundle は実ディレクトリ mirror として同期します。

./scripts/sync-skill-mirrors.sh
./scripts/sync-skill-mirrors.sh --check

更新対象:

  • skills/
  • codex/.codex/skills/
  • opencode/skills/

agents — エージェント設定

agents/ の3エージェント構成を設定する。

agents/
├── worker.md      # 実装担当(task-worker + codex-implementer + error-recovery)
└── reviewer.md    # レビュー担当(code-reviewer + plan-critic)

localize — ルールローカライズ

.claude/rules/ のルールを現プロジェクトに適応する。

# ルール一覧確認
ls .claude/rules/

# プロジェクト固有ルールの追加
cat >> .claude/rules/project-rules.md << 'EOF'
# Project-Specific Rules
[プロジェクト固有ルール]
EOF

Plugin インストール (v2.1.71+ Marketplace)

v2.1.71 で Marketplace の安定性が大幅に改善された。 Claude Code 2.1.117-2.1.118 以降の plugin / managed settings 方針は docs/plugin-managed-settings-policy.md を正本として扱う。

推奨インストール方式

# @ref 形式でバージョン固定(推奨)
claude plugin install owner/repo@v4.0.0

# 最新版
claude plugin install owner/repo

owner/repo@vX.X.X 形式を推奨。@ref パーサー修正により、タグ・ブランチ・コミットハッシュいずれも正確に解決される。

アップデート

claude plugin update owner/repo

v2.1.71 で update 時の merge conflict が修正され、安定したアップデートが可能になった。

その他の改善点

  • MCP server 重複排除: 同一 MCP サーバーの多重登録を自動防止
  • /plugin uninstallsettings.local.json を使用: ユーザーローカル設定に正確に反映

Managed marketplace / dependency policy (v2.1.117+)

企業利用で plugin marketplace を制御する場合は、Claude Code 本体の managed settings を使う。 Harness は独自の marketplace resolver や dependency resolver を重ねない。

項目 用途 Harness の扱い
extraKnownMarketplaces チームに推奨 marketplace を案内・登録する 通常の onboarding ではこちらを優先
blockedMarketplaces 特定 marketplace source をブロックする managed settings 専用。通常ユーザー向け default には入れない
strictKnownMarketplaces 許可した marketplace source だけ追加できるようにする managed settings 専用。通常ユーザー向け default には入れない
plugin dependency auto-resolve dependencies の自動 install / missing dependency hints Claude Code 本体に任せる。Harness 独自 resolver は追加しない
plugin themes/ directory plugin が theme を配布する 今回は P: 将来タスク。Harness は theme を同梱しない

DISABLE_AUTOUPDATER は自動更新を止める。 DISABLE_UPDATES は手動 claude update まで止めるため、企業の固定バージョン運用向け。 Harness の project default にはどちらも入れず、必要な組織が managed settings または端末管理で設定する。

依存関係が欠けた場合は、まず Claude Code の /plugin Errors、/doctorclaude plugin list --json を確認する。 marketplace 未登録が原因なら /plugin marketplace add または claude plugin marketplace add で登録し、本体の auto-resolve に任せる。

Maintenance — ファイル整理

定期メンテナンスタスク:

タスク コマンド
古いログ削除 find .claude/logs -mtime +30 -delete
Plans.md 圧縮 完了タスクをアーカイブセクションに移動
古いトレース削除 tail -1000 .claude/state/agent-trace.jsonl > /tmp/trace && mv /tmp/trace .claude/state/agent-trace.jsonl

関連スキル

  • harness-plan — セットアップ後にプロジェクト計画を作成
  • harness-work — セットアップ後にタスクを実行
  • harness-review — セットアップ設定をレビュー
同步Plans.md与实现状态,检测漂移并更新标记。支持快照保存、指定计划及进度查询。用于验证计划格式、分析Agent Trace、比对Git差异,最终输出进度摘要或更新任务状态。
sync-status where am I check progress harness-sync --snapshot
skills/harness-sync/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-sync -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-sync",
    "pair": "harness-plan",
    "role": "synchronizer",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "medium",
    "purpose": "Reconcile Plans.md, git, and implementation state",
    "trigger": "sync-status, where am I, check progress",
    "description": "HAR: Sync Plans.md with implementation. Drift detect, marker update, retrospective. Trigger: sync-status, where am I, check progress. --snapshot for snapshots. Do NOT load for: planning, implementation, review, release.",
    "allowed-tools": [
        "Read",
        "Edit",
        "Bash",
        "Grep",
        "Glob"
    ],
    "argument-hint": "[--snapshot|--no-retro]",
    "description-en": "HAR: Sync Plans.md with implementation. Drift detect, marker update, retrospective. Trigger: sync-status, where am I, check progress. --snapshot for snapshots. Do NOT load for: planning, implementation, review, release.",
    "description-ja": "HAR:Plans.md と実装の進捗同期。差分検出・マーカー更新・レトロスペクティブ。sync-status、進捗確認、今どこ、どこまで終わったで起動。--snapshot でスナップショット保存。プランニング・実装・レビュー・リリースには使わない。",
    "user-invocable": true
}

Harness Sync

Plans.md と実装状況を照合し、差分を検出・更新する。 旧 sync-status および harness-plan sync サブコマンドの独立版。

Quick Reference

ユーザー入力 動作
harness-sync 進捗同期 + レトロスペクティブ(デフォルト ON)
harness-sync --no-retro 進捗同期のみ(レトロスキップ)
harness-sync --snapshot スナップショット保存(進捗の時点記録)
harness-sync --plan roadmap named Plans の roadmap を同期
"今どこ?" / "進捗確認" 同上

オプション

オプション 説明 デフォルト
--snapshot 現在の進捗をスナップショットとして保存 false
--no-retro レトロスペクティブをスキップ false(デフォルトで実行)
--plan NAME plans/manifest.json の named plan を使う active/default

Step 0: Plans.md 検証

Plans.md の存在とフォーマットを確認する。問題がある場合は即座に案内して停止する。 複数 Plans.md がある repo では、対象 plan を scripts/plan-registry.sh list または --plan NAME で確認してから読む。

状態 案内
Plans.md が存在しない Plans.md が見つかりません。harness-plan create で作成してください。停止
ヘッダーに DoD / Depends カラムがない(v1 形式) Plans.md が旧フォーマット(3カラム)です。harness-plan create で v2(5カラム)に再生成してください。既存タスクは自動的に引き継がれます。停止
v2 形式(5カラム) そのまま Step 1 に進む

Step 1: 現状収集(並列)

# Plans.md の状態
cat Plans.md

# Git 変更状態
git status
git diff --stat HEAD~3

# 直近コミット履歴
git log --oneline -10

# エージェントトレース(直近の編集ファイル)
tail -20 .claude/state/agent-trace.jsonl 2>/dev/null | jq -r '.files[].path' | sort -u

Step 1.5: Agent Trace 分析

Agent Trace から直近の編集履歴を取得し、Plans.md のタスクと照合する:

# 直近の編集ファイル一覧
RECENT_FILES=$(tail -20 .claude/state/agent-trace.jsonl 2>/dev/null | \
  jq -r '.files[].path' | sort -u)

# プロジェクト情報
PROJECT=$(tail -1 .claude/state/agent-trace.jsonl 2>/dev/null | \
  jq -r '.metadata.project')

照合ポイント:

チェック項目 検出方法
Plans.md にないファイル編集 Agent Trace vs タスク記述
タスク記述と異なるファイル 想定ファイル vs 実際の編集
長時間編集がないタスク Agent Trace 時系列 vs WIP 期間

Step 2: 差分検出

チェック項目 検出方法
完了済みなのに cc:WIP コミット履歴 vs マーカー
着手済みなのに cc:TODO 変更ファイル vs マーカー
cc:完了 なのに未コミット git status vs マーカー

Step 3: Plans.md 更新提案

差分が検出された場合、提案して実行する:

Plans.md 更新が必要です

| Task | 現在 | 変更後 | 理由 |
|------|------|--------|------|
| XX   | cc:WIP | cc:完了 | コミット済み |
| YY   | cc:TODO | cc:WIP | ファイル編集済み |

更新しますか? (yes / no)

Step 4: 進捗サマリー出力

## 進捗サマリー

**プロジェクト**: {{project_name}}

| ステータス | 件数 |
|----------|------|
| 未着手 (cc:TODO) | {{count}} |
| 作業中 (cc:WIP) | {{count}} |
| 完了 (cc:完了) | {{count}} |
| PM確認済 (pm:確認済) | {{count}} |

**進捗率**: {{percent}}%

### 直近の編集ファイル (Agent Trace)
- {{file1}}
- {{file2}}

Step 4.5: スナップショット保存(--snapshot 指定時)

--snapshot が指定された場合、現在の進捗状態を時刻付きスナップショットとして保存する。

保存先

.claude/state/snapshots/ ディレクトリに JSON 形式で保存:

SNAPSHOT_DIR="${PROJECT_ROOT}/.claude/state/snapshots"
mkdir -p "${SNAPSHOT_DIR}"
SNAPSHOT_FILE="${SNAPSHOT_DIR}/progress-$(date -u +%Y%m%dT%H%M%SZ).json"

スナップショット内容

{
  "timestamp": "2026-03-08T10:30:00Z",
  "phase": "Phase 26",
  "progress": {
    "total": 16,
    "todo": 5,
    "wip": 3,
    "done": 6,
    "confirmed": 2
  },
  "progress_rate": 50,
  "recent_commits": ["abc1234 feat: ...", "def5678 fix: ..."],
  "recent_files": ["skills/harness-work/SKILL.md", "..."],
  "notes": ""
}

差分比較

前回スナップショットが存在する場合、差分を表示:

## スナップショット差分

| 指標 | 前回 ({{prev_time}}) | 今回 | 変化 |
|------|---------------------|------|------|
| 進捗率 | {{prev}}% | {{current}}% | +{{diff}}%pt |
| 完了タスク | {{prev_done}} | {{current_done}} | +{{diff_done}} |
| WIP タスク | {{prev_wip}} | {{current_wip}} | {{diff_wip}} |

設計意図: snapshot はユーザーが「今の状態を記録しておきたい」と思った時に手動で使う。 breezing 中の自動的なプログレスフィード(26.2.3)とは別の機能。

Step 5: 次のアクション提案

次にやること

**優先 1**: {{タスク}}
- 理由: {{依頼中 / アンブロック待ち}}

**推奨**: harness-work, harness-review

異常検知

状況 警告
複数の cc:WIP 複数タスクが同時進行中
pm:依頼中 が未処理 PM の依頼を先に処理する
大きな乖離 タスク管理が追いついていない
WIP が 3日以上更新なし ブロックされていないか確認

Step 6: レトロスペクティブ(デフォルト ON)

cc:完了 タスクが 1 件以上あれば自動的に振り返りを実行する。 --no-retro で明示的にスキップ可能。

Step R1: 完了タスク収集

# Plans.md から cc:完了 / pm:確認済 のタスクを抽出
grep -E 'cc:完了|pm:確認済' Plans.md

# 直近の完了コミット履歴
git log --oneline --since="7 days ago"

# 変更規模
git diff --stat HEAD~10

Step R2: 振り返り 4 項目

項目 分析方法
見積もり精度 Plans.md のタスク記述から想定ファイル数を推論 → git diff --stat の実変更ファイル数と比較
ブロック原因 blocked マーカーが付いたタスクの理由パターンを集計(技術的/外部依存/仕様不明確)
品質マーカー的中率 [feature:security] 等を付けたタスクで実際に関連問題が出たか
スコープ変動 Plans.md の初回コミット時のタスク数 vs 現在のタスク数(追加/削除件数)

Step R3: 振り返りサマリー出力

## 振り返りサマリー

**期間**: {{start_date}} 〜 {{end_date}}

| 指標 | 値 |
|------|-----|
| 完了タスク | {{count}} 件 |
| ブロック発生 | {{blocked_count}} 件 |
| スコープ変動 | +{{added}} / -{{removed}} 件 |
| 見積もり精度 | 想定 {{est}} ファイル → 実際 {{actual}} ファイル |

### 学び
- {{1-2 行の学び}}

### 次に活かすこと
- {{1-2 行の改善アクション}}

Step R4: harness-mem への記録

振り返り結果を harness-mem に記録し、次回の create 時に参照できるようにする。 記録先: .claude/agent-memory/ 配下の該当エージェントメモリ。

関連スキル

  • harness-plan — 計画作成・タスク管理
  • harness-work — タスク実装
  • harness-review — コードレビュー
执行Plans.md任务,支持单任务、并行及团队全自动模式。根据任务数自动选择最优执行策略,兼容Claude、Codex及Cursor后端,实现从个体开发到大规模并行的灵活调度与CI恢复。
implement execute do everything breezing team run parallel composer
skills/harness-work/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill harness-work -g -y
SKILL.md
Frontmatter
{
    "kind": "workflow",
    "name": "harness-work",
    "pair": "harness-review",
    "role": "executor",
    "owner": "harness-core",
    "shape": "workflow",
    "since": "2026-05-05",
    "effort": "high",
    "purpose": "Execute Plans.md tasks end to end",
    "trigger": "implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5, composer mode, コンポーザー",
    "description": "HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Grep",
        "Glob",
        "Bash",
        "Task",
        "Monitor"
    ],
    "argument-hint": "[all] [task-number|range] [--codex] [--parallel N] [--no-commit] [--resume id] [--breezing] [--auto-mode] [--tdd-bypass]",
    "description-en": "HAR: Execute Plans.md tasks from single task to full parallel team run. Trigger: implement, execute, do everything, breezing, team run, parallel, composer, composer 2.5. Do NOT load for: planning, review, release, setup.",
    "description-ja": "HAR:Plans.md タスクを1件から全並列チーム実行まで担当。実装して、実行して、全部やって、breezing、チーム実行、parallel、composer、コンポーザー、composer 2.5 で起動。プランニング・レビュー・リリース・セットアップには使わない。",
    "user-invocable": true
}

Harness Work

Harness の統合実行スキル。 以下の旧スキルを統合:

  • work — Plans.md タスクの実装(スコープ自動判断)
  • impl — 機能実装(タスクベース)
  • breezing — チームフル自動実行
  • parallel-workflows — 並列ワークフロー最適化
  • ci — CI 失敗時の復旧

Quick Reference

ユーザー入力 モード 動作
/harness-work auto タスク数で自動判定(下記参照)
/harness-work all auto 全未完了タスクを自動モードで実行
/harness-work 3 solo タスク3だけ即実行
/harness-work --parallel 5 parallel 5ワーカーで並列実行(強制)
/harness-work --codex codex Codex CLI に委託(明示時のみ)
Cursor host (adapter candidate) cursor Task/subagent routing via .cursor/AGENTS.md; not auto-selected
/harness-work --breezing breezing チーム実行を強制
/harness-work 3 --plan roadmap solo named Plans の roadmap からタスク3を実行

Execution Mode Auto Selection(フラグなし時の自動判定)

明示的なモードフラグ(--parallel, --breezing, --codex)がない場合、 対象タスク数に応じて最適なモードを自動選択する:

対象タスク数 自動選択モード 理由
1 件 Solo オーバーヘッド最小。直接実装が最速
2〜3 件 Parallel(Task tool) Worker 分離のメリットが出始める閾値
4 件以上 Breezing Lead 調整 + Worker 並列 + Reviewer 独立の三者分離が効果的

ルール

  1. 明示フラグは常にオートモードを上書きする
    • --parallel N → Parallel モード(タスク数に関係なく)
    • --breezing → Breezing モード(タスク数に関係なく)
    • --codex → Codex モード(タスク数に関係なく)
  2. --codex は明示時のみ発動。Codex CLI が未インストールの環境があるため、自動選択しない
  3. --codex は他モードと組み合わせ可能: --codex --breezing → Codex + Breezing

Execution Backend Selection(実装バックエンド選択)

バックエンド(どのランタイムが実装するか)は、実行モード(トポロジー: solo / parallel / breezing)と直交する。 実行モードが「何ワーカーで・どう分割して回すか」を決めるのに対し、バックエンドは「実装の手を誰が動かすか」を決める。

backend 実装の担い手 委託コマンド
claude(既定) Task subagent(agents/worker.md Agent tool で worker を spawn
codex Codex CLI bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write "<prompt>"
cursor cursor-agent(model composer-2.5-fast bash "${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh" task --write --workspace <worktree> "<prompt>"

解決手順

run 開始時に 1 回だけ解決する。backend 判定は 必ず resolver 経由にし、HARNESS_IMPL_BACKEND env だけを直読みして判定しない:

bash "${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh"

precedence(高い順): --backend <v> / --cursor / --codex フラグ > HARNESS_IMPL_BACKEND 環境変数 > プロジェクト env.local の同名行 > ユーザー ~/.config/claude-harness/impl-backend.env の同名行 > 既定値 claude。プロジェクト設定はユーザースコープを上書きする。 明示フラグ(--backend / --cursor / --codex)は env / file / default を常に上書きする。

自然言語 backend trigger

ユーザーが composer / コンポーザー / Composer で / composer 2.5 / composer モード と言った場合は、cursor backend 指定として扱う。 これは --cursor と同じ intent だが、backend の確定値は必ず resolve-impl-backend.sh で解決する。 解決時は明示 override として --backend cursor を渡し、env / project / user file / default より優先させる。 Lead は composer を Claude Worker 内の追加 agent と解釈せず、非 claude backend の規約どおり Worker agent を挟まずに cursor-companion.sh を直接呼ぶ。

role-scoped 制約

バックエンドは role-scoped。解決済みバックエンドを使うのは実装(worker)ロールだけ。 Reviewer と Advisor の両ロールは常に brain(--host claude、Opus)に固定する。 Reviewer を cursor / codex バックエンドに routing しない(実装したバックエンドが自分の出力をレビューしてはならない)。

# 実装ロールだけ解決済み backend に従う(例: backend=cursor なら composer-2.5-fast を解決)
bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host cursor --role worker --field model
# review / advisor は常に claude(Opus)固定
bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host claude --role reviewer --field model
bash "${HARNESS_PLUGIN_ROOT}/scripts/model-routing.sh" --host claude --role advisor --field model

モデル名の正本は model-routing.sh 側。本ドキュメント中の composer-2.5-fast は参照値であり、実際の解決は上記コマンドに従う(drift 防止)。

claude バックエンドのトポロジー(Worker 介在なし)

backend が codex または cursor の場合、Lead は Worker agent (claude-code-harness:worker) を spawn しない。 代わりに Lead 自身が cursor-companion.sh / codex-companion.sh を直接呼ぶ。 Worker 層の介在は backend=claude のときだけ。

配線:

backend 経路
claude(既定) Lead → Worker (claude-code-harness:worker agent) → … → Lead review → cherry-pick
codex Lead → codex-companion.sh task --write → Lead review → cherry-pick
cursor Lead → cursor-companion.sh task --write --workspace <isolated-wt> → Lead review → cherry-pick

非 claude backend で Worker を間に挟むと、Lead → Worker → companion → composer/codex と二段委譲になり、Worker の存在意義(agent 契約による self_review 5 件のゲート)が空回りする(非 claude では worker-report.v1self_review も生成されないため)。Lead は Worker をスキップして companion を直接呼ぶ。

非 claude backend の companion 呼び出しでも、Lead は先に専用 worktree を作り、companion stdout を companion-result.v1 相当の {baseCommit, commit, worktreePath, branch, files_changed, summary} に正規化してから既存の Lead review / cherry-pick 経路へ渡す。REQUEST_CHANGES 時は SendMessage を使わず、同じ worktree で cursor-companion.sh / codex-companion.sh を再実行し、baseCommit..HEAD を再レビューして range cherry-pick する。

claude バックエンドの self_review ゲート

backend が codex または cursor の場合、worker-report.v1self_review 配列も生成されない。 そのため Lead は self_review ゲートをスキップし、Lead の diff レビューを唯一の品質ゲートとする(既存の codex path と同じ扱い)。

cursor バックエンドの banner(委託前に必須)

backend が cursor のとき、Lead は委託前に次の 1 行 banner を必ず出力する:

⚠️ cursor backend: model=composer-2.5-fast / R01-R13 ガードレールは cursor-agent 内部に適用されない / 出力は Lead レビューまで untrusted

cursor の write 委託は専用 .git を持つ worktree 内で実行し、Lead が main へ cherry-pick する(cherry-pick 経路で R01-R13 が適用される)。 ガバナンス詳細は .claude/rules/cursor-cli-only.md を参照。

Lead の cherry-pick 前ゲート(contract grep を必須)

非 claude backend (cursor / codex) の出力を main にとり込む前に、Lead は 目視 diff + contract grep の二段ゲートを必ず通す。目視 diff だけで APPROVE しない。

ゲート コマンド 検知できるもの
diff 目視 git show <sha> 変更が意図どおりか・他ファイル touch なしか・support tier 表記不変か
contract grep bash tests/test-support-claim-wording.sh 公開 support 表記の破壊
contract grep bash scripts/ci/check-consistency.sh i18n / locale / mirror / capability matrix の固定文字列契約破壊
contract grep bash tests/validate-plugin.sh plugin 配布契約・hook 配線

全 PASS のときだけ cherry-pick。1 件でも fail なら revert または composer に再委託(同一文字列契約を保つよう明示)。

理由: docs / README / locale / capability-matrix / spec.md には grep で監視される 固定文字列契約がある (例: README_ja.md5動詞ワークフロー)。composer は表面的な言語的重複を機械的に削減する傾向があり、目視 diff では「綺麗な dedup」に見えても固定句を破壊しうる。

オプション

オプション 説明 デフォルト
all 全未完了タスクを対象 -
N or N-M タスク番号/範囲指定 -
--parallel N 並列ワーカー数 auto
--sequential 直列実行強制 -
--codex Codex CLI で実装委託(明示時のみ、自動選択しない) false
--backend <claude|codex|cursor> 明示バックエンド選択(worker ロールのみ適用、precedence 最上位) claude
--cursor cursor backend(--codex と同様、明示時のみ。cursor-agent 未インストール環境があるため自動選択しない) false
--plan NAME plans/manifest.json の named plan を使う active/default
--no-commit 自動コミット抑制 false
--resume <id|latest> 前回セッション再開。長く空いた後は /recap 併用を推奨 -
--breezing Lead/Worker/Reviewer のチーム実行 false
--no-tdd TDD フェーズスキップ false
--tdd-bypass 緊急時だけ TDD 強制を bypass。HARNESS_TDD_BYPASS_REASON または明示理由を audit に残す false
--no-simplify Auto-Refinement スキップ false
--auto-mode Harness 側の Auto Mode rollout を明示。CC 2.1.111 で不要になった --enable-auto-mode とは別物 false

Progressive Disclosure

まずこの本文で入口、自動選択、停止条件だけを確認する。 詳細は必要になった時だけ読む。

詳細 参照
Solo / Parallel / Codex / Breezing の具体手順 references/execution-modes.md
Codex review、Reviewer fallback、AI Residuals、修正ループ references/review-loop.md
Solo / Breezing 完了報告の生成 references/completion-report.md
テスト/CI 失敗時の再チケット化 references/failure-reticketing.md
仕様正本チェックの基準 docs/plans/spec-ssot.md

重要停止条件

  • Plans.md が旧フォーマットで DoD / Depends / Status を読めない時は停止する。
  • 仕様が実装判断に影響するのに project spec SSOT が見つからない時は、先に仕様正本を作成/更新してから実装する。
  • sprint-contract が required なのに ready でない時は実装に進まない。
  • critical / major review finding が残っている時は完了にしない。
  • テストを弱める、skip する、期待値を実装に合わせて緩める形では解決しない。
  • helper script は host project の scripts/ ではなく ${HARNESS_PLUGIN_ROOT}/scripts/ から呼ぶ。
  • 複数 Plans.md がある場合は、1 run の中で plan を切り替えない。必要なら --plan NAME を明示して新しい run を開始する。

Token Optimization (v2.1.69+): git 操作を伴わない軽量タスクでは plugin settings の includeGitInstructions: false を有効にして プロンプトトークンを削減できる。

Prompt Cache (CC 2.1.108+): 長めの実装や --resume を多用する作業では ENABLE_PROMPT_CACHING_1H=1 を優先する。

スコープダイアログ(引数なし時)

/harness-work
どこまでやりますか?
1) 次のタスク: Plans.md の次の未完了タスク → Solo で実行
2) 全部(推奨): 残りのタスクをすべて完了 → タスク数で自動モード選択
3) 番号指定: タスク番号を入力(例: 3, 5-7)→ 件数で自動モード選択

引数ありなら即実行(対話スキップ):

  • /harness-work all → 全タスク、自動モード選択
  • /harness-work 3-6 → 4件なので Breezing 自動選択

Effort レベル制御(Opus 4.8 / v2.1.111+)

effort はモデルの推論強度を選ぶ正式なノブ。low(○)/medium(◐)/high(●)/xhigh の 4 段階で、 /effort auto でデフォルトにリセットできる(max は v2.1.72 で廃止、xhigh が後継)。

Opus 4.8 では thinking は既定 off で、effort が推論深度の主レバー(過去のどの Opus より effort の影響が大きい)。 「浅い推論」を観測したら prompt で回避せず effort を上げる。 そのため複雑タスクの強化は free-text marker(旧 ultrathink)を spawn prompt に注入する方式を廃止し、 複雑度スコアから Worker spawn の effort tier を選ぶ方式に統一する。 これは docs/model-routing-policy.md(effort を free-text から推測しない)と .claude/rules/opus-4-7-prompt-audit.md 合格条件 5(xhigh は呼び出し側が選ぶ)と整合する。

多要素スコアリング

タスク着手時に以下のスコアを合算する。

要素 条件 スコア
ファイル数 変更対象 4 ファイル以上 +1
ディレクトリ core/, guardrails/, security/ を含む +1
キーワード architecture, security, design, migration を含む +1
失敗履歴 agent memory に同タスクの失敗記録あり +2
明示指定 PM テンプレートに effort: high / effort: xhigh(旧 ultrathink も互換受理)記載あり +3(自動採用)

effort tier の決め方(注入しない)

スコアから effort tier を escalation signal として決める(ultrathink 等の marker 文字列を spawn prompt に 書かない)。 適用 lever は次の 2 つだけ:

  • session /effort: 複雑タスクのバッチに入る前に host が /effort high / /effort xhigh を設定する(session 単位で効く確実な lever)。
  • worker frontmatter: agents/worker.mdeffort(既定 medium)が floor。CC の Agent / Task spawn API は per-spawn の effort 指定を公開しないため、worker 1 体ごとに effort を上げる機構はない。スコアは worker-report.v1task_complexity_note に記録し、Lead が session effort 引き上げの判断材料にする。
スコア code-risk(core/guardrails/security/architecture/migration を含む) effort tier
0-2 不問 medium(Worker frontmatter 既定のまま)
≥ 3 なし high
≥ 3 あり xhigh

breezing モードでも同じロジックを適用する(harness-work が一本化して管理)。 Worker は Sonnet 4.6 のため xhigh は実効 high にダウングレードされるが、tier 引き上げ自体は有効(docs/effort-level-policy.md)。

実行モード詳細

Harness helper script root

Harness が同梱する helper script は、作業対象プロジェクトの scripts/ ではなく、必ず plugin bundle root から呼ぶ。

HARNESS_PLUGIN_ROOT="${HARNESS_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-}}"
if [ -z "$HARNESS_PLUGIN_ROOT" ] && [ -n "${CLAUDE_SKILL_DIR:-}" ]; then
  probe="$(cd "${CLAUDE_SKILL_DIR}" && pwd)"
  while [ "$probe" != "/" ] && [ ! -d "$probe/scripts" ]; do
    probe="$(cd "$probe/.." && pwd)"
  done
  [ -d "$probe/scripts" ] && HARNESS_PLUGIN_ROOT="$probe"
fi

以降の node "${HARNESS_PLUGIN_ROOT}/scripts/..." / bash "${HARNESS_PLUGIN_ROOT}/scripts/..." は、この解決済み root を前提にする。

Backend-resolved executor path (Solo / Parallel / Breezing)

Solo / Parallel / Breezing は同じ resolver result から実装 executor を選ぶ。 harness-work 3 --cursor と user/project HARNESS_IMPL_BACKEND=cursor は、1 件タスクでも local Read/Write/Edit/Bash に fall through してはいけない。

resolver_backend_arg = ""
if explicit_backend_value in ["claude", "codex", "cursor"]:
    resolver_backend_arg = "--backend {explicit_backend_value}"
backend = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/resolve-impl-backend.sh\" {resolver_backend_arg}")
if explicit_flag == "--cursor":
    backend = "cursor"
if explicit_flag == "--codex":
    backend = "codex"

if topology in ["solo", "parallel"] and backend in ["cursor", "codex"]:
    BASE_REF = git("rev-parse", "HEAD")
    WT_ID = "{task.number}-$(date +%Y%m%d-%H%M%S)-$$"
    worktree_path = ".claude/worktrees/{backend}-{WT_ID}"
    worktree_branch = "{backend}-work/{WT_ID}"
    bash("mkdir -p .claude/worktrees && git worktree add -b {worktree_branch} {worktree_path} {BASE_REF}")
    companion_prompt = "{task prompt}\n\nAfter making changes, create exactly one git commit in this worktree before returning."
    if backend == "cursor":
        companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worktree_path} \"{companion_prompt}\"")
    else:
        companion_state_file = "{worktree_path}/.claude/state/codex-primary-environment.json"
        companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worktree_path} \"{companion_prompt}\"")
    latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
    if backend == "cursor" and git("-C", worktree_path, "status", "--porcelain") != "":
        git("-C", worktree_path, "add", "-A")
        git("-C", worktree_path, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: delegated change")
        latest_commit = git("-C", worktree_path, "rev-parse", "HEAD")
    if latest_commit == BASE_REF:
        raise EscalationError("{backend} companion produced no commit")
    worker_result = {type: "companion-result.v1", baseCommit: BASE_REF, commit: latest_commit, worktreePath: worktree_path, branch: worktree_branch, files_changed: git("-C", worktree_path, "diff", "--name-only", "{BASE_REF}..HEAD"), summary: companion_output}
    enter_non_claude_companion_review_loop(worker_result)
else:
    run_native_solo_or_parallel()

def enter_non_claude_companion_review_loop(worker_result):
    # companion-result.v1 has no worker_id and no worker_result.self_review.
    # Do not use the Worker-only SendMessage/self_review loop for cursor/codex.
    latest_commit = worker_result.commit
    diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
    verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
    review_count = 0
    MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
        previous_commit = latest_commit
        if backend == "cursor":
            companion_output = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/cursor-companion.sh\" task --write --workspace {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
        else:
            companion_state_file = "{worker_result.worktreePath}/.claude/state/codex-primary-environment.json"
            companion_output = bash("HARNESS_CODEX_PRIMARY_ENV_STATE_FILE={companion_state_file} bash \"${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh\" task --write -C {worker_result.worktreePath} \"Review findings:\n{issues}\n\nFix the findings and commit the result.\"")
        latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
        if backend == "cursor" and git("-C", worker_result.worktreePath, "status", "--porcelain") != "":
            git("-C", worker_result.worktreePath, "add", "-A")
            git("-C", worker_result.worktreePath, "-c", "user.name=cursor-composer", "-c", "user.email=cursor-composer@local", "commit", "--no-verify", "-m", "cursor: review fix")
            latest_commit = git("-C", worker_result.worktreePath, "rev-parse", "HEAD")
        if latest_commit == previous_commit:
            raise EscalationError("{backend} companion retry produced no new commit")
        worker_result.commit = latest_commit
        worker_result.summary = companion_output
        diff_text = git("-C", worker_result.worktreePath, "diff", "{worker_result.baseCommit}..HEAD")
        verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
        review_count++
    if verdict == "APPROVE":
        git cherry-pick --no-commit {worker_result.baseCommit}..{worker_result.commit}

Parallel は task ごとにこの resolver path を適用する。 backend=cursor / codex の場合は native Worker spawn を使わず、task ごとに isolated companion worktree を作成して companion-result.v1 に正規化してから non-Claude companion 専用の range review / cherry-pick loop に入る。

Solo モード(1 件時の自動選択)

  1. Plans.md を読み込み、対象タスクを特定
    • Plans.md が存在しない場合: harness-plan create --ci を自動呼び出し → Plans.md を生成して続行
    • ヘッダーに DoD / Depends カラムがない場合: Plans.md が旧フォーマットです。harness-plan create で再生成してください。停止
    • 会話に未記載タスクがある場合: 直前の会話コンテキストから要件を抽出し、Plans.md に cc:TODO で自動追記
      • 抽出ロジック: ユーザー発言からアクション動詞(「〜を追加」「〜を修正」「〜を実装」)を検出
      • 追記時は v2 フォーマット(Task / 内容 / DoD / Depends / Status)に準拠
      • 追記後、ユーザーに「Plans.md に以下を追記しました」と表示(5 秒タイムアウト付きプロンプト、デフォルト: 続行) 1.5. タスク背景確認(30 秒):
    • タスクの「内容」と「DoD」から 目的(このタスクが解く課題)を 1 行で推論表示
    • git grep / Glob影響範囲(変更が及ぶファイル/モジュール)を推論表示
    • 推論に自信がある場合: そのまま実装に進む(フロー遅延なし)
    • 推論に自信がない場合: ユーザーに 1 問だけ確認(「この理解で合っていますか?」) 1.6. 仕様正本 preflight:
    • 既存の project spec SSOT を探す(例: docs/spec/00-project-spec.md, docs/ARCHITECTURE.md, docs/HANDOFF.md, docs/oem/PROJECT_COMPASS.md, docs/specs/
    • task が product behavior / API / data model / permission / billing / integration / tenant boundary を変える場合、spec がなければ docs/spec/00-project-spec.md を作る
    • spec が古い、または task と矛盾する場合は、実装前に spec を更新する
    • typo / format / dependency bump / docs-only / 動作変更なし refactor は skip 理由を残して続行する
    • Worker / Reviewer へ渡す context には spec_path または spec_skip_reason を含める
  2. タスクを cc:WIP に更新
  3. TDD フェーズ[skip:tdd] なし & テストFW存在時): a. テストファイルを先に作成(Red) b. 失敗を確認 c. bash "${HARNESS_PLUGIN_ROOT}/scripts/log-tdd-red.sh".claude/state/tdd-red-log/<task-id>.jsonl に FAIL 証跡を残す。script が利用できない環境では、literal な failing test output を worker-report の self_review evidence に添付する d. --tdd-bypass を使う場合は、HARNESS_TDD_BYPASS=1HARNESS_TDD_BYPASS_REASON="<理由>" を明示し、TDD を省略した理由を sprint-contract / worker-report に残す
  4. node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" <task-id>sprint-contract.json を生成
  5. Reviewer 観点の追記を bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" で加え、bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" で approved を確認
  6. Advisor consult(必要時のみ):
    • 高リスク task(needs-spike / security-sensitive / state-migration)は、初回実行前に 1 回だけ相談する
    • 同じ原因の失敗が 2 回続いたら、3 回目に入る前に相談する
    • plateau(行き詰まり検知)が PIVOT_REQUIRED を返した時は、ユーザーへ止めて投げる前に 1 回だけ相談する
    • 相談結果は advisor-response.v1 で受け取り、PLAN は進め方の組み替え、CORRECTION は局所修正、STOP は即エスカレーションとして扱う
    • 同じ trigger_hash では 1 回しか相談しない。task ごとの相談回数は最大 3 回
  7. backend-resolved executor path でコードを実装(Green)
    • backend=claude: local / native Read/Write/Edit/Bash path で実装
    • backend=cursor / codex: 上記 companion worktree path で実装し、companion-result.v1 を共通 review loop に渡す
  8. /simplify で Auto-Refinement(--no-simplify で省略可)
  9. 自動レビューステージ(「レビューループ」参照):
    • Codex exec 優先でレビュー実行 → フォールバックで内部 Reviewer agent
    • sprint-contract.jsonreviewer_profileruntime の場合は bash "${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh" を実行
    • REQUEST_CHANGES の場合: 指摘を元に修正→再レビュー(MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    • APPROVE で次ステップへ。self-check だけでは完了を確定しない
  10. bash "${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh" で review artifact を正規化して保存(browser profile は --browser-result を渡し、browser_verdict == PENDING_BROWSER の時は static verdict を採用)
  11. git commit で自動コミット(--no-commit で省略可)
  12. タスクを cc:完了 に更新(commit hash 付与)
  • git log --oneline -1 で直近の commit hash(短縮形 7 文字)を取得
  • Plans.md の Status を cc:完了 [a1b2c3d] 形式で更新
  • commit がない場合(--no-commit 時)は hash なしで cc:完了 のみ
  1. リッチ完了報告(「完了報告フォーマット」参照)
  2. 失敗時の自動再計画(テスト/CI 失敗時のみ):
    • テスト実行結果を確認
    • 失敗した場合: 修正タスク案を state に保存し、承認コマンド経由で Plans.md に追加(「失敗タスクの自動再チケット化」参照)
    • 成功した場合: 次タスクへ進む

Parallel モード(2〜3 件時の自動選択 / --parallel N で強制)

[P] マーク付きタスクを N ワーカーで並列実行。 --parallel N で明示指定した場合は、タスク数に関係なくこのモードを使用。 同一ファイルへの書き込みが競合する場合は git worktree で分離。 各 task の実装 executor は Backend-resolved executor path に従う。 --parallel N --cursor--backend cursor、または default HARNESS_IMPL_BACKEND=cursor の場合、Parallel でも native Worker spawn ではなく task ごとの Cursor companion worktree を使う。

Codex モード(--codex 明示時のみ)

公式プラグイン codex-plugin-cc の companion 経由で Codex CLI にタスクを委託する。

# タスク委託(書き込み可能・worktree 分離)
BASE_REF="$(git rev-parse HEAD)"
WT_ID="codex-$(date +%Y%m%d-%H%M%S)-$$"
WORKTREE_PATH=".claude/worktrees/${WT_ID}"
git worktree add -b "codex-work/${WT_ID}" "$WORKTREE_PATH" "$BASE_REF"
HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH/.claude/state/codex-primary-environment.json" \
  bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH" \
  "タスク内容。完了前にこの worktree で exactly one git commit を作成してください。"

# stdin 経由(大きなプロンプト向け)
CODEX_PROMPT=$(mktemp /tmp/codex-prompt-XXXXXX.md)
# タスク内容を書き出し
cat "$CODEX_PROMPT" | HARNESS_CODEX_PRIMARY_ENV_STATE_FILE="$WORKTREE_PATH/.claude/state/codex-primary-environment.json" \
  bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --write -C "$WORKTREE_PATH"
rm -f "$CODEX_PROMPT"

# Lead review 後に承認されたら range を取り込む
git -C "$WORKTREE_PATH" diff "$BASE_REF..HEAD"
WORKTREE_HEAD="$(git -C "$WORKTREE_PATH" rev-parse HEAD)"
git cherry-pick --no-commit "$BASE_REF..$WORKTREE_HEAD"

companion は App Server Protocol 経由で Codex と通信し、 Job 管理・thread resume・構造化出力を提供する。 結果を検証し、品質基準を満たさない場合は自力で修正。

Cursor モード(adapter candidate、自動選択しない)

Cursor host では .cursor/AGENTS.md.cursor-plugin/plugin.json が bootstrap route。Cursor は candidate のまま — supported claim は禁止。

  • Solo / Parallel: Task tool または .cursor/agents/worker.md subagent
  • Breezing: Worker 並列は non-overlapping file groups のみ; Reviewer / cherry-pick / Advisor は core どおり直列
  • Multitask / background agents: smoke target のみ。Claude Agent Teams parity を主張しない

Model routing:

bash scripts/model-routing.sh --host cursor --role worker --format json

Explicit Task/subagent model が routed default より優先。

検証:

bash tests/test-cursor-adapter-candidate.sh

Breezing モード(4 件以上で自動選択 / --breezing で強制)

Lead / Worker / Advisor / Reviewer の役割分離でチーム実行する。 Codex では spawn_agent, wait, send_input, resume_agent, close_agent を使った native subagent orchestration を前提にし、 古い TeamCreate / TaskCreate ベースの説明を採らない。 Cursor では Task/subagent/background agents へ mapping するが、 review/cherry-pick の直列責務は core 側に残す(adapter smoke target)。

権限ポリシー:

  • 現行の shipped default は bypassPermissions
  • --auto-mode は互換な親セッション向けの opt-in rollout フラグとして扱う
  • permissions.defaultMode や agent frontmatter の permissionMode には未文書化の autoMode 値を書かない

CC v2.1.69+: nested teammates はプラットフォーム側で禁止されるため、 Worker/Reviewer プロンプトには冗長な nested 防止文言を追加しない。

Lead (this agent)
├── Worker (task-worker agent) — 実装担当
├── Advisor (claude-code-harness:advisor) — 方針助言
└── Reviewer (code-reviewer agent) — レビュー担当

Phase A: Pre-delegate(準備):

  1. Plans.md を読み込み、対象タスクを特定
  2. 依存グラフを解析し、実行順序を決定(Depends カラム)
  3. 各タスクの effort スコアリング(effort tier 判定 — high/xhigh)
  4. node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js"sprint-contract.json を生成
  5. bash "${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh" で Reviewer 観点を加え、bash "${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh" で未承認なら停止

Phase B: Delegate(Worker spawn → 必要時 Advisor → レビュー → cherry-pick):

各タスクについて以下を逐次実行する(依存順):

API 注記: 以下は Claude Code の API 構文で記述。 Codex 環境では Agent(...)spawn_agent(...), SendMessage(...)send_input(...) に読み替え。 詳細は team-composition.md の API マッピング表を参照。

for task in execution_order:
    # B-1. sprint-contract を生成
    contract_path = bash("node \"${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js\" {task.number}")
    contract_path = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/enrich-sprint-contract.sh\" {contract_path} --check \"DoD を reviewer 観点で確認\" --approve")
    bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/ensure-sprint-contract-ready.sh\" {contract_path}")

    # B-2. Worker spawn(フォアグラウンド、worktree 分離)
    # Agent tool の戻り値に agentId が含まれる — 修正ループで SendMessage に使用
    Plans.md: task.status = "cc:WIP"  # 着手時に更新(未着手タスクは cc:TODO のまま)

    # 逐次 /harness-work を連打している時も universal violations を伝播させる
    # (初回実行時は universal_violations = [] で初期化済み想定)
    briefing_header = ""
    if universal_violations:
        briefing_header = (
            "🚨 同一セッションで既に検出された universal 違反(再発禁止):\n"
            + "\n".join(f"- {v}" for v in universal_violations)
            + "\n\n"
        )

    worker_result = Agent(
        subagent_type="claude-code-harness:worker",
        prompt=briefing_header + "タスク: {task.内容}\nDoD: {task.DoD}\ncontract_path: {contract_path}\nmode: breezing",
        isolation="worktree",
        run_in_background=false  # フォアグラウンドで実行 → Worker 完了まで待機
    )
    worker_id = worker_result.agentId  # SendMessage 用に保持
    # worker_result には {commit, worktreePath, files_changed, summary} が含まれる

    # B-3. Worker が advice request を返した時だけ、Lead が Advisor を呼ぶ
    if worker_result.type == "advisor-request.v1":
        advisor_result = Advisor(
            prompt=worker_result.request_json
        )
        worker_result = SendMessage(
            to=worker_id,
            message="advisor-response.v1: {advisor_result}"
        )

    # B-3.5. self_review ゲート(Reviewer spawn 前、Lead が機械的に検証)
    # Worker の worker-report.v1 に active self_review rules がそろい、全 verified=true かつ evidence 非空であること
    # tdd.enforce.enabled=true かつ tdd_required=true の時は `tdd-red-evidence-attached` も active rule として必須
    # verified=false または evidence=="" が 1 件でもあれば Reviewer を spawn せず Worker に差し戻す
    self_review_failures = 0
    MAX_SELF_REVIEW_RETRIES = 2  # 3 回目 (retries=2) で Lead が escalate
    while True:
        unverified = [
            r for r in worker_result.self_review
            if (not r.get("verified")) or (not r.get("evidence"))
        ]
        if not unverified:
            break  # 全 rule verified → B-4 (実レビュー) へ進む
        self_review_failures += 1
        if self_review_failures > MAX_SELF_REVIEW_RETRIES:
            # 3 回目でも未確認項目あり → Lead に escalate
            Plans.md: task.status = "cc:TODO"  # 着手前に戻す
            raise EscalationError(f"self_review が 3 回の差し戻しでも未確認 (rules: {[u['rule'] for u in unverified]})")
        # Worker に差し戻し (Reviewer spawn せず)
        SendMessage(
            to=worker_id,
            message=f"self_review に未確認 rule があります: {[u['rule'] for u in unverified]}。各 rule の evidence を実コマンド出力または literal テスト結果で埋め、TDD 必須時は .claude/state/tdd-red-log/<task-id>.jsonl または literal failing test output を添えて verified=true にしてから amend してください"
        )
        worker_result = wait_for_response(worker_id)

    # B-4. Lead がレビュー実行(Codex exec 優先)
    diff_text = git("-C", worker_result.worktreePath, "show", worker_result.commit)
    verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
    profile = jq(contract_path, ".review.reviewer_profile")
    review_input = "review-output.json"
    if profile == "runtime":
        review_input = bash("cd {worker_result.worktreePath} && bash \"${HARNESS_PLUGIN_ROOT}/scripts/run-contract-review-checks.sh\" {contract_path}")
        runtime_verdict = jq(review_input, ".verdict")
        if runtime_verdict == "REQUEST_CHANGES":
            verdict = "REQUEST_CHANGES"
        elif runtime_verdict == "DOWNGRADE_TO_STATIC":
            pass  # runtime 検証コマンドなし → static verdict をそのまま使う
    browser_result = ""
    if profile == "browser":
        # browser artifact から route / browser_mode / execution_instructions を再利用して browser runner を起動する。
        browser_artifact = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/generate-browser-review-artifact.sh\" {contract_path}")
        browser_result = bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/browser-review-runner.sh\" {browser_artifact}")
        browser_verdict = jq(browser_result, ".browser_verdict")
        if browser_verdict == "REQUEST_CHANGES":
            verdict = "REQUEST_CHANGES"
        elif browser_verdict == "APPROVE" and verdict != "REQUEST_CHANGES":
            verdict = "APPROVE"
        # browser_verdict == PENDING_BROWSER のときは static verdict を維持する
    # review_input が DOWNGRADE_TO_STATIC の場合は static review 結果を使う
    if review_input != "review-output.json" and jq(review_input, ".verdict") == "DOWNGRADE_TO_STATIC":
        review_input = "review-output.json"  # static review の結果にフォールバック
    bash("bash \"${HARNESS_PLUGIN_ROOT}/scripts/write-review-result.sh\" {review_input} {latest_commit} --browser-result {browser_result}")

    # B-5. 修正ループ(REQUEST_CHANGES 時、contract の max_iterations まで)
    # Worker はフォアグラウンドで完了済みだが、SendMessage で再開可能
    # (CC: SendMessage(to: agentId) / Codex: resume_agent(agent_id) + send_input)
    review_count = 0
    # sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
    MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3
    latest_commit = worker_result.commit
    while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
        SendMessage(to=worker_id, message="指摘内容: {issues}\n修正して amend してください")
        # Worker が修正 → amend → 更新された commit hash を返す
        updated_result = wait_for_response(worker_id)
        latest_commit = updated_result.commit
        diff_text = git("-C", worker_result.worktreePath, "show", latest_commit)
        verdict = codex_exec_review(diff_text) or reviewer_agent_review(diff_text)
        review_count++

    # B-6. APPROVE → trunk に cherry-pick(feature ブランチ経由)
    # Worker の Branch Guard により trunk HEAD は動かず、commit は feature ブランチ上にある想定
    if verdict == "APPROVE":
        TRUNK=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||' || echo "main")
        git checkout "$TRUNK"  # safety: 既に trunk なら no-op
        # feature ブランチの commit が既に trunk にある(Branch Guard 失敗時のフォールバック)か確認
        if git("merge-base", "--is-ancestor", latest_commit, "HEAD"):
            pass  # 既に trunk 上 — cherry-pick 不要(再入防止)
        else:
            git cherry-pick --no-commit {latest_commit}  # feature branch → trunk
            git commit -m "{task.内容}"
        # Worker の worktree を remove してから feature ブランチを削除
        if worker_result.worktreePath:
            git worktree remove {worker_result.worktreePath} --force
        if worker_result.branch and worker_result.branch not in ["main", "master"] and worker_result.branch != TRUNK:
            git branch -D {worker_result.branch}
        Plans.md: task.status = "cc:完了 [{hash}]"
        # auto-checkpoint 記録(冪等性ガード (c))
        # Plans.md 書き換え直後に呼ぶ。失敗しても fail-open(|| true)でループを止めない
        HASH=$(git rev-parse --short HEAD)
        REVIEW_RESULT_PATH=".claude/state/review-results/${task.number}.review-result.json"
        bash "${HARNESS_PLUGIN_ROOT}/scripts/auto-checkpoint.sh" \
            "${task.number}" "${HASH}" "${contract_path}" "${REVIEW_RESULT_PATH}" \
            || true  # fail-open: harness-mem 未起動環境でも継続
    else:
        → ユーザーにエスカレーション

    # B-7. Progress feed
    print("📊 Progress: Task {completed}/{total} 完了 — {task.内容}")

Advisor Protocol(全モード共通)

Advisor は「実装者」でも「レビュー担当」でもない。 迷った時だけ、実行役が次の一歩を決めるための相談役として入る。

  1. Worker は generic な subagent を増やさず、必要時だけ advisor-request.v1 を返す
  2. Lead が advisor を 1 回だけ呼ぶ
  3. Advisor は PLAN / CORRECTION / STOP のどれかを返す
  4. Lead はその advice を同じ Worker に返して続行させる
  5. Reviewer は最後の成果物だけを見る。advisor の返答に APPROVE / REQUEST_CHANGES を出さない

Solo モードでの Advisor

solo 実行では親セッション自身が Lead を兼ねる。 つまり「自分で実装し、自分で advisor に相談し、最後は独立レビューに回す」形になる。

  • 相談条件は loop / breezing と同じ
  • 相談 budget も task ごとに最大 3 回で同じ
  • STOP はその場で止まり、ユーザー判断へ上げる
  • review artifact の gate は飛ばさない

Sprint Contract

sprint-contract は「このタスクを何で合格にするか」を機械でも人でも同じ意味で読める形にする小さな契約ファイルです。 既定の保存先は .claude/state/contracts/<task-id>.sprint-contract.json です。

node "${HARNESS_PLUGIN_ROOT}/scripts/generate-sprint-contract.js" 32.1.1

生成物には次を含めます。

  • checks: DoD を分解した確認項目
  • non_goals: 今回やらないこと
  • runtime_validation: test, lint, typecheck などの検証コマンド
  • browser_validation: browser reviewer が残すべき UI フロー検証項目
  • browser_mode: scripted または exploratory
  • route: browser reviewer が playwright / agent-browser / chrome-devtools のどれを使うか
  • risk_flags: needs-spike, security-sensitive, ux-regression など
  • reviewer_profile: static, runtime, browser

Phase C: Post-delegate(統合・報告):

  1. 全タスクの commit log を集計
  2. リッチ完了報告(「完了報告フォーマット」の Breezing テンプレート)を出力
  3. Plans.md の最終確認(全タスク cc:完了 になっているか)

CI 失敗時の対応

CI が失敗した場合:

  1. ログを確認してエラーを特定
  2. 修正を実施
  3. 同一原因で 3 回失敗したら自動修正ループを停止
  4. 失敗ログ・試みた修正・残る論点をまとめてエスカレーション

失敗タスクの自動再チケット化

タスク完了後にテスト/CI が失敗した場合、修正タスク案を自動生成し、承認後に Plans.md へ反映する:

トリガー条件

条件 アクション
cc:完了 後にテスト失敗 修正タスク案を state に保存し、承認を待つ
CI 失敗(3回未満) 修正を実施し、失敗カウントをインクリメント
CI 失敗(3回目) 修正タスク案を提示 + エスカレーション

修正タスクの自動生成

  1. 失敗原因を分類(syntax_error / import_error / type_error / assertion_error / timeout / runtime_error)
  2. .claude/state/pending-fix-proposals.jsonl に修正タスク案を保存:
    • 番号: 元タスク番号 + .fix サフィックス(例: 26.1.fix
    • 内容: fix: [元タスク名] - [失敗原因カテゴリ]
    • DoD: テスト/CI が通ること
    • Depends: 元タスク番号
  3. ユーザーが approve fix <task_id> を送ると Plans.md に cc:TODO で追加
  4. reject fix <task_id> で提案を破棄。pending が1件だけのときは yes / no でも応答可能

レビューループ

実装完了後(ステップ 5 の後)に自動実行される品質検証ステージ。 全モード共通(Solo / Parallel / Breezing)で統一的に適用される。 Parallel モードでは各 Worker が step 10(外部レビュー受付)として同じループを実行する。

レビュー実行の優先順位

1. Codex exec(優先)
   ↓ codex コマンドが存在しない or タイムアウト(120s)
2. 内部 Reviewer agent(フォールバック)

APPROVE / REQUEST_CHANGES の判定基準

レビュアーには以下の閾値基準を渡し、この基準のみで verdict を判定させる。 基準外の改善提案は recommendations として返すが、verdict には影響しない。

重要度 定義 verdict への影響
critical セキュリティ脆弱性、データ損失リスク、本番障害の可能性 1 件でも → REQUEST_CHANGES
major 既存機能の破壊、仕様との明確な矛盾、テスト不通過 1 件でも → REQUEST_CHANGES
minor 命名改善、コメント不足、スタイル不統一 verdict に影響しない
recommendation ベストプラクティス提案、将来の改善案 verdict に影響しない

重要: minor / recommendation のみの場合は 必ず APPROVE を返すこと。 「あったほうが良い改善」は REQUEST_CHANGES の理由にならない。

Codex exec レビュー(公式プラグイン経由)

タスク開始時の HEAD を BASE_REF として保持し、その ref との差分をレビュー対象にする。 公式プラグイン codex-plugin-cc の companion review を使用する。

# タスク開始時に base ref を記録(Step 2 の cc:WIP 更新前に実行)
BASE_REF=$(git rev-parse HEAD)

# ... 実装完了後 ...

# 公式プラグインの構造化レビューを実行
bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" review --base "${BASE_REF}"
REVIEW_EXIT=$?

verdict マッピング(公式プラグイン → Harness 形式):

公式プラグインは review-output.schema.json 準拠の構造化出力を返す。 Harness の verdict 形式への変換ルール:

公式 plugin Harness verdict 影響
approve APPROVE -
needs-attention REQUEST_CHANGES -
findings[].severity: critical critical_issues[] 1件でも → REQUEST_CHANGES
findings[].severity: high major_issues[] 1件でも → REQUEST_CHANGES
findings[].severity: medium/low recommendations[] verdict に影響しない

AI Residuals スキャンは引き続き bash "${HARNESS_PLUGIN_ROOT}/scripts/review-ai-residuals.sh" で実行し、 companion review の結果と合わせて最終 verdict を判定する。

# AI Residuals スキャン(companion review と並行実行可能)
AI_RESIDUALS_JSON="$(bash "${HARNESS_PLUGIN_ROOT}/scripts/review-ai-residuals.sh" --base-ref "${BASE_REF}" --include-untracked 2>/dev/null || echo '{"tool":"review-ai-residuals","scan_mode":"diff","base_ref":null,"include_untracked":true,"files_scanned":[],"untracked_files_scanned":[],"summary":{"verdict":"APPROVE","major":0,"minor":0,"recommendation":0,"total":0},"observations":[]}')"

内部 Reviewer agent フォールバック

Codex exec が使えない場合(command -v codex が失敗、または exit code ≠ 0):

Agent tool: subagent_type="reviewer"
prompt: "以下の変更をレビューしてください。判定基準: critical/major → REQUEST_CHANGES、minor/recommendation のみ → APPROVE。diff: {git diff ${BASE_REF}}"

Reviewer agent は Read-only(Write/Edit/Bash 無効)で安全にレビューを実行する。

修正ループ(REQUEST_CHANGES 時)

review_count = 0
# sprint-contract が存在するときのみ max_iterations を読む。存在しない場合は 3(後方互換)
contract_path = get_sprint_contract_path()  # 例: .claude/state/contracts/<task-id>.sprint-contract.json
MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3

while verdict == "REQUEST_CHANGES" and review_count < MAX_REVIEWS:
    1. レビュー指摘を解析(critical / major のみ対象)
    2. 各指摘に対して修正を実装
    3. 再度レビューを実行(同じ判定基準・同じ優先順位)
    review_count++

if review_count >= MAX_REVIEWS and verdict != "APPROVE":
    → ユーザーにエスカレーション
    → 「MAX_REVIEWS 回修正しましたが以下の critical/major 指摘が残っています」+ 指摘一覧を表示
    → ユーザー判断を待つ(続行 / 中断)

Breezing モードでの適用

Breezing モードでは Lead がレビューループを実行する(上記 Phase B 参照):

  1. Worker が worktree 内で実装・commit → Lead に結果返却
  2. Lead が Codex exec でレビュー(優先)/ Reviewer agent(フォールバック)
  3. REQUEST_CHANGES → Lead が SendMessage で Worker に修正指示 → Worker が amend
  4. 修正後、再レビュー(MAX_REVIEWS = read_contract(contract_path, ".review.max_iterations") or 3 回まで)
  5. APPROVE → Lead が trunk(デフォルトブランチ)に cherry-pick → Plans.md を cc:完了 [{hash}] に更新

完了報告フォーマット

タスク完了時(cc:完了 + commit 後)に自動出力される視覚的サマリ。 非専門家にも変更内容と影響が伝わることを目的とする。

テンプレート

┌─────────────────────────────────────────────┐
│  ✓ Task {N} 完了: {タスク名}                    │
├─────────────────────────────────────────────┤
│                                              │
│  ■ 何をしたか                                 │
│    • {変更内容 1}                              │
│    • {変更内容 2}                              │
│                                              │
│  ■ 何が変わるか                                │
│    Before: {旧動作}                            │
│    After:  {新動作}                            │
│                                              │
│  ■ 変更ファイル ({N} files)                    │
│    {ファイルパス 1}                             │
│    {ファイルパス 2}                             │
│                                              │
│  ■ 残りの課題                                  │
│    • Task {X} ({status}): {内容}  ← Plans.md  │
│    • Task {Y} ({status}): {内容}  ← Plans.md  │
│    (Plans.md に {M} 件の未完了タスクあり)       │
│                                              │
│  commit: {hash} | review: {APPROVE}           │
└─────────────────────────────────────────────┘

生成ルール

  1. 何をしたか: git diff --stat HEAD~1 と commit message から自動抽出。技術用語は最小限にし、動詞で始める
  2. 何が変わるか: タスクの「内容」と「DoD」から Before/After を推論。ユーザー体験の変化を重視
  3. 変更ファイル: git diff --name-only HEAD~1 から取得。5 ファイル超は省略して件数表示
  4. 残りの課題: Plans.md の cc:TODO / cc:WIP タスクを一覧表示。Plans.md に記載済みかどうかを明示
  5. review: レビュー結果(APPROVE / REQUEST_CHANGES → APPROVE)を表示

Parallel モードでの報告

  • 1 タスク--parallel 強制時): Solo テンプレートを使用
  • 複数タスク: Breezing 集約テンプレートを使用(下記参照)

Breezing モードでの報告

全タスク完了後にまとめて出力。各タスクは簡略版(何をしたか + commit hash のみ)で一覧し、 最後に全体サマリ(合計変更ファイル数 + 残り課題)を出力する:

┌─────────────────────────────────────────────┐
│  ✓ Breezing 完了: {N}/{M} タスク             │
├─────────────────────────────────────────────┤
│                                              │
│  1. ✓ {タスク名 1}            [{hash1}]      │
│  2. ✓ {タスク名 2}            [{hash2}]      │
│  3. ✓ {タスク名 3}            [{hash3}]      │
│                                              │
│  ■ 全体の変更                                 │
│    {N} files changed, {A} insertions(+),     │
│    {D} deletions(-)                          │
│                                              │
│  ■ 残りの課題                                  │
│    Plans.md に {K} 件の未完了タスクあり         │
│    • Task {X}: {内容}                         │
│                                              │
└─────────────────────────────────────────────┘

関連スキル

  • harness-plan — 実行するタスクを計画する
  • harness-sync — 実装と Plans.md を同期する
  • harness-review — 実装のレビュー
  • harness-release — バージョンバンプ・リリース
用于整理和归档文件,清理膨胀的Plans.md、session-log、旧日志及状态文件。通过子命令执行具体维护任务,操作前需确认信息已同步至SSOT,并支持干跑模式与自动钩子联动。
/maintenance cleanup archive organize split session-log
skills/maintenance/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill maintenance -g -y
SKILL.md
Frontmatter
{
    "name": "maintenance",
    "effort": "low",
    "description": "File cleanup and archiving. Tidies up bloated Plans.md, session-log.md, old logs, and state files. Trigger: \/maintenance, cleanup, archive, organize, split session-log. Do NOT load for: implementation, review, release, new feature development.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Grep",
        "Glob",
        "Bash"
    ],
    "argument-hint": "[plans|session-log|logs|state|all] [--dry-run]",
    "description-en": "File cleanup and archiving. Tidies up bloated Plans.md, session-log.md, old logs, and state files. Trigger: \/maintenance, cleanup, archive, organize, split session-log. Do NOT load for: implementation, review, release, new feature development.",
    "description-ja": "ファイル整理・アーカイブ・ログ圧縮を担当。散らかった Plans.md \/ session-log.md \/ 古いログ \/ state ファイルを整頓する。`\/maintenance`, メンテ, 整理して, アーカイブして, 古いタスク移動, session-log 分割, ログ掃除 で起動。実装・レビュー・リリース・新機能開発には使わない。",
    "user-invocable": true
}

Maintenance

散らかったファイルを整頓する単一目的スキル。auto-cleanup-hook が警告を出した時、 または定期的な家事として呼び出す。

前提: 破壊的操作(アーカイブ移動・行削除)の前に Plans.md / session-log.md の 重要情報が SSOT (decisions.md / patterns.md) に昇格済みか確認する。 未同期なら /memory sync を先に走らせる。

Quick Reference

サブコマンド 対象 典型トリガー
maintenance plans Plans.md 完了タスクのアーカイブ移動 「Plans.md 整理」「古いタスクを移動」
maintenance session-log session-log.md の月別分割 「session-log 分割」「ログが長い」
maintenance logs .claude/logs/ の古いファイル削除 「ログ掃除」「30日以上前のログ消して」
maintenance state agent-trace.jsonl / harness-usage.json のトリム 「trace 肥大」「state 圧縮」
maintenance all 上記4つを順に実行 「全部整理」「総掃除」

--dry-run を付けると何をするかだけ列挙して実行しない。自由記述の指示(例: 「古いアーカイブも消して」「この session-log だけ残して」)は Step 1 で 受け付けて Step 2 以降の処理パラメータに反映する。

実行手順

  1. ユーザー指示のパース: サブコマンド + 自由記述(除外対象、保存先、日数閾値)を抽出
  2. SSOT 同期チェック: .claude/state/.ssot-synced-this-session が無ければ /memory sync を促す(Plans.md を触る場合のみ必須)
  3. 参照ファイルを開く: ${CLAUDE_SKILL_DIR}/references/cleanup.md を読み対応セクションを実行
  4. Before/After を報告: 行数と削除件数を表示して完了

サブコマンド詳細

対象ごとの実行手順・閾値・アーカイブ先は cleanup.md を参照。

auto-cleanup-hook との連携

PostToolUse hook (scripts/auto-cleanup-hook.sh / Go 版 auto_cleanup_hook.go) は Plans.md・session-log.md・CLAUDE.md の行数超過を検知すると /maintenance で古いタスクをアーカイブすることを推奨します と feedback を返す。 この警告を見たら該当サブコマンドを実行する。

注意事項

  • 進行中タスクは動かさない: cc:WIP, pm:依頼中, cursor:依頼中 はアーカイブ対象外
  • アーカイブ先ディレクトリは固定: .claude/memory/archive/ — 別の場所に移すときは ユーザーに確認する
  • バックアップ: 200 行超のファイルを編集する前に cp <file> <file>.bak.$(date +%s) で ローカルバックアップを取る
  • CLAUDE.md は警告のみ: 自動編集しない。分割提案だけ出す

関連スキル

  • memory — Plans.md 整理前の SSOT 昇格(decisions.md / patterns.md 更新)
  • harness-setup — セットアップ直後の定期メンテは harness-setup 経由でも呼べる
  • session-init — セッション開始時のメンテ推奨通知を制御
负责SSOT与记忆管理,包括初始化、计划合并、项目同步及从内存升格关键决策。优先使用Harness MCP进行跨工具记录与搜索,协调Layer 1自动学习与Layer 2显式管理的共存关系。
memory SSOT decisions.md patterns.md harness-mem memory search
skills/memory/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill memory -g -y
SKILL.md
Frontmatter
{
    "name": "memory",
    "context": "fork",
    "description": "SSOT\/memory + cross-tool search. Guards decisions.md, patterns.md. Triggers: memory, SSOT, decisions.md, patterns.md, harness-mem, memory search. Skip for: implementation, review.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash",
        "mcp__harness__harness_mem_*"
    ],
    "argument-hint": "[ssot|sync|migrate|search|record]",
    "description-en": "SSOT\/memory + cross-tool search. Guards decisions.md, patterns.md. Triggers: memory, SSOT, decisions.md, patterns.md, harness-mem, memory search. Skip for: implementation, review.",
    "description-ja": "SSOTと記憶を管理し、ツール横断の記憶検索を提供。decisions.mdとpatterns.mdの守護者です。Use when user mentions memory, SSOT, decisions.md, patterns.md, merging, migration, SSOT promotion, sync memory, save learnings, memory search, harness-mem, past decisions, or record this. Do NOT load for: implementation work, reviews, ad-hoc notes, or in-session logging.",
    "user-invocable": true
}

Memory Skills

メモリとSSOT管理を担当するスキル群です。

機能詳細

機能 詳細
SSOT初期化 See references/ssot-initialization.md
Plans.mdマージ See references/plans-merging.md
移行処理 See references/workflow-migration.md
プロジェクト仕様同期 See references/sync-project-specs.md
メモリ→SSOT昇格 See references/sync-ssot-from-memory.md

Unified Harness Memory(共通DB)

Claude Code / Codex / OpenCode 共通の記録・検索は harness_mem_* MCP を優先する。

  • 検索: harness_mem_search, harness_mem_timeline, harness_mem_get_observations
  • 注入: harness_mem_resume_pack
  • 記録: harness_mem_record_checkpoint, harness_mem_finalize_session, harness_mem_record_event

Claude Code 自動メモリとの関係(D22)

Harness の SSOT メモリ(Layer 2)は Claude Code の自動メモリ(Layer 1)と共存します。 自動メモリは汎用的な学習を暗黙的に記録し、SSOT はプロジェクト固有の意思決定を明示的に管理します。 Layer 1 の知見がプロジェクト全体に重要な場合、/memory ssot で Layer 2 に昇格してください。

詳細: D22: 3層メモリアーキテクチャ

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容に従って実行

SSOT昇格

メモリシステム(Claude-mem / Serena)から重要な学びをSSOTに永続化します。

负责生成NotebookLM YAML和演示文稿。适用于用户提及NotebookLM、YAML、幻灯片或演示的场景。不用于代码实现、修复、审查或部署。支持大PDF的分页高效读取以优化Token消耗。
用户提到 NotebookLM 需要生成 YAML 需要制作幻灯片 需要创建演示文稿
skills/notebookLM/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill notebookLM -g -y
SKILL.md
Frontmatter
{
    "name": "notebookLM",
    "description": "Generate NotebookLM YAML and slides. Document craftsman shows skill. Use when user mentions NotebookLM, YAML, slides, or presentations. Do NOT load for: implementation work, code fixes, reviews, or deployments.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit"
    ],
    "argument-hint": "[yaml|slides]",
    "description-en": "Generate NotebookLM YAML and slides. Document craftsman shows skill. Use when user mentions NotebookLM, YAML, slides, or presentations. Do NOT load for: implementation work, code fixes, reviews, or deployments.",
    "description-ja": "NotebookLM用YAMLやスライドを生成。ドキュメント職人の腕の見せ所。Use when user mentions NotebookLM, YAML, slides, or presentations. Do NOT load for: implementation work, code fixes, reviews, or deployments.",
    "user-invocable": false,
    "disable-model-invocation": true
}

NotebookLM Skill

ドキュメント生成を担当するスキル群です。

機能詳細

機能 詳細
NotebookLM YAML See references/notebooklm-yaml.md
スライド YAML See references/notebooklm-slides.md

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容に従って生成

🔧 PDF ページ範囲読み取り(Claude Code 2.1.49+)

大型 PDF を効率的に扱うための機能です。

ページ範囲指定で読み取り

// ページ範囲指定で読み取り
Read({ file_path: "docs/spec.pdf", pages: "1-10" })

// 目次だけ確認
Read({ file_path: "docs/manual.pdf", pages: "1-3" })

// 特定のセクションのみ
Read({ file_path: "docs/api-reference.pdf", pages: "25-45" })

ユースケース別の推奨アプローチ

ケース 推奨読み取り方法 理由
100ページ超のPDF 目次(1-3) → 関連章のみ トークン消費を最小化
仕様書レビュー セクション単位で範囲指定 必要な部分のみ精読
APIドキュメント エンドポイント一覧(目次)から開始 全体構造を把握してから詳細へ
学術論文 Abstract + 結論 → 本文 要点を先に把握
技術マニュアル 目次 + トラブルシューティング章 実用的な部分を優先

NotebookLM YAML 生成時の活用例

大型PDF(300ページの技術仕様書)からYAMLを生成する場合:

1. **目次を読む**(1-5ページ)
   Read({ file_path: "spec.pdf", pages: "1-5" })
   → 章立てを把握

2. **各章の冒頭を読む**(各章の最初の2ページ)
   Read({ file_path: "spec.pdf", pages: "10-11" })  // 第1章
   Read({ file_path: "spec.pdf", pages: "45-46" })  // 第2章
   → 各章の概要を把握

3. **重要セクションを精読**
   Read({ file_path: "spec.pdf", pages: "78-95" })  // APIリファレンス
   → 詳細な内容を抽出

この方法で、300ページすべてを読むことなく効率的にYAMLを生成できます。

ベストプラクティス

原則 説明
段階的読み込み 目次 → 概要 → 詳細の順に読む
関連ページのみ タスクに必要なページだけ指定
トークン節約 全ページ読み込みは最終手段
構造理解優先 目次で全体像を把握してから詳細へ

従来の方法との比較

方法 トークン消費 処理時間 精度
全ページ読み込み(300ページ) ~150,000 長い
ページ範囲指定(必要な30ページ) ~15,000 短い

90%のトークン削減と処理時間短縮が可能

提供开发原则、安全指南及差异感知编辑规则。用于指导代码修改策略和仓库上下文理解,不适用于实现、审查或工作流教练场景。
需要遵循开发原则时 进行差异感知编辑时 读取仓库上下文时
skills/principles/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill principles -g -y
SKILL.md
Frontmatter
{
    "name": "principles",
    "description": "Explicit helper for development principles, safety guidelines, and diff-aware editing rules. Do NOT load for: implementation, review, workflow coaching, or VibeCoder onboarding.",
    "allowed-tools": [
        "Read"
    ],
    "description-en": "Explicit helper for development principles, safety guidelines, and diff-aware editing rules. Do NOT load for: implementation, review, workflow coaching, or VibeCoder onboarding.",
    "description-ja": "開発原則、安全ガイドライン、差分尊重の編集ルールを確認する明示補助スキル。実装、レビュー、進め方相談、VibeCoder案内には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Principles Skills

開発原則とガイドラインを提供するスキル群です。

機能詳細

機能 詳細
基本原則 See references/general-principles.md
差分編集 See references/diff-aware-editing.md
コンテキスト読み取り See references/repo-context-reading.md
VibeCoder See references/vibecoder-guide.md

実行手順

  1. ユーザーのリクエストを分類
  2. 上記の「機能詳細」から適切な参照ファイルを読む
  3. その内容を参照・適用
根据/work命令的--resume或--fork参数,控制会话的恢复或分支。通过执行脚本更新session.json和session.events.jsonl文件。仅供内部工作流使用,严禁用于用户会话管理、登录状态或应用状态处理。
需要基于标志位控制会话恢复或分叉的内部工作流任务 执行/work命令并指定了--resume或--fork参数的场景
skills/session-control/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-control -g -y
SKILL.md
Frontmatter
{
    "name": "session-control",
    "description": "Controls session resume\/fork(branch) for \/work based on --resume\/--fork flags. Updates session.json and session.events.jsonl. Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Write",
        "Edit"
    ],
    "description-en": "Controls session resume\/fork(branch) for \/work based on --resume\/--fork flags. Updates session.json and session.events.jsonl. Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "description-ja": "\/work のセッション resume\/fork(branch) を --resume\/--fork フラグに基づいて制御。session.json と session.events.jsonl を更新する内部ワークフロー専用スキル。Do NOT load for: user session management, login state, app state handling.",
    "user-invocable": false,
    "disable-model-invocation": true
}

Session Control Skill

/work の --resume / --fork フラグに応じてセッション状態を切り替える。

機能詳細

機能 詳細
セッション再開/分岐 See references/session-control.md

実行手順

  1. workflow から渡された変数を確認
  2. scripts/session-control.sh を適切な引数で実行
  3. session.jsonsession.events.jsonl の更新を確認
会话启动内部技能,用于初始化检查。自动验证Git状态、Plans.md任务进度及AGENTS.md约束,并通过harness-mem获取上下文以恢复工作流。仅在session/startup流程中调用,不用于实施或审查阶段。
session / SessionStart 系フロー /session コマンド
skills/session-init/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-init -g -y
SKILL.md
Frontmatter
{
    "name": "session-init",
    "description": "Internal sub-skill for session startup checks, Plans.md status, git state, and harness-mem resume pack. Invoked by session\/startup workflows only. Do NOT load for: implementation, reviews, or mid-session tasks.",
    "allowed-tools": [
        "Read",
        "Write",
        "Bash",
        "mcp__harness__harness_mem_resume_pack",
        "mcp__harness__harness_mem_sessions_list",
        "mcp__harness__harness_mem_health"
    ],
    "description-en": "Internal sub-skill for session startup checks, Plans.md status, git state, and harness-mem resume pack. Invoked by session\/startup workflows only. Do NOT load for: implementation, reviews, or mid-session tasks.",
    "description-ja": "セッション開始時の環境確認、Plans.md 状況、git状態、harness-mem resume pack を扱う内部サブスキル。session\/startup 系からのみ呼ぶ。実装、レビュー、途中作業には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Session Init Skill

セッション開始時の環境確認と現在のタスク状況把握を行うスキル。


呼び出し条件

このスキルは session / SessionStart 系フローから内部的に呼び出します。 ユーザー向けの入口は /session または通常のセッション開始フローです。

旧トリガーフレーズ:

  • 「セッション開始」
  • 「作業開始」
  • 「今日の作業を始める」
  • 「状況を確認して」
  • 「何をすればいい?」
  • "start session"
  • "what should I work on?"

概要

Session Init スキルは、Claude Code セッション開始時に自動的に以下を確認します:

  1. Git 状態: 現在のブランチ、未コミットの変更
  2. Plans.md: 進行中タスク、依頼されたタスク
  3. AGENTS.md: 役割分担、禁止事項の確認
  4. 前回セッション: 引き継ぎ事項の確認
  5. 最新 snapshot: 進捗スナップショットの要約と前回差分

実行手順

Step 0: ファイル状態チェック(自動整理)

セッション開始前にファイルサイズをチェック:

# Plans.md の行数チェック
if [ -f "Plans.md" ]; then
  lines=$(wc -l < Plans.md)
  if [ "$lines" -gt 200 ]; then
    echo "⚠️ Plans.md が ${lines} 行です。「整理して」で整理を推奨"
  fi
fi

# session-log.md の行数チェック
if [ -f ".claude/memory/session-log.md" ]; then
  lines=$(wc -l < .claude/memory/session-log.md)
  if [ "$lines" -gt 500 ]; then
    echo "⚠️ session-log.md が ${lines} 行です。「セッションログを整理して」で整理を推奨"
  fi
fi

整理が必要な場合は提案を表示(作業には影響しない)。

Step 0.5: 旧ローカルメモリ互換の扱い(任意)

現在の標準は Step 0.7 の Unified Harness Memory です。 旧ローカルメモリ互換の確認は原則不要で、特別な移行確認が必要な場合だけ個別に参照します。

: 通常運用ではこのステップをスキップし、共通DB の Resume Pack を唯一の再開導線として扱います。

Step 0.7: Unified Harness Memory Resume Pack(必須)

Codex / Claude / OpenCode 共通DB(~/.harness-mem/harness-mem.db)から再開文脈を取得する。

必須呼び出し:

harness_mem_resume_pack(project, session_id?, limit=5, include_private=false)

運用ルール:

  • project は必ず現在プロジェクト名を指定
  • session_id$CLAUDE_SESSION_ID.claude/state/session.json.session_id の順で取得する
  • harness_mem_sessions_list(project, limit=1) の先頭利用は read-only(resume確認)に限定し、record_checkpoint / finalize_session での書き込みには使わない
  • 取得結果はセッション開始時コンテキストに注入
  • 取得失敗時は harness_mem_health() で daemon 状態を確認し、失敗を明示して続行
  • 復旧は scripts/harness-memd doctorscripts/harness-memd cleanup-stalescripts/harness-memd start の順で行う

Step 1: 環境確認

以下を並列で実行:

# Git状態
git status -sb
git log --oneline -3
# Plans.md
cat Plans.md 2>/dev/null || echo "Plans.md not found"
# AGENTS.md の要点
head -50 AGENTS.md 2>/dev/null || echo "AGENTS.md not found"

Step 2: タスク状況の把握

Plans.md から以下を抽出:

  • cc:WIP - 前回から継続中のタスク
  • pm:依頼中 - PM から新規依頼されたタスク(互換: cursor:依頼中)
  • cc:TODO - 未着手だが割り当て済みのタスク

Step 3: 状況レポートの出力

## 🚀 セッション開始

**日時**: {{YYYY-MM-DD HH:MM}}
**ブランチ**: {{branch}}
**セッションID**: ${CLAUDE_SESSION_ID}

---

### 📋 今日のタスク

**優先タスク**:
- {{pm:依頼中(互換: cursor:依頼中) または cc:WIP のタスク}}

**その他のタスク**:
- {{cc:TODO のタスク一覧}}

---

### ⚠️ 注意事項

{{AGENTS.md からの重要な制約・禁止事項}}

---

**作業を開始しますか?**

出力フォーマット

セッション開始時は、以下の情報を簡潔に提示:

項目 内容
現在のブランチ staging など
優先タスク 最も重要な 1-2 件
注意事項 禁止事項の要約
次のアクション 具体的な提案

関連コマンド

  • /work - タスク実行(並列実行対応)
  • /sync-status - Plans.md の進捗サマリー
  • /maintenance - ファイルの自動整理

注意事項

  • AGENTS.md を必ず確認: 役割分担を把握してから作業開始
  • Plans.md が無い場合: /harness-init を案内
  • 前回の作業が中断している場合: 継続するか確認
管理跨会话记忆与持久化学习的内部技能。自动记录会话日志、决策和模式,支持从历史中恢复上下文、延续未完成任务,并维护项目技术栈等关键信息,实现知识在多次交互中的有效传承。
询问上次做了什么或继续之前的工作 查看历史记录或过往作业 了解项目背景信息 英文触发词如 what did we do last time
skills/session-memory/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-memory -g -y
SKILL.md
Frontmatter
{
    "name": "session-memory",
    "description": "Internal sub-skill for cross-session handoff, durable learning, and memory persistence. Invoked by session\/memory workflows only. Do NOT load for: implementation, review, ad-hoc notes, or SSOT editing.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "description-en": "Internal sub-skill for cross-session handoff, durable learning, and memory persistence. Invoked by session\/memory workflows only. Do NOT load for: implementation, review, ad-hoc notes, or SSOT editing.",
    "description-ja": "セッション間引き継ぎ、永続学習、memory persistence を扱う内部サブスキル。session\/memory 系からのみ呼ぶ。実装、レビュー、単発メモ、SSOT編集には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Session Memory Skill

セッション間の学習と記憶を管理するスキル。 過去の作業内容、決定事項、学んだパターンを記録・参照します。


トリガーフレーズ

このスキルは以下のフレーズで自動起動します:

  • 「前回何をした?」「前回の続きから」
  • 「履歴を見せて」「過去の作業」
  • 「このプロジェクトについて教えて」
  • "what did we do last time?", "continue from before"

概要

このスキルは .claude/memory/ に作業履歴を保存し、 セッション間での知識の継続を実現します。

あわせて、重要な情報は「どこに残すべきか」を明確にします(詳細: docs/MEMORY_POLICY.md)。


メモリ構造

.claude/
├── memory/
│   ├── session-log.md      # セッションごとのログ
│   ├── decisions.md        # 重要な決定事項
│   ├── patterns.md         # 学んだパターン
│   └── context.json        # プロジェクトコンテキスト
└── state/
    └── agent-trace.jsonl   # Agent Trace(ツール実行履歴)

推奨運用(SSOT/ローカル分離)

  • SSOT(共有推奨): decisions.md / patterns.md
    • 「決定(Why)」と「再利用できる解法(How)」を集約する
    • 各エントリは タイトル + タグ(例: #decision #db)を付け、先頭に Index を置く
  • ローカル推奨: session-log.md / context.json / .claude/state/
    • ノイズ/肥大化しやすいため、基本は Git 管理しない(必要なら個別に判断)

自動記録される情報

session-log.md

各セッション記録には、実行環境から取得できるセッションIDを付与します。 Claude Code では ${CLAUDE_SESSION_ID} を優先し、Codex では Codex runtime が渡す session / thread ID を優先します。 どちらも取得できない場合は .claude/state/session.json.session_id を読み、最後の fallback として日時ベースのIDを生成します。 これにより、セッション間のトレーサビリティが向上します。

## セッション: 2024-01-15 14:30 (session: abc123def)

### 実行したタスク
- [x] ユーザー認証機能の実装
- [x] ログインページの作成

### 生成したファイル
- src/lib/auth.ts
- src/app/login/page.tsx

### 重要な決定
- 認証方式: Supabase Auth を採用

### 次回への引き継ぎ
- ログアウト機能が未実装
- パスワードリセットも必要

Note: ${CLAUDE_SESSION_ID} は Claude Code が自動設定する環境変数です。 Codex 側ではこの変数が存在しない場合があるため、固定前提にせず、Codex runtime の session / thread ID または .claude/state/session.json を使います。

decisions.md

## 技術選定

| 日付 | 決定事項 | 理由 |
|------|---------|------|
| 2024-01-15 | Supabase Auth | 無料枠あり、セットアップ簡単 |
| 2024-01-14 | Next.js App Router | 最新のベストプラクティス |

## アーキテクチャ

- コンポーネント: `src/components/`
- ユーティリティ: `src/lib/`
- 型定義: `src/types/`

patterns.md

## このプロジェクトのパターン

### コンポーネント命名
- PascalCase
- 例: `UserProfile.tsx`, `LoginForm.tsx`

### API エンドポイント
- `/api/v1/` プレフィックス
- RESTful 設計

### エラーハンドリング
- try-catch で囲む
- エラーメッセージは日本語

context.json

{
  "project_name": "my-blog",
  "created_at": "2024-01-14",
  "stack": {
    "frontend": "next.js",
    "backend": "next-api",
    "database": "supabase",
    "styling": "tailwind"
  },
  "current_phase": "フェーズ2: コア機能",
  "last_session": "2024-01-15T14:30:00Z"
}

処理フロー

セッション開始時

  1. .claude/memory/context.json を読み込み
  2. 前回のセッションログを確認
  3. Agent Trace から直近の編集履歴を取得
  4. 未完了タスクを特定
  5. コンテキストサマリーを生成

Agent Trace 活用:

# 前回の編集ファイル一覧を取得
tail -50 .claude/state/agent-trace.jsonl | jq -r '.files[].path' | sort -u

# プロジェクト情報を取得
tail -1 .claude/state/agent-trace.jsonl | jq '.metadata'

セッション中

  1. 重要な決定を decisions.md に記録
  2. 新しいパターンを patterns.md に追加
  3. ファイル生成を session-log.md に記録

セッション終了時

  1. セッションサマリーを生成
  2. context.json を更新
  3. 次回への引き継ぎ事項を記録

メモリ最適化(CC 2.1.49+)

Claude Code 2.1.49 以降、セッション再開時のメモリ使用量が 68% 削減 されました。

推奨ワークフロー

# 長時間作業は --resume を活用
claude --resume

# 大規模タスクは分割してセッション再開
claude --resume "続きから"
シナリオ 推奨
長時間実装 1-2時間ごとにセッション再開
大規模リファクタ 機能単位でセッション分割
メモリ不足警告 即座に --resume で再開

メモリ効率が大幅に改善されたため、セッション再開を積極的に活用してください。

/recap — セッション中の状況確認(CC 2.1.108+)

CC 2.1.108 で追加された /recap コマンド(/rewind のエイリアス)は、現在のセッション内で これまでに何をしたかを素早く振り返るために使用します。 --resume で別セッションに戻る前や、長時間作業の途中確認に組み合わせると効果的です。

推奨タイミング:

タイミング 使い方
--resume で再開する直前 /recap でコンテキストを整理してから claude --resume
Breezing の Worker 再開前 セッション内の進捗を /recap で確認してから次タスクへ
長時間実装 (1時間超) の中間点 /recap で状況確認 → 必要なら session-log.md に手動追記
# 典型的な使用フロー
# 1. 現在の作業状況を確認
/recap

# 2. 必要に応じて session-log.md に手動追記後、セッションを再開
claude --resume

/recap はセッション内の振り返りのみ。前回セッションの内容は session-log.md または claude --resume でのコンテキスト継承で確認する。


使用例

前回の続きから開始

ユーザー: 「前回の続きから」

Claude Code:
📋 前回のセッション(2024-01-15)

完了したタスク:
- ユーザー認証機能
- ログインページ

未完了:
- ログアウト機能
- パスワードリセット

「ログアウト機能を作って」と言えば続きを実装します。

プロジェクトの状況確認

ユーザー: 「このプロジェクトについて教えて」

Claude Code:
📁 プロジェクト: my-blog

技術スタック:
- Next.js + Tailwind CSS + Supabase

現在のフェーズ: コア機能開発
進捗: 40% 完了

最近の決定:
- Supabase Auth を採用
- App Router を使用

Claude Code 自動メモリとの関係(D22)

Claude Code 2.1.32+ には「自動メモリ」機能があり、~/.claude/projects/<project>/memory/MEMORY.md にセッション間の学習を自動保存します。

Harness のメモリシステムとは3層アーキテクチャとして共存します:

システム 内容 管理
Layer 1 Claude Code 自動メモリ 汎用的な学習(ミス回避、ツール使い方) 暗黙的・自動
Layer 2 Harness SSOT プロジェクト固有の決定事項・パターン 明示的・手動
Layer 3 Agent Memory エージェント別のタスク学習 エージェント定義

使い分け:

  • Layer 1 の知見がプロジェクト全体に重要 → /memory ssot で Layer 2 に昇格
  • 日常的な学習は Layer 1 に任せる(無効化しない)
  • Agent Teams 使用時は並列書き込みに注意

詳細: D22: 3層メモリアーキテクチャ


注意事項

  • 自動保存: hooks/Stop により、セッション終了時に session-log.md へ要約を自動追記する運用を推奨(未導入の場合は手動運用でOK)
  • プライバシー: 機密情報は記録しない
  • Git方針: decisions.md/patterns.mdは共有推奨、session-log.md/context.json/.claude/state/はローカル推奨(詳細: docs/MEMORY_POLICY.md
  • 容量管理: ログが大きくなったら「セッションログを整理して」を推奨
管理会话状态转换的内部技能,遵循SESSION_ORCHESTRATION.md定义的状态机。在/work阶段边界、错误升级、会话结束及恢复时执行相应状态更新。仅限内部工作流使用,禁止用于用户会话或应用状态管理。
/work阶段边界状态更新 发生错误时的状态升级 会话结束时停止状态 会话恢复时初始化
skills/session-state/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session-state -g -y
SKILL.md
Frontmatter
{
    "name": "session-state",
    "description": "Manages session state transitions per SESSION_ORCHESTRATION.md. Controls state updates at \/work phase boundaries, escalated transitions on error, and initialized restoration on session resume. Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "allowed-tools": [
        "Read",
        "Bash"
    ],
    "description-en": "Manages session state transitions per SESSION_ORCHESTRATION.md. Controls state updates at \/work phase boundaries, escalated transitions on error, and initialized restoration on session resume. Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "description-ja": "SESSION_ORCHESTRATION.md に基づくセッション状態遷移管理。\/work フェーズ境界での状態更新、エラー時の escalated 遷移、セッション再開時の initialized 復帰を制御。Internal workflow use only. Do NOT load for: user session management, login state, app state handling.",
    "user-invocable": false,
    "disable-model-invocation": true
}

Session State Skill

セッション状態の遷移を管理する内部スキル。 docs/SESSION_ORCHESTRATION.md に定義された状態機械に従って遷移を検証・実行する。

機能詳細

機能 詳細
状態遷移 See references/state-transition.md

使用タイミング

  • /work フェーズ境界での状態更新
  • エラー発生時の escalated 遷移
  • セッション終了時の stopped 遷移
  • セッション再開時の initialized 復帰

注意事項

  • このスキルは内部使用専用です
  • ユーザーが直接呼び出すことは想定していません
  • 状態遷移ルールは docs/SESSION_ORCHESTRATION.md で定義
统一管理Claude Code会话,支持初始化、记忆持久化、状态控制及跨会话通信。提供列出会话、收件箱查看和广播消息功能。适用于管理Agent会话生命周期,不用于用户登录或应用级会话状态。
需要查看或管理当前活跃的Claude Code会话列表时 需要在不同会话间发送消息或检查收件箱时 执行会话初始化、恢复(resume)或分叉(fork)操作时 涉及跨会话的记忆持久化和状态控制任务时
skills/session/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill session -g -y
SKILL.md
Frontmatter
{
    "name": "session",
    "description": "Unified session management window. Handles initialization, memory, state all-in-one. Explicit \/session invocation only — sub-skills handle auto-delegation. Use when managing Claude Code sessions, \/session command. Do NOT load for: app user sessions, login state, authentication features.",
    "allowed-tools": [
        "Read",
        "Bash",
        "Write",
        "Edit",
        "Glob"
    ],
    "argument-hint": "[list|inbox|broadcast \"message\"]",
    "description-en": "Unified session management window. Handles initialization, memory, state all-in-one. Explicit \/session invocation only — sub-skills handle auto-delegation. Use when managing Claude Code sessions, \/session command. Do NOT load for: app user sessions, login state, authentication features.",
    "description-ja": "セッション管理の総合窓口。初期化・記憶・状態を一手に引き受けます。明示的 \/session 呼び出し専用 — 下位スキルが自動委譲されるため自動発動は不要。Use when managing Claude Code sessions, \/session command. Do NOT load for: app user sessions, login state, authentication features.",
    "user-invocable": true,
    "disable-model-invocation": true
}

Session Skill (Unified)

Consolidates all session-related functionality into one skill.

Usage

/session              # Show available options
/session list         # Show active sessions
/session inbox        # Check incoming messages
/session broadcast "message"  # Send message to all sessions

Subcommands

/session list - List Active Sessions

Shows all active Claude Code sessions in the current project.

📋 Active Sessions

| Session ID | Status | Last Activity |
|------------|--------|---------------|
| abc123     | active | 2 min ago     |
| def456     | idle   | 15 min ago    |

/session inbox - Check Inbox

Checks for incoming messages from other sessions.

📬 Session Inbox

| From | Time | Message |
|------|------|---------|
| abc123 | 5m ago | "Ready for review" |
| def456 | 10m ago | "API implementation done" |

/session broadcast "message" - Broadcast Message

Sends a message to all active sessions.

/session broadcast "Review complete, ready for merge"

Capabilities

Feature Description Reference
Initialization Start new session, load context See ../session-init/SKILL.md
Memory Persist learnings across sessions See ../session-memory/SKILL.md
State Control Resume/fork session based on flags See references/session-control.md
Communication Cross-session messaging See ../session-state/SKILL.md

メモリ最適化(CC 2.1.49+)

Claude Code 2.1.49 以降、セッション再開時のメモリ使用量が 68% 削減 されました。

長時間セッション管理のベストプラクティス

ワークロード 推奨戦略
通常実装 1-2時間ごとに --resume で再開
大規模リファクタ 機能単位でセッション分割 → 各セッションで --resume
並列タスク /work all で並列実行、長時間なら途中で --resume
メモリ警告時 即座に --resume で再開(以前より高速)

セッション名の自動生成(CC 2.1.41+)

/rename を引数なしで実行すると、会話コンテキストからセッション名を自動生成します。 長時間セッションや --resume を多用するワークフローでセッションの識別が容易になります。

効率的なワークフロー例

# 実装フェーズ1
claude "認証機能を実装"
# → 1時間後

# セッション再開(メモリ効率的)
claude --resume "パスワードリセット機能を追加"
# → 1時間後

# さらに再開
claude --resume "テストを追加"

メモリ管理の推奨事項

推奨事項 理由
積極的なセッション再開 68% メモリ削減で再開コストが低い
定期的な再開 コンテキストを整理し、集中力を維持
機能単位の分割 大規模タスクを小さく分けて再開
Plans.md を活用 再開時の引き継ぎがスムーズ

💡 メモリ効率が大幅に改善されたため、セッション再開を積極的に活用してください。

Codex 0.123.0 の session shell / terminal 修正

Codex 0.123.0 では stale proxy env が shell snapshot から復元されにくくなり、VS Code WSL terminal の Unicode / dead-key input と keyboard 入力も本体側で修正されています。 Harness は proxy snapshot scrubber や key input wrapper を追加せず、本体修正を自動継承します。


When to Use

  • Session initialization (/harness-init)
  • Session resume/fork (/work --resume, /work --fork)
  • Memory persistence (automatic)
  • Cross-session communication (/session broadcast)

Execution Flow

1. Session Initialization

/harness-init
    ↓
├── Load project context
├── Initialize session.json
├── Load previous session memory (if exists)
└── Display session status

2. Session Control (from /work)

/work --resume
    ↓
├── Check session.json exists
├── Load session state
└── Continue from last checkpoint

/work --fork
    ↓
├── Create new session branch
├── Copy relevant context
└── Start fresh with context

3. Memory Persistence

Session end
    ↓
├── Extract learnings (gotchas, patterns)
├── Update .claude/memory/*.md
└── Prepare handoff summary

4. Cross-Session Communication

/session broadcast "message"
    ↓
├── Find active sessions
├── Write to session.events.jsonl
└── Notify all sessions

Files Managed

File Purpose
.claude/state/session.json Current session state
.claude/state/session.events.jsonl Event log for cross-session communication
.claude/memory/*.md Persistent memory files

Migration Note

This skill consolidates:

  • session-init → Session initialization
  • session-memory → Memory persistence
  • session-control → Resume/fork control
  • session-state → State management & communication

The individual skills are deprecated but still work for backward compatibility.

专注于UI组件、表单及反馈界面的生成助手。严格遵循无障碍标准与样式约束,支持在明确授权下使用特殊视觉效果。适用于前端界面设计,排除后端及认证逻辑。
需要生成UI组件或表单时 涉及前端界面设计与布局优化时 要求增强品牌视觉表现或添加动画效果时
skills/ui/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill ui -g -y
SKILL.md
Frontmatter
{
    "name": "ui",
    "description": "Explicit helper for UI components, hero sections, forms, feedback, and contact surfaces. Do NOT load for: authentication, backend implementation, database work, or business logic.",
    "allowed-tools": [
        "Read",
        "Write",
        "Edit",
        "Bash"
    ],
    "description-en": "Explicit helper for UI components, hero sections, forms, feedback, and contact surfaces. Do NOT load for: authentication, backend implementation, database work, or business logic.",
    "description-ja": "UIコンポーネント、ヒーロー、フォーム、フィードバック、問い合わせ面の明示補助スキル。認証、バックエンド実装、データベース作業、ビジネスロジックには使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

UI Skills

UIコンポーネントとフォームの生成を担当するスキル群です。

制約の優先順位と適用条件

  1. 基本は ${CLAUDE_SKILL_DIR}/references/ui-skills.md の制約を最優先で適用する。
  2. ${CLAUDE_SKILL_DIR}/references/frontend-design.md は「尖った/独自/表現強め/ブランド強化」などが明示された場合のみ適用する。
  3. UI Skills の MUST/NEVER は原則維持。ただしユーザーが明示的に要求した場合のみ以下の例外を許可する:
    • グラデーション、発光、強い装飾
    • アニメーション(追加・拡張)
    • カスタム easing

機能詳細

機能 詳細
制約セット See references/ui-skills.md / references/frontend-design.md
コンポーネント生成 See references/component-generation.md
フィードバックフォーム See references/feedback-forms.md

実行手順

  1. 制約セットを適用(優先順位に従う)
  2. 品質判定ゲート(Step 0)
  3. ユーザーのリクエストを分類
  4. 上記の「機能詳細」から適切な参照ファイルを読む
  5. その内容に従って生成

Step 0: 品質判定ゲート(a11y チェックリスト)

UI コンポーネント生成時は、アクセシビリティを確保:

♿ アクセシビリティチェックリスト

生成する UI は以下を満たすことを推奨:

### 必須項目
- [ ] 画像に alt 属性を設定
- [ ] フォーム要素に label を関連付け
- [ ] キーボード操作可能(Tab でフォーカス移動)
- [ ] フォーカス状態が視覚的に分かる

### 推奨項目
- [ ] 色だけに依存しない情報伝達
- [ ] コントラスト比 4.5:1 以上(テキスト)
- [ ] aria-label / aria-describedby の適切な使用
- [ ] 見出し構造(h1 → h2 → h3)が論理的

### インタラクティブ要素
- [ ] ボタンに適切なラベル(「詳細」ではなく「製品詳細を見る」)
- [ ] モーダル/ダイアログのフォーカストラップ
- [ ] エラーメッセージがスクリーンリーダーで読まれる

VibeCoder 向け

♿ 誰でも使えるデザインにするために

1. **画像には説明をつける**
   - 「商品画像」ではなく「赤いスニーカー、正面から」

2. **クリックできる場所はキーボードでも操作可能に**
   - Tab キーで移動、Enter で決定

3. **色だけで判断させない**
   - 赤=エラー だけでなく、アイコン+テキストも
面向非技术用户的VibeCoder指导技能,通过自然语言交互引导项目启动、任务执行及问题排查。避免使用技术术语,提供易懂的操作建议与安全指引,不适用于直接编码或技术审查。
用户询问下一步操作(如'接下来做什么?') 用户表达困惑或寻求帮助(如'怎么做?'、'帮帮我') 用户请求了解当前状态或功能
skills/vibecoder-guide/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill vibecoder-guide -g -y
SKILL.md
Frontmatter
{
    "name": "vibecoder-guide",
    "description": "Explicit helper for non-technical VibeCoder coaching: what to ask next, how to describe work, and how to stay safe. Do NOT load for: direct implementation, technical review, or Cursor\/PM workflow.",
    "allowed-tools": [
        "Read"
    ],
    "description-en": "Explicit helper for non-technical VibeCoder coaching: what to ask next, how to describe work, and how to stay safe. Do NOT load for: direct implementation, technical review, or Cursor\/PM workflow.",
    "description-ja": "非技術ユーザー向けに、次の頼み方、作業の伝え方、安全な進め方を案内する明示補助スキル。直接実装、技術レビュー、Cursor\/PM ワークフローには使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

VibeCoder Guide Skill

VibeCoder(非技術者)が自然言語だけで開発を進められるようガイドするスキル。 「どうすればいい?」「次は何?」などの質問に自動で応答します。


トリガーフレーズ

このスキルは以下のフレーズで自動起動します:

  • 「どうすればいい?」「どうしたらいい?」
  • 「次は何をすればいい?」「次は?」
  • 「何ができる?」「何をすればいい?」
  • 「困った」「わからない」「助けて」
  • 「使い方を教えて」
  • "what should I do?", "what's next?", "help"

概要

VibeCoder は技術的なコマンドやワークフローを知らなくても、 自然な日本語で質問するだけで次のアクションが分かります。


応答パターン

パターン1: プロジェクトがない場合

🎯 まずはプロジェクトを始めましょう!

言い方の例:

  • 「ブログを作りたい」
  • 「タスク管理アプリを作りたい」
  • 「ポートフォリオサイトを作りたい」

ざっくりで大丈夫です。やりたいことを教えてください。

パターン2: Plans.md があるが進行中タスクがない

📋 計画があります。作業を始めましょう!

現在の計画:

  • フェーズ1: 基盤構築
  • フェーズ2: コア機能
  • ...

言い方の例:

  • 「フェーズ1を始めて」
  • 「最初のタスクをやって」
  • 「全部やって」

パターン3: タスク進行中

🔧 作業中です

現在のタスク: {{タスク名}} 進捗: {{完了数}}/{{全体数}}

言い方の例:

  • 「続けて」
  • 「次のタスク」
  • 「今どこまで進んだ?」

パターン4: フェーズ完了後

フェーズが完了しました!

次にできること:

  • 「動作確認して」→ 開発サーバーを起動
  • 「レビューして」→ コード品質チェック
  • 「次のフェーズへ」→ 次の作業を開始
  • 「コミットして」→ 変更を保存

パターン5: エラー発生時

⚠️ 問題が発生しました

状況: {{エラーの要約}}

言い方の例:

  • 「直して」→ 自動修正を試行
  • 「説明して」→ 問題の詳細を説明
  • 「スキップして」→ 次のタスクへ

よく使うフレーズ対応表

やりたいこと 言い方
プロジェクト開始 「〇〇を作りたい」
計画を見たい 「計画を見せて」「今の状況は?」
作業を開始 「始めて」「作って」「フェーズ1をやって」
続きをやる 「続けて」「次」
動作確認 「動かして」「見せて」
コード確認 「レビューして」「チェックして」
保存する 「コミットして」「保存して」
困った時 「どうすればいい?」「助けて」
全部任せる 「全部やって」「おまかせ」

コンテキスト判定

このスキルは以下を確認して適切な応答を選択:

  1. AGENTS.md の存在 → プロジェクトが初期化済みか
  2. Plans.md の内容 → 計画があるか、進捗状況
  3. 現在のタスク状態cc:WIP マーカーの有無
  4. 直近のエラー → 問題が発生しているか

実装ノート

このスキルが起動したら:

  1. 現在の状態を分析
  2. 適切なパターンを選択
  3. 具体的な「言い方の例」を提示
  4. ユーザーの次のアクションを待つ

重要: 技術用語を避け、平易な日本語で説明する

指导Cursor(PM)与Claude Code(Worker)的双Agent协作流程,明确角色分工、Plans.md任务状态管理及命令使用。
ワークフローについて教えて Cursor との連携方法は? 作業の流れを教えて どうやって進めればいい? how does the workflow work? explain 2-agent workflow
skills/workflow-guide/SKILL.md
npx skills add Chachamaru127/claude-code-harness --skill workflow-guide -g -y
SKILL.md
Frontmatter
{
    "name": "workflow-guide",
    "description": "Explicit helper for Cursor PM ↔ Claude Code two-agent workflow guidance. Do NOT load for: solo implementation, workflow setup, handoff execution, or general process coaching.",
    "allowed-tools": [
        "Read"
    ],
    "description-en": "Explicit helper for Cursor PM ↔ Claude Code two-agent workflow guidance. Do NOT load for: solo implementation, workflow setup, handoff execution, or general process coaching.",
    "description-ja": "Cursor PM と Claude Code の2エージェント運用を説明する明示補助スキル。単独実装、ワークフロー設定、ハンドオフ実行、一般的な進め方相談には使わない。",
    "user-invocable": false,
    "disable-model-invocation": true
}

Workflow Guide Skill

Cursor ↔ Claude Code 2エージェントワークフローのガイダンスを提供するスキル。


トリガーフレーズ

このスキルは以下のフレーズで起動します:

  • 「ワークフローについて教えて」
  • 「Cursor との連携方法は?」
  • 「作業の流れを教えて」
  • 「どうやって進めればいい?」
  • "how does the workflow work?"
  • "explain 2-agent workflow"

概要

このスキルは、Cursor(PM)と Claude Code(Worker)の役割分担と連携方法を説明します。


2エージェントワークフロー

役割分担

エージェント 役割 責務
Cursor PM(プロジェクトマネージャー) タスク割り当て、レビュー、本番デプロイ判断
Claude Code Worker(作業者) 実装、テスト、CI修正、staging デプロイ

ワークフロー図

┌─────────────────────────────────────────────────────────┐
│                    Cursor (PM)                          │
│  ・タスクを Plans.md に追加                              │
│  ・Claude Code に作業を依頼(/handoff-to-claude)            │
│  ・完了報告をレビュー                                    │
│  ・本番デプロイの判断                                    │
└─────────────────────┬───────────────────────────────────┘
                      │ タスク依頼
                      ▼
┌─────────────────────────────────────────────────────────┐
│                  Claude Code (Worker)                   │
│  ・/work でタスク実行(並列実行対応)                   │
│  ・実装 → テスト → コミット                             │
│  ・CI 失敗時は自動修正(3回まで)                        │
│  ・/handoff-to-cursor で完了報告                        │
└─────────────────────┬───────────────────────────────────┘
                      │ 完了報告
                      ▼
┌─────────────────────────────────────────────────────────┐
│                    Cursor (PM)                          │
│  ・変更内容を確認                                        │
│  ・staging 動作確認                                      │
│  ・本番デプロイ実行(承認後)                            │
└─────────────────────────────────────────────────────────┘

Plans.md によるタスク管理

マーカー一覧

マーカー 意味 設定者
pm:依頼中 PM から依頼(互換: cursor:依頼中) PM(Cursor/PM Claude)
cc:TODO Claude Code 未着手 どちらでも
cc:WIP Claude Code 作業中 Claude Code
cc:完了 Claude Code 完了 Claude Code
pm:確認済 PM 確認完了(互換: cursor:確認済) PM(Cursor/PM Claude)
cursor:依頼中 (互換)pm:依頼中 と同義 Cursor
cursor:確認済 (互換)pm:確認済 と同義 Cursor
blocked ブロック中 どちらでも

タスクの状態遷移

pm:依頼中 → cc:WIP → cc:完了 → pm:確認済

主要コマンド

Claude Code 側

コマンド 用途
/harness-init プロジェクトセットアップ
/plan-with-agent 計画・タスク分解
/work タスク実行(並列実行対応)
/handoff-to-cursor 完了報告(Cursor PMへ)
/sync-status 状態確認

スキル(会話で自動起動)

スキル トリガー例
handoff-to-pm 「PMに完了報告」
handoff-to-impl 「実装役に渡して」

Cursor 側(参考)

コマンド 用途
/handoff-to-claude Claude Code にタスク依頼
/review-cc-work 完了報告のレビュー

CI/CD ルール

Claude Code の責務範囲

  • ✅ staging デプロイまで
  • ✅ CI 失敗時の自動修正(3回まで)
  • ❌ 本番デプロイは禁止

3回ルール

CI が 3回連続で失敗した場合:

  1. 自動修正を中止
  2. エスカレーションレポートを生成
  3. Cursor に判断を委ねる

よくある質問

Q: Cursor がいない場合は?

A: 一人で作業する場合も、Plans.md でタスク管理することを推奨します。 本番デプロイは手動で慎重に行ってください。

Q: タスクが不明確な場合は?

A: Cursor に確認を依頼するか、/sync-status で現状を整理してください。

Q: CI が何度も失敗する場合は?

A: 3回以上は自動修正せず、Cursor にエスカレーションしてください。


関連ドキュメント

  • AGENTS.md - 詳細な役割分担
  • CLAUDE.md - Claude Code 固有の設定
  • Plans.md - タスク管理ファイル

Accueil - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-07-09 01:08
浙ICP备14020137号-1 $Carte des visiteurs$