oh-my-pr
v4.5.2
Published
Autonomous GitHub PR babysitter that watches repos, triages review feedback, and dispatches AI agents to fix code locally
Downloads
3,160
Maintainers
Readme
oh-my-pr
oh-my-pr is a local-first GitHub PR babysitter. It watches the pull requests you care about, reads review feedback and CI failures, then uses your local Codex or Claude CLI to make fixes in isolated worktrees and push them back to the PR branch.
If you regularly lose time to review comments, flaky checks, merge conflicts, and back-and-forth cleanup before merge, this is the tool for that.
Warning: oh-my-pr helps developers ship high-quality code fast, and the tradeoff is heavy coding-agent usage. Expect it to use lots of tokens, which can increase your AI provider costs. It's built for tokenmaxing.
Why It Exists
Pull requests often stall for boring reasons:
- review comments arrive after you have switched context
- CI fails after you think the work is done
- fixes require reopening local context and rebuilding the same mental model
- merge prep becomes repetitive babysitting instead of real development
oh-my-pr keeps that loop moving from your machine. You push a branch, let it watch the PR, and come back to something much closer to merge-ready.
Quick Start
You need:
- Node.js 22+
git- GitHub auth via
gh auth loginorGITHUB_TOKEN - either the
codexCLI orclaudeCLI installed and authenticated locally
Install and launch:
npm install -g oh-my-pr
oh-my-prThat starts the dashboard server and opens the browser dashboard.
Then:
- Add a GitHub repository you want to watch.
- Choose whether to auto-discover only your PRs or your team's PRs too.
- Add a PR directly by URL if you want to track just one pull request.
- Let oh-my-pr sync comments, checks, and follow-up work.
What It Does
- Watches repositories and tracked PRs for review activity, comments, and failing checks
- Triages feedback into actionable items
- Runs
codexorclaudein isolated worktrees under~/.oh-my-pr - Uses a bounded code-owner fallback after failed default babysitter runs so the resolved agent can inspect GitHub feedback, commit, and push when the primary automation path fails
- Replies to GitHub PR comments on your behalf and resolves conversations to keep the thread clean
- Pushes verified fixes back to the PR branch
- Can automatically create a GitHub release when a merged PR is important enough to justify a version bump
- Keeps logs, run history, and PR state on your machine
- Exposes the same system through a dashboard, local API, and MCP server
Technical Details
Local-First
oh-my-pr runs on your machine and works with your local agent CLI. Repository caches (repos/), worktrees (worktrees/), logs (log/), and app state (state.sqlite) live under ~/.oh-my-pr by default. Set OH_MY_PR_HOME if you want a different location.
Isolation
Each fix run happens in an app-owned repository cache and an isolated git worktree. That keeps agent changes scoped to the PR branch instead of mutating your day-to-day checkout.
GitHub Auth
You can authenticate with:
gh auth loginGITHUB_TOKEN- app config in the dashboard
- a saved dashboard token
Watch Scope
Watched repositories default to My PRs only. You can switch a repo to My PRs + teammates, or skip auto-discovery entirely and register a single PR by URL.
Interfaces
oh-my-pr can be used in a few ways:
- web dashboard:
oh-my-pr - server logs page:
http://localhost:5001/logs - MCP server:
oh-my-pr mcp - local REST API: see LOCAL_API.md
- optional Tauri desktop shell
Local browser and API access work without a dashboard login. To use the web dashboard from another machine, set remote web credentials before starting the server:
OH_MY_PR_WEB_USERNAME=operator \
OH_MY_PR_WEB_PASSWORD='choose-a-long-password' \
OH_MY_PR_SESSION_SECRET='choose-a-long-random-secret' \
oh-my-prRemote API requests then require a signed dashboard session. Put TLS in front of the server before using remote access over an untrusted network.
Logging
Server output is structured (pino) and goes to two destinations by default:
- stdout (pretty-printed in dev, JSON in production)
~/.oh-my-pr/log/server.log(or underOH_MY_PR_HOME)
Override the file path with --log-file <path> or OH_MY_PR_LOG_FILE; disable file logging with --no-log-file or OH_MY_PR_NO_LOG_FILE=1. Set the level with --log-level <trace|debug|info|warn|error|fatal> or LOG_LEVEL. Defaults: info in production, debug in development.
GitHub tokens are redacted before any log line is written. The sanitizer replaces these values with [REDACTED] automatically:
ghp_/gho_/ghs_/ghu_/ghr_prefixesgithub_pat_…tokensx-access-token:…@URLsBearer …/token …authorization values
Optional Automation
If you enable them, oh-my-pr can also:
- attempt bounded CI healing for failing PR heads
- monitor merged deployments and open follow-up fix PRs for supported Vercel and Railway failures
- create GitHub releases automatically for merged changes that are worthy of a new version
- answer natural-language questions about tracked PRs through the dashboard or MCP
Those features are optional and documented in the linked docs below.
Commands
oh-my-pr # web dashboard
oh-my-pr mcp # MCP server
oh-my-pr --help # help
oh-my-pr --version # versionLogging flags work with both web and mcp and can appear before or after the subcommand:
oh-my-pr -q # errors only
oh-my-pr --verbose # debug level
oh-my-pr --debug # alias for --verbose
oh-my-pr --trace # maximum verbosity
oh-my-pr --log-level warn # explicit level
oh-my-pr --log-file ./out.log # override file destination
oh-my-pr --no-log-file # disable file logging entirelySet PORT to change the default web server port (5001). If an MCP host needs to connect to a non-default server port, set OH_MY_PR_PORT for oh-my-pr mcp.
Run From Source
git clone https://github.com/yungookim/oh-my-pr.git
cd oh-my-pr
npm install
npm run devThe dashboard is available at http://localhost:5001 by default. Loopback API
requests work without login; remote dashboard/API access requires
OH_MY_PR_WEB_USERNAME and OH_MY_PR_WEB_PASSWORD.
Docs
Development
| Command | Purpose |
| --- | --- |
| npm run dev | Start the development server |
| npm run build | Build the production bundle |
| npm run start | Run the production build |
| npm run mcp | Start the MCP server |
| npm run check | Run TypeScript checks |
| npm run lint | Run ESLint |
| npm run test | Run the server test suite |
| npm run test:all | Run server tests plus client library tests |
| npm run tauri:dev | Start the Tauri desktop app in development |
| npm run tauri:build | Build the Tauri desktop app |
License
MIT Copyright 2026 KimY
