herdr の prefix キーを Ctrl+J にする

Sep 8, 2026 21:51 ·

最近 herdr を使っている。tmux みたいに prefix キー(デフォルトは Ctrl+B)を押してから次のキーでペイン操作をするタイプのツールで、複数の AI コーディングエージェントを一つのターミナルで飼うのに便利。

このプレフィックスを tmux 時代の癖で Ctrl+J に変えたかったんだけど、そのままでは動かない。Ctrl+J はターミナル上では生バイトの LF (0x0A) そのもので、Enter キーと全く同じ扱いになる。区別するには kitty keyboard protocol (CSI-u) という拡張が必要だけど、手元の外側ターミナル(Terminal.app)がこれに非対応で、herdr クライアント自身も外側ターミナルに拡張モードを要求していない。結果、herdr からは「Enter が押された」としか見えず、そのままペインに素通りして改行になってしまう。

なので OS レイヤー(Karabiner-Elements)で Ctrl+J を別の chord に変換することにした。行き着いた先は Ctrl+Alt+J。herdr の公式ドキュメントで「どの OS・ターミナルでも確実に届く安全な選択肢」として推奨されている組み合わせで、readline のバインドとも Mac のメディアキーとも衝突しない。

~/.config/karabiner/assets/complex_modifications/herdr-ctrl-j-prefix.json に以下を置く。

{
  "title": "herdr: Ctrl+J を prefix (Ctrl+Alt+J) に変換",
  "rules": [
    {
      "description": "ターミナル内で Ctrl+J -> Ctrl+Alt+J (herdr prefix)",
      "manipulators": [
        {
          "type": "basic",
          "from": {
            "key_code": "j",
            "modifiers": { "mandatory": ["control"], "optional": ["caps_lock"] }
          },
          "to": [
            { "key_code": "j", "modifiers": ["left_control", "left_option"] }
          ],
          "conditions": [
            {
              "type": "frontmost_application_if",
              "bundle_identifiers": [
                "^com\\.apple\\.Terminal$",
                "^com\\.github\\.wez\\.wezterm$",
                "^com\\.googlecode\\.iterm2$",
                "^com\\.mitchellh\\.ghostty$"
              ]
            }
          ]
        }
      ]
    }
  ]
}

frontmost_application_if の条件でターミナル系アプリが最前面のときだけ発動するようにしてあるので、他のアプリでは Ctrl+J は普段通り Enter として動く。配置したら Karabiner-Elements の Complex Modifications タブからこのルールを Enable にする。

herdr 側は ~/.config/herdr/config.toml で prefix を指定する。

[keys]
prefix = "ctrl+alt+j"

herdr server reload-config で反映すれば完了。Ctrl+J を押すと裏で Ctrl+Alt+J に化けて herdr の prefix として認識される。readline の Ctrl+B(一文字戻る)もそのまま生きているし、音量やシステム設定が暴発することもない。

改行を打ちたいときは Ctrl+J が使えなくなった分、\ + EnterShift+Enter を使う。herdr のペインは kitty keyboard protocol に対応しているので、Terminal.app 配下でも Shift+Enter は普通に効く。

体感としては「Caps Lock を Ctrl にしているキーボードで、左手だけで prefix を押せる」感じになって、かなり快適になった。tmux の癖をそのまま持ち込みたい人には試す価値があると思う。