summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src/content/docs/commands.mdx
diff options
context:
space:
mode:
Diffstat (limited to 'packages/web/src/content/docs/commands.mdx')
-rw-r--r--packages/web/src/content/docs/commands.mdx271
1 files changed, 271 insertions, 0 deletions
diff --git a/packages/web/src/content/docs/commands.mdx b/packages/web/src/content/docs/commands.mdx
new file mode 100644
index 000000000..59c9536ac
--- /dev/null
+++ b/packages/web/src/content/docs/commands.mdx
@@ -0,0 +1,271 @@
+---
+title: Commands
+description: Create custom commands for repetitive tasks.
+---
+
+Custom commands let you specify a prompt you want to run when that command is executed in the TUI.
+
+```bash frame="none"
+/my-command
+```
+
+Custom commands are in addition to the built-in commands like `/init`, `/undo`, `/redo`, `/share`, `/help`. [Learn more](/docs/tui#commands).
+
+---
+
+## Create command files
+
+Create markdown files in the `command/` directory to define custom commands.
+
+Create `.opencode/command/test.md`:
+
+```md title=".opencode/command/test.md"
+---
+description: Run tests with coverage
+agent: build
+model: anthropic/claude-3-5-sonnet-20241022
+---
+
+Run the full test suite with coverage report and show any failures.
+Focus on the failing tests and suggest fixes.
+```
+
+The frontmatter defines command properties. The content becomes the template.
+
+Use the command by typing `/` followed by the command name.
+
+```bash frame="none"
+"/test"
+```
+
+---
+
+## Configure
+
+You can add custom commands through the opencode config or by creating markdown files in the `command/` directory.
+
+---
+
+### JSON
+
+Use the `command` option in your opencode [config](/docs/config):
+
+```json title="opencode.jsonc" {4-12}
+{
+ "$schema": "https://opencode.ai/config.json",
+ "command": {
+ // This becomes the name of the command
+ "test": {
+ // This is the prompt that will be sent to the LLM
+ "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes.",
+ // This is show as the description in the TUI
+ "description": "Run tests with coverage",
+ "agent": "build",
+ "model": "anthropic/claude-3-5-sonnet-20241022"
+ },
+ }
+}
+```
+
+Now you can run this command in the TUI:
+
+```bash frame="none"
+/test
+```
+
+---
+
+### Markdown
+
+You can also define commands using markdown files. Place them in:
+
+- Global: `~/.config/opencode/command/`
+- Per-project: `.opencode/command/`
+
+```markdown title="~/.config/opencode/command/test.md"
+---
+description: Run tests with coverage
+agent: build
+model: anthropic/claude-3-5-sonnet-20241022
+---
+
+Run the full test suite with coverage report and show any failures.
+Focus on the failing tests and suggest fixes.
+```
+
+The markdown file name becomes the command name. For example, `test.md` lets
+you run:
+
+```bash frame="none"
+/test
+```
+
+---
+
+## Prompt config
+
+The prompts for the custom commands support several special placeholders and syntax.
+
+---
+
+### Arguments
+
+Pass arguments to commands using the `$ARGUMENTS` placeholder.
+
+```md title=".opencode/command/component.md"
+---
+description: Create a new component
+---
+
+Create a new React component named $ARGUMENTS with TypeScript support.
+Include proper typing and basic structure.
+```
+
+Run the command with arguments:
+
+```bash frame="none"
+/component Button
+```
+
+And `$ARGUMENTS` will be replaced with `Button`.
+
+---
+
+### Shell output
+
+Use _!`command`_ to inject [bash command](/docs/tui#bash-commands) output into your prompt.
+
+For example, to create a custom command that analyzes test coverage:
+
+```md title=".opencode/command/analyze-coverage.md"
+---
+description: Analyze test coverage
+---
+
+Here are the current test results:
+!`npm test`
+
+Based on these results, suggest improvements to increase coverage.
+```
+
+Or to review recent changes:
+
+```md title=".opencode/command/review-changes.md"
+---
+description: Review recent changes
+---
+
+Recent git commits:
+!`git log --oneline -10`
+
+Review these changes and suggest any improvements.
+```
+
+Commands run in your project's root directory and their output becomes part of the prompt.
+
+---
+
+### File references
+
+Include files in your command using `@` followed by the filename.
+
+```md title=".opencode/command/review-component.md"
+---
+description: Review component
+---
+
+Review the component in @src/components/Button.tsx.
+Check for performance issues and suggest improvements.
+```
+
+The file content gets included in the prompt automatically.
+
+---
+
+## Options
+
+Let's look at the configuration options in detail.
+
+---
+
+### Template
+
+The `template` option defines the prompt that will be sent to the LLM when the command is executed.
+
+```json title="opencode.json"
+{
+ "command": {
+ "test": {
+ "template": "Run the full test suite with coverage report and show any failures.\nFocus on the failing tests and suggest fixes."
+ }
+ }
+}
+```
+
+This is a **required** config option.
+
+---
+
+### Description
+
+Use the `description` option to provide a brief description of what the command does.
+
+```json title="opencode.json"
+{
+ "command": {
+ "test": {
+ "description": "Run tests with coverage"
+ }
+ }
+}
+```
+
+This is shown as the description in the TUI when you type in the command.
+
+---
+
+### Agent
+
+Use the `agent` config to optionally specify which [agent](/docs/agents) should execute this command.
+
+```json title="opencode.json"
+{
+ "command": {
+ "review": {
+ "agent": "plan"
+ }
+ }
+}
+```
+
+This is an **optional** config option. If not specified, defaults to "build".
+
+---
+
+### Model
+
+Use the `model` config to override the default model for this command.
+
+```json title="opencode.json"
+{
+ "command": {
+ "analyze": {
+ "model": "anthropic/claude-3-5-sonnet-20241022"
+ }
+ }
+}
+```
+
+This is an **optional** config option.
+
+---
+
+## Built-in
+
+opencode includes several built-in commands like `/init`, `/undo`, `/redo`, `/share`, `/help`; [learn more](/docs/tui#commands).
+
+:::note
+Custom commands can override built-in commands.
+:::
+
+If you define a custom command with the same name, it will override the built-in command.