announce-release
Freexp-harness の公開済みリリースを要約して、チーム周知用の短いテキスト (利用者向けの変化 + 更新手順) を作る。「リリースをアナウンスしたい」「この期間のリリースをまとめて周知したい」「土日の分まとめて」と言われたときに発火。投稿はせずドラフト生成に留める。
The English summary is being prepared. Showing the original description.
xp-harness の skill / subagent / instruction が意図どおり振る舞えているか (発火するか・あるべき振る舞いができているか) を transcript で事実確認する手順。
skill / subagent / instruction を改修した後に動作検証したいとき、または本番の実運用セッションを「あるべき振る舞い」に照らして分析したいとき、「検証したい」「発火するか確かめたい」「このセッションを分析したい」と言われたときに発火させる。
核は発火・振る舞いができたかの事実確認で、本番セッションでは自走の良し悪し (止まり方・判断の質など) も見る。
The English summary is being prepared. Showing the original description.
See how to installReview the instructions the agent will receive before you install.
skill / subagent / instruction を改修しても、それが実際に発火するか・意図どおり振る舞うかは transcript を観測しないと分からない。検証の手段は、対象が配布物か改修者向けかで決まる — 配布物 (.apm/ 配下) は sandbox に deploy されるので sandbox で走らせて見る。改修者向け (project root の CLAUDE.md や .claude/ 直置きの skill) は sandbox に deploy されないので、本番の実運用セッションの解析でしか観測できない。この検証のやり方 (sandbox の作り方、起動の仕方、transcript の場所と解析方法) はノウハウの塊で、skill 化しないと検証のたびにゼロから再発明することになる。
ここで言うのは「検証」= 仕組みが意図どおり動いたか(sandbox: 的は改修が定める=既知)・あるべき振る舞いができているか(本番: 的=理想を自分で立てて照らす)の確認。核は「できた / できていない」の事実確認。加えて本番セッションでは自走の 良し悪し(止まり方が妥当だったか・判断の質など)まで踏み込んでよい ── ただし二つを守る: 評価は必ず 証拠に接地する(印象・自己分析でなく生 transcript で裏を取る)、点数化・ランク・ベンチには逃げない(偽の精度を生むので扱わない)。当初は良し悪しを扱わない線だったが、観点を型にできる知見が溜まったので拡張した(下記「本番の実運用セッションを見る場合」)。
状態を仕込む → 改修者が Claude Code を起動して走らせる → transcript を解析して発火・振る舞いを観測 → 後片付け
仕込む状態の大きさが検証の目的で変わるだけ。skill の連鎖発火だけならプローブ一式、実フェーズの振る舞いなら要件定義・基本設計 md を置いた途中状態を仕込む。
(上は sandbox で自分が走らせる場合。既に走った 本番の実運用セッション を分析する場合は「状態を仕込む・走らせる」が無く、下記に従う。)
sandbox 検証は「改修した skill が発火・動作するか」で 的が既知(何を確認するかは改修が決める)。一方、本番の実運用セッション(実際のユーザーの自走など)を解析するときは、的が開いている(何を見るべきか自体が定まっていない)。だから最初に 的=理想を立てる のが最重要ステップになる。仕込み・起動は無く、既に走った transcript を解析するだけ。
本番分析の実行順はこう: 理想を確定(本節) → transcript を解析(手順 4)。手順 1 の「検証目的の確認」は本節の理想確定が兼ね、sandbox 用の手順 2・3(仕込み・起動)は無い。transcript の在り処・読み方は手順 4 の解析をそのまま使う。本番セッションの jsonl は ~/.claude/projects/<エンコードされた作業ディレクトリ>/<セッション ID>.jsonl にある。ただしセッションが途中で worktree に入ると、以降は移動先のパスでエンコードされた別ディレクトリに書かれる(セッション ID は変わらない)。見失ったら ls ~/.claude/projects/*/<セッション ID>.jsonl で当て、出たディレクトリを解析対象に渡し直す(実際に見失った)。
自走した実装セッションを「どう走れたか」で見るときの 出発点の型。毎回ゼロから観点を立てると浅くなりがちなので型として置くが、固定のチェックリストではない ── ここから始めて、対象セッションに合わせて足し引きする。各観点は「できた / できていない」+証拠で照らし、点数化はしない。各観点の具体(何をもって「できた」とするか)は、対象 skill 本文や philosophy から毎回立てる(上の「理想を先に確定する」の通り、記憶で机上評価しない)。
自走の 稼働時間・介入回数 の測り方は手順 4 の「transcript を解析する」を参照。
-p を使わないclaude -p (ヘッドレス) を使わない (2026-06-15 から従量課金)。検証は interactive (サブスク枠) で駆動する — 起動・送信の具体は手順 3。自分で駆動でき、改修者の手動起動に頼らなくてよい (手動起動 + 貼り付けも従来どおり可)。いずれの場合も、走り終わった transcript を解析するのがあなたの仕事。
仕込み (sandbox の状態・設計書・規約) とプロンプトを作るときの原則。条件が悪いと、走らせても何も測れない / 別物を測る。
claude-launcher.sh launch --model)、前後比較では新旧を同一モデルで走らせる。実際に使われた model ID は transcript から確認し (指定した alias でなく実測値が真)、検証記録に残す (記録の必須項目、references/README.md 参照)どの skill / subagent の、どの発火・振る舞いを確認したいかを特定する。確認したい事実を先に言語化する (例:「main が slice-tdd を Skill tool で発火するか」「code-reviewer が preload された skill の指示で動くか」)。目的が曖昧なまま走らせると、transcript を見ても判定できない。
sandbox の用意 — 新規に作るなら:
.claude/skills/harness-verification/scripts/setup-sandbox.sh <名前> # 既定: front/api 分離の Web アプリ構成
.claude/skills/harness-verification/scripts/setup-sandbox.sh <名前> --bare # 最小構成 (git repo + apm install のみ)
.claude/skills/harness-verification/scripts/setup-sandbox.sh <名前> --wiremock # 外部 API モック構成 (api + WireMock(Docker))
<xp-harness の親ディレクトリ>/xp-harness-test/<名前>/ に git repo + apm install 済の sandbox ができる (改修中の xp-harness をローカル依存で deploy)。既存 sandbox の使い回しでよいかは改修者と判断する。改修内容を sandbox に反映するには、改修を commit してから sandbox で apm install し直す (apm はローカル依存でも git の内容を見る)。
既定の構成は front (Vite + React) / api (Hono) / e2e (Playwright、webServer で両サーバ自動起動、スモーク spec つき) の分離構成で、探索型スキル (implementation / e2e / e2e-execution) が探し当てる先として以下を同梱する:
front-implementation / api-implementation。わざと対照的な規約 (front: interface のみ + コメント禁止、api: type のみ + JSDoc 必須) にしてあり、領域をまたぐ実装で規約の混線が起きたか grep で観測できる (例: api 配下に interface が出たら混線)e2e-playwright-front (探索の「スキルなら呼ぶ」枝の対象)e2e/README.md (探索の「スキルでないファイルは読む」枝の対象)同梱スキルは配布物ではなく、consumer プロジェクトが持つ固有スキルの形を模した検証材料 (配布側の e2e skill と sync させる対象ではない)。「検証材料である」という注記を template 側の SKILL.md に書かないのは意図的 (= 上の「ノーヒント」原則の具体適用) — sandbox に複製されて検証セッション自身が読むため、観測を汚す。同梱スキルが探索型スキルに実際に探し当てられるかは検証ランで観測して確定する (同形の構成で探索発火・混線ゼロの実績あり)。
プローブによる連鎖発火確認などアプリが不要な検証は --bare で安く作る。
--wiremock は「外部 API をモックする E2E でモック検証が十分か」を確認する検証クラス用。api (Hono) + WireMock(Docker) 構成で、検証材料として「リクエストマッチが緩い既存テスト」「モックは仕様書の全パラメータを検証する規約スキル e2e-api-wiremock」「外部 API 仕様書」を同梱する (= セッションが『既存テストの検証が甘い』と自分で気づけるかを見る材料)。docs/working/ にはサンプルの要件 / 設計を同梱するが、これは筋書きの一例。実際の検証では、検証したい対象に合わせて筋書き (タスク・要件 / 設計) を差し替え、上の「検証条件の設計原則」(ノーヒント・実観測ケース) で点検してから走らせる。
途中状態の仕込み — 目的に応じて選ぶ:
skill の連鎖発火だけ安く確認したい (preload → Skill tool 呼び出しの連鎖など):
.claude/skills/harness-verification/scripts/setup-probe.sh <sandbox パス>
合言葉 PROBE_TARGET_FIRED_OK を出させるプローブ一式 (検証用 subagent + skill 2 つ) が配置される。配置内容と起動プロンプト例はスクリプトが出力する
実フェーズの発火・振る舞いを確認したい (実装フェーズで slice-tdd → implementation → reviewer の流れ等): sandbox の docs/working/<title>/ に要件定義.md・基本設計.md を置き、「実装フェーズの続き」という途中状態を作る。md はこの main session が書いてよい (ここはコストがかからない)
走らせる前に、条件 (仕込み + プロンプト) をテスト観点でレビューする (外部の目)。上の「検証条件の設計原則」を 1 項目ずつ通す (項目の列挙はそちらが単一の出典)。特に 前後比較の要否とモデル は、ここで結論と理由を改修者に提示する。自己レビューは同じ盲点で素通りするので、改修者に条件を見せて確認を取ってから走らせる (高コストな実走の前の関門)。
interactive (サブスク枠) で自分で起動して FIFO 駆動する のが既定。scripts/claude-launcher.sh を使う (pty + FIFO + --remote-control を内包):
scripts/claude-launcher.sh launch <name> <sandbox パス> — 起動scripts/claude-launcher.sh log <name> で Remote Control active を確認。出なければ起動失敗 → stop して仕切り直す (起動の stdout は捨てているのでサイレントに失敗しうる。ここを skip しない)scripts/claude-launcher.sh send <name> "<検証プロンプト>" — プロンプト送信。送信後、log で処理が始まったことを確認してから次を送る(FIFO 送信は稀に submit されず未送信のまま残る。未送信のまま次を送ると入力が混線し、別物を検証してしまう)
send したプロンプトが input box に入るが submit されない。rc active 確認後に printf '\r' > <name>.pipe を 1〜2 回送って dialog を閉じてから send することsend は入力を上書きするので通常の送信は影響を受けない。ただし dialog 閉じ・再 submit 等で printf '\r' を単独で送るときは、直前に log で input box に ghost text / 意図しない文言が残っていないか確認してから送る (= 意図しない発話が submit されて検証の入力が汚れるのを防ぐ)scripts/claude-launcher.sh wait-idle <name> --timeout <秒> でターン完了 (入力待ち) を待つ → IDLE が返ったら手順 4 で解析。判定は pty 画面 (log) の mtime で行う (処理中はスピナーが画面を書き続け、idle で止まる) ので、長考・巨大トークン生成・AskUserQuestion 終わりも idle と誤らない。transcript の更新停止で判断しない (thinking 中は transcript が書かれず、長考を idle と誤検知する)。
--timeout はそのターンの重さに応じて呼ぶ側が渡す (サブエージェントを数回挟むなら長め)。既定 300s は網。idle 判定閾 (quiet 6s) は固定。TIMEOUT が返ったら状態を見る: 「まだ処理中 (画面が動いている)」なら --timeout を延ばして再 wait、「画面が止まっているのに idle 未検知」なら想定外なので log で実状態を確認。放置でなく必ず引き戻される。NOSTART は send が submit されていないサイン → printf '\r' > <name>.pipe で再送信してから wait-idle。scripts/claude-launcher.sh stop <name> — 停止 + 片付け(実際に終了してから返るので、呼び出し後に手で再確認しない)手動でやる場合 (従来フロー) は、起動ディレクトリと貼り付け用プロンプトをセットで提示する。形式:
検証の準備ができました。以下で検証セッションを起動してください:
cd <sandbox パス> && claude
起動したら、このプロンプトを貼ってください:
<検証目的に合わせたプロンプト>
走り終わったら教えてください。transcript を解析します。
プロンプトには「どの状態から始まるか」(例: docs/working/<title>/ に要件定義.md と基本設計.md がある、実装フェーズの続き) と「自走してよい範囲」(branch 作成の承認等、確認で止まらないための前置き) を含める。
printf '\033[B' > <name>.pipe) で選択肢を移動して Enter (printf '\r') が確実。番号 ("3" 等) を send すると自由記述欄に入って誤爆しうる。マルチ質問ウィジェットは各質問を Enter で進めて最後に Submit。TUI の log は文字化けするので、判定は見た目でなく analyze-session.py で裏取りする.claude/rules/<name>.md に deploy する (frontmatter applyTo: → paths: 変換、本文は無変換)。旧版・新版の deploy 形を作って .claude/rules/<name>.md を旧/新で cp 差し替えれば、apm install し直さず前後比較できる.claude/skills/harness-verification/scripts/analyze-session.py <sandbox パス>
最新セッションの発火事実 (main の Skill 発火・subagent 起動の時系列、各 subagent 内の Skill 発火、SKILL.md を Read しただけのケース) が一覧で出る。--list でセッション一覧、--session <ID> で指定、--grep <文字列> で合言葉等の出現確認。
読むときの観点:
--grep や sandbox の git status / git diff (初期 commit との差分) でも観測できる~/.claude/projects/ 配下の jsonl、subagent は <session>/subagents/agent-*.jsonl) を直接読む自走セッションの タイムライン(稼働時間・介入回数)を復元する ときの落とし穴:
AskUserQuestion の回答も介入点として記録に乗る。片方だけ数えると介入回数を取りこぼす(実際、選択肢回答を除外して数え、自走時間を過大評価した失敗がある)。remote-control 経由でも記録形は同じ(remote-control は入力を隠さない)
AskUserQuestion の tool_use で捉える: ツールを呼んだ時点がもう停止点なので、tool_use を数えれば介入の回数・タイミングは文言に依存せず取れる。回答の中身が要るときだけ、その id に対応する tool_result を引く。回答文言そのものを検出条件にしない — 文言は複数フォーマットあり("...have been answered" / "The user answered: ..." を実観測)、片方だけを grep すると別フォーマットの回答を丸ごと落とす(実際 have been answered だけで拾って push 承認を取りこぼし、「無断 push」と誤断定した失敗がある)AskUserQuestion 提示 / 確認を求める発話)で起きる稼働時間の 内訳(何に時間が使われたか)を割る ときの見方(成果密度の観点で効く):
自走実装セッションの サイクル構造と skill 発火を復元する ときの見方(規律通り走れたかの観点で効く):
解析結果は事実 (起きた / 起きていない) として改修者に報告する。発火しなかった場合の原因究明と改修は、この skill の外 (通常の skill 改修フロー) で行う。
検証で取れた事実 (起きた / 起きていない) を土台に、その上へ全体結論 (リリース可否の目線) と軽い提案を一段重ねて渡す ── 発火・動作の検証がこの skill の核で、可否そのものを決めるのは依頼者。
解析している間は実況してよいが、報告はそれと地続きにしない。調査の過程を読み返さなくても成立するよう、はっきりした区切りを立てて「ここから報告」を明示する。中身は抽象度を上から下へ深める (最抽象の結論 → 詳細 → 証拠)。複数シナリオは入れ子にする (全体 → 一覧 → 各詳細)。これは dialogue-principles の「同じ抽象度で話す」「段階的開示」を報告に当てたもの。
---
# 検証レポート: <タイトル> ← はっきりした区切り (ここから報告)
## 全体結論
<PASS/FAIL + 平易な意味 + リリースの温度感 (確信の厚み)。複数シナリオなら「N 件中 M PASS」。PR 番号など具体は書かない>
## シナリオ一覧 ← 複数シナリオのとき。ここまでで全体像が取れる
- <シナリオ A>: PASS / FAIL
- <シナリオ B>: PASS / FAIL
## 各シナリオ詳細 ← シナリオごとに一段深く降りる
### <シナリオ A>
- 何を検証したか: 対象 skill / 条件 (**再現粒度**: sandbox flavor / 仕込み / プロンプト全文 / 前後比較 / 試行数) / 反証条件
- 結果: 観測された振る舞い
- 証拠: 生 transcript・git 状態から取れた事実 (FAIL なら核が破れた証拠)
## 提案 (軽い) ← 次どうするか
<リリース可否 / できてない所を別ストーリーに切るか等の次の一手>
書式の要点:
検証は throwaway な sandbox で回すので、報告(上の検証レポート)を再現レシピ付きで永続化した記録を references/ に残す — 報告の結果をそのまま記録の「結果」に写し、加えて再現レシピ(条件)を足す。sandbox 自体は git に入れない(setup-sandbox.sh +その条件で再生成できる)。docs/working/ は working でいつ消えてもおかしくないので 依存しない — 記録は references/ だけで成立させる(結果・証拠を inline で書き写す)。
.claude/skills/harness-verification/references/(1 検証 = 1 ファイル YYYY-MM-DD_対象.md)references/README.md(必須項目・frontmatter のキーはそこと validate-verifications.sh が持つ。本文には写さない)。条件は再現粒度で書く(setup-sandbox の flavor / 仕込んだ状態の中身 / ノーヒント依頼の全文 / 前後比較 / 試行数).claude/skills/harness-verification/scripts/validate-verifications.sh(format 点検、違反で exit 1)/ .claude/skills/harness-verification/scripts/find-verifications.sh [キーワード](目的 / 対象 / verdict / 本文の横断検索、引数なしで一覧)プローブを配置した場合は必ず削除する:
.claude/skills/harness-verification/scripts/setup-probe.sh <sandbox パス> --clean
検証セッションが sandbox に生成した成果物 (実装コード等) を残すか消すかは改修者と判断する (再検証でクリーンな状態が要るなら 再 deploy 済みを commit した baseline に戻す: git reset --hard <baseline> + git clean -fd。戻す先の選び方は次の落とし穴を参照)。baseline は tag で打つ — branch にすると検証セッションが切った branch を掃除するときに一緒に消える (落とし穴2 と同根)
落とし穴1: reset の deploy 巻き戻し (ケース毎にリセットして回すとき): deploy 済み skill は sandbox に git tracked で入っているので、再 deploy より前の commit へ reset すると deploy も旧版に巻き戻る (= 改修版でなく旧版で走ってしまう)。だから戻す先は上記 baseline にする (初期 commit が再 deploy 前なら使わない)。リセット後は「検証対象 skill が実際に deploy されているか」を 1 度確認してからケースを流す
落とし穴2: reset の branch リーク: git reset --hard は branch を切り替えないので、検証セッションが切った branch が次ケースに残る → base branch へ戻し不要 branch を消す
sandbox 自体の削除は改修者の判断。基本は残す (次回の検証で使い回せる)
例外: worktree から setup した sandbox は、worktree の掃除とセットで片付ける。setup-sandbox.sh はスクリプトの場所から xp-harness root を解決するため、改修 worktree で実行すると sandbox は <worktree の親>/xp-harness-test/ に作られ、apm.yml のローカル依存も worktree のパスを指す。worktree を削除すると依存が宙に浮き apm install し直せなくなるので、worktree の後片付け時に sandbox も削除する (再検証したければ統合後の main から作り直す)
No reviews yet. Tell others what you thought.
No login needed. Share how it worked for you, ask a question, or note where it did not run.
No comments yet. Be the first to write one.
xp-harness の公開済みリリースを要約して、チーム周知用の短いテキスト (利用者向けの変化 + 更新手順) を作る。「リリースをアナウンスしたい」「この期間のリリースをまとめて周知したい」「土日の分まとめて」と言われたときに発火。投稿はせずドラフト生成に留める。
The English summary is being prepared. Showing the original description.
要件が固まった機能・変更について、アーキテクチャ・ER・シーケンス・論理設計までを対話で固める「基本設計フェーズ」のスキル。docs/working/<title>/要件定義.md が既にある状態で「設計を進めて」「basic-design」と言われたら必ず発火させる。要件定義が終わって設計フェーズに入りたい依頼、データモデルや API 設計や画面遷移の議論、コンポーネント分割や責務分離の相談、「どう作るか」の構造的な設計が必要な場面で使う。
The English summary is being prepared. Showing the original description.
新規・変更・削除・改善などの要望やレビュー指摘を受けたら、設計や実装に入る前にまず必ず発火させる「要件定義フェーズ」のスキル。依頼者のインテントを読み取り、Why / Done / スコープ / 影響範囲を引き出す。見える挙動が変わる依頼全般が対象で、やることが具体的でも md にまとめられていても発火させ、複数の要望が混ざる依頼ほど積極的に発火させる。発火しないのは、再現条件と期待動作が完全に明確なバグ修正、依存更新・タイポ修正などの定型作業、要件定義と基本設計の文書が両方揃った実装フェーズの続き(メモや TODO があるだけでは除外しない)だけ。
The English summary is being prepared. Showing the original description.
依頼者と議論・対話を進める場面で必ず発火させる skill。共創を目指して、認識を小さく揃えながら、同じ抽象度・レイヤーで話すための対話の進め方を扱う。要件・設計フェーズの対話、実装中の設計判断の議論、レビュー結果の共有、複数の論点・選択肢を依頼者に渡す場面、依頼者からの指摘・反論に応答する場面、「確認したい」「議論したい」「相談したい」と問いかけたいとき、いずれも発火対象。「会話」ではなく「対話」を成立させたい全場面で効く。質問がスルーされる・訂正が続く・話題を変えられる・「そうじゃなくて」と返されるなど、噛み合っていない兆候を観測したときは軌道修正のために再度発火させる。
The English summary is being prepared. Showing the original description.
内部由来の知見(ふりかえりの反映・実プロジェクトの検証記録など)を公開リポジトリに出す前に、組織固有の固有名詞(会社名・内部リポ名・顧客名・人物名・プロジェクト名・ID・パス等)の混入を独立点検して防ぐ。公開 git 履歴は遡れて消せないため、コミット / push の前に必ず通す。機密・認証情報の検査は扱わない。
The English summary is being prepared. Showing the original description.
E2E テストの spec を書く・編集する・レビューする際に必ず発火させる。新しいシナリオの追加、既存 E2E テストの修正・デバッグ、E2E テストの書き方の相談、slice-tdd skill から E2E spec が必要と判断された場面で使う。触る範囲に対応するプロジェクトの E2E の流儀 (spec の書き方・構造・命名) を探して従わせる入口。E2E を実行する手順は扱わない (別スキルの責務)。
The English summary is being prepared. Showing the original description.