shipfleet.ai
Autonomous AI engineering fleet for any codebase. 50 agents, real-time visibility, cross-model review, closed-loop verification.
Installation
# npm (recommended) npm install -g shipfleet # pnpm pnpm add -g shipfleet # from source git clone https://github.com/shipfleet/shipfleet cd shipfleet && npm install && npm run build && npm link
Requirements
| Node.js | 20+ required |
| Git | 2.x required |
| Claude Code CLI | npm install -g @anthropic-ai/claude-code |
| gh CLI | Optional — for PR creation. brew install gh |
Initialization
Run shipfleet init in your project root. It auto-detects your language, framework, test runner, linter, and git remote.
cd ~/my-project shipfleet init # Or non-interactive (accept all defaults): shipfleet init --yes
This creates a .shipfleet/ directory containing:
| .shipfleet/config.json | Fleet configuration (no secrets — API keys stay in env vars) |
| .shipfleet/shipfleet.db | SQLite database (inbox, tasks, runs, reviews, verifications) |
| .shipfleet/inbox | Inbox file for ad-hoc tasks |
| .shipfleet/worktrees/ | Git worktrees for each session (auto-cleaned) |
| .shipfleet/heartbeat.json | Daemon health check |
The directory is automatically added to .gitignore.
Quick Start
# 1. Initialize shipfleet init --yes # 2. Start the dashboard + workers shipfleet start # 3. Add a task shipfleet add "[high] fix the login redirect bug | users go to / instead of /dashboard" # 4. Or spawn a one-off session shipfleet spawn "fix the typo in README.md" # 5. Open dashboard open http://localhost:4747
Pipeline
Five stages, fully automated. Human approves the PR — that's it.
INGEST ──▶ TRIAGE ──▶ BUILD ──▶ REVIEW ──▶ VERIFY every 15m Haiku Opus Gemini 24h post score worktree + GPT-5 merge dedup PR open unbiased re-queue
Sessions
Each session spawns a real claude --print process in an isolated git worktree. Output streams live to the dashboard via SSE. You can kill, redirect, or send messages at any time.
Cross-Model Review
After a PR opens, two independent reviews run:
| Security | Gemini 2.5 Pro — OWASP checklist, injection, secrets, auth bypass, SSRF, prompt injection |
| Bugs | GPT-5 — logic errors, race conditions, null access, missing error handling, test gaps |
Different model families = genuine diversity. Findings posted as PR comments. Critical findings block merge.
Verification Loop
24h after merge, re-checks the source. Sentry error still firing? GitHub issue still open? Regressions auto-re-queue at high priority.
Work Sources
ShipFleet discovers work automatically from multiple sources. Each source polls independently with signal-strength scoring and deduplication.
Sentry
Polls unresolved issues. Signal scored by: frequency, user count, severity level, recency.
# Required env vars: SENTRY_AUTH_TOKEN=sntrys_... SENTRY_ORG=my-org SENTRY_PROJECT=my-project
GitHub Issues
Watches issues with configurable labels (default: shipfleet, auto, bug). Signal scored by: label priority, reactions, comments, recency.
GITHUB_TOKEN=ghp_...
GitLab Issues
Same workflow for GitLab repos. Polls issues by label, creates MRs.
GITLAB_TOKEN=glpat-... GITLAB_PROJECT_ID=12345
Jira
Polls Jira issues by label. Works with Jira Cloud and Server. Syncs status back after merge.
JIRA_API_TOKEN=... JIRA_HOST=mycompany.atlassian.net JIRA_EMAIL=dev@company.com
Linear
Watches Linear issues with configurable labels. Priority field + estimate + cycle position drive signal scoring.
LINEAR_API_KEY=lin_api_...
PagerDuty
Webhook on incident create. Urgency × service criticality drives priority. Automatically does root-cause analysis + proposes fix.
PAGERDUTY_API_KEY=...
Slack
Mention @shipfleet in a channel or react with 🚢 on any message. The message becomes a task, the fix becomes a PR.
SLACK_BOT_TOKEN=xoxb-... SHIPFLEET_SLACK_CHANNEL=#engineering
CI / CD
Detects failing runs on GitHub Actions, CircleCI, or Jenkins. Reads logs, attempts fix, re-runs pipeline.
# GitHub Actions — uses GITHUB_TOKEN (already set) # CircleCI: CIRCLECI_TOKEN=... # Jenkins: JENKINS_URL=https://jenkins.company.com JENKINS_USER=admin JENKINS_API_TOKEN=...
Monitoring (Datadog, Bugsnag, Rollbar, New Relic)
Error spikes, latency regressions, and anomaly alerts from your APM become tasks automatically.
# Datadog DATADOG_API_KEY=... DATADOG_APP_KEY=... # Bugsnag BUGSNAG_API_KEY=... BUGSNAG_PROJECT_ID=... # Rollbar ROLLBAR_API_KEY=... ROLLBAR_PROJECT_ID=... # New Relic NEW_RELIC_API_KEY=...
Configuration
All settings live in .shipfleet/config.json. API keys are never stored — only "env" markers.
{
"project": {
"name": "my-app",
"language": "typescript",
"framework": "nextjs",
"test_command": "pnpm vitest run",
"typecheck_command": "npx tsc --noEmit",
"protected_files": ["src/auth/core.ts"],
"protected_branches": ["main", "production"]
},
"fleet": {
"max_workers": 3,
"max_cost_per_task_usd": 2.0,
"max_cost_per_day_usd": 20.0,
"build_model": "claude-opus-4-6",
"review_security_model": "gemini-2.5-pro",
"review_bugs_model": "gpt-5"
},
"sources": {
"sentry": true,
"github_issues": true,
"github_issue_labels": ["shipfleet", "auto"],
"gitlab": false,
"jira": false,
"linear": false,
"pagerduty": false,
"slack": false,
"inbox_file": true
}
}
Environment Variables
| Variable | Required | Purpose |
|---|---|---|
| ANTHROPIC_API_KEY | Yes | Claude Code sessions (build agent) |
| GITHUB_TOKEN | Recommended | PR creation, GitHub Issues ingestion, GitHub Actions |
| GOOGLE_AI_API_KEY | Optional | Gemini security review |
| OPENAI_API_KEY | Optional | GPT-5 bug review |
| SENTRY_AUTH_TOKEN | Optional | Sentry error ingestion |
| GITLAB_TOKEN | Optional | GitLab Issues + MRs |
| JIRA_API_TOKEN | Optional | Jira ticket ingestion |
| LINEAR_API_KEY | Optional | Linear issue ingestion |
| PAGERDUTY_API_KEY | Optional | PagerDuty incident webhooks |
| SLACK_BOT_TOKEN | Optional | Slack @shipfleet mentions |
| DATADOG_API_KEY | Optional | Datadog monitor alerts |
| BUGSNAG_API_KEY | Optional | Bugsnag error ingestion |
| ROLLBAR_API_KEY | Optional | Rollbar error ingestion |
| NEW_RELIC_API_KEY | Optional | New Relic APM alerts |
| CIRCLECI_TOKEN | Optional | CircleCI failure detection |
| JENKINS_URL + JENKINS_API_TOKEN | Optional | Jenkins failure detection |
Project Detection
shipfleet init auto-detects:
| Language | Frameworks | Test Command | Detection |
|---|---|---|---|
| TypeScript/JS | Next.js, Remix, React, Vue, Express, Fastify, Svelte, Nuxt | vitest, jest, mocha | tsconfig.json + package.json deps |
| Python | Django, Flask, FastAPI | pytest | pyproject.toml / requirements.txt |
| Go | — | go test ./... | go.mod |
| Rust | — | cargo test | Cargo.toml |
| Java | Maven, Gradle | mvn/gradle test | pom.xml / build.gradle |
| Ruby | Rails | bundle exec rspec | Gemfile + config/routes.rb |
Safety Guards
Every autonomous action has a corresponding safety guard. 61 tests verify enforcement.
Secrets Scanning — Patterns
| Pattern | Example |
|---|---|
| AWS Access Key | AKIA... (20 uppercase chars) |
| AWS Secret Key | aws_secret = "..." (40 chars) |
| GitHub Token | ghp_..., gho_..., ghu_... |
| Anthropic Key | sk-ant-... |
| OpenAI Key | sk-...T3BlbkFJ |
| Slack Token | xoxb-..., xoxp-... |
| Stripe Key | sk_live_..., rk_test_... |
| Private Key | -----BEGIN RSA PRIVATE KEY----- |
| Generic Secret | password = "...", api_key: "..." |
| JWT | eyJ...eyJ...sig (3 base64 segments) |
| Sentry DSN | https://hex@sentry.io |
| Database URL | postgres://user:pass@host |
Audit Log
All security events are logged to .shipfleet/shipfleet.db in the system_log table with component = 'audit'. Events include:
| secrets-blocked | Push blocked due to secrets in diff |
| protected-file-blocked | Protected file modification detected |
| merge-blocked | Pre-merge gate failed (with reasons) |
| bad-fix-loop-escalated | Task escalated after repeated failures |
| stale-pr-closed | PR auto-closed after 7 days |
| rate-limited | API rate limit exceeded |
| remote-access-blocked | Non-localhost API access rejected |
| hourly-cost-burst | Hourly cost exceeds 25% of daily cap |
CLI Commands
USAGE shipfleet <command> [options] SETUP init [--yes] Detect project, create .shipfleet/ start Launch dashboard + workers on :4747 status Show fleet status WORK spawn "title" [desc] Spawn a one-off session add "title | desc" Add task to inbox queue list [status] List tasks by status stuck Show tasks needing attention ACTIONS approve <id> Approve a flagged task reject <id> Reject and close a task retry <id> Reset + re-queue DAEMON daemon install Run 24/7 as background service daemon stop Stop the service daemon logs Tail daemon output
API Endpoints
All endpoints are on http://localhost:4747. Localhost-only, rate-limited.
| Method | Path | Description |
|---|---|---|
| GET | /api/config | Current fleet configuration |
| POST | /api/config | Update configuration |
| GET | /api/detect | Re-run project detection |
| GET | /api/setup/status | Readiness checks |
| GET | /api/sessions | List all sessions |
| GET | /api/sessions/:id | Session detail + output |
| GET | /api/sessions/:id/stream | SSE — live output stream |
| GET | /api/sessions/all/stream | SSE — all sessions |
| POST | /api/sessions/spawn | Spawn a new session |
| POST | /api/sessions/:id/kill | Kill a running session |
| POST | /api/sessions/:id/send | Send input to session stdin |
| POST | /api/sessions/:id/pr | Push branch + create PR |
| POST | /api/sessions/:id/cleanup | Remove worktree |
| GET | /api/stats | Fleet statistics |
Daemon Mode
Run shipfleet 24/7 as a background service that auto-starts on login.
# Install as LaunchAgent (macOS) / systemd (Linux) shipfleet daemon install # Check status shipfleet daemon status # View logs shipfleet daemon logs # Stop shipfleet daemon stop
The daemon writes a heartbeat to .shipfleet/heartbeat.json every 60 seconds. Logs go to .shipfleet/daemon-stdout.log and .shipfleet/daemon-stderr.log.