For AI agents
The independent verifier coding agents like Codex, Claude Code, and Cursor call before shipping an API change: a deterministic verdict over the CLI today, with a hosted MCP server coming.
Coding agents like Codex, Claude Code, and Cursor change APIs faster than anyone can review by hand. An agent cannot trust its own grade: the check has to come from outside the generation loop. Dino is that check. The agent builds, Dino verifies the running API and returns a deterministic verdict, and the agent branches on it with no human in the middle.
How an agent calls Dino
Today an agent drives the CLI, which needs no account: run dino scan --format json against any endpoint, read the verdict on stdout and the branch signal from $?. A hosted MCP server (typed tools plus history, gates, and comparison) is coming.
dino scan --endpoint https://your-api.com/graphql --fail-on-high --format json --quietAn agent reads three surfaces, in the order it acts on them:
- Exit code (branch):
0clean ·2usage ·3policy gate failed ·4transient ·5config ·6partial ·70crash. Branch on$?with no parsing. See exit codes. - JSON verdict (understand):
--format jsonemits aDinoResulton stdout (verdict.health.verdict,findings,verdict.coverage); stdout stays pure, so it pipes tojq. See JSON output. - Error envelope (recover): on exit
2/4/5/70, the last stderr line is{"error":{"kind","message","retryable","exitCode"}}.retryablesays retry (transient) or stop (permanent). See error envelopes.
Is the change safe to ship?
dino scan --fail-on-high exits 3 when any HIGH or CRITICAL finding exists and 0 when clean, enough to decide continue-or-stop. Exit 6 (partial) is not a pass: read verdict.reasons to see what could not be verified.
Set up and resume
dino skill --install writes the agent skill (the setup, verify, read, fix, reverify loop) to .claude/skills/dino/SKILL.md, matched to the installed CLI version. dino schema prints every command, flag and exit code as clispec JSON, so an agent can check what the installed version accepts instead of guessing. When dino init is missing an input it exits 2 and puts a nextAction on the stderr envelope: { "type": "ask_user", "inputs": [...], "resume": { "type": "run_command", "bin": "dino", "args": [...] } }. Ask the human for each input (for a secret, ask them to set the named env var), then re-run resume.bin with resume.args, appending each collected input by its flag.
MCP
A hosted MCP server (a remote URL you connect over OAuth, for cloud tools and history) is coming. It is not an npm package: there is no @dino-hq/mcp-server to install. Until it ships, use the CLI.