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:

otto pull qwen3

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 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
/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"
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.0

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.0
File Size Uploaded
ottopilot-0.1.0.tar.gz 30.0 kB Details

Built distribution (wheel)

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

Total release size: 69.7 kB

Release files / ottopilot-0.1.0.tar.gz

Download URL ottopilot-0.1.0.tar.gz
Size 30.0 kB
Tags Source
SHA-256 checksum
How to use checksums
025c8713564ae5966a169d135eaa332ba75894928e3958a7f926068ef27c2453
BLAKE2b-256 checksum
How to use checksums
fd415922d7810dc6a77ab0c8c65d0eacefd6a0bca00d4defa9663d4fbb01c034
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.0-py3-none-any.whl

Download URL ottopilot-0.1.0-py3-none-any.whl
Size 39.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8f8f8ebf057529911b69be65ab4b532678bfab2c5e043f502322dde34b418cee
BLAKE2b-256 checksum
How to use checksums
86b90244925093beacc2cc2c7e02aa2d9929df4490992f78b1b4d8398881dd90
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

0.1.2

2 release files

0.1.1

2 release files

This release

0.1.0 This release

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