Quick Start: First PR in 10 Minutes
This guide takes you from zero to your first AI-generated pull request.
Before you start: Complete the Prerequisites — Claude Code installed and authenticated, Git hosting token set.
Install Pilot
curl -fsSL https://raw.githubusercontent.com/alekspetrov/pilot/main/install.sh | bashbrew tap alekspetrov/pilot && brew install pilotgit clone https://github.com/alekspetrov/pilot
cd pilot && make build
cp ./bin/pilot ~/.local/bin/pilotVerify:
pilot --version
# pilot version v2.56.0Run the Setup Wizard
pilot setupThe wizard walks you through:
- Selecting your default project path
- Configuring Telegram bot (optional)
- Setting up notification preferences
This creates ~/.pilot/config.yaml. You can edit it manually later — see Configuration for all options.
Configure Your Repository
Add your GitHub repository to ~/.pilot/config.yaml:
adapters:
github:
enabled: true
token: ${GITHUB_TOKEN}
repo: "your-username/your-repo"
project_path: "~/Projects/your-repo"
pilot_label: "pilot"
polling:
enabled: true
interval: 30sMake sure your token is set:
export GITHUB_TOKEN="your-github-pat"Add your GitLab repository to ~/.pilot/config.yaml:
adapters:
gitlab:
enabled: true
token: ${GITLAB_TOKEN}
base_url: "https://gitlab.com" # or your self-hosted URL
project: "your-namespace/your-repo"
project_path: "~/Projects/your-repo"
pilot_label: "pilot"
polling:
enabled: true
interval: 30sMake sure your token is set:
export GITLAB_TOKEN="your-gitlab-pat"Start Pilot
pilot start --github --dashboardpilot start --gitlab --dashboardThe dashboard appears, showing Pilot is polling for issues:
┌─ PILOT ─────────────────────────────────────────┐
│ Status: Running Mode: Polling │
│ Queue: 0 tasks Uptime: 12s │
│ │
│ Waiting for issues labeled "pilot"... │
└───────────────────────────────────────────────────┘Create Your First Issue
Open a new terminal and create an issue with the pilot label:
gh issue create \
--title "Add health check endpoint" \
--label pilot \
--body "Create a GET /health endpoint that returns JSON with status: ok and the current server timestamp. Add a test."Go to your repository → Issues → New Issue.
Set Title to Add health check endpoint,
add the pilot label (create it first if it doesn’t exist),
and set Body to: Create a GET /health endpoint that returns JSON with status: ok and the current server timestamp. Add a test.
Go to your project → Issues → New Issue.
Set Title to Add health check endpoint,
add the pilot label (create it first if it doesn’t exist),
and set Description to: Create a GET /health endpoint that returns JSON with status: ok and the current server timestamp. Add a test.
Or use the GitLab API:
curl --request POST \
--header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
--header "Content-Type: application/json" \
--data '{"title": "Add health check endpoint", "labels": "pilot", "description": "Create a GET /health endpoint..."}' \
"https://gitlab.com/api/v4/projects/YOUR_PROJECT_ID/issues"Watch Pilot Work
Within 30 seconds, Pilot detects the issue and starts executing. The dashboard updates in real-time:
⏳ Processing: Add health check endpoint
Implementing [████████████░░░░░░░░] 60% GH-12 32s
[14:35:15] Started context session
[14:35:18] Analyzing codebase patterns...
[14:35:25] Creating health endpoint
[14:35:40] Adding route
[14:35:55] Writing tests...
✅ PR created: github.com/you/your-repo/pull/13Review and Merge
Pilot creates a PR with:
- Implementation following your existing codebase patterns
- Tests matching your test structure
- A PR description linking back to the issue
# Review the PR
gh pr view 13
gh pr diff 13
# Merge when satisfied
gh pr merge 13Review the merge request in the GitLab UI, or:
# Using glab CLI
glab mr view 13
glab mr merge 13With --autopilot=stage, Pilot monitors CI automatically and merges once tests pass — no manual merge needed. See Autopilot.
Starter Tickets
Well-scoped tasks that work reliably as first tickets:
| Ticket | Why It Works |
|---|---|
| ”Add health check endpoint” | Simple, bounded, easy to verify |
| ”Write tests for UserService” | Clear scope, follows existing test patterns |
| ”Add loading spinner to Button component” | Small UI change with clear output |
| ”Update README with setup instructions” | Documentation, low risk |
| ”Add input validation to create endpoint” | Well-defined rules, testable |
Avoid for first tickets: Architecture changes, multi-service refactors, or tasks requiring design decisions. Start with bounded, well-defined work.
What Just Happened?
Here’s the execution flow Pilot followed:
- Polling — Pilot detected the new issue with the
pilotlabel - Branching — Created a working branch (
pilot/GH-12orpilot/add-health-check) - Context intelligence — Loaded your project context from
.agent/(if initialized) for pattern awareness - Execution — Claude Code analyzed your codebase and implemented the change
- Quality Gates — Ran build/test/lint checks (auto-detected or configured)
- Self-Review — Claude Code reviewed its own changes for quality
- PR — Pushed the branch and created a pull request
Production Setup
For production environments, enable webhooks via tunnel for instant issue detection:
# Set up a public tunnel (free via Cloudflare)
pilot tunnel setup
# Start with webhook-based detection
pilot start --tunnel --github --autopilot=stageTunnels provide instant webhook delivery with zero API polling. See the Tunnel Setup Guide for detailed configuration including GitHub, Linear, and Jira webhook URLs.
Deploy with Docker
Run Pilot in a container instead of installing the binary directly:
# Pull the official image
docker pull ghcr.io/anthropics/pilot:latest
# Start with Docker Compose (recommended)
cp configs/pilot.example.yaml config.yaml
# Edit config.yaml with your repo and settings
export GITHUB_TOKEN="ghp_..."
export ANTHROPIC_API_KEY="sk-ant-..."
docker compose up -d
docker compose logs -f pilotFor Helm on Kubernetes:
helm install pilot ./helm/pilot \
--set secrets.githubToken="ghp_..." \
--set secrets.anthropicApiKey="sk-ant-..." \
--set config.adapters.github.repo="your-org/your-repo"See the Docker & Helm deployment guide for full configuration, persistence setup, ingress for webhooks, monitoring, and security hardening.
Desktop App
Prefer a graphical interface? The Pilot desktop app provides the same dashboard panels in a native macOS window:
# Build from source (requires Wails CLI)
make desktop-build
# Open alongside your running Pilot daemon
open desktop/build/bin/Pilot.appSee the Desktop App guide for prerequisites and full setup.
Next Steps
- Configuration — Tune all config.yaml options
- Desktop App — Native macOS dashboard application
- Docker & Helm — Production container deployment
- Tunnel Setup — Instant webhooks via Cloudflare or ngrok
- Autopilot — Automatic CI monitoring and merge
- Telegram Bot — Chat, research, plan, and execute from mobile
- Context Intelligence — Reduce token usage by 92% with structured context
- Hot Upgrade — Keep Pilot updated without downtime