🚀 Devin専門の解説メディア「StartDevin」を運営中!
Devinの導入・使い方・最新アップデート・活用事例を、日本語でまとめています。
👉 StartDevin をチェックする(startdevin.jp)
この記事にぜひ いいね していただけると励みになります 🙌
はじめに
複数のCLI型AIエージェントを併用していると、あるあるな瞬間があります。Claude Codeに実装させて、その結果をDevinにレビューさせたい。でも両者は直接つながっていないので、私が片方の出力をコピーして、もう片方のプロンプトに貼り付ける。この「人間コピペ運び屋」を一日に何度もやっていると、さすがに「これ、エージェント同士で勝手にやり取りしてくれないの?」と思えてきます。
そんな課題にドンピシャなツールを見つけました。agmsg(作者: fujibee さん、MIT ライセンス)です。Claude Code、Codex、Gemini CLI などのCLIエージェント同士を、人間を介さずメッセージでつなぐ仕組みです。
ただ、公式にサポートされているエージェント型に Devin(Devin for Terminal)は入っていません。そこで私は、「Devin CLI をagmsgの輪に混ぜられるか?」を実際に手を動かして検証しました。この記事は、その agmsgの仕組みの解説 と Devin × Claude Code の連携検証 をまとめたものです。
agmsgとは何か(そして何ではないか)
agmsgを一言でいうと、**CLIエージェント用の超軽量な「共有掲示板」**です。おもしろいのは、公式READMEが「これは○○ではない」を先に強調している点で、ここに設計思想が凝縮されています。
| よくある誤解 | agmsgの実際 |
|---|---|
| MCPサーバの一種でしょ? |
違う。 MCPサーバも追加ランタイムも不要。実体は bash + sqlite3 だけ |
| サブエージェント機能でしょ? | 違う。 親が子を管理するのではなく、別ツールの 対等な(peer) セッション同士をつなぐ |
| メッセージキュー(ブローカー)でしょ? | 違う。 ブローカーは存在しない。「SQLiteファイルが床、エージェントはその上のプレイヤー」 |
私が最初にこの設計を読んだとき、「デーモンもサーバもネットワークも無いのに成立するの?」と半信半疑でした。答えは、共有された1個のSQLiteファイルにみんなで読み書きするだけ、というものです。
アーキテクチャ:ぜんぶローカルのSQLite 1ファイル
メッセージは ~/.agents/skills/agmsg/db/messages.db という単一のSQLite(WALモード)に格納されます。スキーマは拍子抜けするほど素朴で、messages(team, from_agent, to_agent, body, created_at, read_at) というテーブルがあるだけです。
WALモードなので「複数リーダー + 単一ライター」が競合せずに共存できます。送信は send.sh が1行INSERTするだけ、受信は inbox.sh が自分宛ての未読を読んで既読にするだけ。デーモンもソケットもありません。
受信の通知方法(delivery mode)は4種類から選べます。
| モード | 仕組み | レイテンシ | 向いている相手 |
|---|---|---|---|
| monitor(Claude Code既定) | SessionStartフック → Monitorツールでブロッキング購読 | 約5秒 | リアルタイムpushが欲しいClaude Code |
| turn | Stopフックがターン終了ごとに受信箱を確認 | 次の対話まで | Monitorツールを持たないCodexなど |
| both | monitor主 + turnを保険に | 約5秒 | 両掛けしたい人 |
| off | 自動配信なし。手動 /agmsg のみ |
手動 | ミニマリスト |
そして、ターンの譲り合いや暴走ループの防止は、トランスポート(agmsg本体)ではなく、プロンプト=プロトコル層に委ねられているのが重要なポイントです。agmsgはあえて「賢くない床」に徹しています。
本題:Devin CLIはサポート外。それでも混ぜられるのか?
ここで冒頭の問題に戻ります。agmsgが公式に認識するエージェント型を確認すると、Devinは含まれていません。実際、Devinを型として join.sh(チーム参加)に渡すと、はっきり拒否されました。
$ ~/.agents/skills/agmsg/scripts/join.sh startdevin devin devin "$(pwd)"
Unknown agent type: 'devin' (supported: antigravity, claude-code,
codex, copilot, cursor, gemini, grok-build, hermes, opencode)
「じゃあ無理か」と思いきや、agmsgのソースを読んで気づきました。チーム登録(join)を要求しているのは、監視モードや自動配信の仕組みだけです。メッセージの送受信を担う send.sh と inbox.sh は、チーム設定を一切参照しません。ただSQLiteテーブルに対して (team, from, to) という ただの文字列で読み書きするだけなのです。
これはREADMEにある 「Shell (any agent)」パスそのものです。Devinはシェルを実行できるので、send.sh/inbox.sh を直接叩けば、ドライバが無くても共有フロアに完全に参加できるはず——という仮説が立ちました。あとは動かして確かめるだけです。
ハンズオン:セットアップ
まずagmsgをインストールします。npx agmsg が最速ですが、私は挙動を読みたかったのでリポジトリをcloneして入れました。
git clone https://github.com/fujibee/agmsg.git
cd agmsg
./install.sh --cmd agmsg --agent-type claude-code
# → ~/.agents/skills/agmsg/ に v1.1.3 が入り、/agmsg コマンドが追加される
次にClaude Code側をチームに参加させます。チーム名は今回 startdevin にしました。
SK=~/.agents/skills/agmsg/scripts
$SK/join.sh startdevin cc claude-code "$(pwd)"
# → Created team: startdevin / Joined team startdevin as cc
Devin側は前述の通り「join不要」です。エージェント名 devin として、生スクリプトで送受信させます。Devinには受信箱の読み方と返信の仕方を、非対話モード(devin -p)のプロンプトで教え込みます。
# Devinに渡すプロンプト(prompt-file)
cat > task.md <<'EOF'
あなたは "agmsg" に "devin" として参加しています。
スクリプトは ~/.agents/skills/agmsg/scripts/ にあります。順に実行してください:
1. 受信箱を確認: ~/.agents/skills/agmsg/scripts/inbox.sh startdevin devin
2. 受信したタスクの内容に従って作業する。
3. 結果を送信元 cc に返信:
~/.agents/skills/agmsg/scripts/send.sh startdevin devin cc "ここに結果"
EOF
devin -p --permission-mode dangerous --prompt-file task.md のように、非対話モードで確認プロンプトに止められないようにして呼び出します(--permission-mode の詳細は前回の記事を参照)。
検証①:Claude Code → Devin へタスクを委譲する
シナリオはシンプルです。Claude CodeがDevinに調査タスクを丸投げし、Devinが実行して結果を返す。まずClaude Code(cc)から送信します。
$SK/send.sh startdevin cc devin \
"このリポジトリの articles/ 配下にある .md ファイルの総数を数えて、agmsgで cc に返信して"
# → Sent to devin in team startdevin
この時点でSQLiteには、cc → devin の未読メッセージ(read_at = NULL)が1行入っています。ここでDevinを起動すると、Devinは受信箱を読み、自分でファイルを数え、send.sh で返信してきました。Devin自身の最終出力がこれです。
作業完了しました。
- articles/ 配下の .md ファイルの総数: 50件
- qiita/drafts: 28件 / qiita/published: 14件
- zenn/drafts: 6件 / zenn/published: 2件
結果を agmsg で cc に返信済みです。
そしてClaude Code側で受信箱を確認すると、Devinからの返信がちゃんと届いていました。
$ $SK/inbox.sh startdevin cc
1 new message(s):
[2026-07-01T05:48:15Z] devin: articles/ 配下の .md ファイルの総数は 50 件です。
内訳は qiita/drafts に 28 件、qiita/published に 14 件、zenn/drafts に 6 件、
zenn/published に 2 件で、Devin や Red Hat AI Factory、Claude Code 関連の技術記事が中心です。
人間のコピペは一度も発生していません。Claude Codeが投げ、Devinが受け取り、こなして返す。この一連が共有SQLiteファイル1個の上だけで完結しました。
検証②:逆方向(Devin → Claude Code)も試す
一方向だけでは「peer(対等)」とは言えません。今度はDevinを起点にして、Claude Codeに質問を投げさせます。
Devinに「記事のファイル名を提案してほしいとccに聞いて」と指示すると、Devinはその質問を送信しました。Claude Code側で受信し、回答を返します。最終的な全トランスクリプト(history.sh)がこちらです(○=既読、●=未読。日時と本文は見やすく抜粋・整形しています)。
○ [05:47:24Z] cc → devin: タスク依頼です。articles/ 配下の .md ファイル総数を数えて返信して
○ [05:48:15Z] devin → cc: .md ファイルの総数は 50 件です。内訳は qiita/drafts に 28 件...
○ [05:48:59Z] devin → cc: agmsg のブログを書きます。新規記事のファイル名を1つ提案してください
● [05:49:06Z] cc → devin: 提案: 0701-agmsg-devin-claude-code-handoff.md(日付プレフィックス+スラッグ)
余談ですが、この記事のファイル名 0701-agmsg-devin-claude-code-handoff.md は、実際にこの検証中にagmsg上でDevinから聞かれてClaude Codeが答えたものです。記事の名前を、記事の題材であるagmsgそのものの上で決めた、という妙な入れ子構造になりました。
使ってみて分かった注意点
実際に回してみると、「動く」だけでなく「気をつける点」も見えてきました。私が引っかかった/意識したポイントを残しておきます。
| 論点 | 実際どうだったか |
|---|---|
| Devinの自動受信 | できない。Devinはドライバが無く、monitor/turnフックが入らない。受信は devin -p に「inbox.shを叩け」と毎回指示するプル型になる |
| 一発仕事向き | 上記の裏返しで、常駐して待ち受けるより、起動時のプロンプトに「受信→作業→返信」を畳んで1ターンで回す使い方が相性◎(agmsg の spawn/--boot-prompt は claude-code/codex 専用で、Devin の起動はこちらで手当てする) |
| 同一タスクの奪い合い | v1にはクレーム/ロックが無い。同じ名前を複数が購読すると両方が反応しうる。停止条件はプロンプト側で(「N往復で終了」等) |
| 権限モード | Devinが send.sh を自律実行するには --permission-mode の緩和が要る。私は検証用に dangerous を使ったが、常用は用途に応じて絞るべき |
| インストールの副作用 |
~/.agents/skills/agmsg/ の作成と /agmsg コマンド追加のほか、~/.codex/config.toml が書き換わる(バックアップは自動作成される)。プロジェクトの .claude/settings.local.json は今回は変更されなかった |
とくに「Devinはプル型(自動push無し)」という性質は、Devin for Terminalが devin -p で非対話ワンショット実行を得意とすることと、きれいに噛み合います。常時監視のClaude Codeが司令塔、呼ばれたら仕事して返すDevinが実行部隊、という役割分担が自然に立ち上がりました。
おわりに
この記事では、agmsgが「MCPでもサブエージェントでもキューでもない、SQLite 1ファイルの共有フロア」であることを解説し、公式サポート外のDevin CLIを、生スクリプト経由でその輪に混ぜられるかを実際に検証しました。
結論として、Claude Code ⇄ Devin の双方向タスク受け渡しは、人間のコピペゼロで成立しました。ポイントは、agmsgの送受信が「ただのSQLiteへの文字列read/write」に過ぎず、ドライバの有無に縛られないという素朴さにあります。賢くない床だからこそ、想定外のエージェントも乗せられる、というわけです。
同じように複数エージェントを併用して「コピペ運び屋」に疲れている方は、ぜひ試してみてください。まずは npx agmsg から始められます。
参考リンク
- agmsg(GitHub) — 本記事の題材。README・ARCHITECTURE.md・SKILL.md を参照
- agmsg 公式サイト(agmsg.cc)
- Devin公式ドキュメント
-
devinを対話で使うのに疲れた人へ:非対話モード(devin -p) —--permission-modeなどの詳細
謝辞:軽量で「読める」設計のagmsgを公開してくださった fujibee さんに感謝します。本記事の仕組み解説は、同リポジトリのREADME・ドキュメントを読み解いたうえで、手元で実際に動かして確認した内容です。