⚔️ シュヴァリエ | Shuvarie
The AI coding agent
for chivalrous people.
Shuvarie lives in your terminal. It reads your code, edits files, runs tools and keeps a forkable history of every decision — all under explicit, granular permissions you control.
// features
A toolkit that keeps its oaths
Everything the agent touches passes a permission ward first. Nothing is reverted behind your back — only fate is re-chosen.
Bring your own model
OpenAI-compatible, Anthropic, Google, Bedrock, Ollama and more, configured in one connections.kdl and switchable on the fly with /model.
Codemode
One tool that runs a Rhai script, and the script calls the others: dependent calls become one round trip, intermediate results never reach the context.
Sessions & forking
Every session is a tree. Inspect it with /tree, roll back with /undo, replay a turn, and export or import the whole thing as JSON.
Tabs
A tab is a separate agent: its own workspace, conversation and composer. /newtab ~/another-project runs a second one there, Alt+←/→ switch, Alt+1…9 jump.
Skills
Reusable prompts and procedures stored as markdown, discovered from .agents/skills and invoked straight from the prompt as /skill:<name>.
Scenes & themes
Built-in Advisor, Reviewer and Orchestrator scenes plus five theme families. Drop in scene.d and themes.d files, switch live with /scene.
Attachments
/attach fuzzy-finds a PDF, office document, spreadsheet, EPUB or image to send with the prompt — as a chip on the pending strip, never as text. /manage-attachments reorders and prunes them.
Permissions & trust
A workspace trust prompt on first run, plus a granular allow / deny / ask policy for paths, shells and tools — optionally backed by decision models.
Keyboard-first
Every action has a keybinding, and Ctrl+M puts every command one keystroke away. Emacs editing keys work where you expect them.
Headless mode
shuvarie run "…" drives the agent without the TUI, streaming the reply to stdout and the tool log to stderr — same config, permissions and sessions.
// spotlight
Codemode: the tool that calls the tools
Most agents burn a round trip per tool call. Shuvarie hands the model one tool that runs a Rhai script — and inside that script, every other tool is callable. Dependent calls collapse into one turn, and only what the script returns ever reaches the context window.
- ▸One round trip for a whole chain of lookups.
- ▸Intermediate output is filtered in the script, not the context.
- ▸On by default; timeouts, call caps and inline budgets in shuvarie.kdl.
- ▸/codemode switches the offer, the roster and state keeping mid-session.
// one call, many tools — results stay in the script
let hits = tools::grep({# pattern: "fn export", path: "src" });
let sources = hits.map(|h| tools::read_file({# path: h.path }));
let offenders = sources.filter(|s| !s.contains("dry_run"));
text(`${offenders.len} call sites miss dry-run`); // install
Summon it in millis
A single binary. Pick a provider on first launch — a local Ollama needs no key — and answer the workspace trust prompt. Then type.