A workflow waits until a round of comments has gone quiet, takes the comments it cares about, and sends them on: by email to people on the project, or as a signed HTTP request to an endpoint of yours, like an agent, Zapier, n8n or your own system. Without one, comments stay in the dashboard.
The Workflows tab is for owners and admins. Reviewers never see it.
Choose or create a workflow
The project’s workflows are listed with their state, and the one selected shows its flow on a canvas. New asks for a name and an optional description. A new workflow has no steps and is off; its canvas opens on Add a step.
Add its steps
The canvas reads left to right: When it runs, Which comments it takes, then its steps. Click a node to open its settings beside the canvas. Add a step offers Email and HTTP request; Slack, Microsoft Teams, Linear and Jira are listed as coming soon. Changes are marked Unsaved until you press Save; Discard drops them. Once a step is saved, the switch turns the workflow on.
Test it
Test runs what is on the canvas, saved or not. Pick the comments to run it on, then Preview to see the exact email or request without sending anything, or Send test to send it now. Each step says how it went.
When a workflow runs
A workflow runs once the project has been quiet for the time set on When: no new comment or reply. Every new comment or reply starts the wait again, so a round of review goes out as one. The wait is 5 to 1440 minutes.
Which comments narrows what it takes. Everything set must hold:
| Setting | What it keeps |
|---|---|
| Written by | Anyone; Reviewers, everyone but the project’s owners and admins (clients, review links); or The team, the owners and admins |
| On pages under | Pages whose route starts with this, like /checkout. Empty: every page |
| On branches | The branches you tick. None ticked: every branch |
| Open comments only | Leaves out resolved comments |
A reply goes with the comment it answers. A workflow switched on starts from that moment: it does not send the comments written while it was off.
Every project starts with one workflow, Email digest: 15 minutes after the last comment, one email for the round to the project’s owners and admins, and the workspace’s. You can change it, turn it off or delete it like any other.
Steps
A workflow has up to ten steps. Each one has Send: Once per round, all the round’s comments together, or Once per comment, each comment on its own, which is what an agent or a tracker takes as a task. A new Email step sends once per round, a new HTTP request once per comment.
The review digest’s email, to people on the project: everyone with a role you tick (Owners, Admins, Reviewers), and the people you pick by name. There are no outside addresses. Each person can switch these emails off in their settings or from the email itself; see Notifications.
HTTP request
A signed POST to an endpoint of yours, with the comments as JSON. Send to picks one of the project’s endpoints, or a new one: an HTTPS Endpoint URL and an optional name. Several steps and workflows can share an endpoint.
The endpoint’s settings show its signing secret, which you can reveal, copy and rotate, and when it last delivered. Every request carries these headers:
| Header | What it is |
|---|---|
Feedback-Signature |
t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<body>">, signed with the endpoint’s secret. Refuse a t more than five minutes off |
Feedback-Delivery |
The delivery’s id, the same on every retry, so you can drop duplicates |
Feedback-Event |
What the body holds: one comment or a round |
Feedback-Test |
true on a test |
Source locations and screenshots leave the product only if you turn them on: Include source locations and Include screenshots (links valid 7 days) are off by default.
A receiver can report back what it did with each comment: accepted, in progress, done or rejected, with a note and a link. The report shows in the comment’s drawer under Reported by workflows, and in the workflow’s history. It never resolves the comment: that stays a person’s call.
Testing
The test panel runs on one of three sets of comments:
- Latest comments: up to five that its filter would take.
- Sample comments: three made up, with a screenshot and a source location, for a project with none yet.
- Chosen comments: up to five open comments you pick, whatever the filter.
A test email goes only to you. A test request has "test": true in its body and the Feedback-Test: true header. A test you send is recorded in the history, marked Test. It never moves the workflow on, retries or pauses anything.
History
History, beside Workflow above the canvas, lists the runs, newest first: when, whether it was a test, how many comments and deliveries, and how it went (Done, Delivering, Partly failed or Failed). Open a run to see each delivery: who or where it went, how many tries, the HTTP status and the start of the answer, and what the receiver reported. Retry sends a failed delivery again.
When something fails
An HTTP request that gets a timeout, a 408, a 429 or a 5xx is tried again after 1 minute, 5 minutes, 30 minutes, 2 hours and 6 hours. Any other 4xx fails at once. A redirect counts as a failure.
After five failed deliveries in a row, or three in a row over 24 hours with no success, the endpoint is marked Failing and the workflows that send to it are Paused. Owners and admins see a banner on the workflow and get a notification in the bell. Fix the receiver, then press Resume: it tests the endpoint first, then sends what failed and what arrived while it was paused.
| State | Meaning |
|---|---|
| On | Runs after each quiet round |
| Off | Switched off. It needs a saved step to be turned on |
| Paused | Stopped because its endpoint kept failing. Resume starts it again |
| Failing | On, but an endpoint it sends to is failing |