TL;DR
We built a network of six AI agents in Notion that automate the end-to-end lifecycle of product release communication. From identifying release candidates in Jira, to formatting release notes, tracking bugs and features, notifying stakeholders via Slack and email, and generating monthly change logs. What used to take hours of manual coordination now runs largely on autopilot.
The Problem
Phorest ships product updates on a biweekly release cycle. Before automation, coordinating release notes involved:
- Manually scanning Jira for qualifying items
- Copy-pasting ticket details into Notion pages
- Formatting release notes by hand
- Posting summaries to multiple Slack channels
- Tracking which bugs and features went live outside the standard cycle
- Compiling monthly changelogs after the fact
This was repetitive, error-prone, and ate into time better spent on actual product work.
The Solution: Six Agents, One Pipeline
1. Jira Release Candidates Creator
Every Tuesday, queries our Jira-synced database for items that meet release-candidate criteria (customer impact, release status, due dates, beta end dates, go-live windows). Creates or updates a Release page in our GTM Release Notes database, and automatically updates the Release Phase property to "Locked In" or "Published" at the right points in the cycle.
Trigger: weekly recurrence, Tuesdays at 12:00 PM. Logic: 2-week release cycle. On Day 0 (14 days before release) creates a new page. On Day 7 syncs the existing page with any new qualifying items and @mentions the next agent.
2. Jira Release Notes Formatter
When a Release page is created (or @mentioned), reads the raw list of Jira items and transforms it into a polished, two-column release notes layout, complete with team labels, Jira links, descriptions, and placeholder images.
3. Jira Monthly Changelog Generator
On the 1st of each month, queries all Published release items from the previous month, groups and summarises them, creates a "What's New" changelog page, and posts a highlight summary to Slack.
4. Slack Product Bug Tracker
Runs daily at 9:00 AM to check for Jira bugs marked as "Done". New bug fixes are added to a dedicated Bug Tracker database and a summary is posted to #product-bug-tracker. Duplicate prevention via Jira ID matching.
5. Slack Product Release Tracker
When a release pack's phase changes to "Locked In" or "Published", posts a detailed summary to Slack and sends an email notification. Includes the full page content and related Jira items as a thread reply. The phase change is now set automatically by Agent 1, so this agent fires without any manual intervention.
6. Slack Product Feature Tracker
Runs daily to find Jira items that have gone "Live" but aren't part of the standard biweekly release cycle (Issue Type = "Product Update" & "Requires GTM process" = No). Added to a Feature Tracker database and announced in #product-feature-tracker.
How the Agents Chain Together
Three of the agents form an automated pipeline that runs on every release cycle:
- Jira Release Candidates Creator builds the candidate list and automatically sets the Release Phase → triggers
- Jira Release Notes Formatter formats the page → and when the phase changes, automatically triggers
- Slack Product Release Tracker posts to Slack and sends email notifications
The remaining three, Monthly Changelog Generator, Bug Tracker, and Feature Tracker, run independently on their own schedules, covering the gaps that a biweekly cycle can't.
Results
| Before | After |
|---|---|
| Manual Jira scanning every 2 weeks | Automatic candidate detection with smart date-window queries |
| Hand-formatted release notes | Consistent, templated formatting in seconds |
| Ad-hoc Slack posts when someone remembered | Automatic notifications on every release phase change, bug fix, and feature launch |
| Monthly changelogs compiled retroactively | Auto-generated on the 1st of every month |
| Features shipping outside the cycle going unnoticed | Daily tracking and Slack announcements |
What We Learned
- Keep each agent focused. One job per agent makes debugging and iteration much simpler.
- Use triggers to chain agents rather than building one monolithic workflow. More resilient, if one agent fails, the others still run.
- Duplicate prevention is critical. Every agent that writes to a database checks for existing records first.
- @mention as a trigger is a powerful pattern. It lets agents call each other and gives humans a manual override.
- Diff-based sync prevents duplicates and keeps databases accurate across multiple runs.