|
@@ -43,6 +43,8 @@ already-loaded config until then.
|
|
|
| Global config | `~/.config/opencode/opencode.json` (NOT `~/.opencode/`) |
|
|
| Global config | `~/.config/opencode/opencode.json` (NOT `~/.opencode/`) |
|
|
|
| Project agents | `.opencode/agent/<name>.md` or `.opencode/agents/<name>.md` |
|
|
| Project agents | `.opencode/agent/<name>.md` or `.opencode/agents/<name>.md` |
|
|
|
| Global agents | `~/.config/opencode/agent(s)/<name>.md` |
|
|
| Global agents | `~/.config/opencode/agent(s)/<name>.md` |
|
|
|
|
|
+| Project commands | `.opencode/command/<name>.md` or `.opencode/commands/<name>.md` |
|
|
|
|
|
+| Global commands | `~/.config/opencode/command(s)/<name>.md` |
|
|
|
| Project skills | `.opencode/skill(s)/<name>/SKILL.md` |
|
|
| Project skills | `.opencode/skill(s)/<name>/SKILL.md` |
|
|
|
| Global skills | `~/.config/opencode/skill(s)/<name>/SKILL.md` |
|
|
| Global skills | `~/.config/opencode/skill(s)/<name>/SKILL.md` |
|
|
|
| External skills (auto-loaded) | `~/.claude/skills/<name>/SKILL.md`, `~/.agents/skills/<name>/SKILL.md` |
|
|
| External skills (auto-loaded) | `~/.claude/skills/<name>/SKILL.md`, `~/.agents/skills/<name>/SKILL.md` |
|
|
@@ -96,7 +98,7 @@ Every field is optional.
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
"command": {
|
|
"command": {
|
|
|
- "deploy": { "description": "...", "prompt": "..." }
|
|
|
|
|
|
|
+ "deploy": { "description": "...", "template": "..." }
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
"provider": {
|
|
"provider": {
|
|
@@ -151,6 +153,7 @@ Shape notes worth being explicit about:
|
|
|
- `skills` is an object with `paths` and/or `urls`, not an array.
|
|
- `skills` is an object with `paths` and/or `urls`, not an array.
|
|
|
- `references` is an object keyed by alias. Each value is a local path, Git repository, or string shorthand.
|
|
- `references` is an object keyed by alias. Each value is a local path, Git repository, or string shorthand.
|
|
|
- `agent` is an object keyed by agent name, not an array.
|
|
- `agent` is an object keyed by agent name, not an array.
|
|
|
|
|
+- `command` is an object keyed by command name, not an array.
|
|
|
- `plugin` is an array of strings or `[name, options]` tuples, not an object.
|
|
- `plugin` is an array of strings or `[name, options]` tuples, not an object.
|
|
|
- `mcp[name].command` is an array of strings, never a single string. `type` is required.
|
|
- `mcp[name].command` is an array of strings, never a single string. `type` is required.
|
|
|
- `permission` is either a string action or an object keyed by tool name.
|
|
- `permission` is either a string action or an object keyed by tool name.
|
|
@@ -277,6 +280,31 @@ opencode ships with `build`, `plan`, `general`, `explore`. Hidden internal agent
|
|
|
`compaction`, `title`, `summary`. To override a built-in's fields, define the
|
|
`compaction`, `title`, `summary`. To override a built-in's fields, define the
|
|
|
same key in `agent: { <name>: { ... } }`.
|
|
same key in `agent: { <name>: { ... } }`.
|
|
|
|
|
|
|
|
|
|
+## Commands
|
|
|
|
|
+
|
|
|
|
|
+opencode's command loader scans for `**/*.md` inside command directories. The
|
|
|
|
|
+file is named after the command, and lives directly inside the `command` folder:
|
|
|
|
|
+
|
|
|
|
|
+```
|
|
|
|
|
+.opencode/command/deploy.md
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+Frontmatter:
|
|
|
|
|
+
|
|
|
|
|
+```markdown
|
|
|
|
|
+---
|
|
|
|
|
+description: One sentence describing what the command does.
|
|
|
|
|
+agent: build
|
|
|
|
|
+model: anthropic/claude-sonnet-4-6
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+(command body in markdown: the prompt opencode runs, with $ARGUMENTS for the user's input)
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+- `template` is the command body — everything below the frontmatter — and is required: it is the prompt opencode runs when the command is invoked. Do not also put a `template:` key in the frontmatter.
|
|
|
|
|
+- `$ARGUMENTS` is replaced with everything the user typed after the command; `$1`, `$2`, … pull individual positional arguments.
|
|
|
|
|
+- Optional: `description`, `agent`, `model`, `variant`, `subtask`.
|
|
|
|
|
+
|
|
|
## Plugins
|
|
## Plugins
|
|
|
|
|
|
|
|
`plugin:` is an array. Each entry is one of:
|
|
`plugin:` is an array. Each entry is one of:
|
|
@@ -415,8 +443,8 @@ When a user's config is broken and opencode won't start, these env vars help:
|
|
|
exact shape, or the field is not covered in this skill, fetch
|
|
exact shape, or the field is not covered in this skill, fetch
|
|
|
`https://opencode.ai/config.json` and read the schema rather than guessing.
|
|
`https://opencode.ai/config.json` and read the schema rather than guessing.
|
|
|
- Preserve `$schema` and any existing fields the user did not ask to change.
|
|
- Preserve `$schema` and any existing fields the user did not ask to change.
|
|
|
-- For agent, skill, and plugin definitions, prefer creating new files in the
|
|
|
|
|
- correct location over inlining everything in `opencode.json`.
|
|
|
|
|
|
|
+- For agent, command, skill, and plugin definitions, prefer creating new files
|
|
|
|
|
+ in the correct location over inlining everything in `opencode.json`.
|
|
|
- If the user's existing config is malformed, point them at the env-var escape
|
|
- If the user's existing config is malformed, point them at the env-var escape
|
|
|
hatches above so they can edit from inside opencode without breaking their
|
|
hatches above so they can edit from inside opencode without breaking their
|
|
|
session.
|
|
session.
|