---
name: local-exec-handoff
description: "PlanGate のローカル実行（Codex CLI / Claude Code）で exec を再開・引き継ぐための短い指示パケットを作る。Use when: セッション断後に exec を再開したい時、別エージェント・別ツールに作業を引き継ぎたい時。"
---

# Local Exec Handoff (PlanGate / Codex 共用)

PlanGate は Claude Code / Codex CLI ともローカル実行が原則。本 skill は **ローカルでの exec 再開・ツール間引き継ぎ** に使う短いパケットを組み立てる（Codex Cloud 用は `manual-cloud-task` を参照）。

## Read First

### 参照解決順（導入先で必ずこの順に探す）

本 skill の参照は上流リポジトリ（`s977043/plangate`）基準の相対パスで書かれている。
導入先ではそのままでは解決できないものがあるため、**次の順で探索する**:

1. 導入先リポジトリの相対パス（`.claude/rules/working-context.md`）
2. 無ければ plugin root 配下（`<plugin_root>/rules/working-context.md`）
   - **`<plugin_root>` は Bash で `ls "${CLAUDE_PLUGIN_ROOT}/rules/"` を実行して得た絶対パス**。
     Read ツールは絶対パスを要求し環境変数を展開しないため、`${CLAUDE_PLUGIN_ROOT}/...`
     という文字列をそのまま Read しても必ず失敗する
   - **変数が空・未設定なら glob（`~/.claude/plugins/cache/**` 等）で推測せず 3 へ進む**
3. どちらにも無い場合は **「解決できなかった」と明示**し、推測で内容を補わない
   （packet に「正本 `<path>` を参照できなかった」旨を書く）

> **手順 3 に落ちても判定基準は緩めない**: 正本が引けない場合でも、本 skill「Rules」節
> （C-3 未承認なら exec 再開を拒否 / EH-8 Privacy 準拠 / 受け手の環境に合わせたコマンド表記）と
> 「Deliverable」の必須項目は**すべて満たす**。正本を参照できないことを理由に判定基準・
> ゲートを緩めてはならない（とくに `approvals/c3.json` の APPROVED 確認は省略不可）。

| 参照 | `install.sh --claude` 経由 | plugin（Claude marketplace）経由 | Codex 経由 |
|------|---------------------------|----------------------------------|-----------|
| `rules/*.md`（下記 3） | `.claude/rules/` に着地（解決可） | `<plugin_root>/rules/` で解決 | **未配置（解決不可 → 手順 3 へ）** |
| `bin/**`（CLI） | コピー対象外（解決不可） | バンドル対象外（解決不可） | 未配置（解決不可） |
| `scripts/**` | コピー対象外（解決不可） | `<plugin_root>/scripts/` は存在するが `install-plangate-skills.sh` のみ（`codex-guarded.sh` 等は解決不可） | 未配置（解決不可） |

`docs/working/TASK-XXXX/*`（下記 4〜7）は**配布物ではなく導入先で作成する作業成果物**なので、
導入先リポジトリ内でそのまま解決する。

### 読む順序

1. `CLAUDE.md`
2. `AGENTS.md`
3. `.claude/rules/working-context.md` → fallback `<plugin_root>/rules/working-context.md`（current-state.md / status.md 役割分担の正本）
4. `docs/working/TASK-XXXX/INDEX.md`
5. `docs/working/TASK-XXXX/current-state.md`
6. `docs/working/TASK-XXXX/status.md`（最終セクション）
7. `docs/working/TASK-XXXX/approvals/c3.json`（APPROVED 確認）

## Rules

- C-3 未承認なら exec 再開を拒否（`approvals/c3.json` が承認済みであること。**legacy は `c3_status: APPROVED`、c3-prime（`approval_kind: "c3-prime"`）は `decision: "AUTO_APPROVED"` + Plan Package 束縛検証**。判定手順の正本は `ai-dev-exec` skill「前提条件（exec 開始ゲート）」節）
- handoff packet は **次の担当者が 1 分で再開できる粒度**
- 機密情報（events.ndjson / 個人情報 / 認証情報）を含めない（EH-8 Privacy 準拠）
- ツール依存（Claude Code 固有コマンド等）を含めず、PlanGate 共通 CLI（`plangate` / `./scripts/ai-dev-workflow`）に統一する。**コマンド表記は packet の受け手の実行環境に合わせる**（上流リポジトリの cwd なら `bin/plangate`、導入先で PATH を通しているなら `plangate`、CLI が無いなら手順を文章で書く。「CLI 呼び出し」節参照）。**`ai-dev-workflow` は PATH に載るインストール経路が無い**ため、単体名で書かず必ず `./scripts/ai-dev-workflow TASK-XXXX <sub>` と書く（成立するのは**上流リポジトリの cwd のみ**。`scripts/` は配布対象外なので導入先の packet には書かない）

