🔍 こういう散らかり方をしていませんか

Claude Code を1つだけ動かしているうちは、何も問題がありません。

様子が変わってくるのは、2つ目を立てたあたりからです。片方に指示を出して、待っている間にもう片方を進めて、戻ってきたら最初のほうはとっくに終わっていた。3つ目、4つ目と増やすと、今度は どのウィンドウが返事を待っているのかを探すために、ウィンドウを順番に開いて回る ようになります。

Kochab Grid は、この往復をやめるために作った Windows 向けのデスクトップアプリです。複数の Claude Code セッションを1画面に並べて、状態を色で見せて、返事待ちになったら通知する。やっていることはそれだけです。

16分割されたグリッド画面。16個のペインが並び、それぞれ別の Claude Code セッションが日本語の実装計画を出力している。ペインの枠はセッションの状態に応じて色分けされ、右下の1つだけ枠色が異なり、フォルダの信頼確認プロンプトが表示されている。

16分割グリッドの全景。1画面で全セッションの状態と出力を追える(画面はデモ用のダミープロジェクト)

もともとの発想は、本当にそれだけでした。「Claude Code を4画面で見られたら便利だよね」。


🪟 3つの窓で役割を分ける

Kochab Grid は3種類のウィンドウで構成されています。

ウィンドウ 役割
コントロール 司令塔。プロジェクト一覧・新規セッション作成・コマンド/Skill バー・ジャーナルの閲覧と検索・設定
グリッド 監視盤。稼働中のセッションを最大16分割で縮小表示。ステータスで色分けし、直接入力もできる
拡大 作業用。1セッションを別ウィンドウで開く。グリッドと同じ端末を共有している
コントロール窓の全体。上部に「Kochab Grid 稼働 1/16」の見出し、その下にスラッシュコマンドのボタンが並ぶコマンドバーと Skill バー。左側にプロジェクト一覧(稼働中は緑の丸と ctx 表示つき、停止中は赤の丸)、右側にジャーナルの検索欄と保存済みメモの一覧。

コントロール窓。左がプロジェクト一覧、右がジャーナル(作業まとめ)の検索・閲覧

ポイントは、グリッドと拡大が 同じ端末を共有している ことです。別々に接続し直しているわけではないので、グリッドで打った文字はそのまま拡大側にも出ますし、拡大で作業した結果はグリッドにも反映されます。「見る場所」と「打つ場所」が分かれていないので、頭を切り替えずに済みます。

なぜ同じ画面を共有できるのか

セッションを1本立てると、まず選んだディレクトリを作業ディレクトリにして PowerShell が起動し、その中で claude が動きます。この端末(PTY=疑似端末)を握っているのは、アプリのメインプロセスただ1つです。全セッションの PTY と、出力を溜めておくリングバッファと、ステータスの判定を、そこで一元管理しています。

コントロール・グリッド・拡大の3つは、それぞれ独立した画面にすぎません。PTY を直接持ってはおらず、メインプロセスとの IPC でやり取りします。

  • 出力 — メインプロセスが PTY から受け取った出力を、各画面へ配信する
  • 入力 — 画面がメインプロセスへ送り、メインプロセスが該当する PTY へ書き込む
  • ステータス — メインプロセスが判定し、全画面へ一斉に配る

つまりグリッドの小さいペインも拡大ウィンドウも、同じ1本の PTY を別の場所から覗いているだけです。所有者が1つしかないので、そもそもずれようがありません。

拡大ウィンドウを新しく開いたときは、リングバッファの内容をリプレイして現在の画面を組み直します。途中から開いても、それまでの出力が流れた状態で表示されるのはこのためです。

グリッドのペインは、クリックすればそのまま入力できます。ちょっとした返事(y を打つ、Enter を押す)のために、わざわざ拡大する必要はありません。じっくり読みたくなったら、ダブルクリックか ⇱ ボタンで拡大ウィンドウが開きます。

