# /goal di Claude Code: Kerjaan Selesai Tanpa Disuruh Tiap Turn

> Fitur /goal di Claude Code. Kasih kondisi 'kerjaan selesai kalo X', dia kerja sampe X tercapai. Berhenti suruh dia 'lanjut, lanjut, lanjut' tiap kali.

Kamu pernah ngerasa kayak gini pas pakai AI: dia kerja 1 step, balikin hasil, kamu bilang "lanjut". Dia kerja lagi 1 step, balikin, "lanjut". Bolak-balik 30 kali sampe selesai.

Capek. Gak fokus. Kamu cuma jadi tombol "next, next, next."

Claude Code (versi 2.1.139 ke atas) punya fitur namanya **`/goal`**. Kamu kasih dia kondisi *"kerjaan selesai kalo X"*, dia kerja terus tanpa disuruh tiap turn — sampe X tercapai.

Skill pack ini ngejelasin: apa itu, kapan dipake, contoh konkret.

---

## Pakai Analogi: Pesen Mie Goreng

Bayangin kamu pesen mie goreng ke pembantu. Cara biasa:

> Kamu: "Tolong masak mie."
> Pembantu: "Mie udah keluar dari bungkus."
> Kamu: "Ya udah lanjut."
> Pembantu: "Air udah dididih."
> Kamu: "Lanjut."
> Pembantu: "Mie udah dimasukin air."
> Kamu: "Lanjut."

30 menit kamu cuma jadi tombol lanjut. Capek.

Cara pake `/goal`:

> Kamu: "Mienya siap di meja dengan telor, sambel, kerupuk. Kerjain sampe selesai. Lapor pas udah."
> Pembantu: [kerja sendiri 15 menit] "Selesai. Mienya di meja."

Bedanya: kamu kasih **kondisi akhir yang jelas**, dia kerja sampe kondisi itu tercapai.

---

## Kapan Dipake

`/goal` cocok untuk **kerjaan yang punya akhir yang bisa dicek**. Bukan kerjaan kreatif yang harus kamu approve tiap langkah.

| ✅ Cocok Pake /goal | ❌ Gak Cocok |
|:---|:---|
| Semua test di folder `test/auth` pass | "Bikin desain yang bagus" (subjektif) |
| File yang lebih dari 500 baris dipotong jadi modul kecil | "Tulis artikel yang menarik" (kamu harus baca tiap draft) |
| Semua todo di file `TASKS.md` selesai | "Pikirin strategi marketing" (butuh diskusi kamu) |
| Semua merge conflict di branch `feature-x` resolved | "Eksplor opsi untuk fitur baru" (open-ended) |
| Antrian PR yang label-nya `easy-fix` udah habis | "Bikin yang elegan dan modern" (taste call) |

**Pola:** kalo kamu bisa nulis kondisi *"selesai kalo X"* dengan X yang bisa dicek otomatis, pake `/goal`. Kalo gak, jangan.

---

## Cara Pake

Buka Claude Code di terminal. Ketik:

```
/goal semua test di folder test/auth pass dan lint clean
```

Dia langsung mulai kerja. Tiap habis 1 turn, ada model kecil yang cek: *"udah selesai belom?"* Kalo belom, dia kerja lagi. Kalo udah, otomatis berhenti.

**Cek progress:**

```
/goal
```

(Tanpa argument.) Liat: kondisi, udah berapa lama jalan, udah berapa turn, alasan kenapa belom selesai.

**Berhentiin paksa:**

```
/goal clear
```

Boleh juga: `/goal stop`, `/goal off`, `/goal cancel`.

---

## Cara Nulis Kondisi yang Bagus

Kondisi yang bagus punya 3 hal:

| Komponen | Apa Maksudnya | Contoh |
|:---|:---|:---|
| **Akhir yang bisa diukur** | Hal yang jelas selesai atau belum | "Test pass", "exit code 0", "file < 200 baris" |
| **Cara cek** | Gimana Claude bukti selesai | `"npm test exits 0"`, `"git status clean"` |
| **Batasan** | Hal yang gak boleh berubah | "Gak ada test file lain yang dimodifikasi" |

Plus opsional **batas turn** biar gak running selamanya:

```
/goal refactor semua function di src/utils jadi typed, atau stop setelah 20 turn
```

**Anti-pattern kondisi:**

| ❌ Kondisi Jelek | ✅ Kondisi Bagus |
|:---|:---|
| "Bagus" | "Test pass + lint clean" |
| "Selesai" | "File `TASKS.md` kosong" |
| "Kayaknya udah" | "`npm run build` exits 0" |
| "User happy" | "Semua acceptance criteria di design doc tercentang" |

Kuncinya: yang ngecek itu model AI yang baca conversation. Jadi **buktinya harus ada di conversation**. Test result keluar di terminal output → bisa dicek. "User puas" gak ada di output → gak bisa dicek.

