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をちょっと改造すればDevin CLIをACPサーバーモードで回せるのではという話になりました(Issue #5257で一般的なCLIのエージェントに対応するような提案がされているが、どうも動いていないので、手前味噌でやることに)。
やる
HermesはOpenAI SDK形式で chat を呼んでいるので、copilot_acp_client.pyを改造したdevin_acp_client.pyがJSON-RPCに変換し、Devin CLIのACPサーバーにねじ込む感じです。
モデルは先述の通りSWE-1.6. 将来的に変える羽目になったらその時にやればいいやと思ってdevin acpの時に-フラグで指定してます。
- 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エントリーでやってあることを後追いすればいい感じにできました。
使ってみる
普段は~/.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もタダなので、-を書き換えてGLMを使いまくってもいいかもしれません。
やってることはACPでagent繋いだだけなので、同じノリでCursorを繋いでComposer-2.5をhermesのバックエンドに置くこともできると思います。
まあ個人的にはIssueが動いてもっと楽に済むと嬉しいですが……