Perhatian adalah segalanya yang dimiliki model.
Fokus adalah yang dilakukan niuma_code.
Pada tahun 2017, "Attention is All You Need" mendefinisikan sebuah era — semua kecerdasan model dibangun di atas mekanisme perhatian. 8 tahun kemudian, kita menyadari bahwa model bukanlah yang kehilangan mekanisme perhatian — melainkan kemampuan untuk menempatkan perhatian di tempat yang tepat. Semakin panjang konteks, semakin banyak kebisingan yang mengaburkan informasi yang benar-benar penting. niuma_code melakukan satu hal: menarik konteks dan menambahkan fokus — sehingga setiap token sampai ke tempat yang seharusnya.
Lihat Demo Nyata
Rekaman layar mode orkestrasi IDE — coba fokus niuma_code dalam 1 menit
Mengapa niuma_code Dipilih
Bukan pengganti Claude Code, melainkan alat pelengkap untuk meningkatkan fokus
Mode Harness Mandiri
Mode default — tanpa perintah. LLM mengeksplorasi secara mandiri dalam tool loop, berpikir sambil bertindak, dan terus menjalankan hingga tugas selesai.
- Tool-use loop: LLM secara mandiri menentukan membaca file / mengedit kode / menjalankan perintah
- Auto-retry API error, rendering streaming + batal ESC + kompresi output panjang otomatis
- Ideal untuk tugas ambigu yang sulit dipecah — LLM yang menentukan kapan selesai
Orkestrasi Loop Engineering
/loop <goal> masuk ke self-loop bertujuan:
rencanakan dengan perintah verifikasi, eksekusi secara berurutan, verifikasi setiap langkah, dan lakukan koreksi diri saat gagal.
- Rencana → Eksekusi → Verifikasi → Retry saat gagal (maks 3 kali, dengan alasan kegagalan sebagai umpan balik)
- Gerbang ortogonal ganda: MAX_ROUNDS=20 batas tugas + MAX_RETRIES=3 koreksi diri
- Setiap ronde memanggil harness untuk menjalankan 1 langkah — ideal untuk tugas engineering yang dapat dipecah dan diverifikasi
Mode TUI Layar Penuh
Berbasis UI layar penuh prompt_toolkit. Input selalu terkunci di bagian bawah, Anda dapat menambahkan pesan baru kapan saja selama streaming LLM — konteks tidak akan terdorong keluar.
- 5 overlay modal: pengaturan model, antrean pesan, pengalihan konteks, manajemen percakapan, konfirmasi izin
- Sorot seleksi drag mouse, navigasi gulir, salin otomatis klik kiri, zoom font Ctrl+gulir
- Bilah status real-time: pratinjau pemikiran, jumlah token masuk/keluar, progres kompresi + batal ESC
Mode Orkestrasi IDE
Editor kode layar penuh. Tulis skrip orkestrasi dengan sintaks Python native, dan integrasikan panggilan LLM ke dalam alur kerja skrip yang dapat dikontrol.
- Orkestrasi LLM yang dapat dikontrol dengan menyuntikkan fungsi llm_call / llm_confirm / llm_judge
- F5 pratinjau (analisis statis AST), F6 eksekusi (otomatis, pemberian izin alat otomatis)
- Eksekusi sandbox aman + daftar hitam impor berbahaya (os/subprocess/socket dll.) — satu-satunya jaring pengaman mode otomatis
Routing Multi-Provider
Konfigurasikan beberapa API endpoint di settings.json — request secara otomatis di-routing ke provider yang benar berdasarkan nama model, dan dapat beralih secara bebas dalam sesi.
- Setiap provider mendeklarasikan base_url / api_key / daftar model yang didukung
- Beralih model dengan #tag atau /model — request otomatis terhubung ke endpoint yang benar
- Kaskade konfigurasi 3 tingkat (level pengguna / level proyek / proyek lokal), yang didefinisikan belakangan memiliki prioritas
Manajemen Konteks Paralel
Perluas satu percakapan menjadi N konteks paralel, setiap konteks mengelola riwayat, jumlah token, dan status kompresi secara independen — kontaminasi silang nol.
- Pengusiran LRU, batas default 5 (dapat dikonfigurasi via max_contexts) — yang diusir = diarsipkan dan dapat dipulihkan
- Beralih melalui overlay visual /context; pembuatan ringkasan asinkron saat keluar
- Pilihan berganda per unit di /messages — hapus / urutkan / integrasi ringkasan LLM
Grafik Pengetahuan Kode
Analisis struktur kode berbasis tree-sitter, membangun definisi simbol, rantai panggilan, dan grafik dependensi — LLM dapat menentukan lokasi yang tepat sebelum membaca baris kode.
- 4 alat kueri read-only: pencarian simbol, dependensi file, referensi, rantai panggilan
- Mengembalikan file:baris dan tanda tangan — menggantikan pendekatan mencari jarum di tumpukan jerami ala grep
- Keputusan 3 elemen rebuild on-demand — menghindari parsing menyeluruh saat startup
Riset Sub-Agen Paralel
Sub-agen read-only menjalankan alat secara paralel, melakukan riset dalam konteks terpisah, dan hanya mengembalikan ringkasan — konteks utama tetap bersih.
- Beberapa sub-agen menjalankan alat read-only secara paralel, tidak memblokir
- Riset dalam konteks terisolasi, hanya ringkasan — tidak mencemari percakapan utama
- Termasuk dalam paradigma harness default, dipanggil on-demand bukan dalam mode mandiri
Memori Berbasis Persepsi
Memori persisten berbasis memory-palace — event selama eksekusi ditangkap sebagai memori secara real-time, mengakumulasi pengalaman antar sesi.
- 10 jenis event persepsi (visual/fisik/lidah/hidung/hasil dll.), ditulis secara real-time bukan setelah percakapan
- Triplet fakta + ringkasan percakasan, 4 lapis retrieval + dekadensi Bayesian
- Disuntikkan otomatis ke sistem prompt pada sesi berikutnya, posisi recall yang stabil
Pelacakan Hadil Hasil
Melacak seluruh siklus hidup tujuan tugas, menghitung skor hadil berdasarkan kualitas penyelesaian, dan menulisnya sebagai event persepsi ke memori.
- OutcomeTracker menghitung skor hadil 0.0-1.0 pada seluruh siklus hidup tugas
- Skor hadil menjadi sinyal evaluasi nilai reuse memori
- Sebagai salah satu dari 10 jenis event persepsi, terintegrasi dengan event read/write/tool-call
Cara Efektif Memanfaatkan Kedua Mode
Jika langkah tidak jelas, deskripsikan dan iterasi (harness). Jika ada checklist, gunakan /loop
Poin Penting harness
harness tidak memiliki loop perencanaan ulang — semakin jelas input Anda, semakin akurat eksplorasi mandirinya.
- Sebutkan batasan di muka: tujuan + file/fungsi yang tidak boleh disentuh + kriteria penerimaan — jangan mengubah persyaratan saat eksekusi
- Ideal untuk batas yang ambigu tetapi tujuan yang jelas; semakin jelas langkahnya, semakin cepat konvergensi
- Gunakan titik kontrol: ESC untuk berhenti kapan saja, output panjang dikompresi otomatis, API error di-retry otomatis
- "Selesai" dan "Benar-benar selesai" adalah dua hal berbeda — setelah perubahan penting, jalankan tes/kompilasi sendiri
Poin Penting loop
Koreksi diri sepenuhnya bergantung pada "verifikasi" — hanya tujuan yang dapat diverifikasi yang membuat 3 kali koreksi menjadi bermakna.
- Tujuan harus dapat dipecah menjadi langkah-langkah dengan perintah verifikasi — "Perbaikan refinement" tidak dapat diverifikasi
- Menuliskan metode verifikasi langsung dalam tujuan (py_compile / tes) menghasilkan akurasi perencanaan tertinggi
- 3 kali kegagalan koreksi biasanya berarti informasi verifikasi tidak cukup — daripada berusaha lebih keras, pecah lagi menjadi langkah yang lebih kecil
- Jangan berhenti setelah 3 kali gagal — tercatat dan loop berlanjut; periksa penanda [!!] pada ringkasan
Mulai dalam 3 Langkah
Unduh, konfigurasi, luncurkan — siap dalam hitungan detik
Daftar Parameter settings.json
Jalur file konfigurasi: ~/.niuma/settings.json
factories — Konfigurasi API multi-provider. Setiap provider mendeklarasikan base_url / api_key / daftar model yang didukung; request di-routing otomatis berdasarkan nama model
{
"factories": [
{
"base_url": "https://api.anthropic.com", // Anthropic official endpoint
"api_key": "sk-ant-xxx", // Required; all three fields must be present
"options": ["claude-sonnet-4-6", "claude-opus-4-8"] // Supported models for this provider
},
{
"base_url": "https://your-proxy.example.com", // Anthropic-compatible proxy endpoint
"api_key": "sk-proxy-xxx",
"options": ["claude-sonnet-4-6"] // Supported models for this endpoint
}
]
}
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
| base_url | string | --- | URL endpoint API (wajib) |
| api_key | string | --- | API key (wajib) |
| options | string[] | [] | Nama model yang didukung oleh provider ini |
llm — Model, level effort, anggaran pemikiran & manajemen konteks
{
"llm": {
"default_model": "claude-sonnet-4-6", // Default value for /model switch
"default_effort": "high", // Determines which thinking_budget is used
"max_contexts": 5, // Max parallel contexts; LRU eviction beyond limit
"resume_latest_context": true, // Resume last active context on startup
"options": [ // Model -> effort mapping
{"claude-sonnet-4-6": ["low", "medium", "high"]},
{"claude-opus-4-8": ["low", "medium", "high", "max"]}
],
"thinking_budget_low": "0", // 0 = disable extended thinking
"thinking_budget_medium": "0",
"thinking_budget_high": "10000", // Thinking budget for high effort
"thinking_budget_max": "20000" // Thinking budget for max effort (deepest reasoning)
}
}
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
| default_model | string | "claude-sonnet-4-6" | Model default (tetap selama sesi, dapat dialihkan via /model) |
| default_effort | string | "high" | Level effort default — mengontrol kedalaman anggaran pemikiran |
| max_contexts | integer | 5 | Jumlah maksimum konteks paralel aktif; jika melampaui, yang tertua diusir via LRU |
| resume_latest_context | boolean | true | Memulihkan konteks aktif terakhir saat startup; false = mulai baru |
| options | object[] | [] | Pemetaan model→effort, digunakan untuk verifikasi pengalihan /model |
| thinking_budget_low | string/int | "0" | Anggaran token pemikiran saat effort low (0 = dinonaktifkan) |
| thinking_budget_medium | string/int | "0" | Anggaran token pemikiran saat effort medium |
| thinking_budget_high | string/int | "10000" | Anggaran token pemikiran saat effort high |
| thinking_budget_max | string/int | "20000" | Anggaran token pemikiran saat effort max (penalaran terdalam) |
env — Variabel lingkungan yang ditulis ke os.environ. Mengontrol persona, debugging, jaringan, dan perilaku izin
{
"env": {
"PERSONA_NAME": "niuma", // AI persona name, injected into system prompt
"MODEL_BACKGROUND": "claude-haiku-4-5", // Background task model (memory extraction, compression, etc.)
"LANG": "zh", // UI language (zh/en); also controls LLM response language
"TEMPERATURE_ZERO": "true", // Note: all values are strings
"API_TIMEOUT": "30", // Streaming stall timeout (seconds)
"API_ROUND_MAX": "120", // Per-turn wall-clock hard limit (seconds)
"API_STALL_MAX_RETRIES": "10", // Max auto-retries on stream stall
"PERMISSION_MODE": "auto", // auto=whitelist+confirm / manual=whitelist only / skip=allow all
"ALLOWED_TOOLS": "" // Whitelisted tools (comma-separated); empty = built-in defaults
}
}
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
| PERSONA_NAME | string | "niuma" | Nama persona yang disuntikkan ke sistem prompt |
| MODEL_BACKGROUND | string | "claude-haiku-4-5" | Model untuk tugas latar belakang seperti ekstraksi memori, kompresi, dll. |
| LANG | string | "en" | Bahasa UI (zh/en), juga mengontrol bahasa respons LLM |
| TEMPERATURE_ZERO | string(bool) | "true" | Menetapkan temperature=0 untuk output deterministik; false = default model |
| API_TIMEOUT | string/int | "30" | Timeout stagnasi streaming (detik) — reconnect jika tidak ada event lebih lanjut |
| API_ROUND_MAX | string/int | "120" | Batas waktu nyata per giliran (detik) — memaksa penghentian stream lama |
| API_STALL_MAX_RETRIES | string/int | "10" | Jumlah maksimum retry saat stream stagnan |
| PERMISSION_MODE | string | "auto" | Mode izin: auto (daftar putih + konfirmasi) / manual (hanya daftar putih) / skip (izinkan semua) |
| ALLOWED_TOOLS | string | "" | Daftar putih alat dipisah koma; kosong = default bawaan |
compact — Kompresi konteks: secara otomatis mengompresi percakapan panjang sambil mempertahankan informasi penting
{
"compact": {
// -- Inline compression (blocks main loop until done) --
"inline_trigger": 0.8, // Triggers at 80% of MAX_TOKENS
"inline_keep_ratio": 0.4, // Keep latest 40% of messages after compression
// -- Post-reply async compression (non-blocking, runs in background) --
"idle_trigger": 0.5, // Triggers at 50% of MAX_TOKENS
"idle_keep_ratio": 0.4, // Keep latest 40% of messages after compression
// -- LLM summary output limit --
"max_summary_tokens": 4096 // Max tokens for generated summary
}
}
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
| inline_trigger | float | 0.8 | Tingkat pemicu kompresi inline — memblokir loop utama saat tercapai |
| inline_keep_ratio | float | 0.4 | Rasio pesan terbaru yang dipertahankan setelah kompresi inline |
| idle_trigger | float | 0.5 | Tingkat pemicu kompresi idle — dijalankan secara asinkron setelah respons selesai |
| idle_keep_ratio | float | 0.4 | Rasio pesan terbaru yang dipertahankan setelah kompresi idle |
| max_summary_tokens | integer | 4096 | Token output maksimum untuk ringkasan kompresi yang dihasilkan LLM |
memory_palace — Konfigurasi LLM Memory Palace; independen dari blok llm, di-parse secara terpisah
// Basic mode: rule-based extraction only (no LLM, zero cost)
{
"memory_palace": {
"enable_v9": false, // Disable V9; falls back to legacy V8 mode
"llm_enabled": false // Disable LLM enhancement
}
}
// Full mode: LLM-enhanced extraction (all three fields required; otherwise falls back to rule-based)
{
"memory_palace": {
"enable_v9": true,
"llm_enabled": true, // Once enabled, the following three fields are required
"base_url": "https://api.anthropic.com",
"api_key": "sk-ant-xxx",
"model": "claude-haiku-4-5" // Recommend a lightweight model to save tokens
}
}
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
| enable_v9 | boolean | true | Mengaktifkan memori berbasis persepsi V9; false = mode legacy V8 |
| llm_enabled | boolean | false | Mengaktifkan ekstraksi memori yang ditingkatkan LLM; false = hanya berbasis aturan |
| base_url | string | "" | Endpoint API memori LLM (ketiga field wajib, jika tidak kembali ke berbasis aturan) |
| api_key | string | "" | API key memori LLM |
| model | string | "" | Model untuk memori LLM (disarankan model ringan seperti haiku) |
memory_quality — Ambang batas gerbang kualitas memori; mengontrol pemfilteran penulisan dan akurasi recall
{
"memory_quality": {
"min_store_importance": 0.4, // Write gate: discard facts with importance below this threshold
"min_recall_score": 0.35, // Recall gate: skip memories scoring below this threshold
"dedup_threshold": 0.3 // Dedup threshold: Jaccard similarity above this = duplicate
}
}
| Parameter | Tipe | Default | Deskripsi |
|---|---|---|---|
| min_store_importance | float | 0.4 | Gerbang penulisan: fakta dengan importance di bawah ambang ini dibuang saat ekstraksi |
| min_recall_score | float | 0.35 | Gerbang recall: memori dengan skor di bawah ini tidak disuntikkan ke prompt |
| dedup_threshold | float | 0.3 | Ambang deduplikasi: similaritas Jaccard di atas nilai ini = duplikat, yang terbaru dipertahankan |
Daftar Perintah yang Tersedia
Jalankan aksi cepat dengan perintah slash
| Perintah | Deskripsi |
|---|---|
| /ide | Luncurkan editor kode layar penuh |
| /context | Manajemen multi-konteks (baru/ganti nama/alihkan/hapus) |
| /help | Tampilkan informasi bantuan |
| /copy | Salin respons terakhir ke papan klip |
| /resume | Lanjutkan tugas yang belum selesai |
| /clear | Hapus konteks percakapan |
| /restart | Mulai ulang niuma |
| /model | Verifikasi/alihkan model |
| /quit | Akhiri program |