---
title: Befehle
description: Erstellen Sie benutzerdefinierte Befehle für sich wiederholende Aufgaben.
---

Mit benutzerdefinierten Befehlen können Sie eine Eingabeaufforderung angeben, die ausgeführt werden soll, wenn dieser Befehl im TUI ausgeführt wird.

```bash frame="none"
/my-command
```

Benutzerdefinierte Befehle gibt es zusätzlich zu den integrierten Befehlen wie `/init`, `/undo`, `/redo`, `/share`, `/help`. [Mehr erfahren](/docs/tui#commands).

---

## Befehlsdateien erstellen

Erstellen Sie Markdown-Dateien im Verzeichnis `commands/`, um benutzerdefinierte Befehle zu definieren.

Erstellen Sie `.opencode/commands/test.md`:

```md title=".opencode/commands/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.
```

Der Frontmatter definiert Befehlseigenschaften. Der Inhalt wird zur Vorlage.

Verwenden Sie den Befehl, indem Sie `/` folgen vom Befehlsnamen eingeben.

```bash frame="none"
"/test"
```

---

## Konfiguration

Sie können benutzerdefinierte Befehle über die OpenCode-Konfiguration hinzufügen oder indem Sie Markdown-Dateien im Verzeichnis `commands/` erstellen.

---

### JSON

Verwenden Sie die Option `command` in Ihrem 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 shown as the description in the TUI
      "description": "Run tests with coverage",
      "agent": "build",
      "model": "anthropic/claude-3-5-sonnet-20241022"
    }
  }
}
```

Jetzt können Sie diesen Befehl im TUI ausführen:

```bash frame="none"
/test
```

---

### Markdown

Sie können Befehle auch mithilfe von Markdown-Dateien definieren. Platzieren Sie sie in:

- Global: `~/.config/opencode/commands/`
- Pro Projekt: `.opencode/commands/`

```markdown title="~/.config/opencode/commands/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.
```

Der Name der Markdown-Datei wird zum Befehlsnamen. Zum Beispiel `test.md` lässt
Du läufst:

```bash frame="none"
/test
```

---

## Prompt-Konfiguration

Die Eingabeaufforderungen für die benutzerdefinierten Befehle unterstützen mehrere spezielle Platzhalter und Syntax.

---

### Argumente

Übergeben Sie Argumente an Befehle mithilfe des Platzhalters `$ARGUMENTS`.

```md title=".opencode/commands/component.md"
---
description: Create a new component
---

Create a new React component named $ARGUMENTS with TypeScript support.
Include proper typing and basic structure.
```

Führen Sie den Befehl mit Argumenten aus:

```bash frame="none"
/component Button
```

Und `$ARGUMENTS` wird durch `Button` ersetzt.

Sie können auch über Positionsparameter auf einzelne Argumente zugreifen:

- `$1` – Erstes Argument
- `$2` – Zweites Argument
- `$3` – Drittes Argument
- Und so weiter...

Zum Beispiel:

```md title=".opencode/commands/create-file.md"
---
description: Create a new file with content
---

Create a file named $1 in the directory $2
with the following content: $3
```

Führen Sie den Befehl aus:

```bash frame="none"
/create-file config.json src "{ \"key\": \"value\" }"
```

Dies ersetzt:

- `$1` mit `config.json`
- `$2` mit `src`
- `$3` mit `{ "key": "value" }`

---

### Shell-Ausgabe

Verwenden Sie _!`command`_, um die Ausgabe [bash command](/docs/tui#bash-commands) in Ihre Eingabeaufforderung einzufügen.

So erstellen Sie beispielsweise einen benutzerdefinierten Befehl, der die Testabdeckung analysiert:

```md title=".opencode/commands/analyze-coverage.md"
---
description: Analyze test coverage
---

Here are the current test results:
!`npm test`

Based on these results, suggest improvements to increase coverage.
```

Oder um die letzten Änderungen zu überprüfen:

```md title=".opencode/commands/review-changes.md"
---
description: Review recent changes
---

Recent git commits:
!`git log --oneline -10`

Review these changes and suggest any improvements.
```

Befehle werden im Stammverzeichnis Ihres Projekts ausgeführt und ihre Ausgabe wird Teil der Eingabeaufforderung.

---

### Dateiverweise

Fügen Sie Dateien in Ihren Befehl ein, indem Sie `@` folgend vom Dateinamen verwenden.

```md title=".opencode/commands/review-component.md"
---
description: Review component
---

Review the component in @src/components/Button.tsx.
Check for performance issues and suggest improvements.
```

Der Dateiinhalt wird automatisch in die Eingabeaufforderung einbezogen.

---

## Optionen

Schauen wir uns die Konfigurationsmöglichkeiten im Detail an.

---

### Template

Die Option `template` die Eingabeaufforderung, die an LLM gesendet wird, wenn der Befehl ausgeführt wird.

```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."
    }
  }
}
```

Dies ist eine **erforderliche** Konfigurationsoption.

---

### Description

Verwenden Sie die Option `description`, um eine kurze Beschreibung der Funktion des Befehls bereitzustellen.

```json title="opencode.json"
{
  "command": {
    "test": {
      "description": "Run tests with coverage"
    }
  }
}
```

Dies wird als Beschreibung im TUI angezeigt, wenn Sie den Befehl eingeben.

---

### Agent

Verwenden Sie die `agent`-Konfiguration, um optional anzugeben, welche [agent](/docs/agents) diesen Befehl ausführen soll.
Wenn es sich um einen [subagent](/docs/agents/#subagents) handelt, löst der Befehl standardmäßig einen Subagentenaufruf aus.
Um dieses Verhalten zu deaktivieren, setzen Sie `subtask` auf `false`.

```json title="opencode.json"
{
  "command": {
    "review": {
      "agent": "plan"
    }
  }
}
```

Dies ist eine **optionale** Konfigurationsoption. Wenn nicht angegeben, wird standardmäßig Ihr aktueller Agent verwendet.

---

### Subtask

Verwenden Sie den booleschen Wert `subtask`, um zu erzwingen, dass der Befehl einen [subagent](/docs/agents/#subagents)-Aufruf auslöst.
Dies ist nützlich, wenn Sie möchten, dass der Befehl Ihren primären Kontext nicht verunreinigt und den Agenten dazu zwingt, als Subagent zu fungieren.
auch wenn `mode` in der [agent](/docs/agents)-Konfiguration auf `primary` gesetzt ist.

```json title="opencode.json"
{
  "command": {
    "analyze": {
      "subtask": true
    }
  }
}
```

Dies ist eine **optionale** Konfigurationsoption.

---

### Model

Verwenden Sie die `model`-Konfiguration, um das Standardmodell für diesen Befehl zu überschreiben.

```json title="opencode.json"
{
  "command": {
    "analyze": {
      "model": "anthropic/claude-3-5-sonnet-20241022"
    }
  }
}
```

Dies ist eine **optionale** Konfigurationsoption.

---

## Integriert

OpenCode enthält mehrere integrierte Befehle wie `/init`, `/undo`, `/redo`, `/share`, `/help`; [mehr erfahren](/docs/tui#commands).

:::note
Benutzerdefinierte Befehle können integrierte Befehle überschreiben.
:::

Wenn Sie einen benutzerdefinierten Befehl mit demselben Namen definieren, überschreibt dieser den integrierten Befehl.
