Lewati ke isi

4. Autonomy & Risk-Gating

Level otonomi Kai
Level otonomi Kai

Kapan agent auto-jalan, kapan konfirmasi dulu.

Ini pilar paling penting buat agent dengan akses penuh. Salah set → agent bisa rugiin lo dalam 1 prompt.

Konsep dasar: 3-tier autonomy

Tier Behavior Contoh
Low (auto) Langsung jalan, hasil dikasih balik ke model ls, cat, df, git status
Medium (auto + log) Langsung jalan, kabarin user setelah apt install, git commit, post tweet
High (konfirmasi) Stop, minta konfirmasi user dulu rm, transfer wallet, drop database

Implementasi: risk field di tool_use

Model wajib output risk di setiap tool_use:

<tool_use>{
  "name": "run_in_terminal",
  "arguments": {
    "command": "rm -rf /tmp/cache",
    "risk": "high",
    "explanation": "Hapus cache folder"
  }
}</tool_use>

Backend gating:

def execute_with_gating(call, chat_id):
    cmd = call["arguments"]["command"]
    risk = call["arguments"].get("risk", "high")  # default high (safe-by-default)

    if risk == "low":
        return run_command(cmd)  # silent auto
    elif risk == "medium":
        result = run_command(cmd)
        log_action(chat_id, cmd, "auto-executed")
        return result
    elif risk == "high":
        pending_commands[chat_id] = call
        send_to_user(f"Mau jalanin: {cmd}\nBalas 'ya' untuk lanjut, 'no' untuk batal.")
        return None  # signal: butuh konfirmasi
    else:
        return f"Unknown risk level: {risk}"

Yang harus ada di SOUL.md

## AUTONOMY

Default: full control. Akun user = akun agent.

3 level otonomi per aksi:

Fully autonomous (langsung jalan):
- Read-only: ls, cat, df, ps, git status, git log, curl GET, baca file
- Write minor reversible: mkdir, touch, pip install, git clone, 
  git add/commit/push, post tweet, reply, like, kirim message
- Wallet read: cek balance, history, simulate transaction

Autonomous + kabarin user setelah:
- Deploy service, restart service, install package besar
- Create repo baru, create PR, merge PR
- Transfer wallet ke address yang udah pernah dipake sebelumnya
- Subscribe/follow akun baru di sosmed
- Big-ticket apt upgrade

Wajib konfirmasi DULU sebelum eksekusi:
- Transfer wallet ke address yang BELUM PERNAH dipake
- Sell/swap crypto dengan nilai >$50 equivalent
- Delete repo, force push ke main, rebase branch shared
- rm -rf, drop database, format disk, sudo reboot
- Unfollow/block massal di sosmed
- Delete email penting
- Apapun yang ga bisa di-undo

Risk field:
- "low" = read-only atau write yang gampang di-undo
- "medium" = write yang butuh effort buat undo, tapi reversible
- "high" = irreversible atau bisa rugi uang/akun

Sistem auto-run low/medium. High butuh user confirm.

Cara nentuin risk

Pertanyaan kunci: "Kalo command ini salah, gimana cara recoverynya?"

Jawaban Risk
Ga ada efek, cuma baca Low
Bisa di-undo dengan 1 command lawan (rm <file>git restore) Medium
Butuh effort buat recover (restore backup, kontak admin) High
Ga bisa recover sama sekali (data hilang, uang lewat) High

Contoh:

Command Risk Alasan
ls -la low Read-only
git log low Read-only
mkdir foo medium Bisa di-rmdir
git commit medium Bisa di-revert
git push origin feature medium Bisa force-push lawan
git push --force origin main high Bisa lose history
rm file.txt high Hilang permanent
rm -rf node_modules medium Bisa di-npm install ulang
rm -rf . high Bencana
sudo systemctl restart nginx medium Bisa di-start lagi
sudo systemctl stop kai-bot medium Bisa di-start lagi
dd if=/dev/zero of=/dev/sda high Wipe disk
kill -9 1234 medium Tinggal restart
kill -9 $(pidof postgres) high Bisa data corruption

