Security Model
Model ancaman Minicode dalam satu halaman: apa yang dikontrol, apa yang dipercaya, dan apa batasnya. Tanpa kata "aman" absolut — setiap klaim di bawah menunjuk ke mekanisme yang bisa Anda baca dan uji.
Prinsip
Minicode mengontrol kemampuan bertingkat (layered capability control), bukan niat model. Model boleh salah paham; yang menentukan apa yang benar-benar terjadi adalah gerbang deterministik di bawahnya: izin → jail → guard → validasi → eksekusi → bukti.
Execution Chain
Setiap pemanggilan tool melewati rantai ini, berurutan:
Permission → Jail → Bash Guard → Argument Validation → Executor → Journal / Recovery
Tahap · Fungsi
Permission · Mode izin (src/policy/permission.ts) memutuskan allow/deny/ask per pasangan tool+args. Berlaku SEBELUM efek apa pun.
Jail · Path di luar workspace, symlink keluar, file sensitif (.env, .git/config), dan state milik minicode (.minicode/*.db, todos, jurnal, config) ditolak — bahkan di --allow-all (kecuali mode unrestricted, lihat §Mode dan akses di bawah).
Bash Guard · Perintah shell dinormalisasi dulu (buang quote/wrapper/variabel sederhana), baru diperiksa polanya. Menolak env-dump, exfiltrasi upload, interpreter inline, destruksi luas.
Argument Validation · Skema argumen divalidasi kernel sebelum eksekusi; argumen invalid ditolak tanpa efek.
Executor · Menjalankan yang lolos: read paralel, write dibatasi konkurensinya, abort-aware, output dipotong dengan penanda (tak pernah diam-diam).
Journal / Recovery · Tiap mutasi dicatat sebagai pending lalu committed/failed/unknown; finalisasi menandai cakupan turn durable. Resume tak pernah mengulang buta (lihat Recovery).
Mode dan akses
Pilihan yang terlihat oleh operator dipisah menjadi tiga sumbu:
Sumbu · Nilai · Dampak
WorkMode · DISCUSS, PLAN, BUILD (EXECUTE internal) · Membatasi ruang kerja agent. DISCUSS read-only; PLAN dapat menulis artefak rencana; BUILD tidak menambahkan ceiling. WorkMode hanya mempersempit akses.
PermissionMode · AUTO, ASK · AUTO menjalankan capability yang sudah diotorisasi tanpa persetujuan rutin; ASK meminta persetujuan untuk pemanggilan yang digate. ask_user ditolak di AUTO.
Tool Access Policy · kebijakan capability dan profil akses warisan · Menentukan tools yang tersedia. readonly, plan, allowlist, dan allow-all tetap menjadi identitas internal/kompatibilitas untuk batas akses, bukan mode persetujuan tambahan.
Profil allow-all tetap terbatas. Path jail, penolakan state milik runtime, bash-guard, dan validasi argumen tetap berlaku; profil ini tidak memberi akses host tanpa batas. Detail implementasi dan opsi CLI ada di Policy & Sandbox.
Pengecualian eksplisit: unrestricted. Mode ini membuka jail path di luar workspace, bash-guard, dan gerbang sandbox/allowlist; file sensitif (.env, kunci SSH) dan state milik minicode (.minicode/) tetap ditolak di lapisan tool. Kredensial git sempit — hanya GH_TOKEN, GITHUB_TOKEN, SSH_AUTH_SOCK — diteruskan ke subprocess hanya di mode ini, supaya git_push/remote via token atau SSH agent bisa berfungsi. Diaktifkan eksplisit lewat perintah TUI tersembunyi /unrestric (bukan flag CLI, sengaja tak muncul di /help), berlaku per-sesi dan tak pernah persist. Gerbang keamanannya adalah kepercayaan operator: blast radius praktis selebar host untuk file non-sensitif dan shell apa pun. Default tetap DISCUSS+AUTO dengan hard-deny aktif.
Trust Boundaries
Sumber · Status · Artinya
Prompt Anda · Niat tepercaya · Tujuan dijalankan, TETAPI setiap efek tetap lewat rantai di atas
Output model · Tak dipercaya untuk klaim · Teks/keputusan model bisa salah; bukti (hasil tool, test, HEAD) yang menentukan
Hasil tool · Data · Dibaca model sebagai fakta observasi, bukan instruksi baru
Data repository (kode, AGENTS.md, MEMORY, skill) · Data · Bisa berisi instruksi injeksi; system prompt menandainya tak-terpercaya
Server MCP · External capability · Efek di sisi server arbitrer dan tak terlihat; persetujuan mengikuti mode dan authorization; pembatalan tak membatalkan efek yang sudah terjadi
Provider / network · External · Prompt dan hasil melewati provider yang Anda pilih; tak ada telemetri/analitik dari Minicode sendiri
Child agent · Terisolasi · Memori, sinyal, budget, dan jurnal sendiri; tool scope mengikuti kebijakan delegasi dan WorkMode parent (lihat Sub-Agents & Tasks)
Local config (.minicode/config.json) · Tak dipercaya default · Diabaikan kecuali --allow-local-config; repo clone-an tak bisa men-spawn server
Skills / memory tersimpan · Data · Dibaca sebagai konteks, bukan kebijakan
Dangerous Capabilities
Minicode tidak menyediakan tool untuk (terverifikasi di src/tools/):
git fetch,pull,clone— tak ada tool git jaringan pembacagit reset,amend,rebase,checkout,branch -D,stash drop- Eksekusi remote / deploy bawaan
Satu-satunya operasi jaringan git adalah git_push (di-gate seperti git_commit: TTY minta sekali, non-TTY tolak, readonly/plan/allowlist tolak, sub-agent tidak mendapatkannya). Tool ini memakai hardening GIT_SAFE_BASE dan di mode unrestricted mendapat kredensial git sempit (lihat §Mode dan akses).
Catatan jujur: operasi lain tetap BISA diketik lewat bash (tunduk pada bash-guard + jail, BUKAN larangan). git via bash menjalankan konfigurasi repo apa adanya (hook/filter/driver milik repo). Tool baca git_* dinetralkan; git_push menetralkan hook/filter via GIT_SAFE_BASE; git_commit menolak sebelum staging bila filter Git terkonfigurasi. Di repo tak-terpercaya, utamakan tool baca dan tinjau konfigurasi sebelum memakai Git manual.
Recovery
Setiap mutasi meninggalkan bukti, bukan janji (disebut mutation journal di kode: src/session/journal.ts):
intent pending → committed/failed/unknown → finalisasi cakupan turn durable
committedyang turn-nya hilang → tidak diulang; model diberi catatan narasi.pending/failed/unknown→ direktif verifikasi; dilarang redo buta.- Klaim sukses pihak ketiga (MCP) diperlakukan sebagai "kata server", wajib baca-balik bila penting.
Kejujuran yang disengaja: crash ambiguity TETAP MUNGKIN (filesystem dan database tak bisa commit atomik bersama). Yang dijamin adalah: ambiguitas selalu diperlakukan sebagai ambigu — diverifikasi dulu, tidak diasumsikan sukses maupun gagal.
Limitations
- Repo hooks/filter/driver:
gitvia bash mengeksekusinya (semantik stock-git); tool bacagit_*menetralkan filter, sedangkangit_commitmenolak bila menemukan filter terkonfigurasi. - Bash arbitrer: guard adalah analisis statis; substitusi dinamis (
$(curl …)) butuh sandbox OS/docker untuk isolasi nyata. - Efek eksternal MCP: setelah terjadi, tak bisa dibatalkan dari sini.
- Provider/network: data melewati provider pilihan Anda; Minicode tak menambahkan transmisi sendiri.
- Perilaku model: pemilihan tool, klaim sukses, dan kepatuhan intent adalah sifat model — orkestrasi menjamin bukti dan batas, bukan kebijaksanaan.
- Server LSP: di-spawn dari perintah di config Anda; hanya daftarkan server yang Anda percaya.
- Repo tak-terpercaya: perlakukan seperti menjalankan
git/bashmanual di sana — karena memang itu yang terjadi di balik tool.
Security Contact
Belum ada kontak keamanan privat. Laporkan masalah via GitHub Issues tanpa menyertakan kredensial, token, atau data sensitif — cukup langkah reproduksi minimal + output minicode doctor.
Lanjut
- Policy & Sandbox — detail tiap mode + guard.
- Keamanan — threat model + bukti pengukuran.
- Memory & Sessions — jurnal, checkpoint, undo.