Product / CLI

One CLI for humans, CI, and agents

Send one request to the local daemon. Get a readable answer at the prompt or structured JSON for CI and agents. The daemon owns state and guarded actions.

  • Readable output for humans
  • JSON and NDJSON for automation
  • Daemon-enforced guardrails
ottto status --jsonIllustrative output
$ ottto status --json

{
  "protocol_version": 15,
  "daemon": "running"
}
● Final JSON response exit 0
One CLI, three callers

Same commands. Output built for the caller.

Humans get concise summaries. CI and agents add --json or --watch without learning a second interface.

Human

Read the answer.

Start with a concise status summary. Add JSON when you need exact fields.

$ ottto status
CI

Gate on typed output.

Verify one source, then evaluate its documented exit code and JSON response.

$ ottto verify --app codex --json
Agent

Request only what you need.

Bound machine-readable context by range, source, and token budget.

$ ottto context --json --range today --app codex --max-tokens 4000
Request → daemon → response

The CLI asks. The daemon decides.

Operational commands use the per-user local daemon to read canonical state, evaluate health, or run approved local actions. The CLI renders a human summary or returns JSON or NDJSON.

Clear trust boundary. Agents never need to edit Ottto state or app configuration directly. Diagnosis is read-only. Repair is separate, source-scoped, and daemon-approved.

One job per command

Connect. Inspect. Diagnose. Repair.

Read commands report state. doctor diagnoses. A separate repair request crosses an explicit daemon guardrail.

  1. 01

    Connect this Mac

    ottto setup returns a browser claim when the account needs confirmation.

  2. 02

    Inspect current state

    status, account, and apps report daemon reachability, account connection, and app readiness.

  3. 03

    Verify one source

    verify --app … checks configuration and publishes safe setup status. It does not repair by default.

  4. 04

    Diagnose the runtime

    ottto doctor runs daemon health checks. It reports problems; it does not repair them.

  5. 05

    Repair separately

    fix --app … requests one daemon-approved, source-scoped repair.

  6. 06

    Collect or update

    diagnostics collect creates a redacted local bundle. update check returns owner-aware update guidance.

JSON and NDJSON

--json returns once. --watch streams progress.

Use --json for one final object. Add --watch for NDJSON progress and a final event your automation can evaluate.

Final JSONIllustrative output
$ ottto status --json
{
  "protocol_version": 15,
  "daemon": "running"
}
● Final response exit 0
NDJSON streamIllustrative output
$ ottto status --json --watch
{"event":"progress","stage":"request_started","protocol_version":15}
{"event":"final","ok":false,"exit_code":10,"error":{"code":"daemon_unavailable","retryable":true}}
● Typed error exit 10

Illustrative, shortened output based on public protocol fixtures. Request IDs, socket paths, and messages vary by run.

Bounded agent context

Ask for evidence, not a data dump.

Through the daemon, a connected Mac can request backend-computed context, costs, sessions, and Advisor recommendations. These commands return JSON-only, parseable responses.

Set the scope first: range, source, machine, session limit, sort order, or token budget.

Context

A context pack capped to your response budget.

ottto context --json --range today --app codex --max-tokens 4000
Costs

A cost breakdown for one range and source.

ottto costs --json --range today --app codex
Sessions

A limited session list for focused review.

ottto sessions --json --limit 20 --app codex
Recommendations

Advisor recommendations ready for machine review.

ottto recommendations --json
Daemon-enforced boundary

Read freely. Change state deliberately.

Inspect and diagnose without giving automation direct access to Ottto state. When an action can change local configuration or cloud state, the CLI makes the approval boundary explicit.

Read-only

  • Status, account, and app readiness
  • App verification
  • Local diagnostics collection
  • Update state and guidance

Guarded actions

  • Browser claim may return requires_user: true
  • Repairs are separate and source-scoped
  • Diagnostics upload requires approval and retention acceptance
  • Cloud register and sync require --approve

Daemon authority

  • Canonical local runtime state
  • Health evaluation
  • Approved local repairs
  • Safe setup-status publication
Canonical Homebrew install

Install the CLI.

Use the official tap, then run ottto status to check the local daemon. Want a graphical interface too? Install the Mac app separately.

$ brew install ottto-ai/tap/ottto