Errors, alerts and email, arriving as work an agent can take.

Point Sentry, PostHog, an email or your own code at Passalong and each one becomes a piece of work, with what was sent quoted in it. The reader gives it a title, a summary and a label such as bug, and sends it to the group that should act. It arrives Ready, so whoever it is for can take it at once.

Your addresses

In the hub, open Settings → Integrations and choose Get your addresses. You get one key, written two ways: key+new@in.passalong.dev and the webhook URL https://passalong.dev/v1/in/key. To put what arrives on a team's board, name the team: key+new+team@… or …/v1/in/key?team=team, with &to=@handle or #group if you like; the hub's copies already carry the team you are in.

key+new@
Anything: an alert, a forwarded email, a screenshot shared from a phone. The reader names it and sends it to the right group.
/v1/in/key
The webhook URL, for Sentry, PostHog and your own code. Sorted the same way as email.

Mail to the bare key@, or any other +word, is dropped. New addresses replaces the key, and every old address and URL stops working at once.

Email

Give an address to anything that sends email (an uptime monitor, a form, a colleague) or add it as a BCC where your backend sends mail. To pass on one email, forward it from your own address. For mail you cannot change, forward it from Gmail: add the address under Settings → Forwarding; Gmail's confirmation code shows up in Integrations as a sender, and a filter does the rest.

A sender's first email to +new makes nothing. It appears under Asking to email you work, with a notification, until you allow or block it. Mail from your own confirmed address is allowed from the start. Nothing is ever bounced.

Sentry

In Sentry, open Settings → Developer Settings → Custom Integrations and create an Internal Integration. Paste your webhook URL as its Webhook URL. Under Webhooks, tick issue for every new issue, or turn on Alert Rule Action and add the integration to an alert rule to send only what the rule picks.

issue
Created, or unresolved (it came back). One piece of work per Sentry issue.
event_alert
An alert rule fired. Merges with the issue it is about.
error
Every error, if you tick it. Merges by issue, so it is noisy but not a flood.
metric_alert
Warning or critical.
everything else
Resolved, assigned, comments and the installation ping are answered and ignored.

The work quotes the issue's title, level, culprit, project and link. Ignored events still get a 200, because Sentry turns off a webhook that keeps failing.

PostHog

In PostHog, open Error tracking → Configuration → Alerting, add an HTTP Webhook for issues created, paste your webhook URL and leave the body as it is. Use Test function, then Create & enable. A destination that sends $exception events works the same way. One PostHog issue stays one piece of work.

Your own code

POST JSON to a URL. Only title is required. Send the same id again and it adds to the open work instead of making a new one; without an id, the same title with different numbers counts as the same thing.

curl -X POST "https://passalong.dev/v1/in/<key>?repo=acme/api" \
  -H 'content-type: application/json' \
  -d '{
    "title": "Checkout returns 500",
    "text": "500s since 09:12 on POST /checkout",
    "url": "https://grafana.example.com/d/checkout",
    "id": "checkout-500"
  }'

An unknown key answers 404, a body that is not JSON 400, and anything over 1 MB 413.

Which repo it is for

An agent asking for work with no id is only offered work for the repo it is in, so work needs one before an agent finds it on its own. Add ?repo=owner/repo to the URL, one Sentry or PostHog project per repo, and what it sends arrives pointed at it. Otherwise choose the repo on the work's page, which suggests the repos your work and agents already use. Add ?team=<slug> to put what arrives on that team's board; without it, it is yours alone. Work with no repo is still taken when an agent is given its id.

What it will and will not do

  • What was sent is quoted into the work by code, as evidence, never as instructions.
  • Repeats add to the open work: a count, and at most one note an hour on its thread.
  • The key in the address is the credential. Sentry's request signature is not checked yet; replace the key if one leaks.