4分割のグリッド画面。shop-api / landing-page / mobile-client / batch-jobs の4セッションが並び、それぞれ日本語の実装計画を出力している。4つとも枠が緑(作業中)で、下部に入力欄が見えている。

4分割の構成。ペインはクリックすればそのまま入力できる

1つのペインを拡大した画面。日本語の実装計画が25項目まで番号つきで並び、下に入力欄と「auto mode on」の表示がある。枠は緑。

拡大したところ。グリッドの小さいペインと同じ内容が、同じ桁数で表示される

コントロールから送る — コマンドバーと Skill Library

コントロール窓の上部には、/compact /clear /context /usage /model /agents /init /status /help をワンクリックで送れるコマンドバーがあります。ボタンにカーソルを合わせると、そのコマンドが何をするかがツールチップで出ます。

送信先は アクティブな(最後にフォーカスした)拡大ウィンドウ のセッションです。拡大ウィンドウを開いていないときはボタンが無効になり、右端に「どこへ送るか」が表示されます。誤爆しないための作りです。

その下が Skill Library です。~/.claude/skills と、アクティブなセッションのプロジェクトにある .claude/skills を読み取り、Skill をボタンとして並べます。クリックすると /<skill名> が送られます。「📚 一覧」から SKILL.md のプレビューを見たり、フォルダを開いたりもできます。

ここは 読み取り専用 です。Kochab Grid から Skill 本体を書き換えることはしません。Skill は Claude Code 本体と共有する資産なので、正本は常に Claude 標準のディレクトリにある、という考え方にしています。

💡 Skill の配置形式は両対応

<名前>/SKILL.md(ディレクトリ形式)と <名前>.md(フラット形式)のどちらでも読み取ります。frontmatter の name:description: を索引化し、説明はボタンのツールチップに表示されます。


🚦 色で分かる状態、通知で気づく「返事待ち」

各ペインの縁には色がついています。

状態 判定条件
作業中 直近 N 秒以内に端末への出力があった
応答待ち 出力が N 秒以上止まっている(プロセスは生きている)
停止・エラー 端末のプロセスが終了した

N の既定値は60秒で、設定から変更できます。

ここは正直に書いておきます。Claude Code の内部状態を外から取る方法はありません。 そのため Kochab Grid は「最後に出力があった時刻」と「プロセスが生きているか」から状態を推測しています。長時間まったく出力しない処理をしているときに、応答待ちと表示してしまうことはあります。

正確に取れないなら、取れないなりの精度で割り切って、代わりに気づける仕組みを足す。作業中から応答待ちに変わった瞬間に デスクトップ通知 を出し、クリックするとそのセッションの画面が前面に出ます。連続で鳴りっぱなしにならないよう多重通知は抑えてあり、通知そのものを設定でオフにもできます。

カードにはセッションごとのトークンも出ます。ctx がその会話のコンテキスト長、out が累計の出力トークンです。どちらも Claude Code が書き出すトランスクリプトを読んで集計しているので、そのセッションで最初のメッセージを送ったあと から表示されます。


🈶 日本語の表が崩れないという、地味だが重要な要件

日本語で Claude Code を使っていると、表や罫線が崩れて読めなくなることがあります。原因は 文字幅の解釈のずれ です。ターミナル側が1桁ぶんと思っている文字を、Claude 側は2桁で数えて罫線を引く。1文字ずれるだけで、以降の縦線はすべて位置が狂います。

xterm.js の既定は Unicode 6 の文字幅定義で、全角文字の扱いが Claude 側の桁計算と合いません。Kochab Grid は @xterm/addon-unicode11 を入れて、幅の解釈を Unicode 11 に合わせています。まずこれで、数え方そのものを揃えます。

縮めるのは桁数ではなく、見た目のほう

もう一つの問題が、その端末をどうやって16分割のペインに収めるかです。

素直にやるなら、ペインが小さいぶん桁数を減らすことになります。ところがそれをすると、桁数が変わった時点で罫線の位置も変わります。グリッドの小ペインと拡大ウィンドウで、同じ出力が違う形に見えることにもなります。

