やりたいこと
Claude Codeで作業中に、生成・編集したファイルを「そのファイル開いて」と言うだけで、隣のペインにCUIエディタ(nvim等)で開いてほしい。
筆者は普段nvimで開発しているが、Claude Codeとの会話中にファイルを確認したいとき、毎回ファイルパスをコピーしてペイン分割してnvimを起動して……という手順が面倒だった。会話の流れのまま「開いて」の一言で済ませたい。
herdr とは
herdr は、AIコーディングエージェント時代に向けて設計されたターミナルワークスペースマネージャ。tmuxのようにペイン分割やセッション管理ができるが、CLIからペインを操作するAPIを備えているのが特徴。
今回のように外部プログラム(Claude Code)から herdr pane split や herdr pane run を呼び出してペインを制御できるため、AIエージェントとの連携に適している。
環境
- ターミナルワークスペースマネージャ: herdr
- エディタ: nvim
- AI: Claude Code (CLI)
- jq(シェル関数内でJSONパースに使用)
まずは開くだけなら
Claude Codeのrulesに以下を書けば、herdrのコマンド2つで実現できる。
## ファイルを開く
ユーザーが「開いて」「ファイルを開いて」等の指示をした場合、以下の手順で対象ファイルを開く。
1. `herdr pane split --current --direction right` でペイン分割(レスポンスのpane_idを取得)
2. `herdr pane run <pane_id> nvim <file_path>` で新ペインにnvimを起動
これだけで動作はするが、Claude CodeはBashコマンド実行のたびにユーザーに承認を求める。つまり「開いて」と言うたびに2回の承認が必要になる。これでは手間が減っていない。
承認なしでスムーズに動かすために、以下の3ステップで設定を行う。
設定手順
1. シェル関数を用意する
2つのコマンドを1つのシェル関数にまとめる。こうすることでpermissionのallowパターンを1つ書くだけで済む。.zshrcや.bashrcで定義する。
function herdr-open-nvim() {
if [ $# -eq 0 ]; then
echo "Usage: herdr-open-nvim <file_path>"
return 1
fi
local pane_id=$(herdr pane split --current --direction right 2>/dev/null | jq -r '.result.pane.pane_id')
if [ -z "$pane_id" ]; then
echo "Failed to split pane"
return 1
fi
herdr pane run "$pane_id" nvim "$1"
}
やっていること:
-
herdr pane split --current --direction rightで現在のペインを右方向に分割 - レスポンスのJSONから新しいペインのIDを取得
-
herdr pane run <pane_id> nvim <file>で新ペインにnvimを起動
2. Claude Codeのrulesに行動パターンを定義する
rulesに書くことで、Claude Codeは「開いて」系の指示を受けたときにこのコマンドを使うべきだと理解する。
~/.claude/rules/open_file.md(パスは各自のrules配置場所に合わせる):
## ファイルを開く
ユーザーが「開いて」「ファイルを開いて」等の指示をした場合、`herdr-open-nvim` コマンドで対象ファイルを開く。
\```bash
herdr-open-nvim <file_path>
\```
3. permissionで承認なしに実行できるようにする
~/.claude/settings.json の permissions.allow に追加:
{
"permissions": {
"allow": [
"Bash(herdr-open-nvim *)"
]
}
}
Claude CodeはBashコマンド実行時にデフォルトでユーザー承認を求める。毎回「許可しますか?」と聞かれるのは煩わしいので、このコマンドは事前許可しておく。
使い方
Claude Codeとの会話で:
あなた: このファイル開いて
Claude: (右にペイン分割してnvimで開く)
ファイルパスが文脈から明らかなら指定不要。Claude Codeが直前に触ったファイルを開いてくれる。
rulesとpermissionの使い分け
Claude Codeには行動を制御する仕組みがいくつかある。今回使った2つの整理:
| rules | permission | |
|---|---|---|
| 役割 | 何をすべきか | 何を許可するか |
| 置き場所 |
~/.claude/rules/ やプロジェクトの .claude/CLAUDE.md
|
~/.claude/settings.json |
| 効果 | 毎回必ず読み込まれる | ツール呼び出し時に承認をスキップ |
rulesで「やり方」を教え、permissionで「承認不要」にする。セットで使うことでスムーズに動作する。
まとめ
- herdrのpane APIを使えば、Claude Codeからターミナル操作が可能
- シェル関数にまとめてrules + permissionで設定すれば、自然言語で操作できる
- 同じ手法で「ブラウザで開いて」「ログをtailして」なども実現できる