TL;DR: A Rust agent runtime where the context, tools, permissions, and requests are explicit state — not decisions made inside a framework and reported afterwards. You get a /context view showing every item (what it is, its token cost, whether it’s going to the model, and why not), a state machine you can step through one transition at a time (/step), and an append-only event log. The agent is not the boss. You are.
Why It’s Different
| most runtimes | nachalnik |
|---|---|
| Context = list of strings | Context = data structure (id, kind, source, label, content, size, state, note, metadata) |
| “Agent decided this is relevant” | You see every item, its cost, and the reason it’s excluded/elided |
| Turn = content + tool calls (flattened) | Turn preserves production order: reasoning → text → call → reasoning → call… |
| Approve command? | /step stops atReady — calls decided,none run . Read, prune, drop, or continue. |
| Session = chat history | Session = snapshot (items, states, pins, notes, call IDs) + append-only event log |
| Budget = estimate | Budget = Calibrating counter that learns from what providersactually charge |
| Tools = fixed at startup | Registry is live: /tools drop shell stops offering it next request |
| Model manages context? | --introspect hands the modelamend (elide/exclude/revise/note/undo) — same API the UI calls |
Five transcripts at https://ljedrz.github.io/nachalnik/: