ツール
LLM が使用できるツールを管理します。
ツールにより、LLM はコードベースでアクションを実行できます。OpenCode には組み込みツールのセットが付属していますが、カスタムツールや MCP サーバーで拡張できます。
デフォルトでは、すべてのツールは有効であり、実行に権限は必要ありません。権限を通じてツールの動作を制御できます。
設定
permission フィールドを使用してツールの動作を制御します。各ツールに対して許可、拒否、または承認を要求できます。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "deny",
"bash": "ask",
"webfetch": "allow"
}
}ワイルドカードを使用して複数のツールを一度に制御することもできます。例えば、MCP サーバーのすべてのツールに承認を要求する場合:
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"mymcp_*": "ask"
}
}権限の設定について詳しくはこちらをご覧ください。
組み込みツール
OpenCode で利用可能なすべての組み込みツールは以下の通りです。
bash
プロジェクト環境でシェルコマンドを実行します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": "allow"
}
}このツールにより、LLM は npm install、git status、またはその他のシェルコマンドなどのターミナルコマンドを実行できます。
edit
正確な文字列置換を使用して既存のファイルを変更します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}このツールは、正確なテキストマッチを置換することでファイルを精密に編集します。これは LLM がコードを変更する主な方法です。
write
新しいファイルを作成するか、既存のファイルを上書きします。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}LLM が新しいファイルを作成できるようにするために使用します。ファイルが既に存在する場合は上書きされます。
注意:
writeツールはedit権限によって制御されます。この権限はすべてのファイル変更(edit、write、patch、multiedit)をカバーします。
read
コードベースからファイルの内容を読み取ります。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"read": "allow"
}
}このツールはファイルを読み取り、その内容を返します。大きなファイルの特定の行範囲の読み取りをサポートしています。
grep
正規表現を使用してファイルの内容を検索します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"grep": "allow"
}
}コードベース全体で高速なコンテンツ検索を行います。完全な正規表現構文とファイルパターンフィルタリングをサポートしています。
glob
パターンマッチングでファイルを検索します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"glob": "allow"
}
}**/*.js や src/**/*.ts などの glob パターンを使用してファイルを検索します。変更時間でソートされたマッチするファイルパスを返します。
list
指定されたパス内のファイルとディレクトリを一覧表示します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"list": "allow"
}
}このツールはディレクトリの内容を一覧表示します。結果をフィルタリングするための glob パターンを受け入れます。
lsp(実験的)
設定された LSP サーバーと対話して、定義、参照、ホバー情報、呼び出し階層などのコードインテリジェンス機能を取得します。
注意: このツールは
OPENCODE_EXPERIMENTAL_LSP_TOOL=true(またはOPENCODE_EXPERIMENTAL=true)の場合にのみ利用可能です。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"lsp": "allow"
}
}サポートされている操作には、goToDefinition、findReferences、hover、documentSymbol、workspaceSymbol、goToImplementation、prepareCallHierarchy、incomingCalls、outgoingCalls が含まれます。
プロジェクトで利用可能な LSP サーバーを設定するには、LSP サーバーを参照してください。
patch
ファイルにパッチを適用します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"edit": "allow"
}
}このツールはパッチファイルをコードベースに適用します。さまざまなソースからの diff やパッチを適用するのに便利です。
注意:
patchツールはedit権限によって制御されます。この権限はすべてのファイル変更(edit、write、patch、multiedit)をカバーします。
skill
スキル(SKILL.md ファイル)を読み込み、その内容を会話で返します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"skill": "allow"
}
}todowrite
コーディングセッション中に TODO リストを管理します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todowrite": "allow"
}
}複雑な操作中の進捗を追跡するためのタスクリストを作成および更新します。LLM はこれを使用して複数ステップのタスクを整理します。
注意: このツールはデフォルトでサブエージェントに対して無効になっていますが、手動で有効にできます。詳しくはこちら
todoread
既存の TODO リストを読み取ります。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"todoread": "allow"
}
}現在の TODO リストの状態を読み取ります。LLM はこれを使用して、どのタスクが保留中または完了しているかを追跡します。
注意: このツールはデフォルトでサブエージェントに対して無効になっていますが、手動で有効にできます。詳しくはこちら
webfetch
Web コンテンツを取得します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"webfetch": "allow"
}
}LLM が Web ページを取得して読み取ることを許可します。ドキュメントの参照やオンラインリソースの調査に便利です。
question
実行中にユーザーに質問します。
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"question": "allow"
}
}このツールにより、LLM はタスク中にユーザーに質問できます。以下の場合に便利です:
- ユーザーの好みや要件の収集
- 曖昧な指示の明確化
- 実装の選択に関する決定の取得
- 方向性についての選択肢の提示
各質問にはヘッダー、質問テキスト、オプションのリストが含まれます。ユーザーは提供されたオプションから選択するか、カスタム回答を入力できます。複数の質問がある場合、ユーザーはすべての回答を送信する前に質問間を移動できます。
カスタムツール
カスタムツールを使用すると、LLM が呼び出せる独自の関数を定義できます。これらは設定ファイルで定義され、任意のコードを実行できます。
カスタムツールの作成について詳しくはこちらをご覧ください。
MCP サーバー
MCP(Model Context Protocol)サーバーを使用すると、外部ツールやサービスを統合できます。これにはデータベースアクセス、API 統合、サードパーティサービスが含まれます。
MCP サーバーの設定について詳しくはこちらをご覧ください。
内部実装
内部的には、grep、glob、list などのツールは ripgrep (opens in a new tab) を使用しています。デフォルトでは、ripgrep は .gitignore パターンを尊重するため、.gitignore にリストされているファイルやディレクトリは検索やリストから除外されます。
無視パターン
通常無視されるファイルを含めるには、プロジェクトルートに .ignore ファイルを作成します。このファイルで特定のパスを明示的に許可できます。
!node_modules/
!dist/
!build/例えば、この .ignore ファイルにより、ripgrep は .gitignore にリストされていても node_modules/、dist/、build/ ディレクトリ内を検索できます。