Skip to main content

Creating Commands

Create .md files in one of two directories:
ScopeDirectory
Global~/.symbiotic/commands/
Project.symbiotic/commands/
The filename (without .md) becomes the command name.
If your command file is in your project directory, it will only be available if you launch Symbiotic Code from that directory.

Example

.symbiotic/commands/test.md
---
description: Run tests with coverage
model: claude-opus-4-6
---

Run the full test suite with coverage report and show any failures.
Focus on the failing tests and suggest fixes.
Use it in the TUI:
/test

JSON config

Alternatively, define commands in symbiotic.json or .symbiotic/symbiotic.json (project), or the same files under ~/.symbiotic/ (global):
{
  "command": {
    "fix": {
      "template": "Fix all issues in @$ARGUMENTS and explain each change.",
      "description": "Fix a file"
    },
    "review": {
      "template": "Review $1 focusing on $2.\\n\\nRecent changes:\\n!`git diff HEAD~1 HEAD -- $1`",
      "description": "Review a file with git context"
    },
    "test": {
      "template": "Run the full test suite with coverage report and show any failures.\\nFocus on the failing tests and suggest fixes.",
      "description": "Run tests with coverage",
      "model": "claude-sonnet-4-5"
    }
  }
}
Supports // single-line comments (.jsonc style).

Frontmatter Options

FieldRequiredDescription
descriptionNoShort description shown in the command palette
modelNoOverride the model used for this command

Template Syntax

$ARGUMENTS — full argument string

---
description: Fix a file
---

Fix all issues in $ARGUMENTS and explain each change.
/fix src/core/session.ts
$ARGUMENTS is replaced with src/core/session.ts.

$1, $2, $3… — positional arguments

---
description: Create a component
---

Create a TUI component named $1 in $2.
Follow the existing patterns in that directory.
/create-component Sidebar src/cli/tui/components
  • $1Sidebar
  • $2src/cli/tui/components
Arguments support quoting:
/create-component "My Component" src/cli/tui/components

!command“ — shell output injection

---
description: Review recent git changes
---

Recent git changes:
!`git diff HEAD~1 HEAD --stat`

Review these changes and suggest improvements.
The shell command runs in the current working directory. Its stdout is injected inline into the prompt.

Priority

When the same command name exists in multiple sources, the highest-priority source wins:
project .symbiotic/symbiotic.json > project symbiotic.json > project markdown > global .symbiotic/symbiotic.json > global symbiotic.json > global markdown
This lets project commands override global defaults, and JSON config override markdown for the same name.