Boundary-first tools
Every filesystem call resolves through a realpath jail. .env, .git, and .argus are blocked by name, not by convention.
Python 3.10+ · zero runtime dependencies
Argus connects a language model to a confined workspace, explicit approvals, and crash-tolerant sessions. Read every boundary. Change any of them.
pip install git+https://github.com/PRINCE2-AI/Argus.git
Six providers · four languages · 102 offline tests · MIT
Illustrative transcript. Tool output is truncated.
01 — The boundary is the product
Argus is deliberately boring where it matters: one loop, one policy gate, one session format. The interesting parts are the edges.
Every filesystem call resolves through a realpath jail. .env, .git, and .argus are blocked by name, not by convention.
read-only, safe, yolo. Safe asks. Headless runs deny instead of guessing. Deterministic deny patterns still apply in YOLO.
Append-only JSONL with torn-tail tolerance, interrupted-call repair, and compaction markers. Resuming is a first-class path, not an afterthought.
Gemini, Anthropic, OpenAI, OpenRouter, Groq, and Ollama. Tool IDs, thought signatures, and content blocks normalize at the edge.
Python standard library only. Install it, read it, vendor it, or embed it. There is no framework underneath to learn or fight.
A scripted provider drives the loop. The offline suite verifies safety, persistence, repair, and every adapter. CI covers Python 3.10–3.13.
02 — Provider neutral
Tool-call IDs, Gemini thought signatures, Anthropic content blocks, and reasoning-model parameters stay at the edge. The loop never learns a vendor's dialect.
gemini-3.1-pro-preview
GEMINI_API_KEY
Default when no provider is configured. Gemini 3 thought signatures round-trip through the neutral message format.
argus --provider gemini --prompt "Review tools.py"
Cloud providers also accept ARGUS_API_KEY as a fallback. Pass --model to override the default.
Default mode. Mutating tools need an interactive approval. In a headless run, they are denied unless you pass --yes.
03 — Safety as code
Approval is a code path, not a prompt instruction. Every tool call crosses the same Policy before it can touch the workspace.
Argus is not an OS sandbox. Run untrusted tasks in a container or VM.
Read the safety model04 — Architecture
A small composition layer, one turn loop, and boundaries you can name. Nothing important happens in a place you cannot read.
05 — Durable sessions
Agent work is long-running and failure-prone. Argus appends each message as it happens, then earns the right to resume when the process disappears.
user{"role":"user","text":"Add validation to the handler"}
assistant{"role":"assistant","tool_calls":[{"id":"call_7f1","name":"read_file","args":{"path":"src/api.py"}}]}
tool{"role":"tool","call_id":"call_7f1","text":"1\tdef handler(request): ..."}
user{"role":"user","text":"[Conversation so far, compacted] ...","meta":{"compaction":true}}
assistant{"role":"assistant","text":"Validation added and verified."}
06 — Evidence, not adjectives
A scripted provider exercises the same loop the CLI uses. Safety checks, provider translation, crash repair, compaction, memory, skills, and fleet ordering all run offline.
Read the whole request path