---

## Contoh Konkret Per Skenario

### Skenario 1: Migrasi API Lama ke Baru

```
/goal semua import dari module 'old-auth' diganti ke 'new-auth',
semua test pass, dan lint clean
```

Claude bakal scan semua file, ganti import satu-satu, jalanin test tiap putaran sampe semuanya hijau.

### Skenario 2: Pecah File Besar Jadi Modul

```
/goal file src/utils/helpers.ts dipecah jadi file-file lebih kecil,
masing-masing maksimal 200 baris, dan semua import yang refer
ke helpers.ts udah update ke file baru, dan test pass
```

### Skenario 3: Habiskan Antrian Todo

```
/goal semua todo di TASKS.md yang ditag [easy] udah dicentang,
atau stop setelah 15 turn
```

### Skenario 4: Resolve Merge Conflict

```
/goal semua merge conflict di branch ini resolved, git status clean,
dan semua test pass
```

### Skenario 5: Bikin CHANGELOG dari Commit

```
/goal CHANGELOG.md punya entry untuk setiap PR yang di-merge minggu ini
```

### Skenario 6: Cleanup Sampah Tech Debt

```
/goal semua console.log() di src/ udah dihapus, semua function
yang tidak dipake udah dihapus, dan test masih pass
```

---

## Mode Non-Interactive (Run di Background)

Kamu bisa jalanin `/goal` dari terminal tanpa harus duduk di depan terminal:

```bash
claude -p "/goal semua test di test/payment pass dan tidak ada console.log baru"
```

Dia jalan sampe selesai. Hasilnya keluar di terminal. Kamu bisa lakuin hal lain.

**Use case:**
- Run sebelum tidur, paginya hasil udah ada
- Run sambil meeting, balik udah kelar
- Run di CI/CD sebagai check otomatis

Hentikan: `Ctrl+C`.

---

## Perbandingan: /goal vs /loop vs Stop Hook

Tiga cara biar Claude Code kerja terus tanpa kamu suruh tiap step:

| Cara | Trigger Next Turn | Stop Kapan |
|:---|:---|:---|
| **`/goal`** | Tiap habis turn, evaluator cek kondisi | Kondisi terpenuhi |
| **`/loop`** | Interval waktu (mis. tiap 5 menit) | Kamu hentikan atau Claude bilang done |
| **Stop hook** | Tiap habis turn, jalanin script kamu sendiri | Script kamu yang decide |

**Pilih `/goal` kalo:** ada akhir yang bisa dicek model.

**Pilih `/loop` kalo:** mau jalanin sesuatu berulang tiap interval (mis. polling deployment, cek news feed tiap jam).

**Pilih Stop hook kalo:** butuh logic custom yang gak bisa di-judge model (mis. cek file system, query database, hit API spesifik).

---

## Trade-Off + Batasan

Hal yang harus kamu tau sebelum pake:

- **Goal cuma 1 per session.** Set goal baru, goal lama keganti.
- **Evaluator gak run command sendiri.** Dia cuma baca conversation. Jadi kalo Claude gak surface bukti (gak run test, gak print status), evaluator gak bisa decide.
- **Max kondisi 4000 karakter.** Jangan overcomplicate.
- **Token billing.** Tiap evaluator check pake token (model kecil, hemat). Tapi kalo goal-nya susah dicapai dan run 100 turn, tetep ke-billing.
- **Workspace harus trusted.** Pas pertama buka workspace, klik "trust this workspace" dulu.

---

## Workflow Anjuran

1. **Set kondisi yang spesifik** — 1 akhir + cara cek + batasan
2. **Tambahin batas turn** kalo kamu khawatir over-run — `or stop after 20 turns`
3. **Mulai goal**, biarin jalan
4. **Cek `/goal`** kalo penasaran progress
5. **Goal otomatis clear** pas kondisi tercapai
6. **Kalo drift ke arah salah**, `/goal clear`, set ulang dengan kondisi lebih ketat

---

## Buat Siapa

- Developer yang udah pake Claude Code harian, capek tiap turn nge-prompt "lanjut"
- Yang punya kerjaan repetitive dengan akhir jelas (test pass, queue empty, dll)
- Yang mau Claude jalan sambil kamu meeting / tidur

**Bukan untuk:**
- Pemula yang baru kenal AI (mulai dari [sesi 0](/kenalan/sesi-0-apa-itu-ai))
- Kerjaan kreatif yang butuh taste call kamu tiap step
- Hal yang gak bisa diukur "selesai"-nya

---

_Yang murah sekarang: AI nge-execute step. Yang masih mahal: kamu nge-define apa itu "selesai". /goal cuma kasih leverage kalo definisi "selesai"-nya bener._
