AI エージェントと並走するターミナル
エージェントが手を止めて返事を待ったら、すぐ分かる。作業中か応答待ちかを光の帯で知らせ、ウインドウごとに色を変えて、並べた作業をひと目で見分けられます。
~/projects/api $ claude > アップロード API にレート制限を追加して Read src/routes/upload.ts Edit src/middleware/rate-limit.ts Bash npm test 42 件成功、失敗 0 件
墨(Sumi) · 色をクリック、またはウインドウを選んで Cmd+Shift+]
必要なものだけを、軽く。入れたその日から、設定なしで使えます。
Cmd+Shift+] でそのウインドウの背景色を切り替え。日本の伝統色から取った 8 色に加え、JSON ファイルで自分の色も足せます。
Claude Code / Codex CLI が考え中か、ツール実行中か、あなたの応答待ちかを光の帯で表示。応答待ちのウインドウ数は Dock のバッジに出ます。
vim / less / htop / tmux / Claude Code / Codex CLI が動作。ウインドウ幅を変えると履歴も含めて折り返し直します。
日本語 IME のインライン入力、全角文字・絵文字の表示に対応。画面表示は日本語と英語を切り替えられます。
ウインドウがそのまま一つのシェル。前回の位置と大きさで開き、背面のウインドウを半透明にして最前面を際立たせることもできます。
端末エミュレーションは外部ライブラリを使わない自前実装。アカウント登録も利用状況の送信もなく、kTerm 自身はインターネットにつながない設計です。
エージェントに任せて別の作業をしていても、出番が来たら kTerm が知らせます。設定は最初に一度だけです。ウインドウ上端の光の帯とタイトルバー右端のラベルがエージェントの状態を示します。別のアプリを使っている間にウインドウが応答待ちになると、Dock アイコンが一度跳ねて知らせます。応答待ち・完了・失敗に変わったときは、設定で選んだベル音が鳴ります(設定の「作業状態で音を鳴らす」で切れます)。応答待ち・完了の表示は、キーを打つと消えます。
| 状態 | 帯 | ラベル |
|---|---|---|
| 考え中 | 青い光が左から右へ流れる | 考え中 |
| ツール実行中 | 青緑の光が流れる | ツール名(Bash / Edit など) |
| 応答待ち | 琥珀色で明滅(キーを打つと消える) | 応答待ち |
| 完了 | 緑を一瞬見せて応答待ちへ | 完了 |
| 失敗 | 赤 | 失敗 |
kTerm 1.0.7 以降で使えます。設定の前に、kTerm を「アプリケーション」フォルダから開いてください。登録は kTerm 内のスクリプトを指すので、kTerm を更新すれば hooks も新しくなります。
Codex CLI 0.157 以降は、既定で共有の常駐サーバーが hooks を起動するため、どのウインドウからの知らせかが hooks に伝わりません。その場合 kTerm は、Codex がウインドウタイトルに付ける回転記号とベルから作業状態を推定します。推定ではツール名のラベルは出ません。codex --no-daemon で起動すると、hooks が届いてより正確に表示されます。
claude-code-activity.sh をダウンロードして ~/.claude/hooks/(Claude Code)または ~/.codex/hooks/(Codex CLI)に置き、chmod +x で実行権限を付けます。続いて下の例のとおり各イベントに登録します。<you> はご自身のユーザ名に置き換えてください。両方使う場合は 1 か所に置き、両方の設定でそのパスを指定します。
以前にダウンロードしたスクリプトを使っている場合は、1.0.9 に合わせて新しいものに置き換えてください。
ファイルが既にある場合は、置き換えずに追記します。"hooks" が無ければ、ほかの設定と並べて最上位に "hooks" のブロックを加えます。既にあればその中に各イベントを加え、hooks を登録済みのイベントには、その配列の末尾に { "hooks": [...] } の項目を足します。
Claude Code - ~/.claude/settings.json
{
"hooks": {
"SessionStart": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
"UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
"PreToolUse": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
"PostToolUse": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
"PermissionRequest": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
"Notification": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
"Stop": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
"StopFailure": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }],
"SessionEnd": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.claude/hooks/claude-code-activity.sh" }] }]
}
}
Codex CLI 0.155 以降 - ~/.codex/hooks.json
{
"hooks": {
"SessionStart": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.codex/hooks/claude-code-activity.sh" }] }],
"UserPromptSubmit": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.codex/hooks/claude-code-activity.sh" }] }],
"PreToolUse": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.codex/hooks/claude-code-activity.sh" }] }],
"PostToolUse": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.codex/hooks/claude-code-activity.sh" }] }],
"PermissionRequest": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.codex/hooks/claude-code-activity.sh" }] }],
"Stop": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.codex/hooks/claude-code-activity.sh" }] }],
"Interrupt": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.codex/hooks/claude-code-activity.sh" }] }],
"SessionEnd": [{ "hooks": [{ "type": "command", "command": "/Users/<you>/.codex/hooks/claude-code-activity.sh" }] }]
}
}
次のシーケンスを標準出力に書きます。制御端末を持たない hooks などのプロセスからは、エスケープ文字を除いた同じ内容を 1 接続につき 1 行、$KTERM_ACTIVITY_SOCKET の受け口へ送ります(例: printf '7777;activity;busy;\n' | nc -U "$KTERM_ACTIVITY_SOCKET")。KTERM_ACTIVITY_SOCKET を引き継げば tmux の中でも動きます。
printf '\e]7777;activity;busy;\e\\' # 考え中 printf '\e]7777;activity;tool;Bash\e\\' # ツール実行中(ラベル付き) printf '\e]7777;activity;attention;\e\\' # 応答待ち printf '\e]7777;activity;done;\e\\' # 完了 printf '\e]7777;activity;error;\e\\' # 失敗 printf '\e]7777;activity;off;\e\\' # 消灯
作業状態の音は kTerm が鳴らすので、Claude Code 側の設定は要りません。Codex CLI は完了をベルで知らせるよう、~/.codex/config.toml に次を追加します。
[tui] notifications = true notification_method = "bel" notification_condition = "always"
kTerm は終了しています。動き続けているのは Codex CLI の常駐サーバーです。Codex CLI 0.157 以降は、次回の起動を速くするため、起動したターミナルを閉じてもこのサーバーが動き続けます。macOS はこのサーバーを起動元のアプリの一部として数えるため、kTerm の名前でシステム設定の「一般 > ログイン項目」に表示します。止めるときは codex app-server daemon stop を実行します。常駐させずに使うときは codex --no-daemon で起動します。
| Cmd+Shift+] / [ | 次 / 前の背景色(そのウインドウだけ) |
| Cmd+N | 新規ウインドウ |
| Cmd+W | ウインドウを閉じる(セッション終了) |
| Cmd+K | 画面とスクロールバックを消去 |
| Cmd++ / - / 0 | そのウインドウの文字を大きく / 小さく / 元に戻す |
| Cmd+← / → | 行頭 / 行末 |
| Option+← / → | 単語単位の移動 |
| Shift+PageUp / PageDown | スクロールバックのページ移動 |
| ドラッグ | 選択と同時にコピー |
| 右クリック | 貼り付け |
| Cmd+, | 設定: フォント・行間・既定の背景色・スクロールバック行数・Option を Meta キーに・ベル・作業状態の音・背面ウインドウの不透明度 |
~/Library/Application Support/kTerm/themes.json で色を追加・上書きできます。保存すると即座に反映され、設定画面の「Finder で表示」で雛形を作れます。
kTerm は Kodama & Co. の Developer ID で署名し、Apple の公証を受けています。初回起動時に「インターネットからダウンロードされたアプリケーション」の確認が一度出るだけで、そのまま開けます。
kTerm をゴミ箱に入れます。設定と自作の色も消す場合は ~/Library/Preferences/com.kodama.kTerm.plist と ~/Library/Application Support/kTerm を削除します。
| バージョン | 公開日 | 主な変更とダウンロード |
|---|---|---|
| 1.0.10 | 2026年10月9日 |
SHA-256 deac9176433a04913a7cb3ca0a92056978c56eb45654c1b3bf7c446179ff7658
|
| 1.0.9 | 2026年10月7日 |
|
| 1.0.8 | 2026年9月27日 |
|
| 1.0.7 | 2026年9月27日 |
|
| 1.0.6 | 2026年9月27日 |
|
| 1.0.5 | 2026年9月26日 |
|
| 1.0.4 | 2026年9月25日 |
|
| 1.0.3 | 2026年9月23日 |
|
ダウンロードしたファイルはターミナルで照合できます。
shasum -a 256 ~/Downloads/kTerm-1.0.10.dmg