curl -fsSL https://install.ottocode.io | shTo pin a release explicitly:
OTTO_VERSION=v0.1.231 curl -fsSL https://install.ottocode.io | shIf you do not need a pinned version, prefer the default installer invocation above.
bun install -g @ottocode/installgit clone https://github.com/nitishxyz/otto.git
cd otto
bun install
bun run compileInteractive setup:
otto setupOr set credentials directly:
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export GOOGLE_GENERATIVE_AI_API_KEY="..."
export OPENROUTER_API_KEY="..."You can inspect what otto sees with:
otto doctor
otto auth listotto
otto --web
otto "explain this error"
otto "write tests for this module" --agent build
otto "plan the refactor" --agent plan
otto "research auth handling" --agent researchBehavior notes:
ottostarts the local API server and launches the TUIotto --webstarts the API and browser UI together- one-shot prompts stream through the same local server runtime
otto serve
otto serve --port 3000
otto serve --network
otto serve --no-openWhen you run otto serve --port 3000:
- API listens on
http://localhost:3000 - Web UI is served on
http://localhost:3001
The API is versioned under /v1/*, and /openapi.json exposes the generated spec.
Global config:
~/.config/otto/config.json
~/.config/otto/agents.json
~/.config/otto/tools/
~/.config/otto/commands/
Secure auth storage:
- macOS:
~/Library/Application Support/otto/auth.json - Linux:
$XDG_STATE_HOME/otto/auth.jsonor~/.local/state/otto/auth.json - Windows:
%APPDATA%/otto/auth.json
Project config:
.otto/config.json
.otto/agents.json
.otto/agents/<name>.md
.otto/tools/<tool-name>/tool.js
Make sure your install path is on PATH:
echo $PATH | tr ':' '\n' | grep localotto doctor
otto auth login
otto auth listcurl http://localhost:3000/
curl http://localhost:3000/openapi.json
curl http://localhost:3000/v1/server/info