| name | autopilot |
| description | autopilot の総合サポート。初期設定(必要情報のインタビュー → 起動スクリプト tmp/autopilot_up.sh の生成 → 起動コマンド提示)、Issue の enroll ショートカット(本文や末尾に「enroll autopilot」)、トラブル診断(check-autopilot へ委譲)、運用中の操作支援。「init autopilot」「autopilot開始」「go autopilot」「play autopilot」「enroll autopilot」など、autopilot と一緒にやろうと汲み取れるひとことで起動する。 |
autopilot — 総合サポートスキル
ユーザーが autopilot に関する短い呼びかけをしたときに起動し、モードを判定して対応する。
このスキルは人間と対話するセッション用(autopilot worker のプロンプトではないので、
不足情報は遠慮なく AskUserQuestion でインタビューしてよい)。
参照ドキュメント: docs/autopilot/README.md(全体)/ docs/autopilot/state-machine.md(状態遷移)/
docs/autopilot/autonomous-contract.md(worker 契約)。
モード判定
| ユーザーの発話(例) | モード |
|---|
init autopilot / autopilot開始 / go autopilot / play autopilot / 「autopilot を使いたい・始めたい」 | A: 初期化 & 起動サポート |
メッセージや Issue 下書きの本文・末尾に enroll autopilot | B: Issue enroll ショートカット |
check autopilot / check autopilot #N / 「止まってる」「Blocked になってる」等のトラブル | C: 診断(check-autopilot スキルへ委譲) |
| その他の autopilot に関する質問・操作依頼 | D: 運用サポート |
迷ったら daemon の状態(curl -s localhost:8787/board)を先に見て、未起動なら A、
異常があれば C、正常稼働なら D と判断する。
A: 初期化 & 起動サポート
ゴール: 必要な情報を揃え、起動スクリプト tmp/autopilot_up.sh を用意し、
起動コマンドを人間に提示する(起動は人間が行う。Claude は実行しない)。
A-1. 前提チェック(揃っているものはスキップ)
command -v tmux && command -v gh && command -v claude && node --version
bin/bot-token --whoami
GH_TOKEN="$(bin/bot-token)" gh project view 4 --owner smalruby --format json | head -c 200
ls ~/.config/autopilot/settings.json 2>/dev/null
bot-token が失敗する場合、~/.config/smalruby-bot/config(APP_ID / INSTALLATION_ID /
APP_SLUG)と秘密鍵の有無を確認する。鍵は次のどちらか:
- ローカル
~/.config/smalruby-bot/private-key.pem
PRIVATE_KEY_SECRET_ID(AWS Secrets Manager。AWS_PROFILE/AWS_REGION も必要なら)
→ この場合 aws sts get-caller-identity で SSO の有効性も確認し、失効していれば
aws sso login --sso-session smalruby --use-device-code を人間に依頼する
- 揃えられない項目(App の鍵の入手など)は、何をどこから入手するかを具体的に案内して中断してよい。
A-2. 不足情報のインタビュー
AskUserQuestion で不足しているものだけ聞く(既定値を推奨選択肢の先頭に):
| 項目 | 既定 | 補足 |
|---|
| assignee(GitHub login) | git config user.name や gh から推定して提案 | enroll モデル。「全件処理(未指定)」も選択肢に |
| concurrency | 2 | 同時に走る worker 数 |
| port | 8787 | Web モニタのポート |
| interval | 300 秒 | ポーリング間隔 |
| worker への追加許可ディレクトリ | なし | 例 ~/ghq。指定があれば settings.json に反映 |
| フェーズ別 model/effort の上書き | 既定(実装/レビュー系 opus・分類系 sonnet) | こだわりがあるときのみ |
A-3. ファイル配置
- settings のカスタマイズがあれば
~/.config/autopilot/settings.json を作成/更新する
(形式は tools/autopilot/src/settings.js の DEFAULT_SETTINGS を参照。addDirs / phases のみ書けばよい)。
- 起動スクリプトを
tmp/autopilot_up.sh として生成し chmod +x する(テンプレート):
#!/usr/bin/env bash
set -euo pipefail
cd "$(git rev-parse --show-toplevel)"
SESSION=autopilot-daemon
if tmux has-session -t "$SESSION" 2>/dev/null; then
echo "既に起動しています: tmux attach -t $SESSION / http://localhost:<PORT>/"
exit 0
fi
mkdir -p tmp
tmux new-session -d -s "$SESSION" \
"node tools/autopilot/bin/autopilot daemon --assignee <LOGIN> --concurrency <N> --interval <SEC> --port <PORT> 2>&1 | tee tmp/autopilot-daemon.log"
echo "started."
echo " monitor: http://localhost:<PORT>/"
echo " log: tail -f tmp/autopilot-daemon.log (or tmux attach -t $SESSION)"
echo " stop: curl -X POST localhost:<PORT>/shutdown"
<LOGIN>(未指定なら --assignee ごと省略)/<N>/<SEC>/<PORT> はインタビュー結果で埋める。
A-4. 起動コマンドの提示(実行しない)
以下を人間に提示して A を終える:
準備ができました。次のコマンドで起動してください(このセッションで ! bash tmp/autopilot_up.sh でも可):
bash tmp/autopilot_up.sh
起動後にモニタ http://localhost:<PORT>/ を開けます。起動を確認したら教えてください。
人間が「起動した」と言ったら curl -s localhost:<PORT>/status で疎通・assignee・paused を
確認して結果を報告し、以降は D: 運用サポート に移る。
B: Issue enroll ショートカット
ユーザーのメッセージ(Issue の下書きや依頼文)の本文・末尾に enroll autopilot が
含まれていたら、その内容から autopilot に最適化した Issue を作成して enroll まで行う。
- 本文整形:
enroll autopilot の行/語は Issue 本文から取り除く。タイトルは
Conventional Commits 風(feat(scope): ... / fix(scope): ...)に整える。必要に応じて
受け入れ条件(## DoD チェックリスト)を補い、ベースブランチ指定があれば行頭に
autopilot-base: <branch>、依存があれば autopilot-after: #N を入れる。
- 作成 + enroll(すべて bot 名義
GH_TOKEN="$(bin/bot-token)"):
GH_TOKEN="$(bin/bot-token)" gh issue create --repo smalruby/smalruby3-editor \
--title "<title>" --body-file tmp/issue-body.md --assignee <LOGIN>
GH_TOKEN="$(bin/bot-token)" gh project item-add 4 --owner smalruby --url <issue-url>
- 最適な値の判断:
- 担当者 = 起動中 daemon の assignee(
curl -s localhost:8787/status の assignee。
取れなければユーザーの login を確認して assign)。未 assign のままだと誰も拾わない。
- Kind = 1 PR で終わる粒度なら
Issue、分割が要る規模なら EPIC
- Size(leaf のみ)= small / middle / large
- Status = 既定
Sprint Backlog(即着手)。設計相談から始めたい内容なら
New Item(triage → 必要ならディスカッション)を提案して確認する
- ラベルは付けない(
🤖 autopilot は daemon が付与する)
- 作成した Issue 番号・URL・設定値(Status/Kind/Size/担当)を報告する。
enroll autopilot が複数案件を含むときは、1 案件 = 1 Issue に分けてから同じ手順を繰り返す。
C: 診断(check-autopilot へ委譲)
トラブル対応は check-autopilot スキルの手順に従う(Skill ツールで check-autopilot を
起動するか、.claude/skills/check-autopilot/SKILL.md を読んでそのまま実行する)。
check autopilot #N の形なら該当 Issue の Blocked 診断を必ず行う。
D: 運用サポート(セッション常駐)
初期化後・稼働中は、このセッションで次を支援する:
- 状態の要約:
curl -s localhost:8787/board を読み、Board の状態・実行中・Blocked を
日本語で要約する(モニタ URL も添える)
- 操作(人間の依頼があったとき):
POST /tick(今すぐ確認)/ /pause / /resume /
/stop?issue=N / /inject?issue=N&phase=<p>。破壊的な stop / inject は実行前に確認する
- enroll 依頼(B)や トラブル(C)を検知したら該当モードへ
- 質問対応: 状態遷移・HITL 解除・ディレクティブ等は
docs/autopilot/ を根拠に答える
注意
- daemon の起動・再起動は人間が行う(Claude はスクリプト生成とコマンド提示まで)。
- Project の Status / AI Status を Claude が直接書き換えない(単一ライターは daemon。
例外は B の enroll 時の初期フィールド設定のみ)。
- 秘密(トークン・鍵・SSO 情報)を出力・コミットに含めない。