JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 83
  • Score
    100M100P100Q87188F
  • License MIT

Terminal-based developer chat assistant. Permanent hard fork of gsd-pi with LangFlow flow triggers, a flow builder, and optional gateway routing for compliance environments.

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@cmetech/otto) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    OTTO

    Orchestrating, Tools, Tasks & Outcomes

    A terminal-resident coding, research, and operations assistant for developers, administrators, and project managers — built to keep tool execution local while routing every LLM call through a governable gateway.

    OTTO activity flow — OTTO on your laptop, OSCAR on the network


    What OTTO is

    OTTO is the client CLI users open in a terminal:

    • One entrypoint for three roles. A developer asks it to refactor and run tests. An administrator asks it why a node paged last night. A project manager asks it to summarize this week's open tickets. Same CLI, same conversational interface.
    • Local execution by default. Filesystem, bash, git, and tool calls run on the developer's laptop. Nothing leaves the machine unless the task genuinely needs remote data or remote inference.
    • Chat API in, ACP out. OTTO speaks standard chat-completion APIs (Anthropic / OpenAI / Ollama) to the OTTO Gateway, and REST to a local Langflow. It never speaks raw ACP — the Gateway translates and routes downstream.
    • Compliance-friendly by construction. When OTTO_GATEWAY_URL is set, every LLM token routes through that gateway so governance, audit, and content moderation all live in one place. With no gateway configured, OTTO falls back to direct Anthropic.

    OTTO is not a general-purpose AI assistant. It is a developer agent that also happens to trigger non-coding workflows through Langflow and reach into operational data through OSCAR.

    This repo (@cmetech/otto, binary otto) is the CLI piece. The diagram above shows where it sits in the larger stack.


    Where OTTO fits in the stack

    Everything inside the dashed laptop boundary in the diagram lives on the user's machine. Only OSCAR and the external systems behind it are remote.

    Component Role Where it lives Relationship to OTTO
    OTTO (this repo) CLI client + conversation surface Laptop The user-facing entrypoint
    OTTO Gateway Manages all ACP. Translates chat-API requests into ACP calls. Anthropic/OpenAI/Ollama-compatible. Hosts guardrails. Laptop OTTO's primary backend — every LLM call lands here first
    Langflow Low-code flow orchestrator for multi-step automations Laptop OTTO calls it via REST when a task is "automate" rather than "ask"
    kiro-cli ACP pool Pooled subprocess workers under the Gateway Laptop Where inference actually executes; OTTO never talks to them directly
    OSCAR Remote operations agent with an ACP interface. Holds network credentials. Reaches into production servers, lab environments, ticket systems, and knowledge bases. Remote Reached only via the Gateway's ACP channel — OTTO never holds ops credentials

    The two ACP connections (Gateway ↔ kiro-cli and Gateway ↔ OSCAR) are the load-bearing protocol relationships in the stack. OTTO itself is intentionally protocol-thin.


    Vision

    The assistant carries the tools. The user keeps the keys.

    OTTO is built around a few non-negotiables:

    Local-first. Tool execution, filesystem access, and developer state stay on the laptop. We don't ship work to a cloud worker when a local one will do.

    One governance surface. Every LLM token routes through the OTTO Gateway when configured. Guardrails — auth, rate limiting, content moderation, schema validation, audit — sit there, not scattered across clients. Add a policy in one place; it covers every surface.

    Extension-first. New capabilities belong in the otto extension, in skills, or in plugins — not in core. The core CLI stays lean. The terminal UI, the flow trigger system, and the prompt engineer all live as extensions.

    Provider-agnostic. OTTO speaks Anthropic, OpenAI, or Ollama. The Gateway adapts to all three. No architectural decision should privilege one provider over another.

    Ship fast, fix fast. Every release should work, but we'd rather ship and patch than delay and accumulate.

    What we won't build. No DI containers. No abstract factories. No framework swaps without measurable improvement. No cosmetic refactors. No complexity without user value. No heavy orchestration that duplicates what the Gateway already provides.


    Status

    v1.x — released. The CLI is functional and published to npm. The package name, binary name, and config-directory name (~/.otto/) all use lowercase otto; the product is OTTO.


    Quickstart

    Requires Node ≥22 on PATH.

    npm install -g @cmetech/otto
    otto

    Install from source (contributors)

    git clone git@github.com:cmetech/otto-cli.git
    cd otto-cli
    ./scripts/install.sh

    The install script installs dependencies, builds the binary, symlinks otto into ~/.local/bin/, and offers to launch the first-run config wizard so you can point OTTO at your gateway and (optionally) at Langflow.

    After install (either path):

    otto            # interactive TUI
    otto --help     # subcommands
    otto config     # re-run any part of the config wizard

    See INSTALL.md for prerequisites, per-platform setup (Windows/macOS/Linux), and troubleshooting.


    What OTTO can do

    OTTO classifies each user ask into one of four task types, shown as chips in the diagram above:

    Chip What it means Where it routes
    Code Refactor, generate, run tests, fix bugs Chat API → Gateway → kiro-cli
    Research Investigate, explain, summarize, cite Chat API → Gateway → kiro-cli
    Ops Pull live data from production, lab, tickets, or knowledge bases Chat API → Gateway → OSCAR (via ACP over network)
    Automate Trigger or build a multi-step Langflow flow REST → Langflow (local)

    Commands provided by the otto extension

    Command Purpose
    /otto build-flow <description> Generate a Langflow flow JSON from a natural-language description
    /otto prompt-engineer <task> Polish a rough task description into a structured prompt for a coding agent
    /otto <flow-name> Trigger any Langflow flow declared in extensions/otto/commands/flow-triggers/*.yaml
    /otto plan, /otto quick, etc. Multi-step workflow commands inherited from upstream — software-engineering recipes

    The extension also registers tools for catalog management, component inspection, flow validation, flow import, and smoke testing — see the extension manifest at src/resources/extensions/otto/extension-manifest.json.


    Configuration

    OTTO reads from ~/.otto/config.json (created by the first-run wizard) with env-var overrides:

    Env var Purpose Default
    OTTO_GATEWAY_URL OTTO Gateway URL — when set, all LLM traffic routes through it for governance (none — direct to Anthropic)
    OTTO_GATEWAY_TOKEN Optional Bearer auth for the Gateway (none)
    LANGFLOW_SERVER_URL Local Langflow server for flow triggers http://127.0.0.1:7860
    LANGFLOW_API_KEY Langflow API key (x-api-key header) (none)
    ANTHROPIC_API_KEY Direct Anthropic key when no gateway is configured (none)
    OTTO_PYTHON_BIN Python 3 interpreter for build-flow tools python3 on PATH
    OTTO_PROMPT_ENGINEER_MODEL Model for /otto prompt-engineer claude-haiku-4-5-20251001

    Env vars always win over the config file. Run otto config to interactively set any subset (gateway, langflow, llm, or all).


    Architecture & compliance posture

    The activity-flow diagram at the top of this README is the canonical picture of how a request becomes an answer. A few things worth calling out for governance reviewers:

    1. OTTO never speaks ACP. All inter-agent protocol traffic is handled by the OTTO Gateway. A compromised CLI surface cannot directly issue ACP commands.
    2. OTTO never holds ops credentials. Credentials for production servers, ticket systems, and lab environments live with OSCAR (remote). OTTO asks; OSCAR fetches.
    3. One LLM egress point. With OTTO_GATEWAY_URL set, the laptop has exactly one outbound LLM destination. Audit log, content moderation, rate limiting, and schema validation are configured there, once.
    4. Local-only requests never leave the laptop. OTTO classifies "Code" and "Research" asks; many resolve against kiro-cli locally without any network call beyond the laptop boundary.

    The corresponding architecture diagram for the Gateway itself lives in docs/branding/otto_architecture_infographic.jpg. Both diagrams are generated from prompts checked into the same folder.


    Documentation


    Development

    npm ci
    npm run build
    npm test

    Plans live in docs/superpowers/plans/ — one per phase, executed by subagents. The otto extension source is in src/resources/extensions/otto/.


    Fork attribution

    OTTO (@cmetech/otto) is a permanent hard fork of open-gsd/gsd-pi by Lex Christopherson, used under the MIT License. The upstream gsd-pi provides the agent core, the terminal UI, the extension system, and the multi-step workflow commands. OTTO adds:

    • The otto extension (Langflow flow triggers, flow builder, prompt engineer, catalog tools)
    • Gateway routing for LLM traffic
    • OTTO brand identity and terminal UI styling
    • Compliance and audit posture

    See LICENSE for the full list of fork edits.


    License

    MIT — see LICENSE. Inherited from upstream otto-pi; copyright Lex Christopherson 2026.