Linear
For teams that live in Linear, work starts as a card. tsforge can read those cards and start work on them directly — and because Linear’s own GitHub integration links the branch and moves the card as the PR opens and merges, the harness orchestrates nothing: it just reads the card and checks out the branch Linear already named.
Linear is a curated integration over MCP — see MCP servers for the shared model (capability = consent, curated verbs, opt-in).
Turn it on
Section titled “Turn it on”Add a linear MCP server to tsforge.config.json. Linear’s server is remote, so bridge it to tsforge’s stdio transport with mcp-remote:
{ "mcpServers": { "linear": { "command": "npx", "args": ["-y", "mcp-remote", "https://mcp.linear.app/sse"] } }}The server must be keyed exactly linear. Once it connects, an interactive session prints ↳ linear: on. Force it off with TSFORGE_NO_LINEAR=1.
The tools
Section titled “The tools”The agent has all of Linear’s MCP tools (mcp__linear__*): everything a person can do in Linear through its API.
- Issues:
save_issuecreates an issue, or with anidupdates any field: title, description, status, priority, assignee, labels, project, milestone, cycle, estimate, due date, parent, duplicate-of. Moving an issue to another project or team is an update. - Projects, milestones, labels, documents, status updates:
save_project,save_milestone,save_issue_label,save_documentandsave_status_updatecreate and update them, andlist_*/get_*find them. - What Linear itself doesn’t offer: there is no tool to delete an issue (cancel it, or mark it a duplicate of the original). Initiatives appear only if your Linear plan includes them.
On top of that, three shortcuts:
linear_read(read-only):issue(one card by identifier likeENG-123— title, state, description, the branch name Linear generated, and links),search,mine(your assigned issues), andcomments.linear_write: quickcreate(atitleand theteamto file it under, by key likeENG, name or id; returns its identifier and branch name) andcomment(on a card by its identifier).linear_start: the one-step start — read a card by id and check out the git branch Linear made for it (creating it if needed). Edit as usual, then open a PR referencing the issue (e.g.Fixes ENG-123); Linear links the branch and transitions the card for you.
Cards written for humans
Section titled “Cards written for humans”create and comment describe the intent and the outcome for a human teammate — not code mechanics, line counts, or line numbers (the code is the agent’s job). A soft check nudges the model off diff-speak, with an exception for a task that really is about a specific code detail.
When they’re active
Section titled “When they’re active”Reads (the shortcuts and every get_/list_/search tool) are available in every mode, including plan mode. Writes (every other Linear tool, and linear_start’s checkout) follow capability-as-consent: allowed interactively, denied while planning or running unattended. See Permissions & policy.
| Variable | Default | Effect |
|---|---|---|
TSFORGE_NO_LINEAR | off | withhold the Linear tools even when the server is connected (=1) |
TSFORGE_LINEAR_RAW | on | =0 hides the full mcp__linear__* toolset, leaving only the shortcuts |