Try describing what you need:

oh-my-pi logo

oh-my-pi

★ 37.8k

A self-hosted alternative to Claude Code, Cursor

MIT LicenseOpen Source — No Paywall2 Containers — 2 containers — light hosting footprintDocker · Binary · Package +1No external DB8+ active committers (12mo)

About

omp is a coding agent that integrates deeply with an IDE-like workflow and is designed to help developers edit, search, debug, and coordinate code changes from a terminal-style interface. It is...

Community Ratings

No ratings yet
ompomp TUI running Python code and rendering a chart.omp TUI with TypeScript and Biome language servers active.

Features

  • code execution
  • LSP integration
  • debugger support
  • stream rule injection
  • subagents
  • advisor model
  • collaboration links
  • shell completions

Details

Last Updated
Nov 5, 2026
Created
Dec 31, 2025
Install Methods
dockerbinarypackage-managersource
Requirements
bun >= 1.3.14macOSLinuxWindows
Default Port
6543From the project's Compose file
Deployment

Deployment: Docker Compose ✓2 Containers — light hosting footprintRuns as 2 containers

Run oh-my-pi yourself

Pick how much you want to manage.

1 more way to host

Some links earn us a commission. netcup pays us one and is our preferred VPS host.

Is this your project? Sponsor a listing

Run oh-my-pi with Docker Compose

Compose file from the oh-my-pi project repository.

2 services · 1 unclassified (robomp)

no resource limits declared

needs persistent storage (6 volumes)

python/robomp/docker-compose.yml · @ 0b5c27a · scanned Nov 3, 2026