Kochab Grid は逆をやっています。すべての PTY を固定の 120×30 で扱い、どのペインの xterm も同じ 120×30 で描画したうえで、CSS の transform: scale() で縮小して押し込んでいます。 桁数はどこでも一切変わりません。変えているのは表示倍率だけです。

だから16分割の小さなペインでも拡大ウィンドウでも、表の縦線は同じところで揃います。小さいペインの文字はもちろん読めませんが、それで構いません。グリッドは読むための画面ではなく、動いているかどうかを見るための画面だからです。


💾 閉じても続く — 自動 resume と作業まとめ

アプリを通常終了すると、そのとき稼働していたセッションが記録されます。次に起動したとき、それらを claude --resume で順に復元します(設定でオフにできます)。

復元の下地になる session-id は、Claude Code が書き出すセッション情報とトランスクリプトを照合して捕捉しています。ここには実装上のクセがあって、Claude Code は起動直後ではなく、最初のユーザーメッセージ以降にセッション情報とトランスクリプトを作ります。だから id の捕捉は一度きりの監視では成立せず、定期的に作業ディレクトリを突き合わせて拾い続ける方式になりました。再開用のポインタも、トランスクリプトが実在するときだけ保存しています。「復元しようとしたら会話が見つからない」を避けるためです。

💡 `CLAUDE_CODE_*` を消してから起動しています

Kochab Grid を Claude Code のシェルから起動すると、CLAUDECODECLAUDE_CODE_SESSION_ID といった環境変数が引き継がれます。これをそのまま子の claude に渡すと、入れ子の子セッションと判定されて、セッション情報もトランスクリプトも一切残りません。記録が残らないということは、resume の下地も作られないということです。そのため PTY を起動する前に、これらの環境変数を落としています。

もう一つが ジャーナル(作業まとめ) です。セッション終了時に自動で、あるいはカードの「まとめ」ボタンで任意のタイミングに、その時点までの作業内容を保存できます。方式は2つあります。

方式 内容
簡易版 直近ログの末尾をそのまま保存する。軽く、確実
要約版 トランスクリプトを別プロセスの claude -p に渡し、「何をした/現状/次にやること」に要約させる

保存したメモはコントロール右側から検索・閲覧できます。1週間前に何をやっていたかを思い出すのに使えます。

何がどこに保存されるか

用途 パス
アプリの状態(プロジェクト一覧・グリッド配置・設定) %USERPROFILE%\.kochab-grid\state.json
ジャーナル(作業まとめ) %USERPROFILE%\.kochab-grid\journal\<project-id>\*.md
(読み取りのみ)Claude のトランスクリプト ~/.claude/projects/<エンコードされた cwd>/<session-id>.jsonl
(読み取りのみ)Claude の稼働セッション情報 ~/.claude/sessions/<pid>.json

下2つは Claude Code 側の資産で、Kochab Grid は 読むだけ です。書き換えることはありません。

「エンコードされた cwd」は、作業ディレクトリのパスから英数字以外を - に置き換えたものです。大文字小文字はそのまま残り、日本語は1文字が - 1つになります。

C:\Users\user\OneDrive\ドキュメント\Arduino
→ C--Users-user-OneDrive--------Arduino

作業ディレクトリからトランスクリプトを引き当てられるのは、この規則が分かっているからです。


🛡️ 安全のための制限を2つ入れてあります

1. フォルダの信頼確認プロンプトが出ている間は、自動送信を止める

Claude Code は初めて開くフォルダで「Is this a project you created or one you trust?」と聞いてきます。既定の選択は「1. Yes, I trust this folder」です。ここへコマンドバーや Skill バーから送信すると、末尾の Enter が「信頼する」を確定させてしまいます。利用者は何も見ていないのに、フォルダが信頼済みになる。

グリッド画面に12個のペインが並び、そのすべてに Claude Code の信頼確認が表示されている。各ペインには「Is this a project you created or one you trust?」と「1. Yes, I trust this folder / 2. No, exit」「Enter to confirm・Esc to cancel」が出ている。

