✨ From vibe coding to vibe deployment. UBOS MCP turns ideas into infra with one message.

Learn more
Andrii Bidochko
  • Updated: March 26, 2026
  • 8 min read

Optio: AI‑Powered Coding Agent Workflow Orchestration Platform

Skip to content You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert jonwiggins / optio Public Notifications You must be signed in to change notification settings Fork 10 Star 242 Code Issues 2 Pull requests 6 Actions Projects Security 0 Insights Additional navigation options Code Issues Pull requests Actions Projects Security Insights mainBranchesTagsGo to fileCodeOpen more actions menuFolders and filesNameNameLast commit messageLast commit dateLatest commit History158 Commits158 Commits.github.github .husky.husky appsapps docs/screenshotsdocs/screenshots helm/optiohelm/optio imagesimages k8sk8s packagespackages scriptsscripts .dockerignore.dockerignore .editorconfig.editorconfig .env.example.env.example .gitignore.gitignore .optio-run-token.optio-run-token .prettierignore.prettierignore .prettierrc.prettierrc CHANGELOG.mdCHANGELOG.md CLAUDE.mdCLAUDE.md CONTRIBUTING.mdCONTRIBUTING.md Dockerfile.agentDockerfile.agent Dockerfile.apiDockerfile.api Dockerfile.webDockerfile.web LICENSELICENSE README.mdREADME.md SECURITY.mdSECURITY.md commitlint.config.jscommitlint.config.js docker-compose.ymldocker-compose.yml eslint.config.jseslint.config.js package.jsonpackage.json pnpm-lock.yamlpnpm-lock.yaml pnpm-workspace.yamlpnpm-workspace.yaml tsconfig.base.jsontsconfig.base.json turbo.jsonturbo.json View all filesRepository files navigationREADMEContributingMIT licenseSecurityOptio Workflow orchestration for AI coding agents, from task to merged PR.Optio turns coding tasks into merged pull requests — without human babysitting. Submit a task (manually, from a GitHub Issue, or from Linear), and Optio handles the rest: provisions an isolated environment, runs an AI agent, opens a PR, monitors CI, triggers code review, auto-fixes failures, and merges when everything passes. The feedback loop is what makes it different. When CI fails, the agent is automatically resumed with the failure context.When a reviewer requests changes, the agent picks up the review comments and pushes a fix. When everything passes, the PR is squash-merged and the issue is closed. You describe the work; Optio drives it to completion.Dashboard — real-time overview of running agents, pod status, costs, and recent activity Task detail — live-streamed agent output with pipeline progress, PR tracking, and cost breakdown How It Works You create a task Optio runs the agent Optio closes the loop ───────────────── ────────────────────── ────────────────────── GitHub Issue Provision repo pod CI fails?Manual task ──→ Create git worktree ──→ → Resume agent with failure context Linear ticket Run Claude Code / Codex Review requests changes? Open a PR → Resume agent with feedback CI passes + approved?→ Squash-merge + close issue Intake — tasks come from the web UI, GitHub Issues (one-click assign), or Linear tickets Provisioning — Optio finds or creates a Kubernetes pod for the repo, creates a git worktree for isolation Execution — the AI agent (Claude Code or OpenAI Codex) runs with your configured prompt, model, and settings PR lifecycle — Optio polls the PR every 30s for CI status, review state, and merge readiness Feedback loop — CI failures, merge conflicts, and review feedback automatically resume the agent with context Completion — PR is squash-merged, linked issues are closed, costs are recorded Key Features Autonomous feedback loop — auto-resumes the agent on CI failures, merge conflicts, and review feedback; auto-merges when everything passes Pod-per-repo architecture — one long-lived Kubernetes pod per repo with git worktree isolation, multi-pod scaling, and idle cleanup Code review agent — automatically launches a review agent as a subtask, with a separate prompt and model Per-repo configuration — model, prompt template, container image, concurrency limits, and setup commands, all tunable per repository GitHub Issues and Linear intake — assign issues to Optio from the UI or via ticket sync Real-time dashboard — live log streaming, pipeline progress, cost analytics, and cluster health Architecture ┌──────────────┐ ┌────────────────────┐ ┌───────────────────────────┐ │ Web UI │────→│ API Server │────→│ Kubernetes │ │ Next.js │ │ Fastify │ │ │ │ :3100 │ │ │ │ ┌── Repo Pod A ───────┐ │ │ │←ws──│ Workers: │ │ │ clone + sleep │ │ │ Dashboard │ │ ├─ Task Queue │ │ │ ├─ worktree 1 ⚡ │ │ │ Tasks │ │ ├─ PR Watcher │ │ │ ├─ worktree 2 ⚡ │ │ │ Repos │ │ ├─ Health Mon │ │ │ └─ worktree N ⚡ │ │ │ Cluster │ │ └─ Ticket Sync │ │ └─────────────────────┘ │ │ Costs │ │ │ │ ┌── Repo Pod B ───────┐ │ │ Issues │ │ Services: │ │ │ clone + sleep │ │ │ │ │ ├─ Repo Pool │ │ │ └─ worktree 1 ⚡ │ │ │ │ │ ├─ Review Agent │ │ └─────────────────────┘ │ │ │ │ └─ Auth/Secrets │ │ │ └──────────────┘ └─────────┬──────────┘ └───────────────────────────┘ │ ⚡ = Claude Code / Codex ┌──────┴──────┐ │ Postgres │ Tasks, logs, events, secrets, repos │ Redis │ Job queue, pub/sub, live streaming └─────────────┘ Task lifecycle ┌──────────────────────────────────────────────────┐ │ INTAKE │ │ │ │ GitHub Issue ───→ ┌──────────┐ │ │ Manual Task ───→ │ QUEUED │ │ │ Ticket Sync ───→ └────┬─────┘ │ └───────────────────────────┼──────────────────────┘ │ ┌───────────────────────────┼──────────────────────┐ │ EXECUTION ▼ │ │ │ │ ┌──────────────┐ ┌─────────────────┐ │ │ │ PROVISIONING │───→│ RUNNING │ │ │ │ get/create │ │ agent writes │ │ │ │ repo pod │ │ code in │ │ │ └──────────────┘ │ worktree │ │ │ └───────┬─────────┘ │ └───────────────────────────────┼──────────────────┘ │ ┌─────────────┐ │ ┌──────────────────┐ │ FAILED │←──┴──→│ PR OPENED │ │ │ │ │ │ (auto-retry │ │ PR watcher │ │ if stale) │ │ polls every 30s │ └─────────────┘ └─────────┬────────┘ │ ┌─────────────────────────────────────────────┼─────────┐ │ FEEDBACK LOOP │ │ │ │ │ │ CI fails? ────────→ Resume agent ←─────┤ │ │ to fix build │ │ │ │ │ │ Merge conflicts? ──→ Resume agent ←─────┤ │ │ to rebase │ │ │ │ │ │ Review requests ───→ Resume agent ←─────┤ │ │ changes? with feedback │ │ │ │ │ │ CI passes + ───────→ Auto-merge ──────┤ │ │ review done?& close issue │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ COMPLETED │ │ │ │ PR merged │ │ │ │ Issue closed │ │ │ └──────────────┘ │ └───────────────────────────────────────────────────────┘ Quick Start Prerequisites Docker Desktop with Kubernetes enabled (Settings → Kubernetes → Enable) Node.js 22+ and pnpm 10+ Helm (brew install helm) Setup git clone https://github.com/jonwiggins/optio.git && cd optio ./scripts/setup-local.sh That’s it.The setup script installs dependencies, builds all Docker images (API, web, and agent presets), deploys the full stack to your local Kubernetes cluster via Helm, and installs metrics-server. Web UI . http://localhost:30310 API . http://localhost:30400 Open the web UI and the setup wizard will walk you through configuring GitHub access, agent credentials (API key or Max/Pro subscription), and adding your first repository. Updating ./scripts/update-local.sh Pulls latest code, rebuilds images, applies Helm changes, and rolling-restarts the deployments. Teardown helm uninstall optio -n optio Project Structure apps/ api/ Fastify API server, BullMQ workers, WebSocket endpoints, review service, subtask system, OAuth providers web/ Next.js dashboard with real-time streaming, cost analytics packages/ shared/ Types, task state machine, prompt templates, error classifier container-runtime/ Kubernetes pod lifecycle, exec, log streaming agent-adapters/ Claude Code + Codex prompt/auth adapters ticket-providers/ GitHub Issues, Linear images/ Container Dockerfiles: base, node, python, go, rust, full helm/optio/ Helm chart for production Kubernetes deployment scripts/ Setup, init, and entrypoint scripts Production Deployment Optio ships with a Helm chart for production Kubernetes clusters: helm install optio helm/optio \ –set encryption.key=$(openssl rand -hex 32) \ –set postgresql.enabled=false \ –set externalDatabase.url=”postgres://.” \ –set redis.enabled=false \ –set externalRedis.url=”redis://.” \ –set ingress.enabled=true \ –set ingress.hosts[0].host=optio.example.com See the Helm chart values for full configuration options including OAuth providers, resource limits, and agent image settings. Tech Stack Layer Technology Monorepo Turborepo + pnpm API Fastify 5, Drizzle ORM, BullMQ Web Next.js 15, Tailwind CSS 4, Zustand Database PostgreSQL 16 Queue Redis 7 + BullMQ Runtime Kubernetes (Docker Desktop for local dev) Deploy Helm chart Auth Multi-provider OAuth (GitHub, Google, GitLab) CI GitHub Actions (format, typecheck, test, build-web, build-image) Agents Claude Code, OpenAI Codex Contributing See CONTRIBUTING.md for development setup, workflow, and conventions. License MIT About Workflow orchestration for AI coding agents, from task to merged PR.Resources Readme License MIT license Contributing Contributing Security policy Security policy Uh oh! There was an error while loading. Please reload this page. Activity Stars 242 stars Watchers 1 watching Forks 10 forks Report repository Releases No releases published Packages 0 Uh oh! There was an error while loading. Please reload this page. Contributors 2 jonwiggins Jon Wiggins claude Claude Languages TypeScript 98.1% Other 1.9% You can’t perform that action at this time. [{“Name”:”.github”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.husky”,”Last commit message”:””,”Last commit date”:””},{“Name”:”apps”,”Last commit message”:””,”Last commit date”:””},{“Name”:”docs/screenshots”,”Last commit message”:””,”Last commit date”:””},{“Name”:”helm/optio”,”Last commit message”:””,”Last commit date”:””},{“Name”:”images”,”Last commit message”:””,”Last commit date”:””},{“Name”:”k8s”,”Last commit message”:””,”Last commit date”:””},{“Name”:”packages”,”Last commit message”:””,”Last commit date”:””},{“Name”:”scripts”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.dockerignore”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.editorconfig”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.env.example”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.gitignore”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.optio-run-token”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.prettierignore”,”Last commit message”:””,”Last commit date”:””},{“Name”:”.prettierrc”,”Last commit message”:””,”Last commit date”:””},{“Name”:”CHANGELOG.md”,”Last commit message”:””,”Last commit date”:””},{“Name”:”CLAUDE.md”,”Last commit message”:””,”Last commit date”:””},{“Name”:”CONTRIBUTING.md”,”Last commit message”:””,”Last commit date”:””},{“Name”:”Dockerfile.agent”,”Last commit message”:””,”Last commit date”:””},{“Name”:”Dockerfile.api”,”Last commit message”:””,”Last commit date”:””},{“Name”:”Dockerfile.web”,”Last commit message”:””,”Last commit date”:””},{“Name”:”LICENSE”,”Last commit message”:””,”Last commit date”:””},{“Name”:”README.md”,”Last commit message”:””,”Last commit date”:””},{“Name”:”SECURITY.md”,”Last commit message”:””,”Last commit date”:””},{“Name”:”commitlint.config.js”,”Last commit message”:””,”Last commit date”:””},{“Name”:”docker-compose.yml”,”Last commit message”:””,”Last commit date”:””},{“Name”:”eslint.config.js”,”Last commit message”:””,”Last commit date”:””},{“Name”:”package.json”,”Last commit message”:””,”Last commit date”:””},{“Name”:”pnpm-lock.yaml”,”Last commit message”:””,”Last commit date”:””},{“Name”:”pnpm-workspace.yaml”,”Last commit message”:””,”Last commit date”:””},{“Name”:”tsconfig.base.json”,”Last commit message”:””,”Last commit date”:””},{“Name”:”turbo.json”,”Last commit message”:””,”Last commit date”:””},{}]


Andrii Bidochko

CTO UBOS

Andrii Bidochko is an AI entrepreneur and researcher focused on AI agents, reinforcement learning, and autonomous systems. He writes about the technologies shaping the future of machine intelligence, from frontier models and agent architectures to real-world AI applications.

Sign up for our newsletter

Stay up to date with the roadmap progress, announcements and exclusive discounts feel free to sign up with your email.

Sign In

Register

Reset Password

Please enter your username or email address, you will receive a link to create a new password via email.