Otto is an opinionated, extensible agentic workflow harness. It turns a user ticket into a durable set of artifacts (plans, tasks, reports) and orchestrates a reliable loop over them.
Core design constraints:
- Node.js
>= 22 - TypeScript implementation
- Git worktrees for isolation (required)
- TypeScript configuration (
otto.config.ts) - At least one agent runner is required (runners are shipped as packages)
This repo is a Turborepo monorepo. Adapters and runners are npm packages so consumers can swap behavior without forking Otto.
packages/core—@otto/core(CLI entrypoint + core harness)packages/ports—@otto/ports(shared interfaces/types)packages/config—@otto/config(TypeScript config contracts + helpers)packages/ui-opentui—@otto/ui-opentui(default TUI/prompt adapter)packages/adapter-git-worktree—@otto/adapter-git-worktree(worktree operations)packages/adapter-quality-commands—@otto/adapter-quality-commands(quality gate = command checklist)packages/runner-echo—@otto/runner-echo(minimal local runner)packages/runner-claude-code—@otto/runner-claude-code(scaffolded runner)
Otto writes run artifacts to .otto/ (tickets, logs, states, etc.).
By default, this repo also places git worktrees in .worktrees/.
Both are intentionally ignored by git.
bungitzig(required to build OpenTUI dependencies during development)
Install the latest released binary for your platform:
curl -fsSL https://raw.githubusercontent.com/foglerek/otto/main/scripts/install.sh | bashOptional controls:
OTTO_VERSIONto pin a version (for examplev0.1.0)OTTO_INSTALL_DIRto override install directory (defaults to$HOME/.local/bin)OTTO_REPOto override GitHub repo slug (defaults tofoglerek/otto)
Example (pin version + custom directory):
curl -fsSL https://raw.githubusercontent.com/foglerek/otto/main/scripts/install.sh | OTTO_VERSION=v0.1.0 OTTO_INSTALL_DIR="$HOME/bin" bashInstall + build:
bun install
bun run buildRun the CLI locally:
bun run otto -- --helpBootstrap a worktree + artifact root (scaffold):
bun run otto -- bootstrap --slug smoke-test --ticket "Bootstrap smoke test"The repo is currently in an early scaffolding phase:
- CLI wiring, config loading, and worktree bootstrap exist.
- The full task/plan orchestration loop is not implemented yet.
