8月1日、grigio.orgが「jcode: The Coding Agent That Raises the Skill Ceiling, vs opencode and pi」と題した記事を公開した。この記事では、ターミナル完結型のAIコーディングエージェントjcode・opencode・piを比較し、jcodeが持つ差別化機能について詳しく紹介されている。
なかでも目を引くのが「セルフ開発モード(self-dev)」だ。エージェントが自分自身のソースコードを書き換え、ビルド・テストを走らせ、セッションを引き継いだままバイナリを差し替える——この仕組みがjcodeを他のエージェントと根本的に異なる存在にしている。
AIコーディングエージェントの競争は、CopilotやCursorのようなIDE統合型だけでなく、ターミナルファーストの「エージェントハーネス」(AIモデルを呼び出すランタイム層。ツール実行・セッション管理・プロセス制御を担い、モデルそのものとは区別される)と呼ばれる領域でも加速している。現在この分野で頭角を現しているのがopencode・pi・jcodeの3つだ。
3ツールの立ち位置
まず各ツールの位置付けを整理する。
- **opencode**:TypeScript製。npmプラグイン、MCP(Model Context Protocol)/LSP/ACP対応、デスクトップアプリやIDE拡張も備えた最もフル機能な選択肢。ホスト型ゲートウェイ「OpenCode Zen」も提供。
- **pi**:過激なまでのミニマリズムが設計思想。MCPもサブエージェントもパーミッションポップアップも意図的に省き、複雑さはTypeScript拡張に委ねる。
- jcode:Rustネイティブのバイナリ。「エージェントが自分自身を操作し、他のエージェントと並走できる」ことを中心に設計されている。
jcodeの最大の特徴:自分自身をアップグレードするエージェント
jcodeが他の2つと根本的に異なる点が「セルフ開発モード(self-dev)」だ。
jcode selfdev --build を実行すると、エージェントが自分自身のソースコードを変更し、ビルドとテストを走らせ、新しいバイナリへセッションを引き継いだまま再起動する。会話を途切れさせずにツール自体がアップグレードされる仕組みだ。
これが単なるデモ機能でない理由は、jcodeの開発速度にある。自分自身でドッグフーディングを回すことで、機能の実装・テスト・改善サイクルが数週間ではなく数時間単位で回る。opencode・piはどちらもこの仕組みを持っていない。
スウォームモード:複数エージェントの協調
マルチエージェント構成といえば「複数プロセスを起動して衝突を祈る」というのが実態だが、jcodeのスウォームモードはハーネス側で協調を制御する。
- ファイル競合検出:エージェントAが編集したファイルをエージェントBが古い状態で参照しようとすると、サーバーがBに通知する
- エージェント間メッセージング:DM・グループブロードキャスト・リポジトリスコープの送信が可能
- 自律的なワーカー生成:エージェントが自分でサブエージェントをスポーンし、コーディネーターとワーカーに役割分担できる
大規模なリファクタリングで1つのエージェントがモジュールを直列処理する代わりに、スウォームがファイルを分担し、競合はサーバーが調停し、タスクグラフ(DAG)を共有して進める、という使い方が想定されている。piはサブエージェントを意図的に省き、opencodeはセッション単位の設計のためスウォームには非対応だ。
セマンティックメモリ:セッションをまたいだ記憶
ほとんどのエージェントはセッション終了とともに文脈を失う。jcodeは各ターンをベクトルとして埋め込み、コサイン類似度でグラフから関連記憶を引き出す仕組みを持つ。記憶の注入前に専用のサイドエージェントが関連性を検証するため、トークンを無駄に消費しない。
記憶には以下の属性が付く:
- スコープ(グローバル・プロジェクト・セッション)
- 信頼度(時間とともに減衰)
- 関係性(「supersedes」「contradicts」など)
数週間ぶりにプロジェクトを開いても、config.rs の特定フィールドが存在する理由、インデント設定の好み、.env をコミットしないルール——これらをエージェントが覚えている、という状態が実現する。
パフォーマンス比較
| 項目 | jcode | opencode | pi |
|---|---|---|---|
| 言語/ランタイム | Rust(ネイティブバイナリ) | TypeScript / Bun | TypeScript / Node |
| セルフ開発 | あり | なし | なし |
| スウォーム | あり(競合検出付き) | なし | なし |
| セマンティックメモリ | あり(ベクトルグラフ) | なし | なし(拡張可能) |
| ファーストフレーム時間 | 約14ms | 約1,000ms | 約600ms |
| RAM(10セッション時) | 約261MB | 約3GB超 | 約833MB |
Mermaid図のインラインレンダリングも独自のRust実装(mermaid-rs-renderer)で行い、元記事によればopencodeのTypeScript実装と比較して約1,800倍高速だという。ターミナルのFPSは1,000FPS以上を維持し、フリッカーがない。
セッションポータビリティとオンボーディング
jcodeはClaude Code・Codex・opencode・piで開始したセッションを引き継いで再開できる。ツールを乗り換えても文脈を失わないため、「別のエージェントを試す」コストが実質ゼロになる。
プロバイダー対応も30以上で、Claude・ChatGPT・CopilotはOAuthでそのまま使えるためAPIキー不要。複数アカウントの切り替え(/accountコマンド)にも対応しており、トークンを使い切ったアカウントから別アカウントへ即座に切り替えられる。
まだ開発中:アンビエントモード
「使用中でない時間にバックグラウンドで動き続け、メモリグラフを整理し、小タスクを自律的にこなす」アンビエントモードはjcodeが設計・開発中の機能だ。記事では「設計は詳細だが、まだリリース済みのヘッドライン機能ではない」と正直に書かれている。opencode・piはいずれもハーネスレベルでこの機能を持たない(piのSDK上に構築されたOpenClawは別プロジェクト)。
選択基準のまとめ
なお、元記事で言及されているACPは「Agent Communication Protocol」の略で、エージェント間の標準的な通信インターフェースを定める仕様。MCPがモデルとツールの接続を担うのに対し、ACPはエージェント同士の連携層に位置する。まだ策定途上の規格であり、対応ツールは限られる。
- opencode:JSプラグイン、MCP/LSP/ACP対応、デスクトップアプリが必要な場合
- pi:予測可能な動作と徹底したミニマリズムを好む場合
- jcode:長期プロジェクト・大規模リファクタ・セルフ改善するエージェントが必要な場合
詳細はjcode: The Coding Agent That Raises the Skill Ceiling, vs opencode and piを参照していただきたい。