services:
  # ───────────────────────────────────────────────────────────────────────────
  # roboomp orchestrator
  #
  # NOTE: `env_file:` is INTENTIONALLY ABSENT. We never want the gh-proxy's
  # PAT (`GITHUB_TOKEN` in .env) to leak into this container's environment.
  # Every variable below is an explicit allowlist; compose still reads `.env`
  # for `${VAR}` interpolation, but only the keys listed here flow into the
  # container. Adding a new secret means an explicit compose-level decision
  # about which container is allowed to see it.
  # ───────────────────────────────────────────────────────────────────────────
  robomp:
    build:
      # pi root: gives the web-builder stage access to the workspace
      # bun.lock + catalog (web/package.json refs `catalog:` versions).
      # python/robomp/data and pi-root excludes are filtered via
      # Dockerfile.robomp.dockerignore at the context root.
      context: ../..
      dockerfile: Dockerfile.robomp
      args:
        # Tag of the pre-built pi-base image produced by `bun run pi:image`
        # (sources: pi root /Dockerfile). Override per-environment as needed.
        PI_BASE: oh-my-pi/pi:dev
    image: robomp:dev
    container_name: robomp
    # Stable hostname: os.hostname() inside the container feeds usage
    # attribution (x-omp-hostname → broker `clients.hostname`); without this
    # it reports the random docker container id.
    hostname: robomp
    # Phase B (graceful shutdown): gives the orchestrator at least
    # ROBOMP_SHUTDOWN_DRAIN_TIMEOUT_SECONDS + ROBOMP_SHUTDOWN_KILL_TIMEOUT_SECONDS
    # before SIGKILL. Defaults: 25 + 5 = 30s.
    stop_grace_period: 30s
    restart: unless-stopped
    environment:
      # --- gh-proxy channel ---
      # The orchestrator NEVER holds GITHUB_TOKEN; it talks to the sibling
      # gh-proxy container over the internal-only network.
      ROBOMP_GH_PROXY_URL: http://gh-proxy:8081
      ROBOMP_GH_PROXY_HMAC_KEY: ${ROBOMP_GH_PROXY_HMAC_KEY:?ROBOMP_GH_PROXY_HMAC_KEY must be set in .env}

      # --- webhook + identity ---
      GITHUB_WEBHOOK_SECRET: ${GITHUB_WEBHOOK_SECRET:?GITHUB_WEBHOOK_SECRET must be set in .env}
      ROBOMP_BOT_LOGIN: ${ROBOMP_BOT_LOGIN:?ROBOMP_BOT_LOGIN must be set in .env}
      ROBOMP_GIT_AUTHOR_NAME: ${ROBOMP_GIT_AUTHOR_NAME:-}
      ROBOMP_GIT_AUTHOR_EMAIL: ${ROBOMP_GIT_AUTHOR_EMAIL:?ROBOMP_GIT_AUTHOR_EMAIL must be set in .env}
      ROBOMP_REPO_ALLOWLIST: ${ROBOMP_REPO_ALLOWLIST:?ROBOMP_REPO_ALLOWLIST must be set in .env}
      ROBOMP_MAINTAINER_LOGINS: ${ROBOMP_MAINTAINER_LOGINS:-}
      ROBOMP_REVIEWER_BOTS: ${ROBOMP_REVIEWER_BOTS:-}

      # --- PR review ---
      ROBOMP_PR_REVIEW_ENABLED: ${ROBOMP_PR_REVIEW_ENABLED:-true}

      # --- release sentinel ---
      ROBOMP_RELEASE_SENTINEL_ENABLED: ${ROBOMP_RELEASE_SENTINEL_ENABLED:-false}
      ROBOMP_RELEASE_COMMIT_PREFIX: "${ROBOMP_RELEASE_COMMIT_PREFIX:-chore: bump version to }"
      ROBOMP_RELEASE_MAX_ROUNDS: ${ROBOMP_RELEASE_MAX_ROUNDS:-5}
      ROBOMP_RELEASE_TASK_TIMEOUT_SECONDS: ${ROBOMP_RELEASE_TASK_TIMEOUT_SECONDS:-3600}
      ROBOMP_RELEASE_MODEL: ${ROBOMP_RELEASE_MODEL:-}

      # --- model selection ---
      ROBOMP_MODEL: ${ROBOMP_MODEL:-anthropic/claude-sonnet-4-6}
      ROBOMP_PROVIDER: ${ROBOMP_PROVIDER:-}
      ROBOMP_THINKING: ${ROBOMP_THINKING:-high}

      # --- runtime tuning ---
      ROBOMP_MAX_CONCURRENCY: ${ROBOMP_MAX_CONCURRENCY:-8}
      ROBOMP_TASK_TIMEOUT_SECONDS: ${ROBOMP_TASK_TIMEOUT_SECONDS:-2400}
      ROBOMP_TASK_TIMEOUT_HARD_GRACE_SECONDS: ${ROBOMP_TASK_TIMEOUT_HARD_GRACE_SECONDS:-60}
      ROBOMP_REQUEST_TIMEOUT_SECONDS: ${ROBOMP_REQUEST_TIMEOUT_SECONDS:-120}
      ROBOMP_RATE_LIMIT_WINDOW_SECONDS: ${ROBOMP_RATE_LIMIT_WINDOW_SECONDS:-3600}
      ROBOMP_RATE_LIMIT_DEFAULT: ${ROBOMP_RATE_LIMIT_DEFAULT:-3}
      ROBOMP_RATE_LIMIT_CONTRIBUTOR: ${ROBOMP_RATE_LIMIT_CONTRIBUTOR:-10}
      ROBOMP_RATE_LIMIT_UNLIMITED: ${ROBOMP_RATE_LIMIT_UNLIMITED:-}
      ROBOMP_QUESTION_AUTOCLOSE_ENABLED: ${ROBOMP_QUESTION_AUTOCLOSE_ENABLED:-true}
      ROBOMP_QUESTION_AUTOCLOSE_HOURS: ${ROBOMP_QUESTION_AUTOCLOSE_HOURS:-4}
      ROBOMP_QUESTION_AUTOCLOSE_SCAN_SECONDS: ${ROBOMP_QUESTION_AUTOCLOSE_SCAN_SECONDS:-60}
      ROBOMP_REPLAY_TOKEN: ${ROBOMP_REPLAY_TOKEN:-}

      # --- container-fixed paths ---
      ROBOMP_OMP_COMMAND: omp
      ROBOMP_WORKSPACE_ROOT: /data/workspaces
      ROBOMP_SQLITE_PATH: /data/robomp.sqlite
      ROBOMP_LOG_DIR: /data/logs
      ROBOMP_BIND_HOST: ${ROBOMP_BIND_HOST:-0.0.0.0}
      ROBOMP_BIND_PORT: ${ROBOMP_BIND_PORT:-8080}
      PI_ROOT: /work/pi
    depends_on:
      gh-proxy:
        condition: service_started
    # Resolve `llm-gateway.internal` (used in /srv/agent-home/.omp/agent/models.yml) to the
    # Docker host. The actual gateway listens on 127.0.0.1:4000 on the host;
    # `host-gateway` is Docker's alias for the host bridge IP.
    extra_hosts:
      - "llm-gateway.internal:host-gateway"
    networks:
      - default
      - robomp_internal
    volumes:
      - ${PI_ROOT:-../..}:/work/pi:ro
      - robomp_data:/data
      # Host agent config is mounted read-only under /srv/agent-home-stage
      # with host-controlled permissions. The entrypoint copies it into
      # root-owned, world-readable files under /srv/agent-home; the agent
      # subprocess runs with HOME=/srv/agent-home, so ~/.omp and ~/.agent
      # resolve there without exposing mutable host mounts.
      - ${HOME}/.omp/agent/models.container.yml:/srv/agent-home-stage/.omp/agent/models.yml:ro
      - ${HOME}/.agent/AGENTS.md:/srv/agent-home-stage/.agent/AGENTS.md:ro
      - ${HOME}/.agent/rules:/srv/agent-home-stage/.agent/rules:ro
    ports:
      - "0.0.0.0:6543:8080"

  # ───────────────────────────────────────────────────────────────────────────
  # gh-proxy
  #
  # The only container that ever holds GITHUB_TOKEN. Reachable only from the
  # orchestrator on the internal-only network — no host port mapping. Every
  # request must carry a valid HMAC signature (ROBOMP_GH_PROXY_HMAC_KEY).
  # `env_file:` is INTENTIONALLY ABSENT for the same reason: the explicit
  # allowlist below is the only place where any var lands in this container.
  # ───────────────────────────────────────────────────────────────────────────
  gh-proxy:
    image: robomp:dev
    container_name: gh-proxy
    restart: unless-stopped
    command: ["python", "-m", "robomp.proxy", "serve"]
    environment:
      # PAT: lives ONLY here. The orchestrator's compose block refuses to
      # let this var into its container.
      GITHUB_TOKEN: ${GITHUB_TOKEN:?GITHUB_TOKEN must be set in .env}
      # Shared with the orchestrator: HMAC verification key.
      ROBOMP_GH_PROXY_HMAC_KEY: ${ROBOMP_GH_PROXY_HMAC_KEY:?ROBOMP_GH_PROXY_HMAC_KEY must be set in .env}
      # The proxy reuses the SandboxManager pool layout under /data/workspaces.
      ROBOMP_WORKSPACE_ROOT: /data/workspaces
      ROBOMP_SQLITE_PATH: /data/robomp.sqlite
      ROBOMP_LOG_DIR: /data/logs
      # Bind on the internal network only.
      ROBOMP_GH_PROXY_BIND_HOST: 0.0.0.0
      ROBOMP_GH_PROXY_BIND_PORT: 8081
      # Settings still requires these on construction; the proxy never uses
      # them but the validator runs the same code path as the orchestrator.
      GITHUB_WEBHOOK_SECRET: ${GITHUB_WEBHOOK_SECRET:?GITHUB_WEBHOOK_SECRET must be set in .env}
      ROBOMP_BOT_LOGIN: ${ROBOMP_BOT_LOGIN:?ROBOMP_BOT_LOGIN must be set in .env}
      ROBOMP_GIT_AUTHOR_EMAIL: ${ROBOMP_GIT_AUTHOR_EMAIL:?ROBOMP_GIT_AUTHOR_EMAIL must be set in .env}
      ROBOMP_REPO_ALLOWLIST: ${ROBOMP_REPO_ALLOWLIST:?ROBOMP_REPO_ALLOWLIST must be set in .env}
    networks:
      # `default` gives gh-proxy outbound NAT to api.github.com; `robomp_internal`
      # is how the orchestrator reaches it. No `ports:` mapping → still
      # unreachable from the host or any sibling project.
      - default
      - robomp_internal
    volumes:
      # Shared workspace pool/worktrees so the proxy can drive git operations
      # against the same per-issue worktrees the orchestrator builds.
      - robomp_data:/data

