templates/claude/skills/spike-loop/SKILL.md
ship-parallel の E2E 検証を自動化する。ヘッドレス Claude で ship-parallel を起動し、command-log ベースで stuck 検出 → 診断 → kill → 再起動をループする。「/spike-loop」「並列検証」と言った時に使用。
npx skillsauth add hirokimry/vibecorp spike-loopInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ultrathink
ヘッドレス Claude で /ship-parallel を実行し、command-log を監視して stuck 検出 → 診断スナップショット → kill + cleanup → 分析レポートを自律的にループする。
full プリセット専用。ship-parallel と同じく SM エージェントが必要なため。
/spike-loop <Issue URL 1> <Issue URL 2> [...]
/spike-loop --max-runs 5 # 最大5回ループ(デフォルト: 3)
claude CLI がインストール済みであることgh) が認証済みであることawk '/^preset:[[:space:]]*/ { sub(/^preset:[[:space:]]*/, ""); print; exit }' "$CLAUDE_PROJECT_DIR/.claude/vibecorp.yml"
full 以外の場合は「full プリセット専用です」と報告して終了。
git branch --show-current
main でない場合は「main ブランチに切り替えてください」と報告して終了。
Bash ツールの run_in_background: true でヘッドレス Claude を起動する。
claude -p --permission-mode dontAsk --verbose "/ship-parallel <Issue URL 1> <Issue URL 2> [...]"
-p (print mode): 非対話、stdout に結果を出力して終了--permission-mode dontAsk: 親セッションへの承認要求を抑制する。必要に応じて --dangerously-skip-permissions と併用(参照: docs/design-philosophy.md の「承認フローへの非介入」、#260)--verbose: デバッグ情報を出力起動後、PID を記録する。
command-log の最終タイムスタンプを 30 秒間隔でポーリングし、stuck を検出する。
# 最終タイムスタンプを取得
source "$CLAUDE_PROJECT_DIR"/.claude/lib/common.sh
tail -1 "$(vibecorp_state_path command-log)" | cut -f1
| 条件 | 判定 | アクション | |------|------|-----------| | 最終タイムスタンプから 10 分以上経過 | stuck | ステップ 4 へ | | 全 Issue の PR が作成済み | 成功 | ステップ 7 へ | | ヘッドレス Claude プロセスが終了 | 完了(成功 or 失敗) | ステップ 6 へ |
各 Issue URL から Issue 番号を抽出し、dev/{番号} パターンのブランチで PR が存在するか確認する。
gh pr list --state open --head "dev/{番号}" --json number --jq '.[0].number'
全 Issue の PR が存在すれば成功。
stuck を検出したら、以下の情報を収集して保存する。
source "$CLAUDE_PROJECT_DIR"/.claude/lib/common.sh
RUN_DIR="$(vibecorp_state_path spike-loop)/run_{N}"
mkdir -p "$RUN_DIR"
収集する情報:
# プロセスツリー
ps aux | grep claude > "$RUN_DIR/processes.txt"
# command-log の末尾 50 行
tail -50 "$(vibecorp_state_path command-log)" > "$RUN_DIR/command-log-tail.txt"
# worktree 一覧
git worktree list > "$RUN_DIR/worktrees.txt"
stuck したプロセスと残存リソースを削除する。各コマンドは 1 呼び出し単位で実行し、パイプで連結しない。 --force / -D は使用せず、安全に削除できないリソースは手動対応する。
5-1. ヘッドレス Claude プロセスを kill(PID を記録しているもの)
kill <PID>
5-2. 残存 teammate プロセスの PID を取得
pgrep -f 'claude.*agent-id'
取得した PID を 1 件ずつ kill <PID> で終了する(xargs 等のパイプラインは使わない)。
5-3. worktree の一覧を取得
git worktree list --porcelain
一覧から spike-loop の対象となる worktree(worktrees/ 配下で dev/ ブランチを持つもの)を特定し、1 件ずつ削除する:
git worktree remove <path>
git worktree remove は uncommitted 変更があると失敗する。失敗時はスナップショット(ステップ 4)で内容を保全してから、ユーザーに手動対応を求める(--force は使用しない)。
5-4. dev/ ブランチの一覧を取得
git branch --list 'dev/*'
各ブランチを 1 件ずつ削除する:
git branch -d <branch>
git branch -d はマージ済みブランチのみ削除できる。未マージのブランチは削除失敗となるため、ユーザーに手動対応を求める(-D は使用しない)。
ヘッドレス Claude が正常終了した場合(stuck ではなくプロセス終了)、成功判定を行う。
収集した findings を分析し、レポートを出力する。
## /spike-loop 結果
### ループ {N}
- 状態: {成功 / stuck / 失敗}
- 経過時間: {分}
- command-log エントリ数: {件}
- 最終コマンド: {コマンド}
- PR 作成状況:
- #{番号}: {作成済み / 未作成}
- #{番号}: {作成済み / 未作成}
### stuck 分析(stuck の場合のみ)
- 最終コマンドの実行時刻: {タイムスタンプ}
- 無音時間: {分}
- 推定原因: {分析結果}
- スナップショット: ~/.cache/vibecorp/state/<repo-id>/spike-loop/run_{N}/
### 総合
- 実行回数: {N}/{最大}
- 成功: {回}
- stuck: {回}
- 失敗: {回}
成功の場合は、作成された PR の URL を一覧表示する。
stuck または失敗の場合、最大ループ回数に達していなければステップ 2 に戻る。
修正の自動適用は行わない(Phase 2 で対応予定)。分析レポートを出力し、ユーザーの判断を待つ。ユーザーが修正を指示した場合は、修正後に再度 /spike-loop を実行する。
--force、--hard、--no-verify は使用しない~/.cache/vibecorp/state/<repo-id>/spike-loop/ に保存する(リポジトリ外なので自動的に git 管理対象外)\(...) を使わない — Bash 上で \ がエスケープ文字、() がサブシェルとして解釈され、意図しない展開やパースエラーを引き起こすため。必ず + で結合する2>/dev/null、|| echo、; echo 等のリダイレクトやフォールバックを付加しないdata-ai
skills/**/SKILL.md 内に embed された 5 行以上のエージェント呼出プロンプトテンプレ・長文ブロックを .claude/rules/notification-prompt-extraction.md 基準で skills/<skill>/prompts/<name>.md に切り出す migration skill。「/prompts-extract-all」「プロンプト切り出し」「プロンプト extract」「SKILL.md プロンプト migration」と言った時に使用。検出は awk でフェンスコードブロックを抽出して行数カウント、要否判定は LLM が閾値・用途軸・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
documentation
.github/workflows/**/*.{yml,yaml} の --body 通知文と hooks/**/*.sh の長文 echo/printf/heredoc を .claude/rules/notification-prompt-extraction.md 基準で個別 .md ファイルに切り出す migration skill。「/notifications-extract-all」「通知文切り出し」「通知文 extract」「workflow 通知 migration」と言った時に使用。検出は grep で機械絞り込み、要否判定は LLM が閾値・命名規約と照合。diff 提案 → CEO 承認 → 書換の 2 段階で挙動を壊さず適用する。自動マージ禁止、自律ループ対象外。
development
`**/*.sh` / `**/*.js` / `**/*.ts` / `**/*.py` / `**/*.rb` / `**/*.go` / 設定ファイル等のコード内コメントを一括棚卸しし、 `.claude/rules/code-comments.md` と機械的に照合する。 diff 提案 → CEO 承認 → 書換の 2 段階で自動マージを禁じる。 生成コード・`node_modules`・`vendor`・`dist`・`build` 等は除外する。 「/vibecorp:comments-rewrite-all」「コメント全書き直し」「コード内コメント棚卸し」 と言った時に使用。
development
skills/**/SKILL.md・agents/*.md・.claude/rules/*.md を .claude/rules/prompt-writing.md 基準で一括書き直し提案するスキル。「/prompts-rewrite-all」「プロンプト書き直し」「スキル一括書き直し」「エージェント書き直し」と言った時に使用。claude-code-guide サブエージェントで Claude Code 公式仕様(docs.claude.com)を確認し、prompt-writing.md の指針 MUST / 禁止パターンと照合する。diff 提案 → CEO 承認 → 書き換えの 2 段階で挙動を壊さず適用する。自動マージ禁止。