コーディングエージェントを中心にした作業環境が、ここ数か月でようやく固まってきた。あとから自分が見返すための備忘録として、現在の構成を残しておく。同じようにエージェントを常用している人の参考になれば嬉しい。

数値計算の実装、原稿の推敲、文献調査では、コーディングエージェントを使う時間がかなり長くなった。使う道具が増えるにつれて、次の問題も目立つようになった。

  • あちこちでエージェントを立ち上げるうちに、どれがどこで何をしているのか分からなくなる
  • 設定が各ツールのディレクトリに散るうえ、複数のMacで揃えようとすると手作業で差分が生じる
  • 会話履歴は各エージェントのローカルファイルに残るものの、形式も保存場所も異なるため、あとから横断して探しにくい

対応は三つに分けている。

  1. 作業そのものはHerdr上でPiとClaude Codeを動かして進める
  2. 設定はdotfilesリポジトリにだけ置き、Chezmoiで各ツールの実行時ディレクトリへ配置する
  3. 会話履歴は各Macに残るものをctxで索引し、Obsidian用のMarkdownへ書き出す

作業するところ

前提として、作業はリモートに置いたMacで進めている。そこにHerdrを常駐させ、手元のMacやiPhone、iPadから接続して使う。端末どうしはTailscaleで繋いであるので、外出先からでもSSHがそのまま通る。

flowchart TD
  M["クライアントMac"]
  I["iPhone / iPad"]
  D["Discord<br/>HerdRelay"]
  S["リモートのMac<br/>Herdrが常駐"]
  A["Pi / Claude Code"]

  M -- "SSH / Ghostty" --> S
  I -- "SSH / ShellFish" --> S
  I --> D
  D --> S
  S --> A

Herdrはコーディングエージェント向けのターミナルマルチプレクサで、位置づけとしてはtmuxに近い。セッションはサーバ側に残り続けるため、接続を切っても中で動いているエージェントや計算はそのまま進む。tmuxと違うのはエージェントを動かす前提で作られている点で、どのタブのハーネスが動いていて、どれが入力を待っているかを見分けられる。

Herdrは立ち上げたままにしてあり、その中にプロジェクトのフォルダごとのワークスペースを並べている。ワークスペースの中はシェル、ファイルブラウザ、ハーネスのタブに分けてある。別のテーマに移るときはワークスペースを切り替えるだけで、それぞれのエージェントとの会話はタブに残ったままになる。

ハーネスを二つ使い分けているのには理由がある。主に使うのはPiで、動かすモデルを/modelで切り替えられるのが大きい。Codexの自宅用と仕事用のアカウントも、ログインし直さずにここで行き来できる。一方、AnthropicはClaudeを自社のハーネス以外から使うことを認めていないため、Claudeを動かしたいときは仕方なくClaude Codeを開く。Skillと共通指示は両方から同じ場所を読ませてあるので、どちらで作業しても指示は揃う。

会話中のタブでは、時間のかかる計算を走らせない。別タブを立てて投げ、終わったら元のタブへ通知が返る。会話側はその間も空いているので、計算を待ちながら別の相談ができる。この振り分けは、Piに読ませている共通指示と専用のスキルに書いてある。

タブバーの右端にはCodexとClaudeのサブスク残量を常時出している。アカウントを二つずつ使っているので、重い作業を始める前にどれに余裕があるかを見てから選べる。

机に向かっているときは、クライアントのMacからGhostty越しにSSHで接続する。外出先ではiPhoneやiPadから、自作のHerdRelayを経由してつなぐ。エージェントが動いているペインごとにDiscordのスレッドが立ち、応答がスレッドへ流れ、スレッドに書き込んだ内容がそのままペインへ渡る。SSHクライアントを開くほどでもない用件はこれが早い。画面を直接触りたいときは、iPhoneやiPadからSecure ShellFishでSSH接続する。

作業用のファイルはDropboxの下に置いてある。エージェントが書き換えた結果はそのまま同期されるので、手元の端末で差分を追うかわりに、同期されたファイルを開いて確かめることもできる。

設定を置くところ

自作のSkill、Pi拡張、プロンプト、共通指示、Herdrの設定は、一つのdotfilesリポジトリにだけ置き、Chezmoiで各ツールの実行時ディレクトリへ配置している。

編集はChezmoi越しに行う。

chezmoi edit --apply ~/.pi/agent/AGENTS.md
chezmoi diff

実行時のファイルを直接書き換えてしまったときは、中身を確かめてからchezmoi re-addでリポジトリへ取り込む。chezmoi diffは、認証情報や端末固有の値が紛れ込んでいないかを出す前に見る場所にもなっている。

会話を残すところ

PiとClaude Codeは、それぞれ別の場所と形式で会話履歴を保存する。ctxはそれらを読み取り専用で走査し、一つの索引にまとめる。いつどこでその話をしたかを思い出すのに使っている。

ただし索引はそのMacの中にしかない。自作のctx-obsidian-syncで、索引から生成したMarkdownをObsidianのvaultへ毎時書き出している。vaultはDropboxで同期しているので、どの端末からでも過去の会話を読める。

リモートのMacでは、その日の作業をPiに要約させ、日報としてObsidianのDiaryに書き込ませている。あとから作業を振り返るときに役立っている。