Give it a harness.
Let it run free.
minder drives Anthropic, OpenAI, Gemini, and Ollama through the same tool-calling loop. Policy hooks sit at five fixed points in that loop — written in mq, a query language with no builtin for file writes, network requests, or process execution. A hook can watch the loop. It cannot become the loop.
the loop, gate by gate
Hooks that can't
become exploits.
Most agent harnesses let you hook into the loop with a general-purpose scripting language — which means a hook can do anything the agent can do: write files, call the network, spawn processes. A compromised or buggy hook is just as dangerous as a compromised agent.
minder's hooks are written in mq instead. It has no builtin for any of that. A hook can only look at what's happening and answer allow, block, or override — it structurally cannot cause a side effect of its own.
# stop the turn once 3 tool calls in a row have failed. def on_context(messages): let failures = agent_consecutive_errors(agent_tool_results(messages)) if(failures >= 3, {"action": "block", "reason": "3 consecutive tool failures -- pausing for a human"}, {"action": "allow", "value": messages});
no side effects
No file, network, or process builtins in the language itself.
fixed gates
Five interception points, never the loop's driver seat.
sandboxed plugins
WASI tool plugins run under an explicit fuel/capability budget.
Features
01
Multi-provider
Anthropic, OpenAI, Gemini, and Ollama (including local gpt-oss) behind one CLI.
02
Built-in tools
File read/write/edit, bash, git, grep, glob, and web fetch/search.
03
mq-based hooks
Drop .agent/hooks/*.mq into any project, no code changes.
04
WASM tool plugins
Sandboxed WASI plugins under an explicit capability/fuel budget.
05
MCP servers
Opt-in mcp feature spawns configured servers, exposes their tools.
06
Skills
Reusable, discoverable project playbooks the agent can pull in on demand.
07
Live execution display
Colorized diffs and tool traces on stderr; the answer stays clean on stdout.
08
Autonomous loop mode
minder loop TODO.md re-queries a checklist after every turn.
09
Single binary
One minder binary, one task string. No daemon.
Install
# installs the `minder` binary
cargo install minder-cli
minder "..."
export ANTHROPIC_API_KEY=sk-ant-... && minder "summarize what this project does"