Getting Started

Install otto and start coding with AI in under a minute.

Install

Recommended: One-Liner

curl -fsSL https://install.ottocode.io | sh

Detects your OS and architecture, downloads the prebuilt binary, and installs to ~/.local/bin.

Pin a specific version:

OTTO_VERSION=v0.1.175 curl -fsSL https://install.ottocode.io | sh

Alternative: npm or Bun

bun install -g @ottocode/install

The postinstall script downloads the correct binary for your platform.

Supported platforms: macOS (x64, ARM64), Linux (x64, ARM64)

From Source

Requires Bun v1.0+.

git clone https://github.com/nitishxyz/otto.git
cd otto
bun install
bun run compile    # builds to dist/otto

Setup

1. Configure a Provider

otto setup

Walks you through provider selection and authentication interactively.

Or set API keys via environment variables:

export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export GOOGLE_GENERATIVE_AI_API_KEY="..."
export OPENROUTER_API_KEY="sk-or-..."

2. Start Using otto

otto                           # start interactive TUI (default)
otto --web                     # start server + web UI (opens browser)
otto ask "explain this error"  # one-shot question
otto ask "write tests" --agent build
otto ask "follow up" --last    # continue last session

3. Verify Installation

otto --version                 # check version
otto doctor                    # check configuration
otto agents                    # list available agents
otto models                    # list available models

How It Works

When you run otto, it:

  1. Starts a local HTTP server for the otto API
  2. Launches the interactive TUI in your terminal
  3. With otto --web or otto serve, opens the web UI in your browser

All AI interactions, session storage, and tool execution happen locally on your machine.

For one-shot usage (otto ask "question"), it starts the server in the background, sends the prompt, streams the response, and exits.

Server Mode

otto serve                     # start on a random port, open browser
otto serve --port 3000         # specific port
otto serve --network           # bind to 0.0.0.0 for LAN access
otto serve --no-open           # don't open browser

The server exposes:

  • API on the specified port (e.g., http://localhost:3000)
  • Web UI on port + 1 (e.g., http://localhost:3001)

Troubleshooting

otto not found after installation

echo $PATH | tr ':' '\n' | grep local

# If not present, add it:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

Provider authentication issues

otto auth login                # reconfigure credentials
otto doctor                    # check what's configured

Binary not executable

chmod +x $(which otto)