provider signals POST /api/projects/{project_id}/signals/scout/runs/{run_id}/emit-report/
@utdk/posthog /api/projects/{project_id}/signals/scout/runs/{run_id}/emit-report/
Author a full report for a run
The second emit channel: author a complete `SignalReport` directly instead of emitting a weak signal. The report passes the safety judge, then surfaces at the status the scout's `actionability` call implies (or is suppressed). Backing `evidence` is written as bound signals so the report behaves like a pipeline report. NOT idempotent — a retry authors a second report; use `reports` to find a prior report and `edit-report` to update it instead.
project_id path required
Project ID of the project you're trying to access. To find the ID of the project, make a call to /api/projects/.
string
run_id path required
UUID of the `SignalScoutRun` bridge row.
string

Try it

Authentication
Configure credentials for PostHog API
signalsScoutEmitReport
POST/api/projects/{project_id}/signals/scout/runs/{run_id}/emit-report/
The second emit channel: author a complete `SignalReport` directly instead of emitting a weak signal. The report passes the safety judge, then surfaces at the status the scout's `actionability` call implies (or is suppressed). Backing `evidence` is written as bound signals so the report behaves like a pipeline report. NOT idempotent — a retry authors a second report; use `reports` to find a prior report and `edit-report` to update it instead.

Parameters

required

Project ID of the project you're trying to access. To find the ID of the project, make a call to /api/projects/.

required

UUID of the `SignalScoutRun` bridge row.

Input

required

One-line report title the inbox shows. Conventional-commit style (`type(scope): description`, e.g. `fix(insights): missing series color`) renders with type/scope styling.

required

The report body the inbox shows. Markdown is supported (headings, lists, code, links; images are not rendered). Lead with one plain declarative sentence — the inbox card uses your first line verbatim as the headline (~140 chars, emphasis stripped), then renders the full markdown in the detail view.

required

The observations backing the report — each becomes a bound signal. At least one.

required

2-3 sentence evidence-grounded justification for the actionability call below.

required

The scout's actionability call: `immediately_actionable` -> the report surfaces READY; `requires_human_input` -> PENDING_INPUT; `not_actionable` -> suppressed. A safety-judge failure suppresses the report regardless. * `immediately_actionable` - immediately_actionable * `requires_human_input` - requires_human_input * `not_actionable` - not_actionable

Whether the issue already appears fixed in recent changes (tracked separately).

Optional repo for autostart (opening a draft PR): `owner/repo` targets that repo, the `NO_REPO` sentinel opts out (report lands without a PR), and omitting it triggers free-form selection across the team's repos — the slow path on a many-repo team, so pass `owner/repo` when you know it.

Optional priority (`P0`-`P4`). Required for autostart; pair with `priority_explanation`. * `P0` - P0 * `P1` - P1 * `P2` - P2 * `P3` - P3 * `P4` - P4

2-3 sentence justification for `priority`. Required when `priority` is set.

Optional reviewers to route the report to (each a `github_login` and/or `user_uuid`). This is the primary way a report reaches a human — the inbox floats a reviewer's own reports to the top of their inbox even when no PR is involved — so set it whenever you can name a plausible owner. It also gates autostart: a PR opens only if at least one reviewer clears their autonomy threshold.

Configure credentials above to enable sending.

Code snippet
Updates live as you fill in the form above.

TypeScript

import posthog from '@utdk/posthog';

await posthog.signalsScoutEmitReport({
  "already_addressed": false
})