A coding agent that edits like a compiler
jikjicode is a standalone coding-agent CLI built on Jikji's deterministic loop. It combines provider-native tool calls, precision edits, compiler and language-server intelligence, durable sessions, and guarded execution — across GLM, Codex, Grok, Ollama, Claude, or any OpenAI-compatible endpoint, locally on your machine or delegated to a Jikji server.
The same deterministic forme loop, given a coding-focused toolset — every edit anchored, every command bounded.
Runs where you do
Run jikjicode in-process against a configured provider, or hand the run to a Jikji server and its policy plane. CGO-disabled artifacts are cross-built for Linux, macOS, and Windows on amd64 and arm64. Linux amd64 is native-qualified; the other targets are compile-validated only and require operator testing. BSD is unsupported.
| Local | The default — the forme loop runs in-process against your model, with the coding toolset on your workspace. |
|---|---|
| Remote | Delegate the whole run to a Jikji server over /v1/runs; the server's scopes and sandbox bound it. |
| Interactive & one-shot | On qualified Linux, use the full-screen TUI, line REPL, or jikjicode exec. The TUI streams output token by token and carries a /-command palette, a live task panel, @-file mentions, a sub-agent view, and input queuing while the agent works. /resume, durable transcripts, and structured output support portable automation; /ps inspects Unix PTY-backed terminals. Windows ConPTY is not supported. |
| Setup | jikjicode init scaffolds a config; jikjicode doctor checks your model and environment before you start. |
| Providers | Configure several providers at once — GLM/Z.AI, Codex, Grok/xAI, Ollama, Claude, or any OpenAI-compatible endpoint — and switch across them mid-session with /model; each backend keeps its own kind, endpoint, and key. |
Stop, resume, and keep the model on the work
The coding loop keeps execution authority, conversation state, planning state, and context capacity as separate contracts. That makes long work recoverable without turning model prose into control flow.
Native tools, typed authority
Local jikjicode enables provider-native typed tool calls by default. Only a typed call may execute; JSON-looking assistant text remains answer text, and malformed typed arguments return a correlated error without running the tool.
A real resume, not a pasted summary
/resume atomically restores the matching workspace, transcript, agent mode, active plan, transport identity, and validated context checkpoint. Imported sessions do not inherit trusted checkpoint authority.
Bounded context continuation
When a provider window is known, preflight compaction protects capacity before the call; overflow recovery provides the reactive path. A versioned, checksummed, bounded handoff preserves current work, evidence, and unresolved next steps.
Plan, backlog, and task graph stay distinct
Plan mode blocks mutation, commands, network access, and delegation while plan.write builds the execution artifact; leaving it requires explicit approval. TODO remains the user's backlog, while the task graph carries dependencies for an accepted plan.
Edits that refuse to work on a stale file
The failure mode of coding agents is editing text they misremember. jikjicode anchors every change to what's actually on disk.
Hash-anchored edits
file.edit pins each change to a content hash and a line anchor. If the file moved under it, the edit is rejected — not silently applied to the wrong place — with a tolerant-match ladder and anchor recovery to re-find the target when lines shift.
Atomic multi-file patches
file.apply_patch applies a multi-file change as one unit and rolls the whole set back on any partial failure — no repo left half-edited.
Auto-diagnose after each edit
JSON and YAML edits are syntax-checked in-process. With explicit host execution enabled, Go package diagnostics can run after an edit and feed failures back into the same turn.
Unicode-safe
Edits and identifier matching are rune-aware, so multi-byte source and non-ASCII identifiers are handled correctly rather than corrupted on a byte boundary.
It reads code through the compiler
Not grep-and-hope. Go type-aware tools use the real toolchain; structural outlines cover 200+ languages; and operator-trusted language-server manifests add multi-language symbols and call graphs when full host execution is explicitly enabled.
| Type-check | code.check — compiler-grade diagnostics for Go (go/packages), so "it compiles" is verified, not assumed |
|---|---|
| Navigate | code.definition · code.references · code.callers · code.implementations — type-aware for Go (go/types) |
| Rename | code.rename — safe, cross-file, type-aware renaming for Go |
| Outline | file.outline · code.symbols — full AST for Go, a lexer-based (ctags-like) definition scan for 200+ other languages |
| Multi-language via LSP | code.intel — bounded symbols and caller/callee results from an operator-trusted language server, activated lazily by file extension under explicit full host access |
It runs your project, under a gate you set
A coding agent that can't run the tests is guessing. jikjicode executes real build and test commands, with a risk gate and optional human approval you control.
Host-aware command runner
shell.run uses a POSIX shell adapter on Linux and macOS and a cmd.exe /C adapter with Job Object cancellation on Windows. Linux behavior is native-tested; macOS and Windows are cross-compile validated only, and Windows ConPTY sessions are not supported. Bounded head-and-tail output keeps noisy logs out of the context window.
Risk-based sandbox
A configurable policy — read-only, workspace-write, or danger-full-access — bounds tool risk. Deep process isolation (namespaces, private procfs, Landlock, optional seccomp and cgroups) is Linux-only. macOS Seatbelt and a Windows OS sandbox are not implemented; requests that require an OS sandbox fail closed.
Ask before it acts
An optional approval layer (--ask) puts a human in the loop over actions the sandbox already permits. Missing or non-interactive approval fails closed; approval never overrides a sandbox denial.
Docs & tasks in reach
web.fetch pulls in documentation under the sandbox, and a todo tracker keeps a multi-step change organized across turns.
Rides out rate limits
On a provider 429 or 529, jikjicode waits out the window — honoring Retry-After — and retries the turn instead of failing. On by default in local mode; disable it with --no-wait-on-rate-limit. Remote runs defer to the server's resume policy.