A worker for the coding agents you already have. Ready tickets become reviewed pull requests — on your machines.
devintern-readme.mp4
Try it on one task. The product is the worker that keeps going.
DevIntern is a self-hosted worker: it picks up ready tickets from the tracker you already use, runs Claude Code, Codex, Cursor, or OpenCode with your keys, and opens a self-reviewed pull request. You review diffs, not agent sessions. Interactive runs are free; the daemon is the paid product.
- Your tracker: Jira · Linear · GitHub Issues · Trello · Asana · Azure DevOps · plain markdown files
- Your agent: Claude Code · Codex · Cursor · OpenCode (one config line to switch)
- Your keys, your machines — billed on the contract you already have; code never hits our servers
- Try it free — run
devintern PROJ-123from your terminal, no signup
Docs · npm · Website · PM desktop
# Requires Bun
curl -fsSL https://bun.sh/install | bash
bun install -g @getdevintern/code
# 1. Try one task in this repo (free, no signup)
devintern init
devintern ./tasks/my-task.md --create-pr # or: devintern PROJ-123 --create-pr
# 2. Leave it running (automation license)
devintern worker init
devintern workerOne local run proves the loop. The worker is the intern: it keeps picking up ready tickets and turns review comments on its pull requests into commits.
| Worker | One daemon. Ready tickets become pull requests. Review comments come back as commits on the same branch. |
| Your stack | Your tracker, your coding agent, your keys. DevIntern runs the tools you already use instead of selling you another agent. |
| Quality gates | Vague tickets get questions on the tracker instead of a wrong PR. The agent reviews its own diff before a human sees it. |
| Self-hosted | Runs on a laptop or VM you control. Your code and credentials stay there; the source is available under the FSL. |
devintern worker is a long-running daemon that polls your tracker, implements ready tickets, opens pull requests, and keeps its own PRs healthy while your team writes specs, reviews code, or sleeps. Your code, credentials, and agent execution never leave your machine.
Once it's running, the worker:
- Drains the backlog — picks up every ticket matching your ready-tasks query (
task_query) and runs the full pipeline per repo, one at a time; attempts that come up incomplete bounce back to the tracker with an explanation instead of disappearing. - Keeps up with review feedback — watches the PRs it created; when someone requests changes or comments, the same pipeline addresses the feedback and pushes commits. No webhook plumbing needed in polling mode.
- Resolves merge conflicts itself — merges the base branch tip into a lagging PR branch and asks the agent to fix conflicts semantically, never force-pushing over human work.
- Takes orders by @mention — comment
@devintern address the review feedbackon any PR in the repo and it handles it (only users with push access can direct the bot). - Runs scheduled chores — automations turn a cron schedule plus a prompt into the full ticket→PR pipeline, like dependency upgrades or flaky-test triage on Monday mornings. The prompt is the task: nothing needs to exist in your tracker.
- Survives reality — accepted work persists to a local SQLite queue across restarts, retries are capped, and rate limits pause rather than break runs.
- Shows its work — every run is recorded stage-by-stage in a built-in dashboard at
http://localhost:4400; routing rules and automations span a whole fleet of repositories from oneworkspace.toml.
Set it up once:
devintern worker init # guided setup: reuses tracker config, checks license, pairs relay, can install systemd/launchd service
devintern worker # keeps running: polling, reviews, automations, dashboardA slice of workspace.toml shows most of the story:
[defaults]
task_query = "status=todo"
worker_task_args = "--create-pr"
poll_interval = 60
[[automations]]
id = "dependency-health"
enabled = true
interval = "6h"
prompt = """Pick one outdated dependency and upgrade it within the same major version."""For teams this changes what "keeping the repo healthy" costs: maintenance tickets stop rotting in the backlog, review cycles close themselves while reviewers stay in the loop where their input actually matters, and recurring chores run like cron jobs whose output arrives as reviewed pull requests rather than good intentions.
Unattended automation uses the paid automation tier (one-time Supporter license or Team/Business subscription) — interactive use stays free forever. Pricing · Worker docs
Point the CLI at a ticket and get a reviewed diff back. Interactive use is free forever: no signup, no time limit.
| Command | What you get |
|---|---|
devintern PROJ-123 --create-pr |
Ticket → feature branch → implemented diff → PR, with a summary posted back to the tracker |
devintern ./tasks/my-task.md --create-pr |
The same loop from a local markdown file — zero tracker credentials |
devintern --query 'status = "To Do"' --create-pr |
Batch mode: every ticket matching your JQL / Linear filter / GitHub search, run one after another |
devintern PROJ-123 --create-pr --auto-review |
The agent critiques its own PR diff and commits fixes before any human has to look |
devintern address-review <pr-url> |
Review comments on a pull request become addressed commits on its branch |
devintern resolve-conflicts <pr-url> |
The base branch is merged in and the agent resolves the conflicted files sensibly |
devintern doctor |
Pre-flight check for runtime, git, agent CLIs, tracker credentials — with a fix hint per problem |
When a ticket is too vague to implement responsibly, the agent posts clarifying questions back on the tracker instead of shipping a confidently wrong PR. See the quick-start guide and full usage reference.
DevIntern PM (desktop, free) and devpm turn a prompt, error log, or Figma frame into a well-specified tracker ticket. They are optional intake for the worker.
Source is under the Functional Source License, Version 1.1, with Apache 2.0 Future License (FSL-1.1-Apache-2.0). You can read it, audit it, self-build, and self-host. Each release converts to Apache-2.0 two years after publication.
- Interactive use → free forever
- Worker (unattended) → Supporter ($99 once for one person's own repos) or a Team/Business subscription
Details: devintern.com/pricing
The FSL grants no trademark rights: the DevIntern name and logo are trademarks of Daniil Pokrovsky (devintern.com) and may not be used to identify forks or derived products.
| Package | Purpose |
|---|---|
@getdevintern/code |
The devintern CLI: ticket → agent → self-reviewed PR |
@getdevintern/pm |
The devpm CLI: rough input → well-specified tickets |
@devintern/pm-desktop |
Desktop app for ticket drafting: prompt, log, or Figma → tracker |
packages/* (shared) |
Agent harness, tracker clients, auth, license check, utilities |
Website and control plane live elsewhere; this repo is the tool packages.
Install dependencies with bun install, then use the root commands below. Turborepo runs package tasks in parallel where it is safe and orders workspace builds according to their package dependencies.
| Command | Purpose |
|---|---|
bun run build |
Build every workspace and its dependencies |
bun run test |
Run all package test suites |
bun run lint |
Lint all packages |
bun run typecheck |
Type-check all packages |
bun run format:check |
Check formatting without changing files |
bun run format |
Format all packages; this write task is intentionally not cached |
bun run dev |
Start the dashboard and desktop watch tasks; stop them with Ctrl+C |
Package-level commands remain available, for example bun run --filter @getdevintern/pm test. To run a selected task and its dependency graph through Turborepo, use bun run turbo run build --filter @getdevintern/code.
Turborepo uses the local .turbo directory for its cache; remote caching is not configured. Add --force to a Turbo command to ignore cached results, or remove .turbo to clear the local cache completely. If a result looks stale, first rerun it with --force; changes to the lockfile, package sources, shared lint configuration, or declared build environment variables automatically invalidate affected entries.
PRs welcome — see CONTRIBUTING.md. Monorepo layout and Bun-only tooling: AGENTS.md.
Built for teams that want agents to close tickets, not just write code.