v0.5.0-alpha — MCP client, skill scanner, context compaction
Pre-releaseAdded — skill scanner (terinspirasi nvidia/skillspector)
Skill packs sudah membuka jalur "terima skill dari URL/file eksternal", tapi scanner-nya
hanya 4 regex Shield kosmetik — tak sepadan dengan ancaman skill yang membawa kode.
security/skill_scanner.py— pemindai dua lapis MURNI stdlib (ast+re):
AST mendeteksiexec/eval/subprocess/os.system/__import__/open(write)pada
blok kode; pola leksikal menangkap eksfiltrasi (curl|sh), path kredensial (~/.ssh,
id_rsa), URL ber-kredensial, endpoint metadata cloud. Skor 0–100 → verdict
clean/flag/reject.- Wiring impor (§1 keamanan-dulu): risiko tinggi → DITOLAK total (tak masuk DB,
keputusan owner); risiko sedang → tetap draft tapi dicatatflagged; bersih → draft.
SELALU aktif (keamanan, bukan optimasi — tak bisa dimatikan dari UI). Berlaku impor
file & URL.Shield.DANGER_PATTERNSjuga diperluas (eksfiltrasi instruksi/jailbreak). - Tak pernah crash (input eksternal) & tak false-positive pada prosa biasa. +12 test.
Added — context compaction "headroom" (opt-in, terinspirasi chopratejas/headroom)
Saat context window penuh, compactor default MEMOTONG turn terlama (truncation — jujur
tapi yang hilang benar-benar hilang). Compaction MERINGKAS turn lama jadi satu blok
alih-alih membuang — hemat token tanpa kehilangan konteks total (§1.4).
- OPT-IN, default OFF (§8): diatur di
/settings(off|local|cloud).off=
truncation aman;local= ringkas via model lokal kecil (gratis/privat);cloud=
via model cloud (kualitas untuk history kompleks). Peringkasan via LLM bisa membuang
nuansa & menambah latensi — karenanya tak dipaksakan. ContextCompactor.compact()(async, pre-pass sebelumbuild()): ringkas turn lama
jadi[compacted] …, sisakan N turn terbaru UTUH. Fail-safe (§1.3): muat budget /
summarizer error / ringkasan kosong / sudah ringkasan → history asli (truncation lama).
Summarizer di-inject (seam bersih) → testable tanpa LLM. +9 test.
Added — single-user production polish
Setelah review pihak ketiga (yang sebagian keliru menilai OpenCLAWN sebagai produk
multi-user), dua gap yang BENAR-BENAR valid untuk self-hosted single-user ditutup:
/healthendpoint — JSON status + cek konektivitas DB, untuk monitoring self-hosted.- Stale-draft cleanup — draft yang tua (
draft_stale_days, default 14) & tak pernah
terbukti (draft_success_count=0) diarsipkan saat decay pass — cegah menumpuk. ARSIP,
bukan hapus (konsisten "tak ada kehilangan data senyap").draft_stale_days=0→ nonaktif. - README: section Scope & Production Posture — menegaskan auth/Postgres/scaling DI LUAR
scope secara SADAR (§7 single-user), bukan utang teknis. +5 test.
Added — MCP (Model Context Protocol) client
OpenCLAWN kini dapat memakai tool dari server MCP eksternal (GitHub, filesystem,
dll) — sebelumnya hanya 26 tool bawaan. Via SDK resmi mcp (CLAUDE.md §7: MCP bukan
SDK vendor-LLM, jadi tak melanggar transparansi jalur LLM).
- Transport: stdio (subprocess lokal) + HTTP streamable (remote).
- Keamanan (§1): tool MCP SELALU butuh approval (HITL; di autopilot jadi
proposal) — server eksternal tak terkendali. Remote di-guard SSRF sebelum konek.
Role harus opt-in viasoul.tomlwildcardmcp__*/mcp__<server>__*. - Tool MCP tak dapat jalur istimewa: dibungkus
MCPTool(subclassTool), lewat
pagar yang sama (izin/validasi/telemetri/timeout). Discover fail-safe (server error
di-skip, tak jatuhkan startup). Kelola via halaman/mcp(tabelmcp_servers). core/mcp_client.py·core/mcp_registry.py·tools/mcp_tool.py. +19 test (420→439).