Warning: crewbit spawns Claude Code with
--dangerously-skip-permissions, which disables all permission prompts. Claude will be able to read, write, and execute anything your shell user can. Only run crewbit in environments you trust and with slash commands you have reviewed.
Give life to an AI agent with a single command.
crewbit ./dev-junior.yamlcrewbit is a daemon that watches an issue tracker, picks up work in priority order, and runs a Claude Code slash command for each issue. The entire behavior of an agent — what it does, in what order, with which commands — is defined in one YAML file.
- You define a workflow YAML with transitions and commands.
- crewbit polls the issue tracker in a loop.
- When an issue is ready, it spawns
claude --print <command> <issue-key>in an isolated git worktree. - On success, it moves to the next issue. On failure, it backs off and retries.
Binary (recommended):
macOS / Linux:
curl -fsSL https://crewbit.sh/install | bashWindows (PowerShell):
irm https://crewbit.sh/install.ps1 | iexInstalls the latest release to ~/.crewbit/bin/crewbit (or
%USERPROFILE%\.crewbit\bin\crewbit.exe on Windows) and adds the directory to
your PATH unless --no-modify-path / -NoModifyPath is set.
Override the directory:
CREWBIT_INSTALL_DIR=~/.local/bin curl -fsSL https://crewbit.sh/install | bash$env:CREWBIT_INSTALL_DIR = 'C:\tools\crewbit'; irm https://crewbit.sh/install.ps1 | iexOr pass flags directly:
curl -fsSL https://crewbit.sh/install | bash -s -- --install-dir ~/.local/bin --no-modify-path& ([scriptblock]::Create((irm https://crewbit.sh/install.ps1))) -InstallDir 'C:\tools\crewbit' -NoModifyPathFrom source (requires Bun):
git clone https://github.com/dukex/crewbit
cd crewbit
bun run build
sudo mv crewbit /usr/local/bin/ # on Windows: move .\crewbit.exe to a folder on your PATHcrewbit <path-to-workflow.yaml> [--dry-run]| Flag | Description |
|---|---|
--dry-run |
Print what would run without spawning Claude |
Environment variables override daemon config:
| Variable | Default | Description |
|---|---|---|
WAIT_SECONDS |
from yaml | Polling interval when queue is empty |
MAX_SESSION_SECONDS |
from yaml | Hard timeout per Claude session |
provider: jira
providers:
jira:
baseUrl: https://your-org.atlassian.net
projectKey: JIR
transitionIds:
Start: "21" # To Do → In Progress
ToReview: "9" # In Progress → In Review
Done: "6" # Accepted → Done
issueTypes:
subtask: "10002"
# Daemon iterates in order — first transition with pending issues wins
transitions:
Done:
from: Accepted
command: /merge
Start:
from: To Do
command: /develop
agent:
planCommentMarker: "Crewbit plan"
daemon:
waitSeconds: 30
maxSessionSeconds: 7200
worktreePrefix: dev-junior
# optional
git:
defaultBranch: main
branchPattern: "{issueKey}/{slug}"
slugMaxLength: 40transitions defines the work the daemon picks up. The order sets the priority — the first transition with pending issues wins each cycle. Each transition maps to a Claude Code slash command.
See examples/ for ready-to-use personas.
| File | What it does |
|---|---|
examples/dev-junior.yaml |
Implements tickets and merges accepted PRs |
examples/releaser.yaml |
Runs the release process |
examples/copywriter.yaml |
Drafts and publishes marketing copy |
examples/qa-bot.yaml |
Runs test suites and reports results |
examples/translator.yaml |
Translates i18n tickets |
export JIRA_EMAIL=you@example.com
export JIRA_API_TOKEN=your-tokenSee CONTRIBUTING.md.