restartlisted
Install: claude install-skill devbasex/ai-plugins
# 再起動して続きから始める
**中継(`relay.py`)の下では、この応答の最後に出す `ndf-next` のブロック 1 つで、claude の
終了・プラグインの更新・起動し直し・再開用のコマンドの入力までが人の入力なしで進む。** 経路は
区間の切れ目と同じである([relay.md](../development-workflow/references/relay.md))。
例: 中継の下で `/ndf:restart` を打つ(`/goal /ndf:development-workflow #928` の会話)。
1. `relay.py notice` の 1 行目で中継の下と判定し、2 行目(「約 5 秒後に自動で新しい会話へ切り替わる。…」)を示して、最後に次のブロックを出して応答を終える
````text
```ndf-next
/goal /ndf:development-workflow #928
```
````
2. 中継が静まりを待ってから `/exit` を入力し、プラグインを更新して、ブロックの中身を最初の入力にした claude を起動する
## 引数
引数は再開用のコマンドである(複数行でよい)。無ければ下の「再開用のコマンドの決め方」で作る。
**引数で渡された中身は利用者の入力として扱い、書き換えない。**
## 手順
### 1. 中継の下かを判定する
**ブロックを出す前に、必ず次の Bash を 1 回実行する。** 判定を飛ばしてブロックを出さない
(Claude Code 2.1.281 の haiku で、判定を飛ばしてブロックだけを出した例がある)。
```bash
PLUGIN_ROOT='${CLAUDE_PLUGIN_ROOT}'
case "$PLUGIN_ROOT" in '$'*) PLUGIN_ROOT= ;; esac
[ -n "$PLUGIN_ROOT" ] && python3 "$PLUGIN_ROOT/scripts/relay.py" notice || echo outside
```
1 行目が判定(`relay` / `outside`)、2 行目が告知の 1 文である。`NDF_RELAY_DIR` があるだけでは
決めない。中継が動いていて、この claude がその直接の子のときだけ 1 行目が `relay` になる。
1 行しか出なかったとき(`relay.py` を呼べなかった)は中継の外として扱う。
### 2. 再開用のコマンドを決める(引数が無いとき)
上から最初に当たるものを使う。
| # | 会話の状態 | 再開用のコマンド |
| ---: | --- | --- |
| 1 | `/goal` の目標がある | その目標の入力をそのまま(`/goal /ndf:development-workflow #928` など)。引継ぎ文書を名指ししていれば「<文書> の続きから」を足す |
| 2 | 課題・作業ツリー・Pull Request が会話にある | **定型の 1 文だけ:** 「<課題番号・作業ツリーのパス・Pull Request の URL> の続きから始める。状態は課題の本文の `## 進行` と Pull Request を読む」。山括弧の中に入れてよいのは番号・パス・URL だけ |
| 3 | どれも無い | 「再開用のコマンドを引数で渡す(