OpenCode調査まとめ
OpenCodeの概要を調べてみたり、エージェントのプロンプトを読んでみたりしてきましたが、Cursor Agentを使ってさらに調査を進め、まとめを作りました。知りたいと思っていたことを概ねまとめる事ができたので公開します。
私としてはドメインモデルの図が一番参考になりました。
概要
OpenCodeは、AIエージェントを活用したコーディング支援システムです。このドキュメントでは、OpenCodeパッケージのドメインモデル、アーキテクチャ、実装詳細、および運用に関する包括的な情報を提供します。
システム概要
OpenCodeは、AIエージェントを活用したコーディング支援システムで、以下の主要機能を提供します。
AIエージェント: 複数の専門エージェントによるタスク実行
ツールシステム: ファイル操作、シェル実行、Web検索等の機能
多プロバイダー対応: Anthropic、OpenAI、Google等のAIモデル
セッション管理: 対話履歴とタスク管理
設定の柔軟性: プロジェクト単位でのカスタマイズ
リポジトリ構造
packages/opencode/
├── src/
│ ├── agent/ # エージェント定義と管理
│ ├── session/ # セッションとメッセージ管理
│ ├── tool/ # ツールシステム
│ ├── provider/ # AIモデルプロバイダー
│ ├── config/ # 設定管理
│ ├── project/ # プロジェクト管理
│ ├── cli/ # コマンドラインインターフェース
│ ├── lsp/ # Language Server Protocol
│ ├── storage/ # データ永続化
│ └── util/ # ユーティリティ
├── sdks/ # 各種SDK
└── docs/ # ドキュメント主要ディレクトリの役割
agent/: エージェントの定義、初期化、実行管理
session/: 対話セッション、メッセージ、Todo管理
tool/: 標準ツールの実装とレジストリ
provider/: AIモデルプロバイダーの統合
config/: 設定ファイルの読み込みと管理
project/: プロジェクトの検出と管理
ドメインモデル図

小さいので拡大してみてください。

アーキテクチャ詳細
クライアント/サーバーアーキテクチャ
OpenCodeは、以下のコンポーネントで構成される分散アーキテクチャを採用しています。
CLI/UI: ユーザーインターフェース(SolidJS + Vite + TailwindCSS)
Core Logic: エージェント、セッション、ツール管理(TypeScript + Bun)
TUI: ターミナルユーザーインターフェース(Go)
API Server: RESTful API(Hono)
Database: ローカルストレージ(SQLite + Drizzle ORM)
技術スタック
Runtime: Bun(JavaScript/TypeScript)
Frontend: SolidJS, Vite, TailwindCSS
Backend: Hono(Web Framework)
Database: SQLite, Drizzle ORM
Validation: Zod(スキーマバリデーション)
AI Integration: AI SDK
TUI: Go
Parsing: Tree-sitter(Bash解析)
エージェントシステム
エージェントの種類
OpenCodeには以下の標準エージェントが組み込まれています。
1. Build Agent(ビルドエージェント)
役割: コードの作成、編集、実行
モード: primary
特徴: ファイル操作、シェル実行、コード生成
2. Plan Agent(プランエージェント)
役割: タスクの計画と設計
モード: primary
特徴: 編集権限制限、Web検索可能
3. General Agent(汎用エージェント)
役割: 複雑な質問の調査、コード検索
モード: subagent
特徴: 検索特化、Todo管理なし
動的エージェント生成機能
カスタムエージェントを生成するためのプロンプトが内蔵されており、動的にエージェントを生成可能。
ツールシステム
標準ツール一覧
OpenCodeには以下の標準ツールが組み込まれています。
エージェントはこれらのツールをtool callingを通じて呼び出し、ユーザーからの依頼に答えます。
ファイル操作ツール
read: ファイル内容の読み取り
write: ファイルの作成・上書き
edit: ファイル内容の編集(文字列置換)
patch: パッチ形式での複数ファイル変更
multiedit: 単一ファイルへの複数編集操作
検索・探索ツール
glob: ファイルパターンマッチング
grep: ファイル内容の正規表現検索
list: ディレクトリ内容の表示
実行ツール
bash: シェルコマンド実行
webfetch: Webコンテンツ取得
管理ツール
todowrite: タスクリスト更新
todoread: タスクリスト読み取り
task: サブエージェントへの作業委譲
権限管理
ツールの実行は権限システムで制御されます。
interface Permission {
edit: "ask" | "allow" | "deny"
bash: Record<string, "ask" | "allow" | "deny">
webfetch?: "ask" | "allow" | "deny"
}プロバイダーシステム
対応プロバイダー
OpenCodeは以下のAIモデルプロバイダーに対応しています。
1. Anthropic
モデル: Claude Sonnet, Haiku, Opus
認証: `ANTHROPIC_API_KEY`
特徴: 推論機能、画像入力対応
2. OpenAI
モデル: GPT-4, GPT-3.5
認証: `OPENAI_API_KEY`
特徴: 高品質なテキスト生成
3. Google Vertex AI
モデル: Gemini Pro, Gemini Flash
認証: `GOOGLE_CLOUD_PROJECT`
特徴: マルチモーダル対応
4. Amazon Bedrock
モデル: Claude, Llama, Titan
認証: AWS認証情報
特徴: エンタープライズ対応
5. OpenCode(独自)
無料モデル: Big Pickle, Grok Code, Code Supernova
有料モデル: Claude, GPT, Qwen等
特徴: 統合された料金体系