## Deliverable

以下を含む短い再開指示（10〜30 行程度）:

- **TASK ID**
- **現在のフェーズ**: exec / verify / handoff のどれか
- **直近の完了タスク**: todo.md 該当行
- **次にやること**: 1〜3 件の具体的な手順
- **触ってよいファイル範囲**: plan.md「Files / Components to Touch」抜粋
- **触ってはいけないファイル**: forbidden_files / Hardening Override 領域
- **再開コマンド**: 「CLI 呼び出し」節の表から**受け手の実行環境に合う行だけ**を書き写す（両方の表記を並べない）。CLI が無い環境では「`current-state.md` を読んで再開」と手順を書く

## CLI 呼び出し

> **配布と対象 project root は別の問題（#962 / #1144）**: plugin / `install.sh --claude` / Codex は
> `bin/plangate` と enforcement scripts を導入先へ配布しない。そのため CLI を使うには
> PlanGate の clone と、その `bin/plangate` への PATH または絶対パスが必要。
> ただし #1497 以降、CLI が利用できる場合の対象 project root は全コマンド共通で
> **`--project-root` → `PLANGATE_PROJECT_ROOT` → cwd の git root → CLI root fallback**
> の順に解決される。導入先の git repo で PATH 上の `plangate` を実行すれば、その導入先が
> 既定の対象になる。CLI が無いことを理由にゲートや検証を黙って省略してはならない。
>
> #1497 で downstream 契約を明示検証したのは `status` / `validate` / `approve` /
> read-only `doctor`（および work-dir を明示する `render`）。`doctor --fix` は #1144 の
> enforcement 配布が解決するまで downstream では **rc=2 / no-write** で fail-closed。
> script-relative helper に委譲するコマンドは、root resolver が存在しても自動的に
> downstream 対応になるとは扱わず、下表・フォールバックの個別契約に従う。

| 用途 | 上流リポジトリの cwd | 導入先 + PATH に `plangate` あり | 導入先 + PATH に無い（**既定**） |
|------|---------------------|----------------------------------|--------------------------------|
| current-state 表示 | `bin/plangate resume TASK-XXXX` | `plangate resume TASK-XXXX` | `current-state.md` を直接読む |
| フェーズ確認 | `bin/plangate status TASK-XXXX` | `plangate status TASK-XXXX` | `status.md` / `INDEX.md` を直接読む |
| exec 継続 | `bin/plangate exec TASK-XXXX` | `plangate exec TASK-XXXX`（target repo cwd 推奨。agent runner固有契約に従う） | 手動で TDD 実行 |
| 検証 | `bin/plangate validate TASK-XXXX` | `plangate validate TASK-XXXX` | `ai-dev-exec` skill の sha256 突合フォールバック |

> **project root 契約**: `resume` / `status` / `exec` / `validate` は selected project root を参照する。
> CLIを別cwdから使う場合は `--project-root <dir>` を明示する。exec の agent runner が相対パスを
> 使う可能性があるため、実行は target repo の cwd を推奨する。

packet 自体は手動構築。packet 自体は手動構築。専用 CLI は環境を問わず未提供（CLI がある環境では `resume` + `status` の出力を整形し、無い環境では `current-state.md` / `status.md` を読んで整形する）。

## ツール別読み替え

- **Codex CLI**: `.codex/` 配下にパケットを置く必要なし。`plangate resume` 出力（無ければ `current-state.md`）と本 skill Deliverable で十分。**上流リポジトリで作業する場合の exec 再開は `scripts/codex-guarded.sh --task TASK-XXXX exec --full-auto`** を推奨（pre/post-flight で plan_hash 整合・settings タスクロック検証）。~~session 中の物理 hook は `.codex/hooks.json` で EH-1/2/3/6/9 が自動発火する (PR #347)。~~ **← 誤り。2026-08-13 の実測で `.codex/hooks.json` は parse 拒否され hook が 1 件も登録されていないことが判明した（EH-1/2/3/6/9 は未発火）。session 中の物理 block は無いものとして扱うこと。****`scripts/codex-guarded.sh` と `.codex/hooks.json` はどちらも配布対象外**なので、Codex への導入経路（skills のみ配置）ではこれらは存在せず、ゲートは packet 内の手順で人手維持する。
- **Claude Code**: `/working-context` skill と組み合わせて利用。上流リポジトリでは `PreToolUse:Write/Edit` hook が EH-3/EH-6/EH-9 を強制するため wrapper 不要。**導入先では hook が配線されているとは限らない**ため、packet に「plan_hash 突合を exec 開始前に自分で実行する」旨を明記する。
