@bobbyg603/mog
v1.2.0
Published
One command to go from GitHub issue to pull request, powered by Claude Code in a Docker sandbox
Maintainers
Readme
mog — Sandboxed Claude Issue Mogging
One command to go from GitHub issue to pull request, powered by Claude Code running in a Docker sandbox.
mog workingdevshero/automate-it 123That's it. mog will:
- Fetch the issue title, description, and labels via
ghCLI - Create a git worktree on a clean branch (
123-fix-broken-login) - Run Claude Code inside a persistent Docker sandbox (microVM) with
--dangerously-skip-permissions - Push the branch and open a PR that
Closes #123
Prerequisites
- macOS or Windows (Docker sandbox microVMs require Docker Desktop)
- Docker Desktop — running and up to date (must support
docker sandbox) - Bun — install from bun.sh
- GitHub CLI (
gh) — authenticated viagh auth login - Git with push access to your target repos
Install
bun install -g @bobbyg603/mogQuick start
# 1. One-time setup: create sandbox & authenticate
mog init
# This launches Claude Code — use /login to authenticate with your Max subscription
# Once logged in, type /exit to return
# 2. Start mogging issues
mog workingdevshero/automate-it 123How authentication works
mog init creates a persistent Docker sandbox named mog. When it launches, you authenticate once using /login inside the Claude Code session. Your auth persists in the sandbox across all future mog runs — you never need to login again.
If your session ever expires, just run mog init again to re-authenticate.
Usage
# One-time setup
mog init
# Basic usage
mog owner/repo issue_number
# Examples
mog workingdevshero/automate-it 123
mog sparx-tech/hub-firmware 45How it works
┌──────────────────────────────────────────────────────────┐
│ Host machine │
│ │
│ 1. gh issue view #123 → fetch title, body, labels │
│ 2. git worktree add → clean branch from default branch │
│ │
│ ┌────────────────────────────────────────────────────┐ │
│ │ Docker sandbox "mog" (persistent microVM) │ │
│ │ │ │
│ │ • ~/mog-repos mounted as workspace │ │
│ │ • Auth persists across runs (login once) │ │
│ │ • Isolated from host (own Docker daemon) │ │
│ │ • claude --dangerously-skip-permissions -p "..." │ │
│ │ • Reads code, implements fix, commits │ │
│ └────────────────────────────────────────────────────┘ │
│ │
│ 3. git push origin branch │
│ 4. gh pr create --body "Closes #123" │
└──────────────────────────────────────────────────────────┘Configuration
| Environment Variable | Default | Description |
|---|---|---|
| MOG_REPOS_DIR | ~/mog-repos | Where repos are cloned and worktrees created (also the sandbox workspace) |
| MOG_MAX_ITERATIONS | 10 | Max build loop iterations per issue |
| MOG_MAX_CONTINUATIONS | — | Legacy alias for MOG_MAX_ITERATIONS |
Worktree management
mog uses bare clones and git worktrees so you can run multiple issues concurrently without conflicts:
~/mog-repos/
owner/
repo/ ← bare clone (or full clone)
repo-worktrees/
123-fix-broken-login/ ← worktree for issue #123
456-add-dark-mode/ ← worktree for issue #456Clean up when done:
cd ~/mog-repos/owner/repo
git worktree remove ../repo-worktrees/123-fix-broken-loginSecurity notes
- Claude Code runs inside a microVM via Docker sandbox — it has its own Docker daemon and cannot access your host system, terminal, or files outside
~/mog-repos. --dangerously-skip-permissionsis safe here because the sandbox provides the isolation boundary.ghcredentials stay on your host — the sandbox has no access to your GitHub token. Pushing and PR creation happen on the host after Claude finishes.- The sandbox has network access (required for the Anthropic API).
Troubleshooting
"Docker sandbox not available" — Make sure Docker Desktop is running and up to date.
"Sandbox 'mog' not found" — Run mog init first to create the sandbox and authenticate.
"Failed to fetch issue" — Check gh auth status and verify the repo/issue exist.
"No changes detected" — Claude may have struggled with the issue. Check the worktree manually, or re-run with a more detailed issue description.
"Failed to push" — Ensure gh is authenticated with push access. Try gh auth login and select HTTPS.
Managing the sandbox
# List sandboxes
docker sandbox ls
# Stop the sandbox (preserves auth)
docker sandbox stop mog
# Remove and recreate (you'll need to /login again)
docker sandbox rm mog
mog init