Skip to main content

OttoAI

A local-first, extensible coding agent for your terminal — think "Copilot CLI, but yours." Runs on local models (Ollama / Qwen3) by default, works fully offline, and can optionally use cloud providers (OpenAI, Anthropic, Gemini, Azure, OpenRouter, or any OpenAI-compatible endpoint) when you choose to turn them on.

Features

  • 🧠 Local by default — Ollama + Qwen3 out of the box, no cloud required.
  • 🔌 Cloud-optional & pluggable — flip to online and use OpenAI / Claude / Gemini / Azure / OpenRouter / any OpenAI-compatible server via config.
  • 🛠️ Real agent tools — shell, file read/write/edit, grep/glob code search, git, web fetch, cross-session history search, and MCP (Model Context Protocol) servers.
  • 💾 Sessions + memory — every conversation is persisted in SQLite, with FTS5 keyword search and optional embeddings for semantic recall across past sessions.
  • ♻️ Conversation compaction — long chats are automatically summarized to stay within context, while the full history stays searchable.
  • 🧩 Extensible — add providers/tools via pip entry points or drop a .py file in ~/.ottoai/plugins/.

Install

pip install ottopilot        # from PyPI (once published)
# or, from source:
pip install -e .

Install Ollama and pull the default model (light, runs on ~8GB RAM):

otto pull qwen3:1.7b

On 16GB+ machines you can use a stronger model, e.g. otto pull qwen3:8b or otto pull qwen2.5-coder:7b, then set it via /model or default_model.

Usage

otto                      # interactive REPL (local-first)
otto chat "explain this repo"
otto chat --provider openai --model gpt-4o "review my diff"
otto models               # list models for the default provider
otto catalog              # installable models + specs (size, RAM, best-for)
otto catalog --ram 8      # only models that fit 8GB RAM
otto catalog --coding     # only coding-focused models
otto sessions             # list past sessions
otto resume               # resume the latest session
otto search "auth bug"    # search across all past sessions
otto config init          # write ~/.ottoai/config.toml to customize

In the REPL

/model <name>        switch model
/catalog [ram|coding] installable models + specs (e.g. /catalog 8)
/provider <name> [m] switch provider
/online  /local      toggle cloud access
/stream              toggle streaming output
/think [on|off]      toggle model reasoning (faster vs. higher quality)
/search <query>      recall past sessions
/remember subj | fact store a durable fact
/compact             compress the current conversation
/tools  /sessions  /memory  /help  /quit

Configuration

Config lives at ~/.ottoai/config.toml (run otto config init). Highlights:

local_only = true          # set false (or /online) to allow cloud providers
default_provider = "ollama"
default_model = "qwen3:1.7b"  # light default; bump on 16GB+ machines
stream = true              # token-by-token output (/stream to toggle)
think = true               # model reasoning: true = higher quality, false = faster (/think)

[compaction]
enabled = true
trigger_messages = 40
keep_recent = 12

[embeddings]
enabled = false            # set true for semantic cross-session search
provider = "ollama"
model = "nomic-embed-text"

[providers.openai]
type = "openai_compatible"
base_url = "https://api.openai.com/v1"
api_key_env = "OPENAI_API_KEY"

[mcp_servers.filesystem]
command = "npx"
args = ["-y", "@modelcontextprotocol/server-filesystem", "/path"]

Extending OttoAI

Local plugin — create ~/.ottoai/plugins/my_tool.py:

from ottoai.tools import Tool

class HelloTool(Tool):
    name = "hello"
    description = "Say hello"
    parameters = {"type": "object", "properties": {"who": {"type": "string"}}}
    def run(self, who="world", **_):
        return f"Hello, {who}!"

TOOLS = [HelloTool]
# PROVIDERS = {"my_type": MyProviderClass}  # providers work the same way

Pip plugin — expose ottoai.tools / ottoai.providers entry points in your package.

License

MIT

Metadata

Release files for ottopilot 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ottopilot 0.1.2
File Size Uploaded
ottopilot-0.1.2.tar.gz 38.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ottopilot 0.1.2
File Interpreter ABI Platform
ottopilot-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 80.1 kB

Release files / ottopilot-0.1.2.tar.gz

Download URL ottopilot-0.1.2.tar.gz
Size 38.1 kB
Tags Source
SHA-256 checksum
How to use checksums
38f18a921e64ee8780f8ef027ec3442c4b7b72cf708c0138269e0de481e02cda
BLAKE2b-256 checksum
How to use checksums
2f226944b35584523b9fce7632fc5aca391337c898719f3150af4f78b2141d58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / ottopilot-0.1.2-py3-none-any.whl

Download URL ottopilot-0.1.2-py3-none-any.whl
Size 42.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b6d71803a2e80fc651177aad7c065cab4b6161bf1ae1cc05281334e3689e75b8
BLAKE2b-256 checksum
How to use checksums
eb7a3acd90e8927061355e216339606939c1103d333542a2072e68dc0be36b8a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release history Release notifications | RSS feed

0.1.3

2 release files

This release

0.1.2 This release

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page