Spesial: wallet/crypto

Wallet butuh aturan khusus karena uang nyata.

## AUTONOMY — WALLET

Auto-execute:
- Cek balance (read-only)
- Cek transaction history
- Simulate transaction (eth_call)
- Approve token untuk router yang udah whitelisted

Konfirmasi DULU:
- Transfer apapun ke alamat yang BELUM PERNAH dipake sebelumnya
- Transfer >$X (atur threshold sesuai comfort lo)
- Swap dengan slippage >2%
- Interact dengan contract baru yang belum di-audit
- Approve unlimited token amount

Verifikasi alamat tujuan:

# Pseudo
KNOWN_ADDRESSES = load_known_addresses()  # alamat yang pernah dipake

def is_safe_transfer(to_addr, amount_usd):
    if to_addr not in KNOWN_ADDRESSES:
        return False, "Alamat baru, butuh konfirmasi"
    if amount_usd > 50:
        return False, "Amount > $50, butuh konfirmasi"
    return True, "Auto-OK"

Spesial: sosial media

Sosial media post irreversible (bisa di-delete, tapi udah ke-cache di luar).

## AUTONOMY — SOSMED

Auto-execute:
- Reply ke mention/DM yang udah ada konteks dari user
- Like, retweet
- Follow akun yang user explicit minta

Konfirmasi DULU:
- Original post ke timeline publik
- Massal action (unfollow 100 akun, block list)
- Posting dengan konten sensitif (politik, finansial advice)
- DM ke akun yang user belum pernah interaksi

Pattern konfirmasi yang efektif

Saat agent dapet high-risk task, balasan harus:

  1. Sebutin command-nya verbatim (biar user bisa scan)
  2. Sebutin alasan kenapa high-risk
  3. Cara konfirmasi yang clear ("ya"/"no")

Contoh:

Mau jalanin: rm -rf /home/ubuntu/project-lama

Risk: high (irreversible). Folder ini punya 245 file, total 1.2GB.

Lanjut? Balas "ya" untuk hapus, atau apapun untuk batal.

Anti-patterns

❌ Konfirmasi untuk semua hal

User: ls
Agent: Mau saya jalankan ls? (y/n)

Konfirmasi cuma untuk high-risk. Low-risk auto.

❌ Auto-execute high-risk

User: bersihin akun lama
Agent: [delete 20 repos tanpa konfirmasi]

Itu disaster waiting to happen.

❌ Risk yang ga konsisten

Hari ini apt install = low. Besok apt install = high. Bikin user bingung.

Set rule yang stable di SOUL.md, jangan ubah tiap minggu.

❌ Konfirmasi multi-step yang ribet

Agent: Mau jalanin command ini?
User: ya
Agent: Sebelum saya jalankan, apakah Anda ingin backup dulu?
User: ya
Agent: Backup ke mana?

1 konfirmasi cukup. Pre-action: pake default yang masuk akal. Post-action: kasih hasil.

Audit logging

Untuk action yang medium/high, log:

def log_action(chat_id, command, result, risk):
    with open("data/audit.log", "a") as f:
        f.write(f"{datetime.now().isoformat()} | chat:{chat_id} | risk:{risk} | cmd:{command[:200]} | ok:{result[:100]}\n")

Audit log buat:

  • Debugging kalo agent salah jalan
  • Review periodik action agent
  • Forensik kalo ada kejadian aneh

Test risk-gating

Sebelum production, test minimal:

  1. ls / → expect: low, auto-execute
  2. git commit -m "test" → expect: medium, auto-execute + log
  3. rm -rf /tmp/test → expect: high, konfirmasi
  4. Custom command yang lo prediksi high-risk → expect: konfirmasi

Kalo agent salah klasifikasi risk, perketat instruksi di SOUL.md.