How do I get Claude Code to ship framework migrations from tickets that live in GitHub Issues?
Tares lets you keep framework migration tickets in GitHub Issues while a crew of Claude Code sessions builds them into pull requests. You label the issues, link the repo to a Tares project, and bring up the crew. Tares reads the issues about once a minute and never writes to GitHub. Sessions create and change the issues with gh.
How it works
- One repo and one label pick the tickets. Every issue that carries the issue label becomes a ticket named
GH-<number>, with its title and status. The label defaults to tares: followed by the project name. - Status follows the issue. An open issue is
todo, an open issue with thein progresslabel isin_progress, an issue closed as completed isdone, and one closed as not planned or as a duplicate iscanceled. - Milestones group the migration. GitHub milestones that the labeled issues belong to become Tares milestones. You write each milestone’s goal and acceptance checks in Tares. Add or reorder milestones in GitHub, because Tares cannot add them.
- Dependencies carry over. An issue that is blocked by another makes its ticket depend on that one, and a ticket that waits on others shows as blocked on them in the project’s Tickets fold.
- Working docs stay yours. Tickets are read-only in Tares, but each ticket’s working doc is written in Tares, as for any ticket.
- The crew builds them. The orchestrator starts builders per milestone and repo. Each takes a ticket, works on its own branch, opens a pull request, and merges it once the reviewer passes it and CI is green. See A project, end to end for a real run.
Set it up
-
Check that Claude Code is signed in, that
ghis signed in with write access to the repos the crew works in, and thatgit,jqandcurlare installed. Sign in toghwith thereposcope on the machine that runs the sessions:gh auth login --scopes repo -
Install the CLI and start Tares locally:
uv tool install tares # or: brew install glassflow/tap/tares tares up # console on http://127.0.0.1:8787 -
In a second terminal, start the MCP endpoint every crew session shares:
tares mcp --transport streamable-http # http://127.0.0.1:8788/mcpOn Tares Cloud you run
tares logininstead and there is no MCP endpoint to start. -
Add a GitHub credential in Settings > GitHub that can read the repo’s issues. A fine-grained token needs the repo with Issues: read, a classic token needs the
reposcope, and a GitHub App needs the Issues permission and an installation on the repo. On Tares Cloud, choose Connect GitHub. -
Bring up the crew:
tares factory crew up -
Plan the migration project in the repo it builds on:
tares factory spec "what you want to build"When the interview starts, say the tickets should live in GitHub Issues and name the repo. Claude creates one issue per ticket with
gh, applies the label, and links the project. Put each migration step in its own issue and group them with GitHub milestones. -
To link an existing repo yourself, click Use GitHub Issues on the project’s Tickets page and pick the repo and label. A connected agent can do the same with the MCP tool:
link_github_issues(repo="acme/shop", issue_label="tares:shop") -
In Tares, write each milestone’s goal and checks, and add a working doc to each ticket. Answer the crew’s questions with
tares factory crew attach orchestrator.
A project that already has tickets of its own, or that keeps them in Linear, cannot be linked. See Get started for the full setup.
What you get
- Tickets that stay in your tracker, where your team already reads and edits them. Closing an issue as completed moves the ticket to
donewithin about a minute. - Acceptance checks on each milestone and a working doc on each ticket, both kept in Tares next to the project.
- Dependencies from blocked-by links, so a ticket that waits on another shows as blocked.
- Pull requests that the reviewer holds to a fixed bar, and that merge once the reviewer passes them and CI is green.
- Events on the
github_issuessource for each change (ticket_created,ticket_renamed,ticket_status,ticket_removed), so triggers and agents can react to them. - A record that survives changes in GitHub. An issue that loses the label, is deleted or moves repos becomes
canceledin Tares, so its working doc stays reachable.
The GitHub Issues connector page covers the sync in full. If a sync fails, the Tickets page shows why, the tickets stay as they were, and nothing is canceled.
When something else fits
- If you want to change titles, statuses or milestones from Tares, use Tares tickets, or click Stop using GitHub on the Tickets page to return the tickets and their working docs to Tares. The issues in GitHub stay as they are.
- The link covers one repo and one issue label per project, github.com only, up to 1000 labeled issues and 100 milestones, and no GitHub Projects boards. If your migration spans more than that, split it across projects or keep the tickets in Tares or Linear.
- For a small migration,
tares factory sessionbuilds it in your own Claude Code session without the crew.
Related
- Build a software factory with Claude Code
- How do I get Claude Code to ship framework migrations from tickets that live in Tares itself?
- How do I get Claude Code to ship bug fixes from tickets in GitHub Issues?
- How do I get Claude Code to ship bug fixes from tickets that live in Tares itself?
Still stuck? Get help