networks:
  # External-facing bridge: webhook ingress (8080) and the orchestrator's
  # outbound path to the host LLM gateway via extra_hosts.
  default: {}
  # Orchestrator <-> gh-proxy only. internal: true means no egress and no
  # ingress from outside the compose project.
  robomp_internal:
    internal: true

volumes:
  # Docker-managed Linux volume so UID/GID permissions on /data are enforced.
  robomp_data: {}

This file may be out of date. Check the oh-my-pi documentation for current setup steps.

Track your self-hosted stack

Bookmark software to try, rate tools you've used, and keep your collection in one place.

Metadata extracted from README on Oct 8, 2026

Alternatives to oh-my-pi

Claude Code logo

Claude Code

154.6k
Claude Code is an agentic coding tool that runs in the terminal and helps with coding tasks, code explanation, and git workflows using natural language commands.
Artificial IntelligenceAI Coding AssistantAI Harness+2
Cloud Required
Details
Aider logo

Aider

50.0k
AI pair programming tool for working with large language models directly in the terminal.
Artificial IntelligenceAI Coding AssistantPermissive License+1
Details
Cline logo

Cline

71.3k
An open source coding agent for use in the IDE and terminal.
Artificial IntelligenceAI Coding AssistantPermissive License+3
Details
crush logo

crush