これが信頼確認の画面。既定の選択は「1. Yes, I trust this folder」なので、ここへ Enter が飛ぶと信頼済みになってしまう

そのため、このプロンプトが出ている間は 自動送信だけを止め、コントロールに理由を表示します。あなた自身のキー入力は一切妨げません。 拡大ウィンドウで内容を確認して、自分で選んでください。

コントロール窓の上部に赤い通知バーが出ている。「「order-api」はフォルダの信頼確認プロンプトを表示中のため送信をブロックしました。」「ここで自動送信すると Enter が「1. Yes, I trust this folder」を確定させ、意図せずフォルダを信頼済みにしてしまいます。」「拡大ウィンドウで内容を確認し、ご自身で選択してください。」の3行が表示され、右端に閉じるボタンがある。

コマンドバーから /status を送ろうとしたところ。送信は止まり、止めた理由がそのまま表示される

止めるだけでなく、止めた理由をその場に出すところまでを一組にしました。ブロックされたことに気づけないと、今度は「送ったのに動かない」で悩むことになるからです。

⚠️ この検出は claude の画面表示に依存します

信頼確認が出ているかどうかの判定は、claude の TUI に表示される文言を手がかりにしています。つまり Claude Code 側の表示が変わると、検出が効かなくなる可能性があります。アップデート後に挙動が変わったと感じたら、まずここを疑ってください。

なお、起動直後の送信には 指示が無言で消える という問題がありました。起動から0.8秒後に送った指示は消え、1.3秒後なら受理される、という状態です。現在は起動直後だけ送信をいったんキューに積み、少し待ってから流すようにしてあります。確立済みのセッションへの送信は遅らせません。

2. 同じディレクトリで2セッションは起動できない

プロジェクトの登録は「1ディレクトリ=1件」です。同じフォルダで2つ動かすと、名前・グリッド配置・自動 resume の設定を奪い合って壊れます。2本目は理由を表示して拒否します。先に既存のセッションを閉じてから起動してください。


📦 インストールと起動

前提は Windows 10 / 11(64bit) と、claude コマンドが PATH で解決できること、つまり Claude Code が導入済みであることです。Node.js のインストールは不要で、アプリに同梱されています。

配布形式は2種類あります。

ファイル 用途
kochab-grid-0.1.0-x64-setup.exe 通常のインストーラ。スタートメニューに登録される(約 86 MB)
kochab-grid-0.1.0-x64-portable.exe インストール不要。実行すると一時展開して起動する(約 86 MB)

中身はどちらも同じです。初めての方はインストーラ版をおすすめします。インストーラ版は ユーザー単位のインストール で、管理者権限(UAC の昇格)を求めません。システム領域には書き込まず、アンインストールは Windows の「設定 → アプリ → インストールされているアプリ」から行えます。

ダウンロードは GitHub のリリースページから行ってください。正規の配布元はここだけです。 他のサイトに置かれているものは、作者が用意したものではありません。

Kochab Grid — リリースページ(この記事を書いた時点の最新版は v0.1.0)

同じページに SHA256SUMS.txt も置いてあります。次項のハッシュ照合で使います。

初回起動時に警告が出ます

コード署名証明書は付けていません。 個人が無償で配っているツールに、その費用をかけていないというだけの理由です。そのため初回起動時に「Windows によって PC が保護されました」という青い画面が出ます。「詳細情報」→「実行」で起動できます。一度実行を選べば、そのファイルについては次回以降出ません。

ブラウザ側でも Chrome / Edge が「一般的にダウンロードされていません」と表示することがあります。ダウンロード一覧から「保存」「継続」を選んでください。

⚠️ Smart App Control が有効な端末では起動できません

Windows 11 をクリーンインストールした直後の端末では、Smart App Control が有効になっていることがあります。この機能が有効だと、未署名アプリは「詳細情報 → 実行」でも起動できません。

