The thesis.
Kujo is a general-purpose scripting language for local-first automation and AI-native applications. Its agent-authoring surface is concrete: the repository’s agent guide specifies binding rules, module conventions, runtime selection, validation commands, and stable CLI contracts for agents writing .kujo programs. A separate skills repository packages that guidance into focused coding workflows.
The orchestration classification comes from the runtime boundary. Kujo provides request hashing, recorded AI responses, and capability checks; provider routing, retries, RAG policy, and agent frameworks belong in packages. Compared with Boruna’s workflow-oriented model, Kujo keeps functions, loops, collections, and modules as the ordinary units of authored code. The replay guarantee concerns recorded AI calls, not arbitrary whole-program execution.
What it looks like.
let messages := [ai_message("user", "Summarise this report.")] let options := { "endpoint": "https://api.example.test/v1/chat/completions", "model": "demo-model" } let request_id := ai_request_hash(messages, options) print(request_id)
Message construction and request hashing are pure operations: this example runs without credentials or network access, including in untrusted mode. The hash identifies the normalised request used by the AI cassette mechanism.
Distinctive moves.
The AI runtime computes credential-independent request hashes and can serve recorded responses before constructing an HTTP client. Strict replay returns an error on a missing cassette rather than contacting a provider. This gives an agent-written integration a reproducible offline test path without replacing its call sites with a separate mock API.
Capability controls distinguish AI egress from general network access. A normal run is trusted; --untrusted restricts host effects, with explicit grants such as --allow-ai. The project’s security guidance explicitly says Kujo is not a sandbox. These are runtime controls, not a static effect-type proof.
Like Codong, Kujo supplies application APIs and structured feedback alongside the language. Its distinctive emphasis is the deterministic runtime mechanism rather than a claim about minimum token counts. No independent token-efficiency result is asserted here.
Maturity.
Kujo has a working Rust implementation, published binaries for macOS, Linux, and Windows, and a bytecode VM as the default execution path. The public repository dates from June 2026. The tree-walking interpreter remains available for compatibility and debugging; runtime parity documentation records differences, and JIT execution is experimental. Authors need to check the supported runtime path rather than assume all execution modes are interchangeable.
Agent tooling.
The machine-readable CLI contract documents JSON output and exit codes for checking, formatting, linting, and runtime diagnostics. Agents must still respect command-specific error envelopes: ordinary failures are not universally JSON on standard output. The runtime also ships an LSP and kujo mcp make for generating repository-specific MCP servers. These tools support the author/check/repair loop independently of whether a program itself calls an LLM.
- BorunaorchestrationBoth put replay and capability controls in the runtime. Boruna centres declared workflow effects and evidence bundles; Kujo uses ordinary scripts with AI response cassettes and opt-in restrictions on host access.
- CodongsyntacticBoth combine application scripting with bundled APIs and structured feedback for coding agents. Codong emphasises a canonical operation vocabulary and compilation through Go; Kujo targets a bytecode VM and makes AI record/replay a runtime primitive.