/code @devintern/pm DevIntern + Linear
Keep Linear as your source of truth. @devintern/pm creates well-specified issues from AI drafts, and @devintern/code implements them end-to-end with PRs and status updates.
How it works
What DevIntern does with Linear
Each product path keeps Linear as the handoff surface. No rip-and-replace, no new dashboard.
/pm Create Linear issues from AI drafts
- 1 Set TASK_TRACKER=linear and add a Personal API key.
- 2 Run devpm --interactive with a Figma frame, log dump, or prompt.
- 3 Review the draft and post issues (and sub-issues) to your configured team.
/code Implement Linear issues end-to-end
- 1 Run devintern against an issue identifier, issue URL, or an IssueFilter batch query.
- 2 Agent fetches the markdown description, comments, and attachments.
- 3 Creates a branch, implements, self-reviews, opens a PR, and comments back on the issue.
Capabilities
Built for real Linear workflows
Linear GraphQL API for issue creation and implementation
Markdown descriptions rendered natively in Linear
Subtasks created as linked sub-issues
Epic links via Linear parent-issue relationships
Workflow state transitions via state names in settings.json
IssueFilter batch runs for draining a filtered backlog
Native estimate field updates in estimation mode
A single run
From Linear ticket to reviewed pull request
A single run takes a Linear issue from identifier to reviewed pull request, moving it through your team's workflow states along the way.
- 1
Fetch the issue
DevIntern pulls the description, labels, comments, and attachments over Linear's GraphQL API. Files hosted on uploads.linear.app are downloaded with your API key; external links like Figma or Google Docs are passed to the agent as links.
- 2
Feasibility gate
The agent reads the issue the way a careful engineer would and stops if it cannot be implemented as written. Unclear requirements come back as an assessment comment with pointed questions, not as guesswork code.
- 3
State moves to In Progress
If the issue passes the gate, DevIntern moves it to the workflow state you configure per team key in settings.json. State names match case-insensitively.
- 4
Implement and self-review
The agent writes the change on a feature branch, then runs a review pass over its own diff and fixes what it finds before the pull request exists.
- 5
Deliver back to Linear
With --create-pr, DevIntern opens a pull request, moves the issue to your review state, and posts an implementation summary comment. Incomplete runs return the issue to your backlog state with an explanation.
What gets written back to Linear
Every outcome lands on the issue as a native markdown comment. Use --skip-comments to run without comments or state transitions.
Feasibility check
Assessment comment with the questions blocking implementation
Successful implementation
Implementation summary comment with a link to the pull request
Incomplete run or max turns
Incomplete-run comment explaining what remains
Estimation run
Estimate written to Linear's native field, plus a comment with reasoning, risks, and unclear areas
Batch runs
Work through Linear in batches
Batch selection speaks Linear's own IssueFilter language as JSON, or falls back to plain text matched against issue titles. The first 50 matching issues are processed in sequence.
Single issue or full URL
$ devintern ENG-42 --create-pr Drain a team's Todo state
$ devintern --query '{"state":{"name":{"eq":"Todo"}},"team":{"key":{"eq":"ENG"}}}' --create-pr Any Linear IssueFilter works. Quote the JSON in single quotes and validate it in the Linear GraphQL explorer.
Plain text title search
$ devintern --query "login bug" --create-pr Matches issue titles, case-insensitive contains.
AI estimation on the native field
$ devintern ENG-42 --estimate Linear specifics at a glance
API
Linear GraphQL API with a Personal API key (lin_api_...)
Query language
IssueFilter JSON or plain text title search via --query
Descriptions
Markdown end to end; no format conversion needed
Status updates
Workflow state moves per team key from settings.json, case-insensitive
Estimation
Native Linear estimate field, fully supported
Attachments
uploads.linear.app files downloaded; external links passed through
Get connected
Setup guides and configuration
Credentials stay in project-local .env files. DevIntern runs on your machine or server, not a shared implementation cloud.
FAQ
Common questions about Linear
Does @devintern/code support Linear?
Yes. @devintern/code fetches Linear issues by identifier or URL, implements them, opens PRs, moves issues through your workflow states, and posts summaries back as comments. Batch selection works with a JSON IssueFilter or plain text title search via --query.
What Linear credentials are required?
A Personal API key from linear.app/settings/api. Store it as LINEAR_API_KEY in .devintern-pm/.env for PM or .devintern-code/.env for Code.
Can I pick which Linear team receives new issues?
Yes. Configure a default team in .devintern-pm/.env. The interactive flow can target the team you specify.
Does estimation mode work with Linear?
Yes. Linear has a native estimate field, so devintern --estimate sets the estimate value directly and posts an estimation comment with reasoning.
What happens when a workflow state name does not match?
DevIntern reports which states are available for the team in the error message. Check spelling against your team's workflow states in Linear settings; matching is case-insensitive, and the project key is the team key from the issue identifier (ENG for ENG-42).
How are attachments handled?
Files hosted on uploads.linear.app are downloaded with your API key and made available to the agent. External attachment links such as Figma or Google Docs are passed to the agent as links.
Try DevIntern with Linear
Connect Linear, run your first workflow, and keep the trackers, repos, and reviewers your team already trusts.
Free for interactive use · FSL source-available · BYO model keys