Claude Code Dedicated Development Harness - Achieving High-Quality Development Through an Autonomous Plan→Work→Review Cycle
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
chore(release): v5.9.0 Phase 134-137 (検証チェーン配線修理 / 日本語 writing lint / surface チェリーピック / ループエンジニアリング施策) + release preflight の grok host plugin dist gate 修正。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> | 24 天前 | |
chore(plans): Phase 132-133 をアーカイブへ退避する Phase 133 の残 4 タスク完了 (PR #314) により、Plans.md の全 task が cc:done になった。既存の運用どおりアーカイブへ切り出す。 - 退避先: .claude/memory/archive/Plans-2026-08-14-phase132-133.md - Plans.md: 150 行 -> 94 行 - Archived Phases 節にポインタを追加 - 移動部分は元ファイルと完全一致 (diff で確認、内容の改変なし) 退避前に Phase 132 の学びを SSOT へ昇格した。Phase 133 は D58-D61 で 既に昇格済みだったが、132 は Plans.md にしか無い状態だった: - patterns.md P43 — 承認され続ける ask は制御ではない。発火数を数えて から緩和する。実測 (3,099 セッション) で R04 が 1,099 件と最多、 うち 299 件がエージェント自身の状態ディレクトリへの書き込みで、 すべて承認されていた。緩和の正当化に使えるのは「発火したが毎回 承認された」という実測であって「たぶん邪魔だから」ではない 検証: - 移動部分の diff = 空行 1 行の差のみ (内容一致) - 残存 Plans.md に Phase 見出し 0 件、実タスクのマーカー 0 件 - bash tests/validate-plugin.sh -> 139 合格 0 失敗 - bash scripts/ci/check-consistency.sh -> 25/25 合格 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 26 天前 | |
chore(release): v5.9.0 Phase 134-137 (検証チェーン配線修理 / 日本語 writing lint / surface チェリーピック / ループエンジニアリング施策) + release preflight の grok host plugin dist gate 修正。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> | 24 天前 | |
chore(release): v5.9.0 Phase 134-137 (検証チェーン配線修理 / 日本語 writing lint / surface チェリーピック / ループエンジニアリング施策) + release preflight の grok host plugin dist gate 修正。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> | 24 天前 | |
fix(guardrail): work-mode の実 session ID 配線と R07/R08 の producer を復元する (132.6/132.7) 132.7: SessionStart env handler が実 session_id を export 形式で CLAUDE_ENV_FILE へ書き (旧 KEY=VALUE 形式は子プロセスへ届かない・実測)、work-mode は --session-id > HARNESS_SESSION_ID env > last-session-id.json (2h 鮮度) で解決。 旧 session.json の内部 ID は受理拒否。SessionEnd で work state 解除。 実 session_id (独立ソース) での 6 系統実測 PASS。 132.6: shell 版ガードのファイルベース解決を Go へ移植 (breezing_state.go)。 R08 = roles ファイル (agent_id→session_id lookup) + reviewer agent_type + 自己登録 (登録キーは payload 由来のみ)。R07 = breezing-active.json impl_mode=codex + work-mode --codex (codex host 自身は除外)。 registry は grandfather 全解消、primary_producer 必須化。 再発防止: build_context_wiring_test.go が RuleContext 全 field に live producer 証明を reflection で強制。knob env 漏れの test ヘルパ追加。 4 視点並列レビュー (実バイナリへのプローブつき) が critical 2 件を摘出し修正: (1) R08 state 例外の path-traversal バイパス → Clean 済み封じ込め判定へ, (2) hookcodec.Normalize が agent_id/agent_type を落とし wire 上で死んでいた → codec 転送 + wire round-trip test。binary drift gate も再ビルドで解消。 Phase 133 起票: 4 ツール (Claude/Codex/Grok/Cursor) の 2026-08 仕様調査で 確証を得た適用候補 6 件。hosts.toml へ grok の admission-test evidence を記録。 gates: go test 47 pkg PASS / validate-plugin 136-0-0 / check-consistency PASS / knob-wiring 0 violation / binary-drift OK / mirrors in-sync Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 29 天前 | |
fix: rescue PR61 under release-only versioning policy | 5 个月前 | |
chore(deps): CodeQL action を 4.37.6 へ揃える (#307, #308, #309) dependabot は init / analyze / upload-sarif を 3 つの別 PR に割ったが、 CodeQL はこの 3 つの版が一致している必要がある。1 つだけ merge すると 必ず壊れる: Loaded a configuration file for version '4.37.3', but running version '4.37.6' これは rebase 後の #307 / #309 で実際に出ていたエラーで、PR の中身では なく分割されたこと自体が原因。個別 PR は構造上 CI を通せないため、 branch protection が merge を拒否していた。--admin による強制 merge は ゲートの迂回になるので採らず、3 件を 1 ブランチに統合して CI を正当に 通す形にした。 変更は 3 行の SHA 差し替えのみ。ロジック・step 構成・権限は不変: - .github/workflows/codeql.yml: init / analyze - .github/workflows/scorecard.yml: upload-sarif - e4fba868fa4b1b91e1fdab776edc8cfbe6e9fb81 (v4.37.3) -> 5595ccaf912efad79be6eef63a5619ff05969be3 (v4.37.6) .github/workflows/ は CLAUDE.md と workflow-test-wiring.md で operator 手動のみと定めている領域。今回は個別 PR が構造的に merge 不能である旨を 提示したうえで operator の明示承認を得て実施した (2026-08-14)。検査の 削除・弱体化は含まない (SHA の更新のみ)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 26 天前 | |
chore(release): v5.9.0 Phase 134-137 (検証チェーン配線修理 / 日本語 writing lint / surface チェリーピック / ループエンジニアリング施策) + release preflight の grok host plugin dist gate 修正。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> | 24 天前 | |
feat(hosts): promote Codex CLI / Cursor / Grok to supported — H8 pin (111.3.3/111.4.4/111.5.4) test-support-claim-wording: ok test-support-claim-wording-selftest: ok test-cursor-adapter-candidate: ok test-grok-adapter-candidate: ok test-public-claims-contract: ok test-readme-product-surface: ok test-bootstrap-skill-trigger-acceptance: ok test-bootstrap-routing-contract: ok test-claude-upstream-integration: OK test-host-registry: ok zero-grep (codex cli|cursor|grok + internal-compatible): ZERO_MATCH Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
fix(review): REQUEST_CHANGES 対応 — major 4 件 + minor 3 件 - Stop 全体再検査の cross-session 誤 block: changed-files.jsonl に session_id を記録し、 現 session の entry のみ検査 (旧形式 entry は保守的に skip)。DroppedScope も同修正 - writing-rule 昇格の regex 未検証: harness writing-rule-vet subcommand (RE2 compile + 型/列挙検証、fail-closed) を approve 経路に追加。ScanText は不正 rule を skip して 続行し invalidRuleIDs を診断で返す (1 件の誤承認で全体無効化しない) - browser-review-runner の stale .webm 混入: run 開始 marker より新しい録画のみ収集 - scope leash enforce 時の自己 deny: .claude/ 配下を exempt + 判定を role 登録後へ移動 - posttooluse_writing_lint の config path を resolveProjectRoot 基準に統一 (CWD 非依存) - worker.md の NG 参照を NG-1〜4 に更新 / Plans.md の Phase 138 重複ヘッダー解消 - skill manifest pin に japanese-writing-drafter を追加 (意図した新 skill の反映) 各修正に回帰テスト付き。binary 4 平台再ビルド + drift gate PASS。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
chore: remove unused readme visual assets (#130) | 3 个月前 | |
fix(tests): agent-eval の許容範囲を ~1.4.0 に絞る (CodeRabbit 指摘) `^0.14.1` は npm の 0.x caret 規則により実質 `>=0.14.1 <0.15.0` の マイナー固定だった。これを `^1.4.0` に置き換えると `>=1.4.0 <2.0.0` と なり、1.5 以降が再監査なしにゲートを通過する。ゲートは範囲文字列の 完全一致と最低バージョンしか見ないため、「ラインは意図的にしか動かさ ない」という契約が緩む。 `~1.4.0` に絞ることで元の厳しさを復元する。1.5 が出た場合は #272 と 同じくゲートが落ち、人間の判断を経てラインを動かすことになる。 あわせて Plans.md の言い回しを 1 箇所修正 (LanguageTool 指摘)。 検証: bash tests/test-breezing-agent-eval-deps.sh → ok (exit 0)、 lockfile の宣言範囲が ~1.4.0 / 解決が 1.4.0 であることを確認。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 1 个月前 | |
chore(release): v5.9.0 binary を再ビルド (drift gate 修正) version bump 後に binary の埋め込み version 文字列が 5.8.0 のままで CI の binary/source drift gate が落ちていた。4 平台を 5.9.0 で再ビルド。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
chore(release): plugin tag を廃止し semver tag に一本化 (D69) `claude plugin tag` が作る `{plugin-name}--v{version}` は marketplace.json の source が相対パスのため install に効かず、v5.6.0 以降 3 リリース連続で欠番の まま実害が無かった。手順書と実行の乖離を解消するため手順書側を実態に合わせる。 - harness-release SKILL.md / post-gate-detail.md / versioning.md から呼び出しを除去、 廃止理由を明記 (Post-Gate は 20 段 → 19 段) - test-claude-upstream-integration.sh の pin を「呼び出しが無いこと」へ反転 (RED 実測: 旧 SKILL.md で FAIL → 新で OK)。Phase 53 snapshot は歴史記録として不変更 - decisions.md D69 / CHANGELOG [Unreleased] に記録。mirror 同期済み Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
docs(reports): CCH v5.9 プロダクト説明書 (初見・非専門家向け) を追加 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
fix(review): REQUEST_CHANGES 対応 — major 4 件 + minor 3 件 - Stop 全体再検査の cross-session 誤 block: changed-files.jsonl に session_id を記録し、 現 session の entry のみ検査 (旧形式 entry は保守的に skip)。DroppedScope も同修正 - writing-rule 昇格の regex 未検証: harness writing-rule-vet subcommand (RE2 compile + 型/列挙検証、fail-closed) を approve 経路に追加。ScanText は不正 rule を skip して 続行し invalidRuleIDs を診断で返す (1 件の誤承認で全体無効化しない) - browser-review-runner の stale .webm 混入: run 開始 marker より新しい録画のみ収集 - scope leash enforce 時の自己 deny: .claude/ 配下を exempt + 判定を role 登録後へ移動 - posttooluse_writing_lint の config path を resolveProjectRoot 基準に統一 (CWD 非依存) - worker.md の NG 参照を NG-1〜4 に更新 / Plans.md の Phase 138 重複ヘッダー解消 - skill manifest pin に japanese-writing-drafter を追加 (意図した新 skill の反映) 各修正に回帰テスト付き。binary 4 平台再ビルド + drift gate PASS。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
feat(hosts): promote Codex CLI / Cursor / Grok to supported — H8 pin (111.3.3/111.4.4/111.5.4) test-support-claim-wording: ok test-support-claim-wording-selftest: ok test-cursor-adapter-candidate: ok test-grok-adapter-candidate: ok test-public-claims-contract: ok test-readme-product-surface: ok test-bootstrap-skill-trigger-acceptance: ok test-bootstrap-routing-contract: ok test-claude-upstream-integration: OK test-host-registry: ok zero-grep (codex cli|cursor|grok + internal-compatible): ZERO_MATCH Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
feat(phase-45.1.1): add monitors/monitors.json in official schema format 公式 plugins-reference の monitors 仕様に準拠した monitors/monitors.json を新設。 name/command/description/when の4フィールドのみ使用し、非公式 field (id, autoArm) は含まない。 sync 実行により plugin.json からも monitors block が出現しないことを確認済み。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> | 4 个月前 | |
chore(release): plugin tag を廃止し semver tag に一本化 (D69) `claude plugin tag` が作る `{plugin-name}--v{version}` は marketplace.json の source が相対パスのため install に効かず、v5.6.0 以降 3 リリース連続で欠番の まま実害が無かった。手順書と実行の乖離を解消するため手順書側を実態に合わせる。 - harness-release SKILL.md / post-gate-detail.md / versioning.md から呼び出しを除去、 廃止理由を明記 (Post-Gate は 20 段 → 19 段) - test-claude-upstream-integration.sh の pin を「呼び出しが無いこと」へ反転 (RED 実測: 旧 SKILL.md で FAIL → 新で OK)。Phase 53 snapshot は歴史記録として不変更 - decisions.md D69 / CHANGELOG [Unreleased] に記録。mirror 同期済み Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
feat: align agents with CC docs and add outputStyles plugin component - Update disallowedTools from [Task] to [Agent] in all v3 agents (CC v2.1.63 renamed Task tool to Agent; Task remains as alias) - Add elicitation_dialog detection to notification-handler.sh (CC v2.1.76 MCP Elicitation notification type for Breezing observability) - Create output-styles/harness-ops.md with Plan/Work/Review structured style - Add outputStyles field to plugin.json for plugin-based distribution Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | 5 个月前 | |
fix(review): vet gate を proposals.jsonl 永続化より前に移動 (再レビュー major 1 件) vet reject された proposal が status: approved のまま固まり、同一 id を 再承認できない詰み状態を解消。rule 導出 + schema validate + writing-rule-vet を status 更新より先に実行し、失敗時は pending のまま残す。 回帰テスト 2 本追加 (vet-reject 後に pending 維持 / pattern 修正後の再承認成功)。 RED 実測: 修正前 script で FAIL=2 → 修正後 PASS=21。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
feat(guardrail): 配線漏れ検出ゲートと防御層の影響確認規約を追加する (132.4/132.5)、work-mode の土台を入れる (132.3 未完) 今日の一次原因は「skip 経路が実装済みなのに、それを立てる producer が repo 内に一つも無い」ことだった。個別修正だけでなく、同型欠陥を機械検知する 仕組みと、事故を繰り返さないための規約を同時に入れる。 ## 132.4 — 配線漏れ検出ゲート (新規) scripts/ci/check-config-knob-wiring.sh: go/internal/guardrail と go/internal/policy が os.Getenv で読む HARNESS_* / ULTRAWORK_* の各キーに producer があるか、templates/registry/operator-supplied-knobs.v1.yaml へ operator 供給として登録済みかを検証する。tests/validate-plugin.sh から実行。 初回実行で 13 キー中 10 件違反。判明済みの 2 件に加え、同型の未配線が 8 件 見つかった (HARNESS_BREEZING_ROLE / HARNESS_CODEX_MODE / HARNESS_ACTIVE_PHASE / HARNESS_ACTIVE_TASK / HARNESS_TDD_* 4 件)。とくに HARNESS_BREEZING_ROLE は R08 (breezing reviewer の書き込み禁止) が読むため、Reviewer 制約が発火して いない疑いがある。ゲートを green で着地させるため registry へ grandfather 登録したが、registry 本文に「追認ではなく一時退避」と明記し、triage は Plans.md 132.6 として起票した。 走査漏れの回帰網 (新規 os.Getenv を fixture に足して検出されること) を含む。 ## 132.5 — 防御層の影響確認規約 (新規) .claude/rules/defense-layer-blast-radius.md + CLAUDE.md からの参照。 2026-08-10 に同型の事故を 2 回起こした (sandbox の denyRead で gh CLI と git credential helper を破壊、sandbox 有効化で DNS と SSH 設定読取を遮断し 本番到達不能) ことを一次情報として codify。層ごとの影響範囲、強制力と 適用範囲の反比例、追加前 5 点チェック、excludedCommands がサブプロセスへ 継承されない事実、user scope 昇格前の 1 プロジェクト検証を定める。 check-consistency.sh に存在と必須フレーズ 4 件のチェックを追加し、 変異検査 (フレーズを削ると検知) で実効性を確認。 ## 132.3 — work-mode の土台 (未完、blocked) harness work-mode <on/off/status> と work_states の読み書きを実装。 session ID 未解決時は非ゼロ終了。work_states の FOREIGN KEY を満たすため 既存 sessions 行が無いときだけ最小行を作る (無条件 upsert は mode / context_json を潰す。この退行はテストで pin)。 ただし独立レビューと実測で、session ID の解決先が誤っていることが判明した。 ReadLocalSessionID が読む .claude/state/session.json はセッション監視の 状態ファイルで、内部生成の timestamp ベース ID を持つ。Claude Code が hook に 渡す実 session_id とは別物。実測: work-mode on 後も、実 ID の payload に対して R04 は ask のまま = 効いていない。 初回の DoD(a) 検証は CLI が書いた ID をそのまま hook へ渡していたため 自作自演だった。この点を含め work_mode.go 冒頭に KNOWN GAP として明記し、 Plans.md 132.3 は blocked、識別子の修正を 132.7 として起票した。 現時点で /breezing の停止を止めているのは operator が設定する HARNESS_WORK_MODE=1 (env)。 ## その他 - doctor_test.go に t.Setenv("CLAUDE_PLUGIN_DATA", "") を追加。 ResolveStatePath が同 env を最優先するため、Claude Code セッション内でのみ 失敗し CI では通る状態だった。アサーションは一切緩めていない (env 経路は TestDoctor_CheckStateDB_ViaEnv が別途カバー)。 - CHANGELOG の [Unreleased] に ### Added を二重に作っていたのを既存節へ統合。 - Plans.md の Status セルに未エスケープの | があり依存クロージャ検査が 壊れていたのを修正。 検証: go test ./... 47 パッケージ PASS (TestLeaseReclaim_ConcurrentSlowPath が 全体実行時に 1 度 FAIL したが単独では 3/3 PASS の flaky。hookhandler は未変更)、 gofmt/vet clean、check-consistency.sh 25/25、mirror in-sync、 配線漏れゲート 13 キー 0 違反、その契約テスト 4/4。binary 4 種を再ビルド。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 30 天前 | |
chore(release): plugin tag を廃止し semver tag に一本化 (D69) `claude plugin tag` が作る `{plugin-name}--v{version}` は marketplace.json の source が相対パスのため install に効かず、v5.6.0 以降 3 リリース連続で欠番の まま実害が無かった。手順書と実行の乖離を解消するため手順書側を実態に合わせる。 - harness-release SKILL.md / post-gate-detail.md / versioning.md から呼び出しを除去、 廃止理由を明記 (Post-Gate は 20 段 → 19 段) - test-claude-upstream-integration.sh の pin を「呼び出しが無いこと」へ反転 (RED 実測: 旧 SKILL.md で FAIL → 新で OK)。Phase 53 snapshot は歴史記録として不変更 - decisions.md D69 / CHANGELOG [Unreleased] に記録。mirror 同期済み Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
chore(release): plugin tag を廃止し semver tag に一本化 (D69) `claude plugin tag` が作る `{plugin-name}--v{version}` は marketplace.json の source が相対パスのため install に効かず、v5.6.0 以降 3 リリース連続で欠番の まま実害が無かった。手順書と実行の乖離を解消するため手順書側を実態に合わせる。 - harness-release SKILL.md / post-gate-detail.md / versioning.md から呼び出しを除去、 廃止理由を明記 (Post-Gate は 20 段 → 19 段) - test-claude-upstream-integration.sh の pin を「呼び出しが無いこと」へ反転 (RED 実測: 旧 SKILL.md で FAIL → 新で OK)。Phase 53 snapshot は歴史記録として不変更 - decisions.md D69 / CHANGELOG [Unreleased] に記録。mirror 同期済み Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
fix: resolve 22 pre-existing issues from Codex review (Phase 5) Security hardening (5.1): - pretooluse-guard.sh: symlink bypass protection via realpath + eval→jq - permission-request.sh: npm auto-approval → per-repo allowlist - userprompt-track-command.sh: prompt_preview umask 077 - session-monitor.sh: resume_token chmod 600 + umask 077 Documentation fixes (5.2): broken SSOT links, stale command refs, path mismatches across 5 docs files. Video maintenance (5.3): Remotion path updates, z.any()→z.unknown() in 4 schema files. Build tooling (5.6): empty gate logic, project-analyzer refs, commands/ empty directory handling, harness-ui catalog fallback, parse-work-flags.md consistency. Naming/routing (5.7): /planning→/plan-with-agent unification, verify user-invocable fix, Codex setup dedup, archived dangling refs. Mirror sync to codex/.codex/skills/ and opencode/skills/. validate-plugin.sh + check-consistency.sh: all pass. Reviewer: APPROVE Grade A (0 Critical/Major). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | 6 个月前 | |
feat(floor): releaseAuto opt-in — release-completion subset bypasses prod-deploy floor (118.1) cd go && go test ./internal/runtimefloor/ ok github.com/Chachamaru127/claude-code-harness/go/internal/runtimefloor 0.432s cd go && go test ./... ok github.com/Chachamaru127/claude-code-harness/go/cmd/harness 106.260s (... all packages ok ...) cd go && gofmt -l internal/runtimefloor/ (empty) Co-authored-by: Cursor <cursoragent@cursor.com> | 1 个月前 | |
fix(i18n): 出力言語の設定を毎ターン実効化 (PR #247 統合 + Plans.md 整理) (#281) * fix: enforce configured output language on every turn The harness resolved a locale but only used it for hook messages, so responses drifted to Japanese despite an English selection. Inject a per-turn response-language directive (en/ja) via the UserPromptSubmit hook, resolved from i18n.language > CLAUDE_CODE_HARNESS_LANG > en. Also make the config option discoverable: add an i18n.language block to .claude-code-harness.config.yaml (the file the runtime reads) and fix docs/i18n.md, which pointed at harness.toml. Adds regression coverage in tests/test-i18n-locale-resolver.sh. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * docs: align i18n precedence docs with implementation; fix heading spacing Address CodeRabbit review on PR #247. - docs/i18n.md claimed env overrides project config ("later overrides earlier"), but both resolvers (get_harness_locale and resolveHarnessLocale) and test-i18n-locale-resolver.sh enforce config > env. Rewrite the precedence section and env example to match the implemented, test-pinned behavior instead of flipping the resolver. - .claude-code-harness.config.yaml: spell out that i18n.language wins over the CLAUDE_CODE_HARNESS_LANG fallback. - scripts/userprompt-inject-policy.sh: insert a blank line before the work-mode warning heading, since command substitution strips trailing newlines. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * chore(plans): Phase 119-124 を archive へ退避 (254 → 143 行) 全 task cc:done の Phase 119-124 を .claude/memory/archive/Plans-2026-07-30-phase119-124.md へ移し、 本体に Archived Phases 参照節を置いた。内容の変更はない (119 行が完全に移動)。 Plans.md 本体の 200 行上限 (PostToolUse hook の警告閾値) を回復するための整理。 Phase 125-127 は直近のため本体に残す。 検証: tests/validate-plugin.sh 131 pass / 0 fail、未完了タスク 0 件 (変化なし)。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * fix(i18n): 言語指示にセッション指定の優先を明記 PR #247 の言語指示を実運用で受け取ったところ、セッション開始時に 別言語を指定している環境で優先関係が曖昧だった。 docs/i18n.md:15 の優先順位 1 位は「per-message session instruction (その場で切り替えを指示)」だが、実際にはセッション開始時の output style / system prompt で言語を指定する運用が一般的で、 これが 1 位に含まれるかが注入文からは読み取れなかった。 注入文は「毎ターン強制」「ユーザーのメッセージがどの言語であっても」 と書いており、セッション開始時の継続的指示を上書きしうる。 実地の観測: i18n.language: en の本リポジトリで、日本語を指定した セッションが英語指示を受け取った。docs を読んで日本語を選べたが、 読まなければ切り替わっていた。 両言語版に 1 段落追加し、明示的なユーザー指示 (その場の依頼 + セッション開始時の継続的指示の両方) がプロジェクト設定より 優先されることを literal に書いた。 検証 (floor 免除 env を export したまま実行): - 英語版 704 バイト / 日本語版 376 文字、いずれも JSON 妥当を実測 - 一時的に config を ja に切り替えて日本語版も実測、config は復元済み - i18n テスト 3 本 PASS (locale-resolver / japanese-ux-regression / default-language) - tests/validate-plugin.sh 131 pass / 0 fail Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Piotr Chabros <piotr.chabros@upvanta.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Co-authored-by: tachibanashuuta <tachibana@canai.jp> Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com> Co-authored-by: piotrchabros <piotrchabros@users.noreply.github.com> | 1 个月前 | |
feat(cursor): host-specific dist cleanup and internal-compatible promotion (#174) Add host-specific plugin dist builder, Cursor real-directory install via setup-cursor.sh, and promote Cursor to internal-compatible with aligned docs, onboarding, tests, and release-preflight gates. Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> | 3 个月前 | |
fix(guardrail): サブディレクトリ実行で保護が効かない root 解決を直す (Phase 133.11, 133.12) feat(hostgen): grok の native hook を配線する (Phase 133.8) docs(skills): 並列実行数の実キャップを明記する (Phase 133.9) Plans.md の残 4 タスクをまとめて完了させる。 ## 133.11 — root 解決 (根因を実測で確定) resolveProjectRoot が hook payload の cwd をそのまま root にしていた (上方探索なし)。再現: 同一 session・work-mode ON で cwd がリポジトリ 直下なら allow、<repo>/go なら ask。ResolveStatePath が <repo>/go/.harness/state.db を見に行き work_state が見つからないため。 影響は work-mode に留まらない。protected path 判定・plan preapproval・ TDD 設定もすべて projectRoot 基準のため、サブディレクトリ実行時は 保護が効かない側にずれていた。痕跡として go/.claude/state/ と benchmarks/breezing-bench/agent-eval/.claude/state/ が残っていた (どちらも状態ファイルのみで設定もルールも無い = 誤解決が作った産物)。 .harness / .git を持つ最も近い祖先まで上方探索する形へ修正。 .claude はマーカーにしない (上記の産物が自己確証し root を固定する)。 探索は $HOME で止める (ctx.ProjectRoot は R05 の「確認なしで消して よい範囲」で、dotfiles repo の ~/.git を拾うとホーム全体が許可面)。 ## 133.12 — 宛先オペランド族 + session_id の前提 実測: protected path への書き込み 8 手段のうち検出できていたのは 2 つ だけ (redirect / tee のみ deny、ln -sf / ln / cp / mv / install / ln -s into dir は素通り)。指摘は ln -s だけを挙げていたが、それだけ 塞いでも同じことができる経路が 3 つ残るため族としてまとめて対応。 取るのは最後のオペランドのみ (install -m 755 の 755 をパスと誤読する 事故も同時に防げる)。1 オペランド形は生成先が確実に特定できないため 対象外。修正後は 8 手段すべて deny。 session_id への暗号的束縛は入れない。R04/R05 の skip を与える work-mode 解決の方が大きな権限なので、IsWithinSessionScratch だけを 縛っても床は上がらない。前提を defense-layer-blast-radius.md に明記。 ## 133.8 — grok native hook grok が 1.0.3 に上がっていたため capability を再実測 (起票時 0.2.118)。 folder trust は既に付与済み。build_grok() に hooks/ 同梱を追加し、 GenerateHooksJSON に case "grok" (grokDoc) を追加。binCommand は列挙式 から「claude だけ除外」へ反転 — 列挙式は host 追加のたびに --host を 落とす。buildDeliveryDoc の default で grok が無言に落ちていたのも修正 (hosts.toml が delivery を宣言しているのに生成側が捨てていた)。 hook_generation を generate へフリップし、実機確認: grok inspect の Hooks が 35 -> 36 に増え、新規行は `command matcher=* project`。 これは hosts.toml の「project-level hook は拒否される」記述を実測で 覆す (出典は別製品の grok-cli TypeScript 版)。 未確認として明示: plugin 由来 hooks 一覧に claude-code-harness は 依然現れない。dist 同梱の効果は plugin 再インストールまで検証不能。 ## 133.9 — 並列度の実キャップ --parallel N は希望値で実同時実行数は CC が決める (既定 20、超過は 待ち行列)。入れ子 spawn は既定深さ 3。breezing / harness-work に明記。 env は明示設定せず CC 既定に従う。credential-masking は macOS が deny フォールバックのため not_observed (absent ではない)。 ## 検証 - go test ./... 全 PASS (新規テスト 28 件: project_root 10 / bash_destination_operand 13 / grok 5) - 変異検査: 上方探索を無効化すると 7 件が落ちることを確認 - 既存ガードテストは 1 行も変更していない。唯一の期待値変更は gen_test.go の「grok は live schema admission まで deferred」で、 その admission を実測したため反転 (弱体化ではなく仕様更新)。 削除ではなく「生成されること + --host grok を持つこと」へ強化 - R05 緩和の試みは既存テスト 2 件が反証したため撤回 (コメントのみ記録) - validate-plugin.sh 139 合格 0 失敗 / check-consistency.sh 25/25 - drift gate OK (4 プラットフォーム再ビルド) - mirror verify in-sync - VERSION / plugin.json / .github/workflows 非接触 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 26 天前 | |
chore(release): plugin tag を廃止し semver tag に一本化 (D69) `claude plugin tag` が作る `{plugin-name}--v{version}` は marketplace.json の source が相対パスのため install に効かず、v5.6.0 以降 3 リリース連続で欠番の まま実害が無かった。手順書と実行の乖離を解消するため手順書側を実態に合わせる。 - harness-release SKILL.md / post-gate-detail.md / versioning.md から呼び出しを除去、 廃止理由を明記 (Post-Gate は 20 段 → 19 段) - test-claude-upstream-integration.sh の pin を「呼び出しが無いこと」へ反転 (RED 実測: 旧 SKILL.md で FAIL → 新で OK)。Phase 53 snapshot は歴史記録として不変更 - decisions.md D69 / CHANGELOG [Unreleased] に記録。mirror 同期済み Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
fix(guardrail): work-mode の実 session ID 配線と R07/R08 の producer を復元する (132.6/132.7) 132.7: SessionStart env handler が実 session_id を export 形式で CLAUDE_ENV_FILE へ書き (旧 KEY=VALUE 形式は子プロセスへ届かない・実測)、work-mode は --session-id > HARNESS_SESSION_ID env > last-session-id.json (2h 鮮度) で解決。 旧 session.json の内部 ID は受理拒否。SessionEnd で work state 解除。 実 session_id (独立ソース) での 6 系統実測 PASS。 132.6: shell 版ガードのファイルベース解決を Go へ移植 (breezing_state.go)。 R08 = roles ファイル (agent_id→session_id lookup) + reviewer agent_type + 自己登録 (登録キーは payload 由来のみ)。R07 = breezing-active.json impl_mode=codex + work-mode --codex (codex host 自身は除外)。 registry は grandfather 全解消、primary_producer 必須化。 再発防止: build_context_wiring_test.go が RuleContext 全 field に live producer 証明を reflection で強制。knob env 漏れの test ヘルパ追加。 4 視点並列レビュー (実バイナリへのプローブつき) が critical 2 件を摘出し修正: (1) R08 state 例外の path-traversal バイパス → Clean 済み封じ込め判定へ, (2) hookcodec.Normalize が agent_id/agent_type を落とし wire 上で死んでいた → codec 転送 + wire round-trip test。binary drift gate も再ビルドで解消。 Phase 133 起票: 4 ツール (Claude/Codex/Grok/Cursor) の 2026-08 仕様調査で 確証を得た適用候補 6 件。hosts.toml へ grok の admission-test evidence を記録。 gates: go test 47 pkg PASS / validate-plugin 136-0-0 / check-consistency PASS / knob-wiring 0 violation / binary-drift OK / mirrors in-sync Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 29 天前 | |
fix: harden runtime security and language defaults Fix Issue #155 runtime security surfaces and Issue #154 English-default language contract. Rebuild bundled harness binaries and add SECURITY.md. | 3 个月前 | |
feat: add skill orchestration contracts | 4 个月前 | |
chore: change license to MIT for official contribution (v2.2.2) - Change from proprietary license to MIT license - Enable fork, PR, and redistribution for official repository contribution - Update LICENSE.md and LICENSE.ja.md with standard MIT text - Bump version to 2.2.2 - Update README.md and CHANGELOG.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> | 8 个月前 | |
chore: change license to MIT for official contribution (v2.2.2) - Change from proprietary license to MIT license - Enable fork, PR, and redistribution for official repository contribution - Update LICENSE.md and LICENSE.ja.md with standard MIT text - Bump version to 2.2.2 - Update README.md and CHANGELOG.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> | 8 个月前 | |
fix(review): REQUEST_CHANGES 対応 — major 4 件 + minor 3 件 - Stop 全体再検査の cross-session 誤 block: changed-files.jsonl に session_id を記録し、 現 session の entry のみ検査 (旧形式 entry は保守的に skip)。DroppedScope も同修正 - writing-rule 昇格の regex 未検証: harness writing-rule-vet subcommand (RE2 compile + 型/列挙検証、fail-closed) を approve 経路に追加。ScanText は不正 rule を skip して 続行し invalidRuleIDs を診断で返す (1 件の誤承認で全体無効化しない) - browser-review-runner の stale .webm 混入: run 開始 marker より新しい録画のみ収集 - scope leash enforce 時の自己 deny: .claude/ 配下を exempt + 判定を role 登録後へ移動 - posttooluse_writing_lint の config path を resolveProjectRoot 基準に統一 (CWD 非依存) - worker.md の NG 参照を NG-1〜4 に更新 / Plans.md の Phase 138 重複ヘッダー解消 - skill manifest pin に japanese-writing-drafter を追加 (意図した新 skill の反映) 各修正に回帰テスト付き。binary 4 平台再ビルド + drift gate PASS。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
docs(readme): 日英 README を刷新し、動くフロー図と安全設計の説明を追加 ## 動くフロー図(アニメーション SVG) 計画 → 実装 → レビュー → リリースが順に光り、下段の実行時フロアが 常時点灯する SVG を日英 2 枚追加した。README で JavaScript は動かないが、 CSS アニメーションを内包した SVG は画像として読み込まれても再生される。 検証: <img> 経由で 4 時点すべて描画が変化することを実測。リポジトリ内の 画像は camo を経由せず相対パスのまま配信され、バイト列も一致することを 実測で確認した (外部サービス不要、ビルド工程不要)。1 枚 6.5KB。 prefers-reduced-motion で停止する。 ## 構成の見直し - 導入手順を上部へ移動し、最初の一手を明確化 - 安全設計の節を新設。実行時フロア (5 分類・非上書き) と ガードレール (R01-R15・一部設定可) の強度差、確認の計画時前倒し、 発火記録を説明。従来 README には記載がなかった - 対応表と応用機能は <details> に畳み、初見の情報量を削減 - 日本語版は直訳をやめ、用語を出した箇所で言い換える書き方に統一 ## 事実の訂正 - スキル数バッジ 22 → 21 (実測値に修正) - 中核 5 動詞に sync を復帰。書き換え途中で setup と取り違えていた - ガードレール規模のバッジを追加 (R01-R15 + フロア 5 分類) ## 契約の維持 対応 tier の literal pin (test-support-claim-wording / test-hermes-agent-candidate) と i18n の必須文字列 (test-i18n-japanese-ux-regression) はすべて元のまま維持。 日本語版の対応表は tier を英語表記に戻し、日本語訳は折りたたみ内に置いた。 supported / candidate の主張は 1 つも変更していない。 検証: validate-plugin 125 合格 / 2 失敗 (2 件は本変更前から失敗する既存分で 新規失敗ゼロ)、check-consistency 全通過、内部リンク切れ 0、 GitHub 描画エンジンで表 8 個・折りたたみ 3 個・見出し 12 個を確認。 日本語は em ダッシュと並列の中黒を排除。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
docs(readme): 日英 README を刷新し、動くフロー図と安全設計の説明を追加 ## 動くフロー図(アニメーション SVG) 計画 → 実装 → レビュー → リリースが順に光り、下段の実行時フロアが 常時点灯する SVG を日英 2 枚追加した。README で JavaScript は動かないが、 CSS アニメーションを内包した SVG は画像として読み込まれても再生される。 検証: <img> 経由で 4 時点すべて描画が変化することを実測。リポジトリ内の 画像は camo を経由せず相対パスのまま配信され、バイト列も一致することを 実測で確認した (外部サービス不要、ビルド工程不要)。1 枚 6.5KB。 prefers-reduced-motion で停止する。 ## 構成の見直し - 導入手順を上部へ移動し、最初の一手を明確化 - 安全設計の節を新設。実行時フロア (5 分類・非上書き) と ガードレール (R01-R15・一部設定可) の強度差、確認の計画時前倒し、 発火記録を説明。従来 README には記載がなかった - 対応表と応用機能は <details> に畳み、初見の情報量を削減 - 日本語版は直訳をやめ、用語を出した箇所で言い換える書き方に統一 ## 事実の訂正 - スキル数バッジ 22 → 21 (実測値に修正) - 中核 5 動詞に sync を復帰。書き換え途中で setup と取り違えていた - ガードレール規模のバッジを追加 (R01-R15 + フロア 5 分類) ## 契約の維持 対応 tier の literal pin (test-support-claim-wording / test-hermes-agent-candidate) と i18n の必須文字列 (test-i18n-japanese-ux-regression) はすべて元のまま維持。 日本語版の対応表は tier を英語表記に戻し、日本語訳は折りたたみ内に置いた。 supported / candidate の主張は 1 つも変更していない。 検証: validate-plugin 125 合格 / 2 失敗 (2 件は本変更前から失敗する既存分で 新規失敗ゼロ)、check-consistency 全通過、内部リンク切れ 0、 GitHub 描画エンジンで表 8 個・折りたたみ 3 個・見出し 12 個を確認。 日本語は em ダッシュと並列の中黒を排除。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> | 1 个月前 | |
fix: harden runtime security and language defaults Fix Issue #155 runtime security surfaces and Issue #154 English-default language contract. Rebuild bundled harness binaries and add SECURITY.md. | 3 个月前 | |
chore(release): v5.9.0 Phase 134-137 (検証チェーン配線修理 / 日本語 writing lint / surface チェリーピック / ループエンジニアリング施策) + release preflight の grok host plugin dist gate 修正。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> | 24 天前 | |
feat(runtimefloor): per-project config source for secret-read allowlist (108.2) - .claude-code-harness.config.json の runtimefloor.secretAllow を env HARNESS_RUNTIME_FLOOR_SECRET_ALLOW と和集合で読む - 相対 path は project root 配下に解決、project 外絶対 path は無効 (cross-project 誤許可防止)、不正 JSON は fail-safe で全 deny - config schema / example に runtimefloor.secretAllow を追記 - nightwatch health_test: sandbox で unix socket bind が EPERM の時のみ skip する環境ガード (通常環境では従来どおり実行) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0184cS3XYLitPZkhHp5KgYeq | 2 个月前 | |
feat(verification): Phase 134-137 — 検証チェーン配線修理 + writing lint + surface + ループ施策 Phase 134: 入口 (risk_flags→profile 自動昇格 + ratchet) / 中間 (PENDING_BROWSER fail-visible, pending_validations) / 出口 (accept-collect-evidence.sh による artifact 機械接続) の 3 継ぎ目を接続。scope leash 本配線 (warn 既定)、Playwright Screencast evidence、worker-report.v1 永続化、再調査ループ、検証の検証 (check-verification-chain-wiring.sh + 実効性契約テスト 3 本、RED→GREEN 実測)。 Phase 135: writinglint エンジン (辞書は個人層) + PostToolUse advisory + Stop 全体再検査 + 指摘→ルール自動ドラフト→人間承認ループ + config schema 正式化。 Phase 136: 3 surface スマホ viewport / 承認待ちキュー表示 / diagram-design 接続点。 Phase 137: 採点設計規律 (criteria 3 層翻訳) / blind 受け手検査 / 評価者 4 契約。 decisions.md D62-D68 に判断根拠を記録。worker 契約に NG-4 追加。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01TFcsXBG95kTdxPfDaP7Vuu | 24 天前 | |
feat: add harness-mem managed companion | 4 个月前 | |
chore(release): v5.9.0 Phase 134-137 (検証チェーン配線修理 / 日本語 writing lint / surface チェリーピック / ループエンジニアリング施策) + release preflight の grok host plugin dist gate 修正。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> | 24 天前 | |
docs(hosts): grok の delivery hook 追加後を実測し直す (Phase 133.8 追補) buildDeliveryDoc に grok を足したのは harness gen を実行した後だったため、 検証に使った生成物 (261 バイト、PreToolUse のみ) は変更前のものだった。 自分で立てた「未知イベントで拒否されるかもしれない」という仮説を、 自分の変更に適用していなかった。 再生成して実測: - 生成物は 493 バイト (PreToolUse + Stop delivery) - grok inspect の Hooks は 36 -> 37、project 由来が 2 行 - つまり discovery は壊れておらず、証拠はむしろ強化された 副産物: grok が Stop も受理したため、plugin 由来 hooks が読まれない 原因を「27 イベント宣言による即時拒否」で説明する仮説は弱まった。 候補としては残すが結論にはしない旨を hosts.toml に記録。 あわせて未検証リンクを明記: 生成コマンドは相対パスであり、grok の hook executor がどの作業ディレクトリで解決するかは未観測。 discovery を確認したことは firing を確認したことではない。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012ZBxNEtYJbtHkZcsAn8nsv | 26 天前 | |
fix: remediate scorecard alerts | 3 个月前 | |
fix(guardrail): work-mode の実 session ID 配線と R07/R08 の producer を復元する (132.6/132.7) 132.7: SessionStart env handler が実 session_id を export 形式で CLAUDE_ENV_FILE へ書き (旧 KEY=VALUE 形式は子プロセスへ届かない・実測)、work-mode は --session-id > HARNESS_SESSION_ID env > last-session-id.json (2h 鮮度) で解決。 旧 session.json の内部 ID は受理拒否。SessionEnd で work state 解除。 実 session_id (独立ソース) での 6 系統実測 PASS。 132.6: shell 版ガードのファイルベース解決を Go へ移植 (breezing_state.go)。 R08 = roles ファイル (agent_id→session_id lookup) + reviewer agent_type + 自己登録 (登録キーは payload 由来のみ)。R07 = breezing-active.json impl_mode=codex + work-mode --codex (codex host 自身は除外)。 registry は grandfather 全解消、primary_producer 必須化。 再発防止: build_context_wiring_test.go が RuleContext 全 field に live producer 証明を reflection で強制。knob env 漏れの test ヘルパ追加。 4 視点並列レビュー (実バイナリへのプローブつき) が critical 2 件を摘出し修正: (1) R08 state 例外の path-traversal バイパス → Clean 済み封じ込め判定へ, (2) hookcodec.Normalize が agent_id/agent_type を落とし wire 上で死んでいた → codec 転送 + wire round-trip test。binary drift gate も再ビルドで解消。 Phase 133 起票: 4 ツール (Claude/Codex/Grok/Cursor) の 2026-08 仕様調査で 確証を得た適用候補 6 件。hosts.toml へ grok の admission-test evidence を記録。 gates: go test 47 pkg PASS / validate-plugin 136-0-0 / check-consistency PASS / knob-wiring 0 violation / binary-drift OK / mirrors in-sync Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PCi5GLAfya9aWYnDc7cmhs | 29 天前 |
Claude Code Harness
规划. 开发. 评审. 交付.
适用于 Claude Code、Codex CLI、Cursor 和 Grok 的规范化交付流程
English | 日本語
问题所在
智能体编码容易偏离方向。计划停留在聊天记录中,然后就不见了。在截止日期压力下,测试成了可选项。代码合并后才进行评审。发布依据要靠回忆来重建。
Harness 将"让智能体编写代码"的模式转变为一条可重复的路径:
编写规范 → 仅实现已批准的部分 → 验证 → 独立评审 → 整理交付依据。
它不会让模型变得更智能。它改进的是围绕模型的流程和边界——因此即使模型发生变化,整个系统仍能正常工作。
本 README 中的所有功能描述均经过机器验证。 CI 检查确保所述组件实际已连接,任务记录保持一致,并且发布的二进制文件可从源代码重新构建。只有在检查确认功能可用后,才会在此处列出。写出来的不代表能工作的。
30秒快速安装
claude
/plugin marketplace add Chachamaru127/claude-code-harness
/plugin install claude-code-harness@claude-code-harness-marketplace
/harness-setup
然后给它一些简单的东西:
/harness-plan Improve the README onboarding flow
Harness 会为你草拟 spec.md 和 Plans.md。你的工作不是编写计划,而是在继续执行前批准或修正它。
使用其他工具?请参见下方的按工具安装。
循环
5 个核心动词技能保持了简洁的操作界面:plan(计划)、work(执行)、review(审查)、sync(同步)、release(发布)。
(/harness-setup 在安装时运行一次,如上所述。)
| 命令 | 功能说明 |
|---|---|
/harness-plan |
将意图转化为 spec.md + Plans.md:包括范围、验收标准、依赖项、未知项、停止条件。 |
/harness-work |
执行一项已批准的任务或整个计划。当任务需要时添加测试。 |
/harness-work all |
执行整个已批准的计划。在计划明确且仓库基线已知时使用。 |
/harness-review |
独立于实现过程审查结果。重大问题将阻止完成。 |
/harness-sync |
比较计划与实际实现内容,并报告偏差。 |
/harness-release |
仅将经过验证的证据打包到 CHANGELOG、标签和发布版本中。 |
每个阶段都会为下一阶段留下所需的材料。
| 阶段 | 输出 | 关卡 |
|---|---|---|
| 计划 | spec.md + Plans.md |
你批准或修正生成的契约。 |
| 执行 | 代码和测试 | 任务要求时必须采用 TDD。 |
| 审查 | 独立评审意见 | 重大问题将阻止完成。 |
| PR | 证据包 | PR 就绪不等同于发布就绪。 |
| 发布 | 标签和制品 | 发布预检必须通过。 |
代理未见过的数据会保持为 unknown(未知)状态,而不会被悄悄编造。
安全层
这正是 Harness 与提示模板的区别所在。每个工具调用在运行前都会由 Go 引擎进行裁决——而不是事后审查,因为文件差异无法反映网络发送或文件删除操作。
两层防护,强度刻意不同。
| 层级 | 决策内容 | 可覆盖性 |
|---|---|---|
| 运行时底线 — 5 个类别 | 直接拒绝 | 否。 无法通过任何配置、环境变量或权限模式覆盖 |
| 护栏规则 — R01–R15 | 拒绝 / 确认 / 警告 | 部分可通过项目配置调整 |
底线涵盖账单、网络出口、密钥读取、生产环境部署以及任务工作区外的删除操作。它位于独立的代码路径上,没有禁用开关,因此自主运行无法通过自我说服绕过它。
护栏是你可以调整的层级。直接推送到 main 分支、写入受保护路径、强制推送、历史重写——每一项都有明确的裁决,其中一些可按项目进行配置。
确认环节移至计划阶段。 Harness 不会在运行过程中打断你,而是会预先收集计划中需要的风险操作,并一次性询问。批准具有有效期、任务范围和使用限制——因此一次批准绝不会成为永久的漏洞。
每次拦截都有记录。 规则 ID、类别和裁决结果会记录到 JSONL 日志中。命令文本从不记录;仅记录哈希值和长度,对于密钥读取和账单操作,甚至连这些也不记录。你可以统计实际拦截的内容,而无需猜测。
非技术人员的决策界面
三个单屏 HTML 视图让非技术人员无需阅读代码即可进行判断。
| 界面 | 适用时机 | 显示内容 |
|---|---|---|
| 计划简报 | 计划最终确定后 | 理解、选项、风险、验收标准 |
| 进度 | 工作进行中 | WIP/TODO/已完成数量及偏差警报,自动重新生成 |
| 验收 | 发布前 | 按标准显示通过/未通过,包含发布/等待/拒绝选项 |
按工具安装
四种安装途径并非提供四种相同的保证。安装脚本仅意味着工具具有入口路径,而非共享的产品承诺。
| 工具 | 层级 | 途径 |
|---|---|---|
| Claude Code | supported |
插件市场,然后执行 /harness-setup |
| Codex CLI | supported |
scripts/setup-codex.sh --user |
| Cursor | supported |
scripts/setup-cursor.sh — 控制在 harness 端,参见 说明 |
| Grok | supported |
scripts/setup-grok.sh |
| Codex app | candidate |
仅候选版冒烟测试;CLI 验证未复用 |
| OpenCode | internal-compatible |
scripts/setup-opencode.sh;不保证运行时一致性 |
| Hermes Agent | candidate |
手动符号链接研究途径 |
| GitHub Copilot CLI | candidate |
手动配置文件研究 |
| Antigravity CLI | future/unsupported |
尚无最终用户安装途径 |
层级含义及严格划分原因
| EN 层级 | 日语公开表述 |
|---|---|
supported |
正式対応 |
internal-compatible |
互換利用可 / 制限付き対応 |
candidate |
試験対応 / プレビュー |
future/unsupported |
非対応 / 将来検討 |
Claude Code、Codex CLI、Cursor 和 Grok 在其已验证的声明路径上通过了 H1–H8(H4 实时验证 2026-07-17;H7 发布预检失败关闭线路 2026-07-19)。其他所有工具在通过各自的 H1–H8 之前,均保持列出的层级(docs/spec/planning-and-host-adapter.md,第 111 阶段)。
Harness 不继承 Superpowers、Hermes Agent 或任何其他项目的支持声明。只有当 Harness 拥有自己的引导程序、触发器、运行时和发布证据时,宿主工具才能升级。
not_observed != absent — 本地验证缺失意味着“此处未证明”。这并不表示不可能,也不表示受支持。
已在使用 Harness?请先运行迁移报告
bin/harness doctor --migration-report
它会清点过时的 Claude 插件缓存、重复的 Codex 技能、旧符号链接、OpenCode 备份路径以及 harness-mem 状态——不会删除任何内容。
高级功能
在基础功能正常运行后,可以使用这些功能。
| 功能 | 新增内容 | 边界限制 |
|---|---|---|
| Breezing | 规划师/评审师/工作者团队协作执行更大规模的任务列表 | 仍受计划质量和评审的限制 |
| Codex 伴生评审 | 通过 scripts/codex-companion.sh 提供基于模式的第二意见 |
原始 codex exec 并非伴生路径 |
| harness-mem | 跨会话的项目范围内存与召回 | 可选功能;清除操作仍需显式进行 |
| OpenCode 引导 | 将指导内容镜像到 OpenCode 兼容的界面 | 不保证运行时一致性 |
| auto-approve(实验性) | HARNESS_AUTO_APPROVE=on 会将关卡结果记录到编排 ledger 中 |
默认关闭。暂未跳过审批提示 |
要求
- 支持 Claude 路径需要 Claude Code v2.1+
- 具有写入权限的仓库
- Go 原生防护引擎不需要 Node.js
- 可选:harness-mem 用于跨会话内存
文档
| 资源 | 描述 |
|---|---|
| 工具优先入门指南 | 按宿主工具划分的入门起点 |
| 安装路径 | 各工具的设置步骤和层级边界 |
| 迁移检查 | 现有用户影响和回滚方案 |
| 技能触发验证 | 安装成功的验证方式 |
| 功能矩阵 | 完整的宿主功能声明表 |
| Claude Code 兼容性 | 版本要求和注意事项 |
| Cursor 集成 | 交接边界和包含关系 |
| 分发范围 | 包含内容、兼容内容与仅开发内容的区别 |
| 强化一致性 | 不同宿主之间的安全差异 |
| Work All 证据包 | 完整计划运行的验证约定 |
| 语言 / 国际化 | 切换输出语言 |
| 更新日志 | 用户可见的版本历史 |
贡献指南
欢迎提交问题报告和拉取请求。详情请参见 CONTRIBUTING.md。
致谢
许可证
采用 MIT 许可证。详见 LICENSE.md。