← The Dino Dispatch
Featurev1.0.7

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.