dino init, now driven by an agent
August 15, 2026
Headless `dino init`: an autonomous agent or a CI job can configure Dino end to end with zero prompts, one round-trip validation, and machine-readable results.
Dino is the deterministic verification layer for APIs, and the layer is only useful if a machine can set it up without a human. 1.0.7 makes dino init fully non-interactive so an autonomous agent, or a CI pipeline, can generate a .dino.yml end to end, no prompts, no guessing, no one sitting at a terminal.
Upgrade with npm install -g @dino-hq/cli@latest.
Built for agents, not prompts
dino init goes non-interactive on --yes or whenever it detects it is not attached to a real terminal, which is exactly the case for an AI agent or a CI runner piping a shell. In that mode it never reads stdin and never blocks waiting for input. A hung process with no exit code is the single most common way an agent workflow dies, and it cannot happen here: every run returns promptly with a clear exit code.
One round-trip to a working config
Missing or invalid inputs are reported all at once in a single exit 2 usage error, with a machine-readable suggestion field, so an agent fixes its whole command in one turn instead of discovering problems one at a time. The hints are specific: a spec URL passed with a GraphQL protocol is told to remove it, a REST protocol with no spec URL is told to add one.
Safe to run on autopilot
Re-running with the same inputs is a no-op: the result reports changed: false and the file is left byte-for-byte untouched, so an agent can call dino init as often as it likes. Dino never overwrites a config that differs without an explicit --force, never silently assumes an auth method (you state --auth none|header|oauth2 on purpose), and never writes a secret value. Auth is stored as an environment-variable name, never the credential itself. --dry-run previews the exact config it would write without touching disk.
Machine-readable, end to end
Add --format json and success prints a single structured result on stdout, while every error is a JSON envelope on the last line of stderr with a stable kind, exit code, and remediation suggestion. Every input takes a flag or a DINO_INIT_* environment variable (the flag wins), so the same setup works from a CI secret or a one-line command. A full call looks like dino init --yes --endpoint https://api.acme.com/graphql --protocol graphql --auth none --format json.
Also in 1.0.7
dino validate now exits 5 with a JSON error envelope on an invalid .dino.yml, matching dino scan, so a broken config is machine-readable no matter which command surfaces it.
The principle behind the release: an autonomous agent can configure Dino repeatedly, safely, and without supervision. It never prompts unexpectedly, never blocks on input, never assumes security-sensitive settings, never clobbers state, and always returns a result a machine can act on.