NOTE
Jiku (jikud and jiku) is an optional, standalone desktop orchestration daemon hosted at komawm/jiku. Koma runs completely independently with zero AI dependencies when Jiku is not installed.

Core Design: Three Specialized Model Drivers
Jiku separates sub-second closed-set visual triage, deliberative multi-step planning, and optional real-time voice interaction into three decoupled drivers inside jikud:
| Driver | Role | Default Endpoint & Contract |
|---|---|---|
DecisionsDriver |
Sub-second UI state checks, grid_225 targeting, safety gates & ~/JikuBox triage |
gemini-decision-1 (POST /v1beta/decisions, total_output_tokens == 0, with automatic EmulatedStructuredTextModel JSON-Schema fallback) |
TurnModelDriver |
Multi-step workspace planning, System-2 fallback (< 0.85), skill synthesis |
OpenCode Go deepseek-v4.1-flash (thinking = false), plus OpenAI-compatible, Google AI Studio, and Anthropic providers |
LiveSessionDriver |
Optional full-duplex voice & AvatarCue session transport |
Gemini BidiGenerateContent WebSocket (disabled by default; live PipeWire audio I/O targeted for v0.1.0) |
Workspace Crates (#![forbid(unsafe_code)])
All four Jiku crates (jikud, jiku, jiku-memory, jiku-tts) enforce #![forbid(unsafe_code)] and zero raw FFI:
| Crate | Kind | Responsibility |
|---|---|---|
jikud |
Library + Binary | $XDG_RUNTIME_DIR/jiku.sock RPC daemon, Three-Driver clients, DecisionCompiler, Phodopus Lua policy hooks, KomaIpcClient (File::from(fd) sealed memfd reads) |
jiku |
Binary | CLI controller (status, validate-config, decide, plan, run, box classify, memory search, skills, mcp) |
jiku-memory |
Library | L0 perceptual dHash frame ring, L1 per-app quirks, L2 SQLite WAL + FTS5 BM25 memory, staged_skills approval store |
jiku-tts |
Library | Optional TtsProvider (VOICEVOX, OpenAI speech, noop) + AvatarCue packet models |
Observe → Decide → Plan → Koma Action Loop
- Observe:
jikudconnects tokoma-agent.sockwith a scopedCapabilityTokenand requestscapture.frame(SCM_RIGHTSsealedmemfd, masked forblock_out_fromsurfaces) plusEpoch. - Decide (
DecisionsDriver): Evaluates calibrated binaryNoulsafety checklists (15rules) andChoicequestions (NONE_OR_OTHERopen-world escape) over15×15grid_225cells. - Plan (
TurnModelDriver): Escalates ambiguous states (< 0.85confidence) to[roles.planner](deepseek-v4.1-flashor configured LLM) to synthesize structured steps or candidate Lua skills. - Act (
KomaIpcClient): Executesvseat.click,vseat.key,vseat.inject_text, ormacro.execwithexpected_epoch, stopping immediately on4090 ERR_STALE_EPOCH,4091 ERR_HUMAN_PREEMPTED, or4032 ERR_PROTECTED_SURFACE.
Quick CLI Tour
jikud --daemon --config ~/.config/jiku/config.toml --policy ~/.config/jiku/init.lua
jiku status --json
jiku decide --image shot.png "Is a terminal window visible?"
jiku plan "Summarize the active workspace"
jiku box classify ~/JikuBox
jiku mcp --print-tools