---
title: คำสั่ง
description: คำสั่งที่กำหนดเองสำหรับงานที่ทำซ้ำๆ
---

คำสั่งช่วยให้คุณกำหนดชุดของพรอมต์ที่ใช้บ่อย เพื่อให้สามารถเรียกใช้งานได้อย่างรวดเร็วใน TUI

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

คำสั่งแบบกำหนดเองเป็นส่วนเพิ่มเติมจากคำสั่งในตัว เช่น `/init`, `/undo`, `/redo`, `/share`, `/help` [เรียนรู้เพิ่มเติม](/docs/tui#คำสั่ง)

---

## การสร้างคำสั่ง

สร้างไฟล์ Markdown ในไดเร็กทอรี `commands/` เพื่อกำหนดคำสั่งของคุณ

สร้าง `.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.
```

Frontmatter กำหนดคุณสมบัติของคำสั่ง และเนื้อหาคือพรอมต์ที่จะส่งไปยัง LLM

ใช้คำสั่งโดยพิมพ์ `/` ตามด้วยชื่อไฟล์ (ไม่รวมนามสกุล) ใน TUI:

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

---

## วิธีการกำหนด

คุณสามารถกำหนดคำสั่งได้สองวิธี: ผ่านการกำหนดค่า JSON หรือโดยการสร้างไฟล์ Markdown

---

### JSON

ใช้ส่วน `command` ในไฟล์ [config](/docs/config) ของ OpenCode:

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

รันคำสั่งนี้ใน TUI:

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

---

### Markdown

หากต้องการกำหนดคำสั่งด้วยไฟล์ Markdown ให้วางไฟล์ไว้ใน:

- ระดับผู้ใช้ (Global): `~/.config/opencode/commands/`
- ระดับโปรเจ็กต์: `.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.
```

ชื่อไฟล์ Markdown จะกลายเป็นชื่อคำสั่ง เช่น `test.md` ให้คุณเรียกใช้:

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

---

## อาร์กิวเมนต์และการแทนที่

คำสั่งรองรับอาร์กิวเมนต์ตามตำแหน่งและการแทนที่ค่าพิเศษหลายรายการ

---

### อาร์กิวเมนต์

คุณสามารถส่งผ่านอาร์กิวเมนต์ไปยังคำสั่งของคุณได้โดยใช้ `$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.
```

รันคำสั่งพร้อมอาร์กิวเมนต์:

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

และ `$ARGUMENTS` จะถูกแทนที่ด้วย `Button`

คุณยังสามารถเข้าถึงแต่ละอาร์กิวเมนต์แยกกันได้:

- `$1` - อาร์กิวเมนต์แรก
- `$2` - อาร์กิวเมนต์ที่สอง
- `$3` - อาร์กิวเมนต์ที่สาม
- และอื่นๆ...

ตัวอย่าง:

```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
```

รันคำสั่ง:

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

ผลลัพธ์ที่ได้:

- `$1` แทนด้วย `config.json`
- `$2` แทนด้วย `src`
- `$3` แทนด้วย `{ "key": "value" }`

---

### คำสั่ง Shell

ใช้ _!`command`_ เพื่อแทรกเอาต์พุตของ [คำสั่ง bash](/docs/tui#bash-commands) ใดๆ ลงในพรอมต์ของคุณ

ตัวอย่างเช่น การรันชุดทดสอบและรวมผลลัพธ์:

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

หรือตรวจสอบการเปลี่ยนแปลงล่าสุดใน git:

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

คำสั่งจะถูกดำเนินการในไดเร็กทอรีรากของโปรเจ็กต์

---

### การอ้างอิงไฟล์

คุณสามารถรวมเนื้อหาไฟล์ในคำสั่งของคุณโดยใช้ `@` นำหน้าชื่อไฟล์

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

เนื้อหาของไฟล์จะถูกอ่านและรวมเข้าไปในพรอมต์ที่ส่งไปยัง LLM

---

## ตัวเลือก

มาดูรายละเอียดของตัวเลือกการกำหนดค่าต่างๆ

---

### Template (เทมเพลต)

`template` กำหนดพรอมต์ที่จะถูกส่งไปยัง LLM เมื่อเรียกใช้คำสั่ง

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

ฟิลด์นี้ **จำเป็น** สำหรับการกำหนดค่าแบบ JSON (ใน Markdown คือส่วนเนื้อหา)

---

### Description (คำอธิบาย)

ใช้ตัวเลือก `description` เพื่อให้คำอธิบายโดยย่อเกี่ยวกับสิ่งที่คำสั่งทำ

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

คำอธิบายนี้จะแสดงในรายการเติมคำอัตโนมัติของ TUI เมื่อคุณพิมพ์คำสั่ง

---

### Agent (เอเจนต์)

ใช้ `agent` เพื่อระบุว่า [เอเจนต์](/docs/agents) ใดควรดำเนินการคำสั่งนี้

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

นี่คือ **ทางเลือก** หากไม่ได้ระบุ จะใช้เอเจนต์ปัจจุบันของคุณ

---

### Subtask (งานย่อย)

ใช้ `subtask` (บูลีน) เพื่อระบุว่าคำสั่งควรทำงานเป็น [subagent](/docs/agents/#subagents) หรือไม่

การตั้งค่านี้จะป้องกันไม่ให้คำสั่งรบกวนบริบทหลักของเซสชัน และจะ **บังคับ** ให้เอเจนต์ใช้โหมดที่เหมาะสม

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

ส่วนนี้ **ทางเลือก**

---

### Model (โมเดล)

ใช้ `model` เพื่อกำหนดโมเดลเฉพาะสำหรับคำสั่งนี้

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

ส่วนนี้ **ทางเลือก**

---

### Built-ins (ในตัว)

OpenCode มีคำสั่งในตัวหลายคำสั่ง เช่น `/init`, `/undo`, `/redo`, `/share`, `/help` [เรียนรู้เพิ่มเติม](/docs/tui#คำสั่ง)

:::note
คุณสามารถเขียนทับคำสั่งในตัวได้โดยกำหนดคำสั่งที่กำหนดเองด้วยชื่อเดียวกัน
:::

อย่างไรก็ตาม เราไม่แนะนำให้ทำเช่นนั้น เว้นแต่คุณจะมีเหตุผลที่เฉพาะเจาะจง
