8. Escalation¶
Kapan agent berhenti dan minta bantuan user.
Agent autonomous bisa loop selamanya kalo ga ada exit condition. Escalation pilar nentuin kapan agent harus stop dan kasih kontrol balik ke user.
Yang harus ada¶
## ESCALATION
- Gagal 3x hal yang sama → bilang ke user, jangan loop terus.
- Output ga jelas (ambiguous) → tanya 1 pertanyaan spesifik,
jangan nebak.
- Task di luar capability (butuh GUI captcha, credential ga ada,
butuh approval user langsung) → bilang langsung.
- Kalo user minta sesuatu yang berisiko (transfer besar, delete
penting) → konfirmasi 1x, terus eksekusi.
4 trigger escalation¶
1. Retry limit reached¶
Setelah 3x gagal hal yang sama, stop:
def execute_with_retry(action, max_retries=3):
for attempt in range(max_retries):
result = action()
if result.success:
return result
log_attempt(attempt, result.error)
# Escalate
return EscalationResult(
message=f"Gagal {max_retries}x: {result.error}. "
f"Lo perlu intervene manual.",
last_error=result.error,
attempts=max_retries
)
2. Ambiguity¶
Kalo user request ambigu, tanya 1 pertanyaan spesifik:
❌ Bad:
User: bersihin folder
Agent: Saya ingin memastikan beberapa hal. Folder mana yang Anda
maksud? Apa kriteria 'bersih'? Apakah Anda ingin backup terlebih
dahulu? Apakah ada file yang harus dipertahankan? Apakah Anda
ingin saya tampilkan dulu sebelum menghapus?
5 pertanyaan = annoying.
✅ Good:
User: bersihin folder
Agent: Folder mana? /tmp atau home?
(default: /tmp file lebih dari 7 hari, kalo bukan itu kasih tau)
1 pertanyaan + default = user bisa langsung jawab atau correct.
3. Capability gap¶
Saat agent ga punya tool/credential untuk task:
User: post ke Instagram
Agent (kalo creds belum ada):
"Belum ada credential Instagram. Lo perlu siapin file
~/agent/credentials/instagram.env dengan format:
IG_USERNAME=...
IG_PASSWORD=...
IG_2FA_SECRET=... (kalo ada)
Setelah itu coba lagi."
Pattern: jelasin apa yang missing + cara user supply.
4. High-stakes confirmation¶
Ini overlap sama risk-gating, tapi worth nyebutin di Escalation:
User: transfer 1 ETH ke 0xabc...
Agent: 1 ETH = ~$2000. Address baru (belum pernah dipake).
Sure? Balas "ya" untuk lanjut.
Bedanya risk-gating sama escalation:
- Risk-gating: rule statis (rm = high). Konfirmasi sekali.
- Escalation: dynamic context (3 attempts failed). Kasih kontrol back ke user.
Format escalation message¶
Escalation message harus punya:
- Status: apa yang udah dicoba
- Blocker: kenapa stuck
- Action needed: apa yang user harus lakuin
Contoh:
Stuck di step 3.
Coba 3x git push, semua reject:
- Attempt 1: "non-fast-forward, remote ahead"
- Attempt 2: same (setelah git pull → conflict)
- Attempt 3: same
Lo perlu resolve conflict manual di file X dan Y. Setelah itu
bilang "lanjut", gue retry push.
vs
Yang pertama actionable. Yang kedua membingungkan.
Multi-step task escalation¶
Untuk task multi-step, jangan diem-diem stuck di tengah:
Task: deploy feature X
Step 1: git pull ✅
Step 2: pip install -r requirements ✅
Step 3: pytest ❌ (test_user.py:42 fail)
Stuck di step 3. Test fail karena assertion mismatch.
Output test:
AssertionError: expected 5 got 4
Mau lo investigate, atau gue skip test dan lanjut deploy
(risk: bug bisa ke production)?
Beri opsi yang explicit, biar user pilih.
Escalation vs persistence¶
Kapan keep trying, kapan escalate?
| Situasi | Action |
|---|---|
| First failure, error transient (network) | Retry 1x |
| First failure, error logic (missing arg) | Fix dan retry |
| 2nd failure, sama error | Try different approach |
| 3rd failure, sama error | Escalate |
| Error type berubah tiap retry | Mungkin loop, escalate |
| Errror "permission denied" | Ga akan resolve dengan retry, escalate langsung |
| Error "not found" | Tanya path yang benar, escalate semi-aware |
| Error "credential missing" | Escalate langsung (capability gap) |
Pattern: "I'm stuck, here's what I tried"¶
Format ini paling efektif:
Stuck. Yang udah gue coba:
1. [Approach A]: gagal karena X
2. [Approach B]: gagal karena Y
3. [Approach C]: gagal karena Z
Kemungkinan root cause: [hypothesis]
Yang gue butuh dari lo:
- [Specific action 1]
- [Specific action 2]
Atau lo punya approach lain in mind?
User langsung tau context + bisa kasih guidance.
Anti-patterns¶
❌ Loop infinite¶
Cap retries di kode + check di SOUL.md:
❌ Silent fail¶
Kalo gagal, bilang gagal. Jangan claim selesai.
❌ Escalation tanpa context¶
User: "Bantuan apa?? Apa yang ga bisa??"
Selalu kasih: status + blocker + action needed.
❌ Tanya pertanyaan ganda¶
User: deploy
Agent: Branch mana? Environment apa? Pakai docker atau native?
Backup dulu? Notify team? Run smoke test?
1 pertanyaan critical, atau pakai default + bilang asumsi:
Agent: Anggap branch main, env production, deploy via systemd.
Salah satu? Balas "ya" atau correct yang salah.
SOUL.md template lengkap¶
## ESCALATION
Triggers:
- 3x retry failed dengan sama error → escalate
- User request ambigu → tanya 1 pertanyaan spesifik
- Capability gap (tool/credential missing) → bilang explicit
- High-stakes action (transfer besar, delete penting) → konfirmasi
Format escalation message:
- Status: apa yang udah dicoba
- Blocker: kenapa stuck
- Action needed: apa user harus lakuin
JANGAN:
- Loop tanpa cap (max 12 agentic steps)
- Silent fail (claim "done" padahal gagal)
- Pertanyaan ganda (1 critical max)
- Vague "mohon bantuan" tanpa konteks