Grog is an autonomous GitHub issue solver. Point it at an issue, and it uses Claude to analyze code, implement fixes, and open pull requests — without human intervention.
@grog-agent[bot] solve this
|
v
GitHub Webhook ──> Agent (Express) ──> MongoDB ──> Claude ──> PR
- Someone mentions the bot on a GitHub issue (or you create a job from the dashboard)
- The webhook hits the agent server
- The agent clones the repo, spawns Claude, and works on the fix
- You can send messages to the agent mid-work via the dashboard chat — it interrupts and restarts with your input
- When done, it pushes a branch and opens a pull request
- If the agent needs clarification, it asks — and picks back up when you reply
grog/
shared/ - Shared TypeScript library (types, state, GitHub API, auth, billing)
agent/ - Self-hosted agent server (webhook, dashboard, runner, poll loop)
api/ - SaaS API server (OAuth, billing, Stripe)
app/ - SaaS frontend (React)
skill/ - Claude Code CLI skills (/grog-solve, /grog-explore, /grog-review, /grog-answer, /grog-talk)
pm2/ - PM2 ecosystem config for production
Run the agent on your own machine. You bring your own Anthropic API key and Claude Code CLI. No billing, no limits — just yarn dev:agent and go.
Hosted by Turing Labs. Pay-per-token via credit packs (Stripe). 10,000 tokens = 1 credit. Credits are automatically deducted after each job completes.
Dedicated VPS per customer with managed infrastructure.
- Node.js 20+
- MongoDB running locally or a connection string
- Anthropic API key (set as
ANTHROPIC_API_KEYin your shell) - Claude Code CLI installed (
npm install -g @anthropic-ai/claude-code)
- Go to github.com/settings/apps/new
- Fill in:
- GitHub App name: pick a name (e.g.
my-grog-agent) - Homepage URL:
http://localhost:3000 - Webhook URL: your public URL +
/webhook(or leave blank if polling only) - Webhook secret: generate a random string and save it
- GitHub App name: pick a name (e.g.
- Set Permissions:
- Repository > Contents: Read and write
- Repository > Issues: Read and write
- Repository > Pull requests: Read and write
- Repository > Metadata: Read-only
- Subscribe to events:
- Issue comment
- Issues
- Pull request
- Click Create GitHub App
- Note the App ID shown at the top of the page
- Scroll down and click Generate a private key — save the
.pemfile
- Go to
https://github.com/settings/apps/<your-app-name>/installations - Click Install
- Select your organization or account
- Choose All repositories or select specific repos
- Click Install
git clone https://github.com/turinglabsorg/grog.git
cd grog
yarn install
yarn buildcp agent/.env.example agent/.envEdit agent/.env:
# MongoDB connection
MONGODB_URI=mongodb://localhost:27017/grog
# Server port
PORT=3000
# Max parallel jobs (default: 2)
MAX_CONCURRENT_JOBS=2
# Working directory for cloned repos
WORK_DIR=/tmp/grog-jobs
# Agent timeout in minutes (default: 30)
AGENT_TIMEOUT_MINUTES=30You do not need GH_TOKEN or WEBHOOK_SECRET in the .env — these are configured through the dashboard.
yarn dev:agent- Open http://localhost:3000
- You'll see the Connect GitHub App setup screen
- Enter your App ID (from Step 1)
- Paste the contents of your private key
.pemfile - Optionally enter your webhook secret
- Click Connect
The dashboard will verify the connection and show the rate limit (should be 5,000/hr).
On any issue in a repo where the app is installed, comment:
@your-app-name[bot] solve this
The agent will pick it up, work on it, and open a PR.
When the agent can't solve an issue on the first pass, it posts a comment asking for clarification and sets the job to waiting_for_reply. When you reply and mention the bot again, the agent re-runs with the full conversation — the new reply is highlighted so Claude knows exactly what changed.
The agent includes a built-in terminal-style dashboard at http://localhost:3000:
- Job list — all jobs with status, repo, issue, age, token usage
- Live terminal — click any job to see real-time Claude output (SSE streaming)
- Stop/Start — pause and resume jobs from the terminal panel
- Dashboard chat — send messages to a running agent from the terminal panel. Messages interrupt the current turn and the agent restarts with your message in context
- Create jobs — click the
+button to create a job from any GitHub issue URL or repo URL. If you provide just a repo URL, Grog creates a GitHub issue first - Budget display — token usage tracking with hourly/daily limits in the header
- App status — shows connected GitHub App with disconnect option
yarn build
pm2 start pm2/ecosystem.config.cjsFor webhooks to work in production, your agent needs a public URL. Set the webhook URL in your GitHub App settings to point to https://your-domain.com/webhook.
| Variable | Required | Default | Description |
|---|---|---|---|
MONGODB_URI |
No | mongodb://localhost:27017/grog |
MongoDB connection |
PORT |
No | 3000 |
Server port |
MAX_CONCURRENT_JOBS |
No | 2 |
Max parallel jobs |
WORK_DIR |
No | /tmp/grog-jobs |
Temp directory for repos |
AGENT_TIMEOUT_MINUTES |
No | 30 |
Max time per job |
MAX_RETRIES |
No | 2 |
Retries for transient failures |
DAILY_TOKEN_BUDGET |
No | 0 (unlimited) |
Daily token limit |
HOURLY_TOKEN_BUDGET |
No | 0 (unlimited) |
Hourly token limit |
LOG_LEVEL |
No | info |
debug, info, warn, error |
LOG_FORMAT |
No | human-readable | Set to json for structured output |
STRIPE_SECRET_KEY |
No | — | Enable billing (SaaS mode) |
The GitHub App credentials (App ID, private key, installation ID) are stored in MongoDB and configured through the dashboard — no need to put them in .env.
Install Claude Code skills for local issue solving:
cd skill && ./install.shThen in any Claude Code session:
/grog-solve https://github.com/owner/repo/issues/123
/grog-explore https://github.com/owner/repo
/grog-review https://github.com/owner/repo/pull/456
/grog-answer https://github.com/owner/repo/issues/123 # or /pull/123
/grog-talk
/grog-talk opens a bidirectional bridge between your Claude Code session and Telegram. You can walk away from the terminal and keep interacting through your phone — every message you send on Telegram is processed as if you typed it in the terminal.
Setup:
- Create a bot at @BotFather
- Run the installer — it asks for the bot token (optional step)
- Type
/grog-talkin Claude Code and message your bot to connect
MIT