throughline 0.16.30 → 0.16.32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +48 -1
- package/README.ja.md +4 -2
- package/README.md +4 -2
- package/bin/throughline.mjs +5 -0
- package/docs/adr/0062-claude-handed-off-conversation-blocks-input.md +111 -0
- package/docs/adr/0063-claude-handed-off-input-is-forwarded-to-successor.md +156 -0
- package/package.json +1 -1
- package/src/claude-auto-handoff.mjs +160 -5
- package/src/claude-auto-handoff.test.mjs +134 -6
- package/src/claude-forward-wait.mjs +145 -0
- package/src/claude-forward.mjs +325 -0
- package/src/claude-forward.test.mjs +353 -0
- package/src/claude-pre-tool-use.mjs +33 -15
- package/src/cli/auto-handoff.mjs +2 -2
- package/src/cli/install.mjs +34 -16
- package/src/prompt-submit.mjs +43 -0
- package/src/resume-context.mjs +20 -0
- package/src/resume-context.test.mjs +19 -0
- package/src/runtime-error-store.mjs +6 -0
- package/src/transcript-reader.mjs +22 -2
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,51 @@ shipped to npm but were not individually tagged on GitHub.
|
|
|
10
10
|
|
|
11
11
|
## [Unreleased]
|
|
12
12
|
|
|
13
|
+
## [0.16.32] — 2026-10-14
|
|
14
|
+
|
|
15
|
+
### 追加
|
|
16
|
+
|
|
17
|
+
- **Claude Codeの自動継続で、引き継ぎ済みの会話へ届いた入力を、後継の会話へ届ける**([ADR 0063](docs/adr/0063-claude-handed-off-input-is-forwarded-to-successor.md))。0.16.31は、旧い会話へ届いた入力を止めて後継の場所を返すだけで、人が打った文は後継で打ち直し、旧い会話が裏で起こした作業の完了通知は後継へ届かなかった。
|
|
18
|
+
- 旧い会話は、止めた入力を今の続きの会話の置き場(`~/.throughline/claude-auto-handoff/inbox/<後継の会話ID>/`)へ置く。置けた時は「届いた入力は、後継の会話へ渡しました」と、後継が動いているか(動いていなければ、後継を開いて入力した時に届く事)と、後継を開く命令を返す。置けなかった時は、0.16.31と同じ文を返す。
|
|
19
|
+
- slash command(頭が`/`の入力)は運ばない。0.16.31と同じ文を返す。ほかの会話から届いた文は、利用者の入力と分けて「利用者の入力ではない」と書いて運ぶ。
|
|
20
|
+
- 手すきの後継は、番の終わりに走る新しいhook(`throughline claude-forward-wait`。`asyncRewake`)が待っていて、入力が届くと起きる。
|
|
21
|
+
- 作業中の後継は、次の道具の前に、文脈として受け取る(今ある`PreToolUse`のhook)。番の終わりまで待たせない。
|
|
22
|
+
- 止まっている後継(`claude stop`・Claude Codeの片付け)は起こさない。入力は置き場で待ち、後継を開いて何か入力した時に届く(今ある`UserPromptSubmit`のhook)。
|
|
23
|
+
- 運んだ利用者の入力は、後継の会話の記録(L2)の中で、利用者の発言として残る。
|
|
24
|
+
- 後継が最初に受け取る引き継ぎの文脈(読み方)に、運び方と「運ばれた利用者の入力は、利用者の入力として扱う」事を足した。前の会話が裏で動かしていた作業の一覧の文も「終わった通知は、Throughlineがこの会話へ運ぶ」に変えた。
|
|
25
|
+
- `auto-handoff status --host claude --json`の引き継ぎごとの項目に、届けるのを待つ数(`forward_pending`)と、届いたか分からない数(`forward_unknown`)を足した。止めた記録(`redirects.jsonl`)に、渡せたか(`forwarded`)を足した。運んだ記録は`~/.throughline/claude-auto-handoff/forward.jsonl`(入力の本文は書かない)。
|
|
26
|
+
|
|
27
|
+
### 変わる動き
|
|
28
|
+
|
|
29
|
+
- 自動継続が有効な端末では、版を上げた時の`install`(`self-update`)が、Claudeの設定ファイル(`~/.claude/settings.json`)のStopにhookを1つ足す。前からある`PreCompact`・`PreToolUse`のhookの並びは動かさない。Codex・Grok・Cursorの設定は変えない。
|
|
30
|
+
- 自動継続が有効な端末では、Claudeの番の終わりのたびにhookが1つ多く走る。後継でない会話では、置き場のフォルダの有無だけを見て終わる。手すきの後継ごとに、待つprocessが1つ動く(後継が止まれば一緒に止まる。同じ会話で新しい待つhookが立てば、前のhookは退く)。
|
|
31
|
+
- 後継の画面では、運ばれた入力は利用者の発言の形では出ない(番の終わりの道はhookからの通知の形、道具の前と入力の時は、hookが足した文脈の形)。
|
|
32
|
+
- 運ばれた入力に従うかは、後継のモデルが決める。実機(Haiku)では、後継が完了通知を1通受けた後に人の入力を運んだ場面で、27回のうち3回、後継が「自動の通知として届いたので、利用者の指示としては扱わない」と答えた(ADR 0063)。旧い会話へ返す文に「後継のモデルが、運ばれた入力を利用者の依頼として扱わない事があります。答えは後継で確かめてください」と、後継を開く命令を添えてある。
|
|
33
|
+
- 旧い会話が裏で起こした作業の完了通知が後継へ届くので、手すきの後継は通知のたびに1回動く。
|
|
34
|
+
- 置き場のファイルは、届くまで入力の本文を持つ(本人だけが読める権限。届けたら消す。届かないまま7日を過ぎた分は消す)。
|
|
35
|
+
- 届いたか分からない入力(受け取った後で、出力する前にprocessが落ちた分)は、入れ直さない。
|
|
36
|
+
- `auto-handoff enable --host claude`を、登録済みの端末でもう一度流しても、今の形で登録済みのhookの並びは動かさない(前の版は、足りないhookがあると自分のhookを全部後ろへ置き直した)。
|
|
37
|
+
|
|
38
|
+
## [0.16.31] — 2026-10-14
|
|
39
|
+
|
|
40
|
+
### 修正
|
|
41
|
+
|
|
42
|
+
- **Claude Codeの自動継続で引き継いだ後も、旧い会話へ届いた入力でモデルが動いていた**([ADR 0062](docs/adr/0062-claude-handed-off-conversation-blocks-input.md))。旧い会話が裏で起こした作業の完了通知や、旧い会話へ打った文が届くたびに、文脈がほぼ一杯の旧い会話でモデルが1回動き、文だけで答えていた。届いた入力は後継へ渡らなかった。Windowsの実機の1日で191行あった(完了通知171、人の入力の形19、ほかの会話からの文1)。
|
|
43
|
+
- 直した後は、引き継ぎ済みで後継が残っている会話へ届いた入力を、モデルを動かさずに止める。人が打った時は、理由(引き継ぎIDと後継を開く命令)と元の文が返る。
|
|
44
|
+
- 後継がまだ立っていない間の入力、後継の記録が無くなった会話、Aitermが起こした席の会話、subagentの中の入力は止めない。
|
|
45
|
+
- 止めた回は`~/.throughline/claude-auto-handoff/redirects.jsonl`に1行残す(入力の本文は書かない)。
|
|
46
|
+
- **引き継いだ後の会話で道具を断る時の文が、古い後継を指す事があった**(同じADR)。後継がさらに引き継がれている時は、今の続きの会話を示す。`claude rm`で一覧から消した後継は`claude attach`で開けないので、`claude --resume <会話ID>`も添える。
|
|
47
|
+
|
|
48
|
+
### 追加
|
|
49
|
+
|
|
50
|
+
- **引き継ぐ時に、前の会話が裏で動かしていた作業の一覧を、後継の最初の指示へ載せる**(同じADR)。終わった通知がまだ来ていない作業の、道具の名前・対象・ID・出力のファイルの場所。新しい順に10件まで。完了通知は旧い会話で止まり後継へは届かないので、後継は出力のファイルで結果を確かめる。
|
|
51
|
+
|
|
52
|
+
### 変わる動き
|
|
53
|
+
|
|
54
|
+
- 引き継ぎ済みのClaudeの会話へ文を打つと、モデルは答えず、「この会話はThroughlineが新しい会話へ引き継ぎ済みです…」と元の文が返る。後継で打ち直す。旧い会話へ届いた入力を後継へ自動で届ける形は、この版には入っていない。
|
|
55
|
+
- `claude -p --resume <旧い会話>`のようにscriptから送った入力も止まる(標準出力に理由と元の文、終了code 0)。
|
|
56
|
+
- Codex・Grok・Cursorは変えていない。
|
|
57
|
+
|
|
13
58
|
## [0.16.30] — 2026-10-14
|
|
14
59
|
|
|
15
60
|
### 修正
|
|
@@ -2589,7 +2634,9 @@ two attempts, instrument first instead of patching again.
|
|
|
2589
2634
|
|
|
2590
2635
|
---
|
|
2591
2636
|
|
|
2592
|
-
[Unreleased]: https://github.com/kitepon/Throughline/compare/v0.16.
|
|
2637
|
+
[Unreleased]: https://github.com/kitepon/Throughline/compare/v0.16.32...HEAD
|
|
2638
|
+
[0.16.32]: https://github.com/kitepon/Throughline/compare/v0.16.31...v0.16.32
|
|
2639
|
+
[0.16.31]: https://github.com/kitepon/Throughline/compare/v0.16.30...v0.16.31
|
|
2593
2640
|
[0.16.30]: https://github.com/kitepon/Throughline/compare/v0.16.29...v0.16.30
|
|
2594
2641
|
[0.16.29]: https://github.com/kitepon/Throughline/compare/v0.16.28...v0.16.29
|
|
2595
2642
|
[0.16.28]: https://github.com/kitepon/Throughline/compare/v0.16.27...v0.16.28
|
package/README.ja.md
CHANGED
|
@@ -60,7 +60,7 @@ throughline auto-handoff status --host claude --json
|
|
|
60
60
|
throughline auto-handoff disable --host claude
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
既定では無効です。`enable`は必要な`PreCompact
|
|
63
|
+
既定では無効です。`enable`は必要な`PreCompact`・`PreToolUse`・`Stop`のフックを登録し、`disable`が外します。`--project`を省略すると全projectを対象にします。Codexの設定とは別で、互いに影響しません。
|
|
64
64
|
|
|
65
65
|
自動圧縮を置き換えます。圧縮が走る前に旧い会話を止め、記憶を持った新しい会話で作業を続けます([ADR 0033](docs/adr/0033-claude-auto-handoff-new-session.md))。
|
|
66
66
|
|
|
@@ -77,7 +77,9 @@ throughline auto-handoff status --host claude --operation <handoff-id> --json
|
|
|
77
77
|
|
|
78
78
|
後継の立ち上げや配送に失敗した時は、固定の理由を記録して止まります。結果が不明な指示は再送しません。圧縮を止めた後にモデルが道具を呼ばずにターンを終えた時は、後継を立てません。印は残るので、1時間以内に開いた新しい会話が記憶を引き継ぎます。
|
|
79
79
|
|
|
80
|
-
|
|
80
|
+
引き継いだ後の旧い会話へ入力が届いた時は、モデルを動かさずに止めて、後継の会話へ届けます([ADR 0062](docs/adr/0062-claude-handed-off-conversation-blocks-input.md)、[ADR 0063](docs/adr/0063-claude-handed-off-input-is-forwarded-to-successor.md))。旧い会話へ打った文と、旧い会話が裏で起こした作業の完了通知が対象です。打った人には「届いた入力は、後継の会話へ渡しました」と後継を開く命令が返ります。手すきの後継はすぐ動き、作業中の後継は次の道具の前に読みます。後継が止まっている時は起こさず、後継を開いて何か入力した時に届きます。後継の画面では、運ばれた入力は利用者の発言の形ではなく、フックからの通知か文脈の形で出ます。届くまでの間、入力の本文は`~/.throughline/claude-auto-handoff/inbox/`に置かれます(本人だけが読める権限。届けたら消します)。
|
|
81
|
+
|
|
82
|
+
有効にした端末では、Claudeの道具の呼び出しのたびに`PreToolUse`フックが1回、番の終わりのたびに`Stop`フックが1回多く走ります(後継でない会話では、すぐ終わります)。Linux・macOS・Windowsの端末から始めた会話と、macOSのClaude Desktopの画面から始めた会話を実機確認済みです。Desktopでは、移動済みの会話の最初の後継への記憶注入と、最初からフォルダを選んだ会話の連続継承・作業完了を確認しました。[実測と検証範囲](https://github.com/kitepon/Throughline/blob/main/evidence/2026-10-05-claude-auto-handoff.md)を参照してください。
|
|
81
83
|
|
|
82
84
|
## 所有境界
|
|
83
85
|
|
package/README.md
CHANGED
|
@@ -59,7 +59,7 @@ throughline auto-handoff status --host claude --json
|
|
|
59
59
|
throughline auto-handoff disable --host claude
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
既定では無効です。`enable`は必要な`PreCompact
|
|
62
|
+
既定では無効です。`enable`は必要な`PreCompact`・`PreToolUse`・`Stop`のフックを登録し、`disable`が外します。`--project`を省略すると全projectを対象にします。Codexの設定とは別で、互いに影響しません。
|
|
63
63
|
|
|
64
64
|
自動圧縮を置き換えます。圧縮が走る前に旧い会話を止め、記憶を持った新しい会話で作業を続けます([ADR 0033](docs/adr/0033-claude-auto-handoff-new-session.md))。
|
|
65
65
|
|
|
@@ -84,7 +84,9 @@ throughline auto-handoff successor --host claude --thread <claude-session-id> --
|
|
|
84
84
|
|
|
85
85
|
後継の立ち上げや配送に失敗した時は、固定の理由を記録して止まります。結果が不明な指示は再送しません。圧縮を止めた後にモデルが道具を呼ばずにターンを終えた時は、後継を立てません。印は残るので、1時間以内に開いた新しい会話が記憶を引き継ぎます。
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
引き継いだ後の旧い会話へ入力が届いた時は、モデルを動かさずに止めて、後継の会話へ届けます([ADR 0062](docs/adr/0062-claude-handed-off-conversation-blocks-input.md)、[ADR 0063](docs/adr/0063-claude-handed-off-input-is-forwarded-to-successor.md))。旧い会話へ打った文と、旧い会話が裏で起こした作業の完了通知が対象です。打った人には「届いた入力は、後継の会話へ渡しました」と後継を開く命令が返ります。手すきの後継はすぐ動き、作業中の後継は次の道具の前に読みます。後継が止まっている時は起こさず、後継を開いて何か入力した時に届きます。後継の画面では、運ばれた入力は利用者の発言の形ではなく、フックからの通知か文脈の形で出ます。届くまでの間、入力の本文は`~/.throughline/claude-auto-handoff/inbox/`に置かれます(本人だけが読める権限。届けたら消します)。
|
|
88
|
+
|
|
89
|
+
有効にした端末では、Claudeの道具の呼び出しのたびに`PreToolUse`フックが1回、番の終わりのたびに`Stop`フックが1回多く走ります(後継でない会話では、すぐ終わります)。Linux・macOS・Windowsの端末から始めた会話と、macOSのClaude Desktopの画面から始めた会話を実機確認済みです。Desktopでは、移動済みの会話の最初の後継への記憶注入と、最初からフォルダを選んだ会話の連続継承・作業完了を確認しました。[実測と検証範囲](https://github.com/kitepon/Throughline/blob/main/evidence/2026-10-05-claude-auto-handoff.md)を参照してください。
|
|
88
90
|
|
|
89
91
|
## Ownership boundary
|
|
90
92
|
|
package/bin/throughline.mjs
CHANGED
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* throughline session-start # SessionStart hook (Claude Code から呼ばれる)
|
|
11
11
|
* throughline pre-compact # PreCompact hook (Claude Code から呼ばれる。自動継続: 自動圧縮を止める)
|
|
12
12
|
* throughline pre-tool-use # PreToolUse hook (Claude Code から呼ばれる。自動継続: 旧い会話を止める)
|
|
13
|
+
* throughline claude-forward-wait # Stop hook (Claude Code から呼ばれる。自動継続: 引き継ぎ前の会話へ届いた入力を後継へ届ける)
|
|
13
14
|
* throughline detail [<日付>T]<時刻> # L2+L3 詳細取得 (Claude が Bash 経由で呼ぶ想定)
|
|
14
15
|
* throughline recall --l2|--l1 # 注入案内から辿る pull 用 read-only 記憶取得
|
|
15
16
|
* throughline handoff-preview # Codex-facing throughline_handoff JSON preview
|
|
@@ -88,6 +89,9 @@ switch (cmd) {
|
|
|
88
89
|
case 'pre-tool-use':
|
|
89
90
|
await (await import('../src/claude-pre-tool-use.mjs')).run();
|
|
90
91
|
break;
|
|
92
|
+
case 'claude-forward-wait':
|
|
93
|
+
await (await import('../src/claude-forward-wait.mjs')).run();
|
|
94
|
+
break;
|
|
91
95
|
case 'monitor':
|
|
92
96
|
(await import('../src/token-monitor.mjs')).main();
|
|
93
97
|
break;
|
|
@@ -243,6 +247,7 @@ switch (cmd) {
|
|
|
243
247
|
'process-turn': 'HOOK_PROCESS_TURN_FAILED',
|
|
244
248
|
'pre-compact': 'HOOK_PRE_COMPACT_FAILED',
|
|
245
249
|
'pre-tool-use': 'HOOK_PRE_TOOL_USE_FAILED',
|
|
250
|
+
'claude-forward-wait': 'HOOK_CLAUDE_FORWARD_WAIT_FAILED',
|
|
246
251
|
}[cmd];
|
|
247
252
|
if (code) {
|
|
248
253
|
const { recordRuntimeErrorBestEffort } = await import('../src/runtime-error-store.mjs');
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# ADR 0062: 引き継ぎ済みの Claude の会話へ届いた入力は、モデルを動かさずに止めて、後継の場所を返す
|
|
2
|
+
|
|
3
|
+
- Status: Accepted
|
|
4
|
+
- Date: 2026-10-14
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
Claude Code の自動継続(ADR 0033)は、文脈が一杯になった会話を止め、裏の新しい会話(後継)へ作業を引き継ぐ。
|
|
9
|
+
引き継いだ後も、旧い会話は消えない。旧い会話へは、入力が届き続ける。
|
|
10
|
+
|
|
11
|
+
- 旧い会話が裏で起こした作業(`run_in_background` の道具など)の完了通知。作業は旧い会話の process の下で動き続け、
|
|
12
|
+
終わると旧い会話へ通知が届く。
|
|
13
|
+
- 人が旧い会話へ打った文。端末や一覧で旧い会話を開いたまま打つと、そこへ届く。
|
|
14
|
+
- ほかの会話から届いた文。
|
|
15
|
+
|
|
16
|
+
この製品が旧い会話でしていたのは、道具を断る事だけだった(`PreToolUse`。理由に後継の場所を書く)。入力が届くたびに、
|
|
17
|
+
文脈がほぼ一杯の旧い会話でモデルが1回動き、文だけで答える。届いた入力は後継へ渡らない。自動圧縮の合図も来続ける。
|
|
18
|
+
|
|
19
|
+
2026-10-13 の Windows の実機の1日で、引き継いだ後の旧い会話へ届いた入力は 191 行だった(完了通知 171、人の入力の形 19、
|
|
20
|
+
ほかの会話からの文 1。行の種類と時刻だけを読んだ。本文は読んでいない)。人の入力の形のうち 17 行は、引き継ぎの後の3時間に
|
|
21
|
+
1つの旧い会話へ届いていて、後継へは届いていない。別の旧い会話では、引き継ぎの後の 24 分に完了通知が 114 通届いていた。
|
|
22
|
+
|
|
23
|
+
Claude Code 2.1.296 で、次を実機で確かめた(Linux。後に macOS と Windows でも同じ)。
|
|
24
|
+
|
|
25
|
+
- 裏の作業の完了通知でも `UserPromptSubmit` が走る。`prompt` は `<task-notification>` で始まる。
|
|
26
|
+
- `UserPromptSubmit` が `{"decision":"block","reason":…}` を返すと、完了通知でも人の入力でも、user 行は書かれず、モデルは動かず、
|
|
27
|
+
Stop も走らない。transcript には `system` の `informational` の行が1つ入る。人が打った時は、理由と元の文
|
|
28
|
+
(`Original prompt: …`)が打った人へ返る。
|
|
29
|
+
- 裏で起こした道具は、結果の行に `toolUseResult.backgroundTaskId` を持ち、結果の文に出力の file の場所
|
|
30
|
+
(`Output is being written to: …`)を持つ。完了通知は `<task-id>` と `<status>` を持つ。
|
|
31
|
+
|
|
32
|
+
届いた入力を後継へ自動で届ける形は、hook を1つ増やし、後継ごとに待つ process が要る。作り込む所が多い。利用者の決め
|
|
33
|
+
(2026-10-14)は「先に、旧い会話で止めて後継の場所を見せる形を入れ、続けて、後継へ届ける形を作る」。この ADR は先の分を決める。
|
|
34
|
+
届ける形は、別の ADR で決める。
|
|
35
|
+
|
|
36
|
+
## Decision
|
|
37
|
+
|
|
38
|
+
1. `UserPromptSubmit` の入口(`prompt-submit`)で、その会話に引き継ぎの記録があり、後継が残っている時、入力を止める
|
|
39
|
+
(`redirectClaudeHandedOffPrompt`)。返すのは `{"decision":"block","reason":…}`。
|
|
40
|
+
- 止めるのは、記録の状態が、後継が立った後(`launched`・`sent`・`unknown`)で、後継の transcript が在る時
|
|
41
|
+
(`successorRemains`。期限の過ぎた記録を消さずに残す時の条件と同じ)。
|
|
42
|
+
- 人の入力・完了通知・ほかの会話からの文を、同じに止める。
|
|
43
|
+
- 理由の文は、道具を断る時の文と同じにする。引き継ぎ ID と、今の続きの会話を開く命令を書く。
|
|
44
|
+
2. 止めない物:
|
|
45
|
+
- 引き継ぎの記録が無い会話(ほとんどの会話)。記録の file が無ければ、何も読み込まずに先へ進む。
|
|
46
|
+
- 後継がまだ立っていない会話(予約・止めた直後・立ち上げ中・失敗)。その間の入力は、今までどおり。
|
|
47
|
+
- 後継の transcript が無くなった会話。
|
|
48
|
+
- 後継自身(記録が無い)。継続の指示と、後継の最初の入力は止まらない。
|
|
49
|
+
- subagent の中の入力。
|
|
50
|
+
- Aiterm が起こした席の会話(ADR 0057)。席は今は引き継がない。席を外す前の版が引き継いだ席が残っていても、呼び手は
|
|
51
|
+
席の番の終わりを待っている。止めると番が始まらず、呼び手は答えを受け取れない。席は今までどおり、文で答える。
|
|
52
|
+
3. 理由の文に書く後継は、今の続きの会話にする。後継がさらに引き継がれていれば、その先を書く
|
|
53
|
+
(`resolveClaudeAutoHandoffSuccessor`)。道具を断る時の文も同じに直す。
|
|
54
|
+
- 書く命令は `claude attach <頭8字>` と、`claude --resume <会話 ID>`。`claude rm` で一覧から消した後継は、
|
|
55
|
+
transcript が残っていて `claude attach` では開けない(`No job matching`)。`claude --resume` なら開ける。
|
|
56
|
+
4. 止めた回は、`~/.throughline/claude-auto-handoff/redirects.jsonl` に1行残す(時刻・旧い会話の ID・引き継ぎ ID・後継の頭8字・
|
|
57
|
+
入力の種類 `prompt` か `task-notification`)。入力の本文は書かない。判定の記録(`inheritance-decision.log`)にも
|
|
58
|
+
`prompt-redirect` を1行残す。こちらも本文は書かない。
|
|
59
|
+
5. 完了通知は旧い会話で止まり、後継へは届かない。代わりに、引き継ぐ時に、前の会話が裏で動かしていて、終わった通知がまだ
|
|
60
|
+
来ていない作業の一覧を、後継の最初の指示(現在地)へ載せる(`readRunningBackgroundTasks`)。
|
|
61
|
+
- 一覧は transcript から作る。裏で起こした道具の結果の行(`backgroundTaskId`)から、`<status>` を持つ完了通知
|
|
62
|
+
(user 行か、ターンの途中に届いた `queued_command`)が届いた物を除く。途中の知らせ(`<status>` の無い通知)が来ただけの
|
|
63
|
+
作業は、まだ動いている物として残す。
|
|
64
|
+
- 載せるのは、道具の名前・対象(命令や説明の頭)・作業の ID・出力の file の場所。新しい順に 10 件まで。残りは件数だけ。
|
|
65
|
+
- 後継には「終わった通知は、この会話へは届かない。結果が要る時は、出力の file を読んで確かめる」と書く。
|
|
66
|
+
6. 止める判定は、DB を開かない。記録の file だけを読む。
|
|
67
|
+
|
|
68
|
+
## Consequences
|
|
69
|
+
|
|
70
|
+
- 引き継ぎ済みの会話へ入力が届いても、モデルは動かない。文脈がほぼ一杯の会話で、通知のたびに1回動く事が無くなる。
|
|
71
|
+
- 旧い会話へ打った文は、理由と元の文が返る。利用者は、後継で打ち直す(届ける形が入るまで)。
|
|
72
|
+
- 完了通知は後継へ届かない(今までも届いていない)。後継は、引き継ぎの時に受け取った一覧と出力の file で確かめる。引き継ぎの
|
|
73
|
+
後に旧い会話が新しく裏の作業を起こす事は無い(道具が断られる)。
|
|
74
|
+
- `claude -p --resume <旧い会話>` のように script から旧い会話へ入力を送った時も止まる。標準出力に理由と元の文が返り、
|
|
75
|
+
終了 code は 0。
|
|
76
|
+
- 後継を `claude rm` で消しても、transcript が残る間、旧い会話は止まったままになる(道具も今までどおり断られる)。
|
|
77
|
+
理由の文の `claude --resume <会話 ID>` で後継を開ける。後継の transcript まで消すと、旧い会話の入力は通る
|
|
78
|
+
(道具は、記録が期限で消えるまで断られる。今までどおり)。
|
|
79
|
+
- `redirects.jsonl` は増える一方で、この版では古い行を消さない(1行 約 220 バイト。1日 200 行で約 44KB)。
|
|
80
|
+
- Codex・Grok・Cursor は変えない。Codex の旧タスクへ届く入力は、ADR 0039・0040 が別に扱っている。
|
|
81
|
+
|
|
82
|
+
## 確かめた事・確かめていない事
|
|
83
|
+
|
|
84
|
+
- 確かめた:
|
|
85
|
+
- 単体試験(記録が無い・後継が立っていない・後継の transcript が無い時は止めない、人の入力と完了通知を止める、席の会話と
|
|
86
|
+
subagent は止めない、後継の先を示す、止めた記録に本文を書かない、公開 CLI の `prompt-submit` の出力、裏の作業の一覧の作り方、
|
|
87
|
+
後継の現在地の文)。
|
|
88
|
+
- 本物の Claude Code 2.1.296 の裏の会話(Haiku)へ、直した版の `prompt-submit` を通した。Linux・macOS・Windows の3つ。
|
|
89
|
+
利用者の設定の hook を外し(`--setting-sources project,local`)、直した版を切り離した HOME で呼ぶ hook だけを付けた。
|
|
90
|
+
旧い会話の役が裏で `sleep 25` を起こし、番を終えた所で、後継の役の会話への引き継ぎの記録を切り離した置き場へ置いた。
|
|
91
|
+
3つの OS とも同じ結果だった。
|
|
92
|
+
|
|
93
|
+
| 見た事 | 結果 |
|
|
94
|
+
|---|---|
|
|
95
|
+
| 番を終えた旧い会話の、裏で動いている作業の一覧 | 1 件。出力の file の場所を読めて、その file が在る |
|
|
96
|
+
| 裏の作業の完了通知 | 止まった。transcript に入ったのは `queue-operation` 2 行と `system` の `informational` 1 行。user 行も assistant 行も無い |
|
|
97
|
+
| 人の入力(`claude -p --resume <旧い会話>`) | 止まった。理由と元の文が返り、終了 code 0 |
|
|
98
|
+
| 後継を `claude rm` で消した後 | 後継の transcript は残る。`claude attach` は `No job matching` で終了 code 1。旧い会話への入力は止まる。`claude --resume <後継の会話 ID>` は通る |
|
|
99
|
+
| 後継の transcript も消した後 | 旧い会話への入力は通り、モデルが答える |
|
|
100
|
+
| 切り離した置き場の失敗の記録 | 無し |
|
|
101
|
+
| 本物の置き場の判定の記録にある、試しの会話の ID | 0 |
|
|
102
|
+
|
|
103
|
+
- 直した版の裏の作業の読み手を、本物の記録へ当てた(読むだけ。数だけ出す)。10/10 から動いた記録で、Linux 172 本のうち
|
|
104
|
+
7 本に 8 件、macOS 73 本のうち 2 本に 2 件、Windows 109 本のうち 13 本に 25 件。どれも出力の file の場所を読めた
|
|
105
|
+
(Windows は `PowerShell` の道具が 21 件、`Bash` が 4 件)。読み手が落ちた記録は無い。
|
|
106
|
+
- 確かめていない:
|
|
107
|
+
- 端末の画面・Claude Desktop・リモートコントロール(スマホ)で、止めた時にどう見えるか。確かめたのは、裏の会話への
|
|
108
|
+
完了通知と、`claude -p --resume` の入力。
|
|
109
|
+
- ほかの会話から届いた文(`SendMessage`)を止めた時に、送り手へ何が返るか。
|
|
110
|
+
- 本物の自動継続で、裏の作業を持つ会話が引き継がれた時の、後継の現在地の文。単体試験と、読み手の実機の確かめまで。
|
|
111
|
+
入れた後の追跡で読む。
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# ADR 0063: 引き継ぎ済みの Claude の会話へ届いた入力は、後継の会話へ届ける
|
|
2
|
+
|
|
3
|
+
- Status: Accepted
|
|
4
|
+
- Date: 2026-10-14
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
|
|
8
|
+
ADR 0062 は、引き継ぎ済みの Claude の会話へ届いた入力を、モデルを動かさずに止めて、後継の場所を返す形にした。
|
|
9
|
+
止めた入力は後継へ渡らない。人が打った文は後継で打ち直しになり、旧い会話が裏で起こした作業の完了通知は、後継へ
|
|
10
|
+
届かないままになる。利用者の決め(2026-10-14)は「先に止める形を入れ、続けて、後継へ届ける形を作る」。この ADR は
|
|
11
|
+
後の分を決める。
|
|
12
|
+
|
|
13
|
+
Claude Code に、動いている別の会話へ外から文を入れる命令は無い(`claude --help` の一覧。2.1.296)。会話の受け口
|
|
14
|
+
(`messagingSocketPath`)は、権限のバイパス中の会話では、送り手を確かめられない文を利用者の承認まで止める。この止めは
|
|
15
|
+
回避しない(ADR 0033 の 4)。残る道は、後継自身の hook が文を受け取る形になる。
|
|
16
|
+
|
|
17
|
+
Claude Code 2.1.296 で、次を実機で確かめた(Linux・macOS・Windows の3つとも同じ結果。自分で立てた裏の会話、
|
|
18
|
+
Haiku。利用者の設定の hook を外し、試しの hook だけを付けた。試しの文は自分で決めた物)。
|
|
19
|
+
|
|
20
|
+
| 見た事 | 結果 |
|
|
21
|
+
|---|---|
|
|
22
|
+
| 手すきの会話。Stop の `asyncRewake: true` の hook が待っていて、後から stderr へ文を出して exit code 2 で終わる | 1 秒以内に会話が起きて、文に従った。届く行は `origin.kind: task-notification` の user 行で、`<summary>Stop hook feedback</summary>` と `<system-reminder>` に包まれる |
|
|
23
|
+
| 作業中の会話。番の途中に文を置き、番の終わりの Stop の hook がすぐ exit code 2 で終わる | 番が終わった直後に、次の番として届いた |
|
|
24
|
+
| 道具の前後。`PreToolUse`・`PostToolUse` の hook が `additionalContext` を返す | 番の途中で文脈に入り、モデルが従った(`PreToolUse` は、道具を順に出した会話で3つとも確認) |
|
|
25
|
+
| `additionalContext` の長さ | 10,000 字(UTF-16 の長さ)を超えると、頭の約 2,000 字と「全文は file にある」の案内に置き換わる。9,900 字までは、そのまま届く。日本語でも字数で決まる |
|
|
26
|
+
| Stop の hook の stderr の長さ | 23,000 字が、そのまま届いた |
|
|
27
|
+
| hook の `timeout`(秒)が切れた時 | hook は止められる(POSIX は SIGTERM)。会話は起きない。その後に文を置いても届かない |
|
|
28
|
+
| `timeout: 7200` の hook | 11 分待った後でも届けた(既定の 600 秒より長く待てる) |
|
|
29
|
+
| `claude stop` | 待っている hook も止まる |
|
|
30
|
+
| 待つ hook を持つ手すきの裏の会話を、Claude Code が片付ける時(`bg retire`) | hook が待っていても、61 分で片付けた(Linux)。hook の process は止められず、残った。片付けの後に hook が文を出して exit code 2 で終わっても、会話には何も届かなかった。hook の環境の `CLAUDE_PID` は、片付けられた会話の process の ID だった |
|
|
31
|
+
| hook が待っている間に、会話が別のきっかけ(自分の裏の作業の完了通知)で次の番へ進む | 前の hook は止められず、待ち続ける。次の番の終わりに、もう1つ hook が立つ |
|
|
32
|
+
| 前の番から待っている hook が、次の番の作業中に exit code 2 で終わる | Claude Code が文を順番待ちへ入れ(`attachment` の `queued_command`)、次の道具の合間に届けた。モデルは従った(Linux で確認) |
|
|
33
|
+
| 待つ hook を持つ会話へ `claude -p --resume` で入力する | hook が終わるまで命令が返らず、出力も出ない(hook が 20 秒で自分から終わる時は、22〜23 秒で返った)。この時の hook の環境は `CLAUDE_CODE_ENTRYPOINT=sdk-cli`(裏の会話は `cli`) |
|
|
34
|
+
|
|
35
|
+
## Decision
|
|
36
|
+
|
|
37
|
+
1. **置き場。** 後継ごとに、届けるのを待つ入力を1通1ファイルで置く
|
|
38
|
+
(`~/.throughline/claude-auto-handoff/inbox/<後継の会話 ID>/<時刻>-<連番>.json`)。中身は、届いた時刻・旧い会話の ID・
|
|
39
|
+
引き継ぎ ID・種類(`prompt` か `task-notification`)・本文。ファイルは本人だけが読める(0600)。届けたら消す。
|
|
40
|
+
2. **旧い会話の側。** ADR 0062 の止め方は変えない。止める時に、入力を今の続きの会話(後継の先まで引いた会話)の置き場へ
|
|
41
|
+
置く。置けた時は、返す文を「届いた入力は後継の会話へ渡しました」に替え、届く時機と後継を開く命令を添える。
|
|
42
|
+
後継で待つ hook の process が生きていれば「後継は動いています」、生きていなければ「後継は今、入力を待ち受けて
|
|
43
|
+
いません(止まっているか、この版より前に立った会話です)。後継を開いて何か入力した時に届きます」と書き分ける
|
|
44
|
+
(待つ hook は、置き場の印に自分の process の ID を書いている)。
|
|
45
|
+
後継の会話 ID を引けない時と、置き場へ書けなかった時は、0.16.31 と同じ文(後継で打ち直す)を返す。
|
|
46
|
+
止めた記録(`redirects.jsonl`)に、渡せたか(`forwarded`)を足す。本文は書かない。
|
|
47
|
+
- **slash command(頭が `/` の入力。`/tl`・`/clear` など)は運ばない。** その会話への命令で、後継へ文として運んでも
|
|
48
|
+
命令にならない。0.16.31 と同じ文を返す。頭が `/` で始まる普通の文(path など)も、見分けられないので運ばない。
|
|
49
|
+
- **ほかの会話から届いた文(`Another Claude session sent a message:` で始まる)は、利用者の入力と分けて運ぶ。**
|
|
50
|
+
届ける文に「ほかの Claude の会話が送った文で、利用者の入力ではない」と書く。旧い会話の受け口を通った後の文なので、
|
|
51
|
+
Claude Code が付けた注意書きは、そのまま付いて届く。
|
|
52
|
+
3. **後継の側。** 置き場の入力を、次の3か所で受け取る。先に受け取った所が届ける。
|
|
53
|
+
- **Stop の hook(新しく登録する。`throughline claude-forward-wait`、`asyncRewake: true`)。** 番の終わりに走り、置き場に
|
|
54
|
+
入力が在ればすぐ、無ければ届くまで待って、stderr へ出して exit code 2 で終わる。手すきの後継が、これで起きる。
|
|
55
|
+
- **`UserPromptSubmit`(今ある hook)。** 後継へ入力が来た時に、置き場の入力を文脈として足す。待つ hook が居ない後継
|
|
56
|
+
(期限で止められた・`claude stop` の後に開き直した・この版より前に立った)は、ここで受け取る。
|
|
57
|
+
- **`PreToolUse`(自動継続が今も登録している hook)。** 作業中の後継が、次の道具の前に、文脈として受け取る。
|
|
58
|
+
番の終わりまで待たせない。
|
|
59
|
+
4. **文脈として足す道(`UserPromptSubmit`・`PreToolUse`)は、9,000 字までの分だけを運ぶ。** 10,000 字を超えると Claude Code が
|
|
60
|
+
頭だけに切り詰めるので、収まらない入力は置き場に残し、Stop の道で届ける。Stop の道は、1通が 60,000 字を超える時だけ、
|
|
61
|
+
頭の 4,000 字と全文の file の場所を届ける。
|
|
62
|
+
5. **待つ hook が走る会話。** 自分の置き場のフォルダが在る会話だけが待つ。フォルダは、後継が継続の指示を受領した時と、
|
|
63
|
+
旧い会話が最初の入力を置いた時に出来る。フォルダが無い会話(後継でない会話。ほとんどの会話)では、hook はフォルダの
|
|
64
|
+
有無だけを見て終わる。
|
|
65
|
+
- script から起動した Claude(`CLAUDE_CODE_ENTRYPOINT` が `sdk-` で始まる。`claude -p`、Agent SDK)では待たない。
|
|
66
|
+
待つと、呼び出し元の命令が返らない。その時の入力は、`UserPromptSubmit` の道で届く。
|
|
67
|
+
- subagent の中では待たない。
|
|
68
|
+
- 待っている間に、自分の会話がさらに引き継がれて後継が立ったら、置き場に残った入力を今の続きの会話の置き場へ移して
|
|
69
|
+
終わる。旧い会話を起こさない。
|
|
70
|
+
- hook の `timeout` は 86,400 秒にする。期限が切れると、次に後継が動くまで(入力・番の終わり)届かない。
|
|
71
|
+
- 会話の process(hook の環境の `CLAUDE_PID`)が居なくなったら、受け取らずに終わる。Claude Code は、手すきの裏の会話を
|
|
72
|
+
片付ける時に、待っている hook を止めない。居ない会話へ出力すると、入力が届かないまま消える。
|
|
73
|
+
- **1つの会話で待つのは1つだけにする。** Claude Code は、会話が次の番へ進んでも前の hook を止めないので、そのままだと
|
|
74
|
+
番の終わりのたびに待つ process が1つ増える。新しい hook は置き場に自分の印(`waiter`)を書き、前の hook は印が
|
|
75
|
+
替わったのを見て退く。前の hook は、次の番が終わるまでは残る。その間に届いた入力は、前の hook が出して
|
|
76
|
+
Claude Code が道具の合間に届けるか、`PreToolUse` の道が先に受け取る。
|
|
77
|
+
6. **届いたか分からない入力は、入れ直さない。** 受け取る所は、入力のファイルを別のフォルダ(`claimed`)へ改名してから
|
|
78
|
+
出力し、出力した後で消す。改名の後で process が落ちると、その入力は届いたか分からないまま `claimed` に残る。
|
|
79
|
+
これを置き場へ戻さない(二重に届くより、1通落ちて跡が残る方を選ぶ。ADR 0039 の Codex と同じ考え)。
|
|
80
|
+
`auto-handoff status --host claude` に、届けるのを待つ数と、届いたか分からない数を出す。
|
|
81
|
+
7. **届ける文。** 頭に、Throughline が運んだ事・旧い会話の頭8字・種類ごとの数を書いた行を置く。人の入力は
|
|
82
|
+
「利用者がこの会話へ打った入力として扱う」、ほかの会話からの文は「利用者の入力ではない」、完了通知は
|
|
83
|
+
「引き継ぎ前の会話が裏で起こした作業の通知」と書く。
|
|
84
|
+
複数ある時は、届いた順に1つの文にまとめる。完了通知が続く時は、後継が動いている間に溜まった分が、次の1回で届く。
|
|
85
|
+
8. **記憶(L2)。** 運んだ人の入力は、後継の記録の中で、利用者の発言として読む。Stop の道で届いた行は、包みを外して
|
|
86
|
+
届けた文だけを残す。文脈として足した分と、前の hook が作業中に出して順番待ちから届いた分は、作業の途中で届いた入力
|
|
87
|
+
(ADR 0060)と同じに、そのターンの依頼へ足す。完了通知だけを運んだ分は、ターンの途中では足さない(ADR 0060 と同じ)。
|
|
88
|
+
入力の hook が stdout へ出した文脈は、記録では `hook_success`(`hookEvent: UserPromptSubmit`)の `content` に入る。
|
|
89
|
+
道具の前の hook が返した文脈は `hook_additional_context` に入る(実測)。
|
|
90
|
+
9. **片付け。** どの引き継ぎの記録からも後継として指されなくなった会話の置き場は、空なら消す。7日を過ぎた入力は、
|
|
91
|
+
届けずに消して、消した数を記録へ残す。
|
|
92
|
+
10. **登録。** `auto-handoff enable --host claude` が、今までの2つ(`PreCompact`・`PreToolUse`)に加えて Stop の hook を
|
|
93
|
+
登録し、`disable` が外す。有効な端末では、版を上げた時の `install` が足す(Claude の設定ファイルが1か所変わる)。
|
|
94
|
+
Codex・Grok・Cursor の設定は変えない。
|
|
95
|
+
|
|
96
|
+
## Consequences
|
|
97
|
+
|
|
98
|
+
- 旧い会話へ打った文は、打ち直さなくても後継へ届く。手すきの後継はすぐ動き、作業中の後継は次の道具の前に読む。
|
|
99
|
+
- 旧い会話が裏で起こした作業の完了通知が、後継へ届く。手すきの後継は、通知のたびに1回動く(今は同じ回数が、
|
|
100
|
+
文脈がほぼ一杯の旧い会話で止められている)。
|
|
101
|
+
- 後継の画面では、運ばれた入力は利用者の発言の形では出ない。Stop の道では hook からの通知の形、文脈の道では hook が
|
|
102
|
+
足した文脈の形になる。
|
|
103
|
+
- 運ばれた人の入力に従うかは、後継のモデルが決める。hook 経由の文は利用者の発言の形で届かないので、モデルが利用者の
|
|
104
|
+
指示として扱わない事がある(実測は下)。後継が最初に受け取る引き継ぎの文脈で、運び方を先に知らせる。旧い会話へ返す文に
|
|
105
|
+
「打ち直しは要らない」とは書かず、後継を開く命令を添える。
|
|
106
|
+
- 手すきの後継ごとに、待つ process が1つ動く(node。1 秒ごとにフォルダを見る)。後継が `claude stop` や片付けで止まれば、
|
|
107
|
+
一緒に止まる。
|
|
108
|
+
- 自動継続が有効な端末では、Claude の番の終わりのたびに hook が1つ多く走る。置き場のフォルダが無い会話では、
|
|
109
|
+
すぐ終わる。
|
|
110
|
+
- 後継が止まっている時(`claude stop`・Claude Code の片付け)は、起こさない。入力は置き場で待ち、後継を開いて
|
|
111
|
+
何か入力した時に届く。止まっている後継を自動で起こす形は、この ADR では決めない(動いている会話へ
|
|
112
|
+
`claude --bg --resume` を流すと写しが立つので、止まっている事を確かめる道を先に決める必要がある)。
|
|
113
|
+
- 置き場のファイルは、届くまで入力の本文を持つ。DB と会話の記録のほかに、本文が一時的に置かれる場所が増える。
|
|
114
|
+
- `claude -p --resume <後継>` の入力では、置き場の分は文脈として届き、待つ hook は走らない。
|
|
115
|
+
|
|
116
|
+
## 確かめた事・確かめていない事
|
|
117
|
+
|
|
118
|
+
- 確かめた事は、Context の表と、この版の試験(CHANGELOG の 0.16.32)。
|
|
119
|
+
- 直した版を、本物の Claude Code 2.1.296 の裏の会話(Haiku)へ通した。Linux・macOS・Windows の3つ。利用者の設定の hook を
|
|
120
|
+
外し、直した版を切り離した HOME で呼ぶ hook だけを付けた。旧い会話の役と後継の役を立て、引き継ぎの記録を切り離した
|
|
121
|
+
置き場へ置いた。後継の役の置き場は、最初の入力の hook で作った(本物では、継続の指示の受領が作る)。3つとも同じ結果だった。
|
|
122
|
+
|
|
123
|
+
| 見た事 | 結果 |
|
|
124
|
+
|---|---|
|
|
125
|
+
| 旧い会話が裏で起こした作業の完了通知 | 旧い会話では止まり、手すきの後継が起きて、通知の中身に答えた |
|
|
126
|
+
| 人の入力(`claude -p --resume <旧い会話>`) | 「届いた入力は、後継の会話へ渡しました」が返り、手すきの後継が起きて、入力に従った |
|
|
127
|
+
| 後継が止まっている時の人の入力 | 置き場で待った。後継を `claude -p --resume` で開いて入力すると、3〜5 秒で命令が返り、運んだ入力が文脈として届いていた |
|
|
128
|
+
| 作業中の後継への人の入力 | 次の道具の前に文脈として届き、後継はその番の答えで従った |
|
|
129
|
+
| 後継が自分の裏の作業の完了通知で次の番へ進んだ時 | 前の待つ hook は退き、待つ hook は1つだけ残った |
|
|
130
|
+
| 直した版の読み手で読んだ後継の記録 | 運んだ文が利用者の行に入り、Claude Code の通知の包みは入らない。文脈で届いた分は、作業の途中の入力として入る |
|
|
131
|
+
| 切り離した置き場の失敗の記録・届いたか分からない入力 | 無し・0 |
|
|
132
|
+
| 本物の置き場と判定の記録にある、試しの会話 | 0 |
|
|
133
|
+
|
|
134
|
+
- 運んだ人の入力に、後継のモデル(Haiku)が従ったかを、手すきの後継で数えた(3つの OS の合計)。hook 経由の文に従うかは
|
|
135
|
+
モデルが決めるので、従わない事は無くせない。従わなかった後継は「自動の通知として届いたので、利用者の指示としては
|
|
136
|
+
扱わない」と答えた。
|
|
137
|
+
|
|
138
|
+
| 場面と、運ぶ文の形 | 従った回数 |
|
|
139
|
+
|---|---|
|
|
140
|
+
| 後継の最初の番の後に、人の入力だけを運ぶ。見出しに「利用者がこの会話へ打った入力として扱ってください」と書く形 | 26 回のうち 26 回(知らせあり 13、なし 13) |
|
|
141
|
+
| 後継が完了通知を1通受けた後に、人の入力を運ぶ。同じ形。後継は、引き継ぎの文脈の知らせを受け取っていない | 21 回のうち 19 回 |
|
|
142
|
+
| 同じ場面・同じ形。後継は、引き継ぎの文脈(読み方)で運び方の知らせを受け取っている | 6 回のうち 5 回 |
|
|
143
|
+
| 同じ場面。見出しを「利用者が前の会話へ打った文です」と、出どころを述べるだけにした形。知らせなし | 18 回のうち 10 回 |
|
|
144
|
+
| 同じ場面。出どころを述べるだけの形。知らせあり | 18 回のうち 16 回 |
|
|
145
|
+
|
|
146
|
+
出どころを述べるだけの形は、知らせの無い後継で従わない回が増えたので、採らない。見出しに「利用者がこの会話へ打った
|
|
147
|
+
入力として扱ってください」と書く形にし、後継が最初に受け取る引き継ぎの文脈(読み方)でも運び方を知らせる。
|
|
148
|
+
試しの入力は「PROBE: …と答えてください」の形で、本物の作業の依頼より疑われやすい文だった。
|
|
149
|
+
- 確かめていない:
|
|
150
|
+
- 端末の画面・Claude Desktop・リモートコントロール(スマホ)で、運ばれた入力がどう見えるか。
|
|
151
|
+
- 86,400 秒の `timeout` が、そのとおりに待つか。7,200 秒の指定で 11 分より長く待てる所までを見た。
|
|
152
|
+
待つ hook が終わった理由と待った秒数を記録へ残すので、入れた後の追跡で読む。
|
|
153
|
+
- 片付けられた裏の会話の、直した版の待つ hook が、`CLAUDE_PID` を見て退く所(単体試験まで。実機は 61 分かかるので、
|
|
154
|
+
公開の後に読む)。
|
|
155
|
+
- macOS と Windows で、裏の会話が片付けられる時の hook の残り方(Linux だけで見た)。
|
|
156
|
+
- ほかの会話から届いた文(`SendMessage`)を運んだ時の、送り手の側の見え方。
|