<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hooks on Claude Code 始めました</title><link>https://kitepon-rgb.github.io/WebAICoding/tags/hooks/</link><description>Recent content in Hooks on Claude Code 始めました</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sat, 18 Apr 2026 09:00:00 +0900</lastBuildDate><atom:link href="https://kitepon-rgb.github.io/WebAICoding/tags/hooks/index.xml" rel="self" type="application/rss+xml"/><item><title>Claude Codeの"続きから"を実装するのに、自動検知を諦めた話</title><link>https://kitepon-rgb.github.io/WebAICoding/post/throughline-declare-over-detect/</link><pubDate>Sat, 18 Apr 2026 09:00:00 +0900</pubDate><guid>https://kitepon-rgb.github.io/WebAICoding/post/throughline-declare-over-detect/</guid><description>&lt;p&gt;&lt;a href="https://kitepon-rgb.github.io/WebAICoding/post/throughline-context-diet/"&gt;前の記事&lt;/a&gt;でThroughlineを公開した。コンテキストの大半を占めてるツールI/Oを退避するやつ。&lt;/p&gt;
&lt;p&gt;あの時点では&amp;quot;動いてた&amp;quot;。自分の環境では。&lt;/p&gt;
&lt;p&gt;でも記事を出した直後から、おかしな挙動に気づき始めてた。&lt;/p&gt;
&lt;p&gt;並行で別のウィンドウを開くと、新しいセッションが前のセッションの記憶を勝手に拾う。VSCodeを再起動すると、毎回「前回のセッションから続き」扱いになる。一度も &lt;code&gt;/clear&lt;/code&gt; してないのに。&lt;/p&gt;
&lt;h2 id="原因-clear-を検知できない"&gt;原因: /clear を検知できない&lt;/h2&gt;
&lt;p&gt;Claude Codeのhookには &lt;code&gt;SessionStart&lt;/code&gt; ってイベントがあって、&lt;code&gt;source&lt;/code&gt; っていうフィールドで startup（新規起動）と clear（/clear後）を区別できる、はずだった。&lt;/p&gt;
&lt;p&gt;ところがVSCode拡張だと、&lt;code&gt;/clear&lt;/code&gt; しても &lt;code&gt;source&lt;/code&gt; が &lt;code&gt;startup&lt;/code&gt; に潰される。&lt;a href="https://github.com/anthropics/claude-code/issues/49937"&gt;GitHub issue #49937&lt;/a&gt; に上がってる既知の問題。CLI単体なら動くけど、拡張だと識別できない。&lt;/p&gt;
&lt;p&gt;自分はVSCode拡張で使ってる。つまり「startupとclearを区別する」前提の設計が、根本から崩れてた。&lt;/p&gt;
&lt;h2 id="ヒューリスティックで補おうとした"&gt;ヒューリスティックで補おうとした&lt;/h2&gt;
&lt;p&gt;じゃあ時間差で判定するか。前のセッションの最終活動から10秒以内ならclear、それ以上ならstartup、みたいな。&lt;/p&gt;
&lt;p&gt;これも壊れた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;並行でウィンドウを2つ開いてると、両方が&amp;quot;最近活動してた&amp;quot;ので両方が継承先候補になる&lt;/li&gt;
&lt;li&gt;VSCode再起動でもtranscriptは残ってるので&amp;quot;最近&amp;quot;に見える&lt;/li&gt;
&lt;li&gt;プロセスツリーを追いかけようとしたけど、CLIとextensionでプロセス構造が違う&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;ldquo;そもそも検知できる条件が無い&amp;quot;と気づいた。&lt;/p&gt;
&lt;h2 id="発想を変えた"&gt;発想を変えた&lt;/h2&gt;
&lt;p&gt;検知しようとするから失敗する。&lt;strong&gt;ユーザーが宣言すれば、検知はいらない。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;作ったのが &lt;code&gt;/tl&lt;/code&gt; ってスラッシュコマンド。ユーザーが次のセッションに記憶を引き継ぎたい時だけ打つ。打つと &lt;code&gt;handoff_batons&lt;/code&gt; ってテーブルにそのセッションIDが書き込まれる。バトンを置くイメージ。&lt;/p&gt;
&lt;p&gt;次のセッション開始時、バトンが1時間以内に置かれてたら、そのセッションの記憶を引き継ぐ。なければ、何もしない。新規セッションとして始まる。&lt;/p&gt;
&lt;p&gt;並行ウィンドウもVSCode再起動も、「バトンが置かれてない限り誤爆しない」が原理的に保証される。&lt;/p&gt;
&lt;p&gt;明示的なのは一見面倒だけど、「勝手に引き継いで迷惑」の方が遥かに困る。誤爆ゼロの方が価値があった。&lt;/p&gt;
&lt;h2 id="でもこれだけじゃ物足りなかった"&gt;でも、これだけじゃ物足りなかった&lt;/h2&gt;
&lt;p&gt;バトンができて、次のセッションが前のセッションの会話ログを読めるようになった。でも実際に使ってみて思ったのが、「ただログを読んでるだけ」感。&lt;/p&gt;
&lt;p&gt;過去ログを読むAIと、中断地点から続けるAIは、体感が違う。&lt;/p&gt;
&lt;p&gt;前者は「よし、状況を把握した。じゃあ今から何をしましょうか？」って聞いてくる。後者は「さっきの続きだと、あと◯◯を確認すればいいよね」って進める。&lt;/p&gt;
&lt;p&gt;ここで2つ足した。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;in-flight memo.&lt;/strong&gt; &lt;code&gt;/tl&lt;/code&gt; を打った瞬間、今動いてるClaude自身に「次の一手、今の仮説、未解決の問題、進行中のTODO」をMarkdownで書いてもらう。それをバトンに添付する。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;thinkingの保存.&lt;/strong&gt; Claudeのextended thinking（内部推論）ブロックもL3として保存しておく。次のセッションの注入時、最終ターンのthinkingを頭に出す。前のClaudeが何を考えてたかが、次のClaudeに渡る。&lt;/p&gt;
&lt;p&gt;結果、次のセッションの注入テキストはこういう形になる。&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;あなたは中断されたタスクを再開します。

[前のClaudeが書いた in-flight memo]
次やること: X のテストを書く。仮説: Y が原因だと思う。未解決: Z。

[前のClaudeが最後に考えてたこと]
Z の挙動が気になる。もしかしたら...

[直近20ターンの会話]
...
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="読むじゃなく続ける"&gt;&amp;ldquo;読む&amp;quot;じゃなく&amp;quot;続ける&amp;rdquo;&lt;/h2&gt;
&lt;p&gt;これで手応えが変わった。&lt;/p&gt;</description></item></channel></rss>