v0.2.0 - Alpha

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.

🔒
Eksekusi Lokal
Data tidak keluar dari mesin Anda — kontrol privasi penuh
🛡️
Privasi Utama
API Key disimpan secara lokal, data percakapan tidak diunggah
📦
v0.2.0 Alpha
Terus ditingkatkan, didorong komunitas
💬
Dukungan Komunitas
GitHub Issues — Hubungi pengembang langsung

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.

Skenario penggunaan: Anda punya gambaran umum tetapi tidak bisa merumuskan langkah-langkah dengan jelas, dan ingin melanjutkan dengan iterasi. Contoh: "Temukan dan perbaiki error pada halaman login"
  • 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.

Skenario penggunaan: Anda dapat memecah tugas menjadi langkah-langkah, dan setiap langkah memiliki cara untuk memeriksa kebenarannya. Contoh: "/loop Tambahkan paginasi ke API pengguna, jalankan py_compile setelah perubahan"
  • 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

01 Unduh
⬇ Unduh niuma.exe
Windows · Tanpa Instalasi · Langsung Jalankan
02 Konfigurasi
# ~/.niuma/settings.json
{
  "factories": [{
    "api_key": "your-key"
  }]
}
03 Luncurkan
$ niuma.exe
niuma_code v0.2.0 diluncurkan

Daftar Parameter settings.json

Jalur file konfigurasi: ~/.niuma/settings.json

factoriesKonfigurasi API multi-provider. Setiap provider mendeklarasikan base_url / api_key / daftar model yang didukung; request di-routing otomatis berdasarkan nama model
💡 Contoh Konfigurasi
{
  "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
llmModel, level effort, anggaran pemikiran & manajemen konteks
💡 Contoh Konfigurasi
{
  "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)
envVariabel lingkungan yang ditulis ke os.environ. Mengontrol persona, debugging, jaringan, dan perilaku izin
💡 Contoh Konfigurasi
{
  "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
compactKompresi konteks: secara otomatis mengompresi percakapan panjang sambil mempertahankan informasi penting
💡 Contoh Konfigurasi
{
  "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_palaceKonfigurasi LLM Memory Palace; independen dari blok llm, di-parse secara terpisah
💡 Contoh Konfigurasi
// 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_qualityAmbang batas gerbang kualitas memori; mengontrol pemfilteran penulisan dan akurasi recall
💡 Contoh Konfigurasi
{
  "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

#tag Perintah Cepat

Gunakan #tag untuk menyuntikkan instruksi yang sudah didefinisikan dengan cepat — definisi sekali, gunakan berulang kali

💡

Apa itu #tag

Tag kustom adalah pintasan yang didefinisikan pengguna, yang berkembang menjadi teks preset saat Anda mengetik #tagname.

  • Mengetik #ja akan secara otomatis berkembang menjadi "Jawab dalam bahasa Indonesia" (atau sesuai tag)
  • Mendukung tag kustom apa pun, tidak peka huruf besar-kecil
  • Tag dapat ditempatkan di mana saja dalam input, secara otomatis dihapus setelah di-parse
  • Teks yang sudah diekspansi ditambahkan ke input sehingga dapat dipahami LLM
Contoh: #ja Kompleksitas bubble sort → [Jawab dalam bahasa Indonesia] Kompleksitas bubble sort
⚙️

2 Jenis Tag

Tag sistem mengontrol mode operasi, tag kustom menyuntikkan instruksi preset. Keduanya saling melengkapi.

  • #plan_mode — paksa hanya analisis, tanpa eksekusi (prioritas tertinggi)
  • #skip_mode — lewati semua izin, jalankan alat secara langsung
  • #custom — pintasan kustom yang didefinisikan pengguna
  • Jika plan_mode dan skip_mode dimasukkan bersamaan, plan_mode yang diprioritaskan
📋

Manajemen Perintah /tag

Gunakan perintah /tag untuk menambah, mengubah, menghapus, dan menampilkan daftar tag kustom.

  • /tag — buka panel manajemen tag (TUI) atau tampilkan daftar tag (CLI)
  • /tag add <name> <text> — tambah tag baru
  • /tag mod <name> <text> — ubah tag yang ada
  • /tag rm <name> — hapus tag
  • /tag ls — tampilkan semua tag
🎯

Contoh Penggunaan Umum

Kapsulkan instruksi yang sering digunakan sebagai tag untuk meningkatkan efisiensi percakapan.

  • #ja — paksa respons dalam bahasa Indonesia (sesuai kebutuhan)
  • #fix — instruksi perbaikan bug standar
  • #review — persyaratan standar code review
  • #explain — penjelasan detail logika kode
Penggunaan gabungan: #plan_mode #id Analisis bottleneck performa fungsi ini
💾

Lokasi Penyimpanan & Konfigurasi

Tag disimpan dalam file JSON, di lokasi yang sama dengan settings.json.

  • Lokasi: ~/.niuma/custom_tags.json
  • Format kunci-nilai sederhana, kunci otomatis dikonversi ke huruf kecil
  • Penulisan atomik, mendukung Windows
Contoh file:
{
  "id": "Jawab dalam bahasa Indonesia",
  "fix": "Perbaiki bug"
}
🔄

Pipeline Parsing

Input melewati routing 3 arah, memastikan pemahaman LLM, recall memori, dan penyimpanan persepsi masing-masing mendapatkan informasi yang diperlukan.

  • raw_input — input asli, untuk penyimpanan jejak
  • llm_input — input setelah ekspansi tag, untuk dipahami LLM
  • filter_input — input tanpa tag, untuk recall memori
  • Memori tidak tercemar oleh tag, recall tetap akurat