Mini Harness
Overview
mini-harness adalah implementasi bersih dari autonomous terminal coding agent, dibangun dari nol dalam ~180 baris TypeScript menggunakan Bun dan @anthropic-ai/sdk resmi. Dengan membuang semua overhead framework (tanpa LangChain atau orchestrator besar), tool ini membedah mekanisme inti di balik coding agent modern seperti Claude Code: sebuah while loop murni, message history di memori, streaming SSE deltas, dan penanganan tool yang self-correcting.
Arsitektur Teknis & Alur Kerja
Harness ini membagi tanggung jawab ke tiga modul ringkas:
user turn ──▶ history[] ──▶ ask() ──▶ [ Claude Model ]
▲ │ stream (SSE)
│ ▼
tool_result[] ◀── runTool() ◀── tool_use
│ (Promise.all)
└──────── loop until stop_reason !== "tool_use"
src/llm.ts(The Translator): Membungkus SDK client dan system prompt SOP. Menyediakan satu pintu masuk streamingask()dengan alokasimax_tokens: 8192(krusial agar penulisan file besar viawrite_filetidak terpotong di tengah jalan).src/tools.ts(The Hands): Mendefinisikan katalog tool dengan JSON Schema yang ketat (read_file,write_file,list_files,web_fetch). Executor memvalidasi parameter sebelum operasi disk dijalankan (mencegah file rusak akibat inputundefined) dan menyertakan pembatas token budget (pemotonganmax_charsdengan paginasistart_char). Yang terpenting, kegagalan di-return sebagai stringERROR: ...alih-alih melempar exception, sehingga model bisa membaca pesan error tersebut dan otomatis memperbaikinya di putaran berikutnya.src/index.ts(The Brain): Mengelola siklus hidup dual-loop:
- Outer Loop (REPL): Berbasis
readline/promises. Menyimpan satu arrayMessageParam[]yang berfungsi sebagai session memory. Perintah/resetlangsung mengosongkan array di tempat, memberi agent amnesia instan tanpa perlu restart proses. - Inner Loop (Agent Turn): Berjalan hingga
MAX_ITERATION = 10. Meneruskan token streaming langsung keprocess.stdout.writebegitu delta tiba. Saat model berhenti dengan statustool_use, loop mengumpulkan semua pemanggilan tool, mengeksekusinya secara bersamaan viaPromise.all(), memasangkan hasil ke masing-masingtool_use_id, menambahkan satu pesan hasil user terpadu, dan mengulang loop.
Tech stack
Architecture
mini-harness/
├── src/
│ ├── index.ts # REPL shell + agent while-loop (Promise.all parallel tools)
│ ├── llm.ts # Anthropic SDK client & streaming ask() entry point
│ └── tools.ts # Tool definitions (JSON Schema) & stringified executor
├── bun.lock # Lockfile (zero runtime deps beyond @anthropic-ai/sdk)
├── package.json # Manifest
├── tsconfig.json # Strict TS config for Bun
└── README.md