m>minicode

Tools (37)

sumber: src/tools/index.tsEdit di GitHub

Tools (37)

Daftar pasti kapan pun:

bun -e "import {allTools} from './src/tools/index.ts'; console.log(allTools.map(t=>t.name))"

Sumber: src/tools/index.ts:59-97. web_search hanya di allTools, tidak di re-ekspor atas. Tool MCP dinamis serverId.toolName di-append via withMcpTools.

cwd tool file wajib dari ToolContext.cwd, bukan process.cwd() (seam cwd?: string di kernel + resolve(sessionRoot, raw) + file-lock per-cwd).

Filesystem

ToolFungsiCatatan
read_fileBaca teks + nomor baris, chunk offset/limitFooter beri offset berikutnya. >2 MB wajib offset/limit, bukan potong diam-diam. Realpath jail + secret-scrub. Output 12: const x = 1 agar rujukan edit akurat
write_fileBuat/overwrite, auto-buat parentAtomic tmp→rename + mkdir. LSP diagnostics otomatis bila server terkonfigurasi
editGanti string (harus tepat 1×)Unique+atomic, fuzzy CRLF/spasi + hashline deterministik (src/tools/hashline.ts)
apply_patchBlok SEARCH/REPLACE multi-hunk ala AiderSatu call banyak patch
move_filePindah/rename atomikDest yang ada dibackup ke trash dulu (catat path). Dijail di permission layer juga
delete_fileSoft-delete ke .minicode/.trash/Undo via move_file. Cap 100 terbaru, gitignored. Shared helper src/lib/trash.ts
read_imageGambar → konteks modelBase64 utuh + lapor (bytes mime, tokens) via estimateImageTokens. Cap file-size 2 MB. TOCTOU-safe (safeOpenRead + handle.stat)

Contoh paging:

read_file({ path: "src/big.ts" })
read_file({ path: "src/big.ts", offset: 2001 })
read_file({ path: "src/big.ts", offset: 500, limit: 50 })

Search

ToolFungsiCatatan
globCari pola **/*.tsMendukung {a,b}, cwd jail
grepRegex lintas filerg --vimgrep --no-follow bila ada di PATH, fallback walker internal. Keduanya jail + secret-scrub sama, hasil identik. MINICODE_GREP_ENGINE=js paksa fallback. Bila rg gagal (flavour regex beda), otomatis fallback + warning

Exec

ToolFungsiCatatan
bashShell 30 dtk SIGTERM→SIGKILLcwd jail, env kredensial di-strip (sanitizeSpawnEnv), progres streaming, background:true + bash_output/bash_kill, sandbox docker/os optional, fail-closed via MINICODE_SANDBOX_STRICT=1. background:true ditolak saat --sandbox aktif
bash_outputOutput BARU job sejak baca terakhir+ exit status
bash_killStop jobSIGTERM lalu SIGKILL; tree-kill (taskkill /T /F di Windows, process-group di POSIX)
code_runSnippet python/node tanpa shellSpawn langsung argv (tanpa shell agar $(...) tidak dieksekusi shell dulu). Wajib sandbox `osdocker, network-isolated, cwd = session root. Fail-closed bila backend tak tersedia. Image default node:22-alpine hanya bawa node — python butuh MINICODE_SANDBOX_IMAGE` yang menyediakannya

Background:

bash({ cmd: "bun run dev", background: true })  # → bg_xxxxxxxx
bash_output({ id: "bg_xxxxxxxx" })
bash_kill({ id: "bg_xxxxxxxx" })

Batas BASH_BACKGROUND_MAX_JOBS; semua job mati saat CLI keluar.

Git (read + satu penulis)

ToolFungsiCatatan
git_statusstatus --porcelain + diff --stat + log -10cwd jail
git_diffdiff unstaged atau --staged
git_loglog --oneline -n
git_commitCommit sajaDi-gate seperti delegate_task (TTY = minta sekali, non-TTY = tolak; readonly/plan/allowlist = tolak). Sub-agent tidak mendapatkannya. Yang sengaja tidak ada: push/amend/reset/rebase/checkout/branch -D/stash drop. Pesan via -m tunggal agar $()/backtick tidak dieksekusi; git add -- <paths> agar file -weird.txt tidak jadi flag

Web

ToolFungsiCatatan
web_fetchGET URL publik, 10 dtk, max 50k charSSRF guard + DNS pinning, redirect manual ≤5 hop, body hard-cap 2 MB
web_searchSearch via DuckDuckGo/TavilyButuh TAVILY_API_KEY untuk Tavily; fallback DDG bila kosong

Memory & plan

ToolFungsiCatatan
read_memoryBaca MEMORY.md + vector RAG hybrid
write_memoryTulis + vector store{category?, tags?}, default fact. Kategori `factdecisionpreferencesnippetsummary, boost decision` +0.1
forget_memoryHapus cocok queryHati-hati: sqlite3_changes() ikut hitung trigger FTS — kini hitung-dulu-sebelum-DELETE
todo_write / todo_readRencana per sesi (3+ langkah)Kirim seluruh daftar tiap kali. Status `pendingin_progresscompletedcancelled, satu in_progress dipertahankan. Disimpan .minicode/todos/<session>.json + artifact .minicode/plans/<id>.md`
submit_resultHasil akhir JSON terstruktur 1×NO_PROMPT, exec --json verbatim. Pengganti response_format
ask_userTanya klarifikasi mid-runGated + render via injeksi promptAskText (fail-closed non-TTY)

Agents

ToolFungsiCatatan
delegate_taskSub-agen isolasi explore/planPool 3, isolasi context/memory/signal/budget, abort-aware. Di-gate (TTY prompt, non-TTY tolak)

MCP

ToolSpecCatatan
mcp_listtools/list + resources/list + prompts/listRead-only, tidak di-gate. Panggil dulu
mcp_calltools/callDi-gate. 1 approval = 1 call. Jalan di luar policy minicode
mcp_readresources/readDi-gate meski read-only (konten pihak ketiga = jalur prompt-injection). Biner diganti penanda ukuran
mcp_promptprompts/getDi-gate, server merender argumen

Plus tool dinamis serverId.toolName. Semua bertitik selalu di-gate (tanpa wildcard auto-allow). Detail transport di MCP & LSP.

LSP

Butuh minicode config lsp add dulu. Setelah terdaftar:

ToolFungsi
lsp_diagnosticsDiagnostik 1 file
lsp_definitionLokasi definisi (file+symbol atau line/character)
lsp_referencesSemua referensi se-repo
lsp_hoverInfo tipe
lsp_symbolsOutline dokumen
lsp_workspace_symbolsCari se-workspace; query kosong = populer

didClose cleanup otomatis.

Rantai pemeriksaan

PermissionHandler → validateArgs (kernel) → executor (order/cap/abort-aware) → tool realpath+atomic(O_EXCL) → execute. Executor order-preserving: mixed step sequential, pure-read paralel, write di-cap, antrean abort-aware.