1ex.me/Blog/hermes-devin-acp

Hermes Agentを使い放題にしてみた

TL;DR

SWE-1.6安すぎ

はじめに

特に何も考えず、比較的usageに余裕があるからというだけでGPT-5.4をHermes Agentのバックエンドに置いていました。

しかし、

  • Codexのusageとカニバる
  • そもそもちょっとusageが不安

なあたりから、なにかいい(お安い)モデルがあればいいのになあと思っており、もっと欲を言うならDevinのSWE-1.6が無料(7/10までならGLM-5.2も無料)なのでなんとかしてHermesから呼び出せないかなあと探していました。

Hermesは基本的にカスタムAPIエンドポイントもOpenAI互換とかしか受けてくれないのでそのままではDevinのAPIを読んでくれず(Cursorとかも同じ理由で無理)、友人@nkowne63rt と唸っていたところ、どうやらHermesにはCopilot向けのACPがあるらしく、copilot_acp_client.pyをちょっと改造すればDevin CLIをACPサーバーモードで回せるのではという話になりました(Issue #5257で一般的なCLIのエージェントに対応するような提案がされているが、どうも動いていないので、手前味噌でやることに)。

やる

HermesはOpenAI SDK形式で chat.completions.create() を呼んでいるので、copilot_acp_client.pyを改造したdevin_acp_client.pyがJSON-RPCに変換し、Devin CLIのACPサーバーにねじ込む感じです。

モデルは先述の通りSWE-1.6. 将来的に変える羽目になったらその時にやればいいやと思ってdevin acpの時に--model SWE-1.6フラグで指定してます。

  • agent_init.py, model_metadata.pyあたりのファイルを編集してdevin-acpをACPクライアントとして認識
  • agent_runtime_helpers.pyでルーティングを解決
  • auth.pyやmodels.py, providers.pyあたりで認証とプロバイダー登録
  • auth.pyでエイリアス
  • あとtests/にdevin-acpケースを追加

みたいな感じで編集する箇所は多いですが軒並みcopilot-acpエントリーでやってあることを後追いすればいい感じにできました。

使ってみる

普段は~/.hermes/config.yamlでterminal.cwdをObsidian Vaultのパスに設定しているので

model:
  default: devin-acp
  provider: devin-acp
  base_url: acp://devin
  api_mode: chat_completions

terminal:
  backend: local
  cwd: <Obsidianのパス>

にしています。

とりあえず現在hermesで動いているcron jobは問題なく回っています。賢さも(ちょっとコーディング周りに知識が偏ってるけど)まずまずで、さらにSWE-1.6はCerebrasでホストされているのでとても速い。速さに関しては嬉しい誤算でした。

そしてなによりもタダ。タダより怖いもんはないけれど、少なくとも今の価格設定が続く限りはusageの心配がなくなりました。

Devinはかなり高頻度でpromo pricingをしていて、7/10までKimi K2.7とZ.ai GLM-5.2もタダなので、--modelを書き換えてGLMを使いまくってもいいかもしれません。

やってることはACPでagent繋いだだけなので、同じノリでCursorを繋いでComposer-2.5をhermesのバックエンドに置くこともできると思います。

まあ個人的にはIssueが動いてもっと楽に済むと嬉しいですが