Home · jikjicode
jikjicode — the coding agent

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.

Engraved coding workshop connecting source structure, precision edits, verification, guarded tools, and a final press
EDIT CYCLEANCHORED, CHECKED, REVERSIBLE
UnderstandType-check, symbols, and a call graph read the code through the compiler and language servers.
EditHash-anchored edits and atomic multi-file patches refuse to work on a stale file.
VerifyEach mutating edit is re-checked, and builds and tests run through a host-specific command adapter whose target must be qualified.
BoundA risk-based sandbox with optional approval gates what the agent may run.

The same deterministic forme loop, given a coding-focused toolset — every edit anchored, every command bounded.

One CLI, Explicit Platform Contracts

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.

LocalThe default — the forme loop runs in-process against your model, with the coding toolset on your workspace.
RemoteDelegate the whole run to a Jikji server over /v1/runs; the server's scopes and sandbox bound it.
Interactive & one-shotOn 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.
Setupjikjicode init scaffolds a config; jikjicode doctor checks your model and environment before you start.
ProvidersConfigure 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.
Durable Agent Contract

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.

Recovery boundary: completed calls with matching durable evidence are replay-guarded. External side effects still require downstream idempotency or operator reconciliation across an ambiguous crash boundary; Jikji does not market a universal exactly-once guarantee.
Precision Edits

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.

Code Intelligence

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-checkcode.checkcompiler-grade diagnostics for Go (go/packages), so "it compiles" is verified, not assumed
Navigatecode.definition · code.references · code.callers · code.implementations — type-aware for Go (go/types)
Renamecode.renamesafe, cross-file, type-aware renaming for Go
Outlinefile.outline · code.symbols — full AST for Go, a lexer-based (ctags-like) definition scan for 200+ other languages
Multi-language via LSPcode.intel — bounded symbols and caller/callee results from an operator-trusted language server, activated lazily by file extension under explicit full host access
Language-server processes are treated as trusted host code: manifests require an absolute operator-controlled path, frames and results are bounded, workspace symlink escapes are rejected, and provider credentials are removed from the child environment.
Build, Test, Ship

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.

Same loop, richer surface — jikjicode is the coding-focused face of the forme loop, and it composes with the orchestrator-executor and coding examples.