How a tree becomes branches
Each parent issue owns one grouping branch. Its children target that branch, and the structure nests as deeply as your issue tree does. Branches are created the first time a child actually runs, not when you mark the tree. If branch creation fails for any reason, the run falls back to targeting your default branch — a grouping problem never blocks the work itself.Marking a tree
You can mark the whole tree at once. The ordering rules below sequence it for you.- Linear
- Jira
Apply the
AI-Implement label to the parent and to every child you want worked on.Children without the label are ignored, so you can roll a tree out incrementally — label two children now, the rest later.Marking a parent before its children is safe. A parent that has children but none marked yet is left alone rather than being treated as ordinary work — so it won’t be implemented prematurely while you finish marking.
When each issue runs
A parent can carry work of its own — a final cleanup, a piece of integration — that isn’t part of any child. That work is deliberately held until every child is finished, so it builds on top of them rather than racing them.
Rolling completed work back up
As each parent’s branch completes, its work is merged up into its own parent’s branch automatically — no pull request, because an intermediate review step would just be noise. The exception is the top of the tree. That one becomes a pull request into your default branch, for a human to review, and it is never merged automatically. Its description lists every issue that went into it. Merge that final pull request however you like — merge commit, squash, or rebase all work. The orchestrator notices it merged, deletes the grouping branch, and marks the top issue done.Merging child pull requests automatically
By default every child pull request waits for a human, same as any other. Turning on Auto Merge for a project changes that: child pull requests are merged into their grouping branch once they’re ready. A child is merged only when all of the following hold:- It targets a grouping branch — never your default branch
- It isn’t a draft
- Its checks have finished, and passed
- No reviewer has requested changes
A run whose automated review found blockers opens its pull request as a draft. Because auto-merge skips drafts, flagged work is never merged past you even with the setting on.
autoMerge in the project mapping reference.
Naming the grouping branch
Grouping branches are namedai-implement/feature/<issue-key> by default. A parent issue can choose a different path segment by embedding a configuration block in its description:
ai-implement/multi-issue/<issue-key> instead. The two modes differ only in the branch name — everything else about grouping behaves identically.
The block is recognized by its first line being exactly # ai-implement.yml; the fence language doesn’t matter. AI-Implement strips the block from the description before the agent sees it, so it never gets mistaken for part of the work.
Before you rely on grouping
1
Make sure your target repo has current workflow files
Grouping sends child pull requests to a branch other than your default, which the target repo’s workflow file must accept. If the repo hasn’t been synced in a while, use the Sync workflows action on its project row in the admin UI.
2
Make sure the runner callback is reachable
A tree advances on its own only if planning can complete, which depends on runners being able to call back to the orchestrator. On a purely local orchestrator that callback can’t be reached, so the cascade won’t self-drive.