設定 → プライバシーとセキュリティ → Windows セキュリティ → アプリとブラウザーの制御 → スマート アプリ コントロール で状態を確認できます。

Smart App Control は一度オフにすると、Windows を再インストールしない限り再有効化できません。 セキュリティ上のトレードオフを理解したうえで判断してください。オフにしたくない場合、その端末では Kochab Grid を使えません。 回避策はありません。

署名が無いということは、手元のファイルが改ざんされていないことを確認する手段は、ハッシュ照合しかないということでもあります。おまけの手順ではなく、真正性を確かめる方法はこれ1つです。

リリースページの SHA256SUMS.txt に配布ファイルの SHA256 ハッシュを載せてあります。PowerShell で次を実行し、掲載値と一致することを確かめてください。

Get-FileHash .\<ダウンロードしたファイル>.exe -Algorithm SHA256

一致しない場合は実行せずに破棄し、リリースページから取得し直してください。


⚠️ できないこと・既知の制限

  • Windows 専用です。 macOS / WSL には対応していません
  • ステータス判定は時刻ベースの推測 です(前述)。長時間出力のない処理を「応答待ち」と誤判定しえます
  • Claude 側で resume 履歴が失効していると --resume が失敗することがあります。失敗したときに、まとめを文脈として流し込む 「疑似再開」は未実装 です
  • 拡大ウィンドウのサイズは固定(縮小表示)です。可変桁数の通常ターミナルにはなりません
  • グリッドの Esc でのフォーカス解除、コントロールの プロジェクト検索 は未実装です(検索はジャーナルのみ)
  • セッションが16/16まで埋まったときに、不要なセッションを選んで閉じてから新規作成する導線は未実装 です(エラー表示のみ)
  • 信頼確認プロンプトの検出は、前述のとおり claude の画面表示に依存します
📌 つまり、こういう道具です

Claude Code を賢くする道具ではありません。すでに何本も動かしている人が、どれが返事を待っているのかを見失わないための盤面 です。1本しか動かさないなら、たぶん要りません。


📄 ライセンスと免責

Kochab Grid は フリーウェア です。オープンソースではなく、独自の使用許諾契約書「Kochab Grid 使用許諾契約書」が適用されます。要点だけ書いておきます。

できること

  • 無償で使えます
  • 個人利用・商用利用を問いません。 法人・団体の業務での使用も認められています
  • 自分が使うコンピュータであれば、インストール台数に制限はありません

できないこと

  • 再配布・公開・転載・貸与・ミラー配布・他製品への同梱は禁止です。同じ組織の中での配布(社内共有サーバへの設置、チームメンバーへの受け渡し)も含みます
  • 改変・リバースエンジニアリングは禁止です
  • 無保証です。現状有姿(AS IS)で提供され、特定の目的への適合性・エラーがないこと・他のソフトウェアと問題なく動作することは、いずれも保証されません

再配布の禁止については、理由を書いておきます。権利を強く主張したいからではありません。前述のとおりコード署名を付けずに配布しているため、利用者が手元のファイルの真正性を確認する手段は、ハッシュ照合しかありません。入手経路が枝分かれすると、その照合先自体が信用できなくなります。正規の入手経路を1本に保つことが、改ざんされた版が出回るのを防ぐ現実的な手段だ、という理由によるものです。

そのため、人に紹介していただく場合は、ファイルそのものを渡すのではなく、リリースページを案内してください。

なお、本アプリには Electron / Chromium / node-pty / xterm.js / React などのオープンソースソフトウェアが含まれています。これらにはそれぞれのライセンスが優先して適用され、上に書いた再配布・改変の禁止は第三者ソフトウェアには及びません。 主要な条文はインストール先に同梱されています。

上はあくまで要点です。実際に適用されるのは条文のほうなので、全文は リポジトリの LICENSE か、インストール先の LICENSE(exe と同じ階層)で確認してください。

本製品は Anthropic PBC と提携・後援・承認関係にありません。 Claude、Claude Code は Anthropic PBC の商標です。