Guide · Verified October 31, 2026

Paseo target guide

Short answer: A Hooks destination POSTs one manual-run dispatch to Paseo Hub (on: manual.run) with project, trigger, actor, and rendered input. Hub answers 200 with a triggerRunId that Hooks records on the delivery.

Paseo Hub runs agents from deployed triggers; Hooks turns third-party events — including sources Paseo does not support natively, like Linear, Sentry, or Stripe — into manual-run dispatches. Three Hub-side prerequisites decide success: a deployed manual.run trigger, an actor on its from_users list, and an online daemon.

1. Prepare the Hub side

The project's active Hub configuration needs a trigger with on: manual.run, deployed with paseo hub deploy. The actor you will configure in Hooks must be listed in that trigger's filters.from_users or Hub rejects the dispatch with 403. A registered daemon must be online; an offline daemon yields 409. Create an organization API key with the runs:dispatch scope — Hub shows it once.

2. Store the API key

Settings → Security → Project secrets → add PASEO_HUB_KEY holding the key (paseo_pk_...). Configs accept only {{secret.PASEO_HUB_KEY}}; literal keys are rejected and resolved values are redacted from recorded headers and bodies.

Destination config

{
  "hubUrl": "https://hub.paseo.sh",
  "key": "{{secret.PASEO_HUB_KEY}}",
  "projectSlug": "acme",
  "trigger": "triage",
  "actor": "hooks",
  "input": "title={{event.subject.title}}\n{{event.subject.url}}"
}

3. Shape the input

input renders against the normalized event; leading key=value tokens become declared inputs and the remainder is the prompt. It defaults to title, body truncated to 2000 chars, and URL. An empty rendered input fails with EMPTY_PASEO_INPUT before anything is sent.

Request Hooks sends

POST https://hub.paseo.sh/api/v1/manual-runs
Authorization: Bearer paseo_pk_...
Content-Type: application/json

{
  "projectSlug": "acme",
  "trigger": "triage",
  "actor": "hooks",
  "deliveryKey": "dlv_abc123",
  "input": "title=Login fails on Safari\nhttps://linear.app/acme/issue/APP-7"
}

4. Track runs and fix rejections

deliveryKey is the Hooks delivery id: unique per dispatch and stable across retries, so Hub deduplicates retried deliveries. On 200, Hooks records triggerRunId on the delivery for correlation. 403 means the actor is not in from_users; 409 means no daemon is online; 429/5xx retry with backoff honoring Retry-After.

Frequently asked questions

Why 403 on dispatch?

The configured actor is not in the trigger's filters.from_users. Add it to the trigger, redeploy with paseo hub deploy, and retry the delivery.

Why 409 on dispatch?

No daemon that can run the trigger is online. Bring one up and retry — the same deliveryKey keeps Hub from double-running after a retry.

How do I find the run from an event?

The delivery log records triggerRunId on success. Search the run id to reach the source event, or start from the event to list every run it triggered.

Which sources work with Paseo via Hooks?

Any Hooks source — GitHub, Stripe, Slack, Linear, generic HMAC, and later Sentry — including ones Paseo does not ingest natively. Hooks normalizes before dispatch, so the trigger sees one input shape.

Reference

Keep going