29.0k
Crush is a terminal-based coding assistant that connects your tools, code, and workflows to an LLM of your choice.
Artificial IntelligenceAI Coding AssistantAI Harness+2
Cloud Required
Details
openclaude logo

openclaude

34.3k
OpenClaude is an open-source terminal-based coding agent CLI for cloud and local model providers.
AI Coding AssistantAI AgentsAI Tooling+1
Details
machtiani logo

machtiani

191
Machtiani (mct) is a terminal-based local code chat service for working with large real codebases and syncing project history for context-aware answers.
Artificial IntelligenceAI Coding AssistantAI Agents+3
Details
Roo Code logo

Roo Code

24.3k
An AI-powered coding assistant extension for VS Code that helps generate, refactor, debug, and document code from natural language.
Artificial IntelligenceAI Coding AssistantPermissive License+3
Details
Cody logo

Cody

3.8k
Type less, code more: Cody is an AI code assistant that uses advanced search and codebase context to help you write and fix code.
Artificial IntelligenceAI Coding AssistantPermissive License+2
Details
Codex logo

Codex

133.2k
Codex CLI is a local coding agent from OpenAI that runs on your computer.
Artificial IntelligenceAI Coding AssistantPermissive License+3
Details
opencode logo

opencode

224.6k
An open source AI coding agent.
Artificial IntelligenceAI Coding AssistantPermissive License+3
Details
zerostack logo

zerostack

1.7k
zerostack is a minimal Rust-based coding agent with a terminal UI, multi-provider LLM support, session management, and extensible tooling.
AI Coding AssistantAI AgentsModel Context Protocol
Details
twinny logo

twinny

3.7k
Twinny is a free AI extension for Visual Studio Code that provides AI-assisted coding features.
Artificial IntelligenceAI Coding AssistantPermissive License+2
Details

Related Software

Claude Squad logo

Claude Squad

8.7k
Claude Squad is a terminal app for managing multiple AI coding agents in separate isolated workspaces so tasks can run in parallel.
AI Coding AssistantAI AgentsAutomation Tools
Details
openrig logo

openrig

8.6k
OpenRig is a CLI tool for defining, launching, and managing a team of AI coding agents in a persistent shared rig.
AI AgentsAI Coding AssistantAI Harness+1
Details
Codeman logo

Codeman

828
Codeman is a self-hosted dashboard for managing AI coding agents in persistent terminal sessions, with live web access, mobile-friendly controls, and background automation.
AI Coding AssistantAI AgentsAutomation Tools+2
Single Container
Details
orca logo

orca

115.6k
Orca is an AI orchestrator for running multiple coding agents side-by-side in isolated worktrees, with a desktop app, mobile companion, and CLI automation.
AI AgentsAI Coding AssistantAI Tooling+1
Details
ouijit logo

ouijit

177
Ouijit is a customizable task and terminal session manager for agentic development workflows, with lifecycle hooks, scripts, worktree management, and VM sandboxing.
Task RunnersAI Coding AssistantAI Agents
Details
Jean logo

Jean

1.4k
Jean is a developer workspace for running multiple AI coding agents in parallel, each in its own git worktree, with integrated review, terminal, and project management tools.
IDE ToolsDev Project ManagementAI Agents+1
Details
Coder logo

Coder

17.3k
Coder is a self-hosted platform for cloud development environments and AI coding agents.
IDE ToolsPlatform as a ServiceRemote Access+1
Open Core
Details
OpenHands logo

OpenHands

92.7k
An AI-driven development platform with a software agent SDK, CLI, local GUI, and hosted cloud offering.
Artificial IntelligenceAI Coding AssistantAI Agents+2
Single ContainerOpen Core
Details
dirac logo

dirac

1.6k
Dirac is an open-source AI coding agent for long-running software engineering tasks, available in VS Code, the terminal, and compatible ACP clients.
AI Coding AssistantAI AgentsAI Tooling+1
Details
Vibe Kanban logo

Vibe Kanban

28.6k
Vibe Kanban is a kanban-based workspace for planning work, running coding agents, reviewing diffs, and shipping changes.
Dev Project ManagementAI Coding AssistantAI Agents+2
6 ContainersTelemetry: Opt-Out
Details
Context7 logo

Context7

64.2k
Context7 provides up-to-date, version-specific library documentation and code examples for LLM prompts via a CLI skill flow or MCP server.
Model Context ProtocolArtificial IntelligencePermissive License+2
Details
hunk logo

hunk

9.8k
Hunk is a review-first terminal diff viewer for reviewing Git changesets, raw files, and patches with an interactive UI.
IDE ToolsAI Coding AssistantMiscellaneous Tools
Details