Merged PRs move tickets and post a digest
Every merged pull request is matched to its ticket, the ticket moves forward with a comment naming the PR, and the team gets one daily summary of what shipped.
- Starts
- Pull request merged
- Steps
- 4
- Checks and gates
- 0
- A person decides
- Never, runs alone
Trigger · Event
Pull request merged
A merge fires the run as it lands, so the board reflects it before anyone asks where it got to.
Claude runs the rest autonomously
- 1
AI lists the day's merged pull requests.
Every pull request merged in the last day, across every repo that matters, is listed.
- 2
AI matches each PR to its ticket.
LinearLinear
Each pull request is paired with its ticket, by an explicit reference first and a careful keyword match against open tickets otherwise.
- 3
AI moves each matched ticket forward.
LinearLinear
Each matched ticket gets a comment naming its PR and moves one step when merged, further when confirmed live.
- 4
AI posts one summary of what shipped.
SlackSlack
The team gets one short message a day, grouped by repo, naming what shipped and where it stands.
Keeping a board honest against what actually shipped is a standing chore: someone has to remember which PR closed which ticket, click into each one, move it, and then separately tell the team what landed. On a busy day, the last part is the first one to get skipped.
Both halves already exist as data. A code host like GitHub already knows exactly what merged and when; an issue tracker already knows every open ticket's status. The work is reading one, matching it to the other and writing back, the same join every day, at whatever hour nobody wants to do it by hand. That makes it a natural job for an AI agent sitting between the code host and Linear.
What you get
Every merged pull request is reflected on the board, the matching ticket moves forward with a comment explaining why, and the team gets one short summary of what shipped.
What the merged pull request automation reads
The run lists every pull request merged in the last day, across every repo that matters, with its title, description and merge time. The code host is read through access the assistant already has; it is not something Tulina connects to. The issue tracker and the team messaging tool are the two connections made in Tulina.
The lookback stays short on purpose, a day rather than a week. That is what makes the run idempotent: triggered twice by accident, the second pass re-confirms what the first already did instead of reprocessing a growing backlog.
Matching each pull request to its ticket
The first place to look is the pull request itself. Most PRs opened against a real ticket mention it somewhere in the title or description, and that explicit reference is a fast, precise match.
Without one, the agent compares the PR title against the team's open tickets by keyword, and takes that match only when it is genuinely confident. Matching discipline is where this earns trust or loses it: a wrong match moves the wrong piece of work forward, and the person who notices is rarely the one who ran the automation. An unmatched PR leaves the board alone and still appears in the summary, so nothing merges silently.
None of that matching is specific to Linear. An explicit reference first and a careful keyword fallback second works the same way against whichever tracker the assistant can reach.
Moving tickets forward, and only forward
Before changing anything, the agent reads the ticket's current state. A ticket already further along than "code merged" would suggest (in review, waiting on a specific person, already shipped) stays exactly where it is. The job is catching the board up, never overriding a call a human made more recently than this run.
Every move is preceded by a comment naming the specific pull request, with its title and link. A status that changes with no trace of why is indistinguishable from a status that is wrong.
The target state follows what is actually known. Merged is one signal; confirmed live in a preprod or staging environment is a stronger one, and the agent does not claim it without checking. Some repos deploy the moment a pull request lands on the main branch, others need a separate step first, and the two are easy to conflate unless each repo is checked. Telling them apart is what keeps "Done" meaning done.
One summary of what shipped
The team gets one short message in Slack, grouped by repo, skipping repos with nothing merged. Each pull request appears with its title, its ticket if it has one, and whether it is merged or confirmed live.
On a day when nothing merged anywhere, the message says that too. A routine that stays quiet on a quiet day is indistinguishable from one that is broken.
The prompt
The real prompt behind the steps above, detailed enough that an agent with the same tools can run it as written. The Run buttons copy the full version, which also carries the steps for connecting those tools.
# Turn merged into Slack notif and ticket update
You have access to issue tracking and team messaging, plus your own read
access to wherever your team's code lives (most coding assistants already
have this — a code host isn't something Tulina connects to). Run this
for **[your repos]**.
## 1. List the day's merged pull requests
- Pull every pull request merged in the last day, across every repo that
matters — title, description, and merge time.
- Keep the lookback window short (a day, not a week). That's what makes
this idempotent: run it twice by accident and the second pass just
re-confirms what the first already did, instead of re-processing a
growing backlog.
## 2. Match each PR to its ticket
- Check the PR title and description first for an explicit ticket
reference — most PRs opened against a real ticket mention it
somewhere, and that match is fast and precise.
- If nothing explicit turns up, compare the PR's title against your
team's open tickets by keyword. Only take this match if you're
genuinely confident — a wrong match is worse than leaving a PR
unmatched, since it moves the wrong piece of work forward.
- A PR with no confident match still counts for the summary in step 4 —
it just doesn't touch the board.
## 3. Move each matched ticket forward
- Before changing anything, read the ticket's current state. Never move
a ticket backwards, and never touch one that's already further along
than "code merged" would suggest.
- Leave a comment naming the specific PR — title and link — before
changing status. A status that changes with no trace of why is
indistinguishable from a status that's wrong.
- Decide the target state from what you actually know: merged alone is
one signal, confirmed live in your preprod or staging environment is a
stronger one. Don't claim the stronger one without checking — some
repos deploy the moment a PR lands on the main branch, others need a
separate step first, and the two are easy to conflate if you don't
check per repo.
## 4. Post one summary of what shipped
- One short message, grouped by repo, skipping repos with nothing
merged.
- For each PR: title, the ticket it maps to if any, and whether it's
just merged or confirmed live.
- If nothing merged anywhere today, say that too — a routine that stays
quiet on a quiet day is indistinguishable from a routine that's
broken.
## Output
Report: how many PRs found, how many matched to a ticket, how many
tickets moved, and anything skipped and why.
Why run it with Tulina
A prompt helps one person. A process moves a team.
Pasted into a chat, the prompt above works once, for whoever pasted it. In Tulina, "Merged PRs move tickets and post a digest" becomes a process the team shares, that keeps its history, runs on its own, and stays inside the same security perimeter as the tools it calls.
The whole team works on the same one
PersonalTeamOrganisation
A process lives where it belongs: yours, your team's or the whole organisation's. Whoever runs it can improve it, and everyone starts from the best version instead of explaining the job again.
Every edit is a version
v1v2v3
Each change is a new version with the previous one kept, so a bad edit is undone by restoring an earlier one. Every run records the version it followed, and what a run teaches goes back into the process.
It runs without you
schedulewebhookon demand
A hosted agent runs the process on Tulina's own infrastructure, on a schedule or when an event arrives, and keeps going when you close the chat. Nothing to host. Every run is tracked to its outcome.
Inside the same security perimeter
vaultrolesrun log
Credentials stay in the vault, never in the prompt. Roles decide who may run what, every call is logged, and a step a person has to approve waits for that person.
Questions about updating tickets from merged pull requests
Also on Linear
Other processes that run mainly on Linear. The tools they share with this one are lit.
Call feedback becomes tickets and docs
Every call recorded in the day is distilled overnight, with bugs and feature requests routed to the right team as tickets and docs, plus a Friday digest.
- Shares
- Linear, Slack
Nightly schedule5 steps →
Triage and route bug reports
An incoming report is read, matched against open issues to catch duplicates, and filed to the right team's board with severity attached.
- Shares
- Linear, Slack
New bug report5 steps →