Signals
For instructions on how to authenticate to use this endpoint, see API overview.
Endpoints
PATCH | |
DELETE | |
POST | |
POST | |
POST | |
POST | |
POST | |
GET | |
GET | |
POST | |
POST | |
GET | |
GET | |
GET | |
GET | |
POST | |
GET | |
GET | |
GET | |
GET |
Update signals scout config
Tune one scout: change its schedule (rolling run_interval_minutes, or a cron run_cron_schedule that takes precedence when set), enabled, emit (dry-run) posture, network_access (trusted-domain allowlist vs full access for the scout's sandbox), or output destinations. skill_name is fixed. Enabling records enabled_by and is activity-logged since it drives spend.
Required API key scopes
signal_scout:writePath parameters
- idstring
Request parameters
- display_namestring
- enabledboolean
- emitboolean
- run_interval_minutesinteger
- run_cron_schedulestring | null
- output_destinations
- structured_output_schemaobject | null
- network_access
- modelstring | null
- auto_pause_exemptboolean
- tagsarray
- mcp_gateway_server_idsarray
- repositoriesarray
- write_scopesarray
- precheck_querystring | null
- precheck_disabledboolean
- suggestion_idstring
- lifecycle_lockedboolean
- allowed_mcp_toolsarray | null
- tool_preset
Response
Example request
PATCH /api /projects /:project_id /signals /scout /configs /:idExample response
Status 200 Updated config.
Status 400 Invalid fields, or enabling would exceed the project's enabled-scouts maximum.
Status 404 Config not found for this project.
Delete signals scout config
Delete one scout config by its id, removing the per-(team, skill) schedule/emit row outright. The point is cleaning up an orphaned config whose skill was archived or deleted — it lingers in list with an empty description, never runs (the coordinator skips it and the skill can't load), but can't otherwise be removed over the API. Deletion is activity-logged. Note: auto-registration only scans live signals-scout-* skills, so a config deleted for one of those is back on the coordinator's next tick. A scout under any other name does not come back on its own: its config stays deleted until you re-register it, and its skill still reads as a scout meanwhile. To retire a live scout, archive its skill (or set enabled=false to make it inert) rather than deleting the config. A scout whose scout_role is operational cannot be deleted: it is part of the self-driving system rather than the project's own fleet.
Required API key scopes
signal_scout:writePath parameters
- idstring
Example request
DELETE /api /projects /:project_id /signals /scout /configs /:idExample response
Status 204 Config deleted.
Status 400 This scout is operational and cannot be deleted.
Status 404 Config not found for this project.
Create signals scout config precheck
Run a scout's pre-check query once and return its rows, without starting a run and without saving anything. The query gets the same {since} and {now} values the next scheduled run would get, so the result says whether that run would start or skip. Pass precheck_query to try a query before you save it, or omit it to try the effective one: the saved query, or the default the scout's skill ships. A query error comes back in the error field with a 200, because a scheduled run treats it as a reason to run.
Required API key scopes
signal_scout:readquery:readPath parameters
- idstring
Request parameters
- precheck_querystring | null
Response
Example request
POST /api /projects /:project_id /signals /scout /configs /:id /precheck_testExample response
Status 200 What the pre-check returns now, and whether a scheduled run would start.
Status 400 The scout has no saved pre-check and the request gives no query.
Status 404 Config not found for this project.
Create signals scout config
Dispatch one on-demand run of this scout immediately, regardless of its schedule. Useful to test a scout right after authoring it, or to refresh its findings on demand. The run executes asynchronously on the worker and inherits every guard the scheduled path has: it is forbidden if scouts are not enabled for the project (403), and skipped if self-driving is paused at the project's pull request limit, or the project is over its daily report limit or daily run budget (429), or a run for this scout is already in progress (409). A manual run counts against the same daily run budget as scheduled runs, so repeated manual runs of the same scout can exhaust the project's daily allowance. A manual run does not change the scout's schedule or last_run_at. A disabled scout can still be run this way (to test before enabling). Pass an optional note to steer this one run without leaving a scout note that would steer every later run too. Returns immediately with the workflow id: poll the scout's runs for the result.
Required API key scopes
signal_scout:writePath parameters
- idstring
Request parameters
- notestring
Response
Example request
POST /api /projects /:project_id /signals /scout /configs /:id /runExample response
Status 202 A run was dispatched. It executes asynchronously; poll the scout's runs for the result.
Status 400 The note is longer than the limit.
Status 403 Signals scouts are not enabled for this project, or the caller may not steer a run with a note.
Status 404 Config not found for this project (or the scout is withheld).
Status 409 A run for this scout is already in progress.
Status 429 Self-driving is paused at the project's pull request limit, or the project is over its daily report limit or its daily scout run budget; try again later.
Create signals scout config
Run a prompt, model, or effort variant against live data with private memory and report capture.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Request parameters
- launch_idstring
- context_idstring
- variantstring
- skill_bodystring
- modelstring
- reasoning_effortstring
- notestring
Response
Example request
POST /api /projects /:project_id /signals /scout /configs /:id /trialExample response
Status 202
Create signals scout config trial comparison
Freeze variants and the reviewed rubric, then run scouts and judge their results in the background.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Request parameters
- comparison_idstring
- baseline_variant_idstring
- variantsarray
- notestring
- expected_skill_versioninteger
Response
Example request
POST /api /projects /:project_id /signals /scout /configs /:id /trial_comparisonExample response
Status 202
Create signals scout config trial comparison
Hide a finished trial from history or restore it without deleting results or starting any work.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Request parameters
- comparison_idstring
- archivedboolean
Response
Example request
POST /api /projects /:project_id /signals /scout /configs /:id /trial_comparison_archiveExample response
Status 200
Retrieve signals scout config trial comparison
Read recent comparisons, including those saved before any scout run started.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Query parameters
- cursorstring
- include_archivedbooleanDefault:
false - limitintegerDefault:
30
Response
Example request
GET /api /projects /:project_id /signals /scout /configs /:id /trial_comparison_historyExample response
Status 200
Retrieve signals scout config trial comparison
Read comparison progress and its saved report without starting any scout or judge calls.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Query parameters
- comparison_idstring
Response
Example request
GET /api /projects /:project_id /signals /scout /configs /:id /trial_comparison_resultExample response
Status 200
Create signals scout config trial comparison
Recover the same comparison without repeating saved scout runs or judge attempts.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Request parameters
- comparison_idstring
Response
Example request
POST /api /projects /:project_id /signals /scout /configs /:id /trial_comparison_resumeExample response
Status 202
Create signals scout config trial evaluation
Freeze rubric and evidence, then judge explicit variant groups without changing production scouts.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Request parameters
- evaluation_idstring
- baseline_variant_idstring
- variantsarray
- rubric_source
Response
Example request
POST /api /projects /:project_id /signals /scout /configs /:id /trial_evaluationExample response
Status 202
Retrieve signals scout config trial evaluation
Read saved scores, criterion evidence and baseline differences without starting model calls.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Query parameters
- evaluation_idstring
Response
Example request
GET /api /projects /:project_id /signals /scout /configs /:id /trial_evaluation_resultExample response
Status 200
Retrieve signals scout config trial
Read recent private runs for the requesting operator in the internal comparison editor.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Query parameters
- limitintegerDefault:
30
Response
Example request
GET /api /projects /:project_id /signals /scout /configs /:id /trial_historyExample response
Status 200
Retrieve signals scout config trial
Read a trial's existing run status and its privately captured reports and memory changes.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Query parameters
- launch_idstring
Response
Example request
GET /api /projects /:project_id /signals /scout /configs /:id /trial_resultExample response
Status 200
Retrieve signals scout config trial
Read comparison readiness and source settings for the internal comparison editor.
Required API key scopes
signal_scout:writellm_skill:writePath parameters
- idstring
Query parameters
- context_idstring
Response
Example request
GET /api /projects /:project_id /signals /scout /configs /:id /trial_setupExample response
Status 200
Create signals scout config
Materialize the scout fleet for this project on demand (idempotent): seed the canonical signals-scout-* skills, create a default-schedule config for any scout lacking one, retire the skills whose canonical scout no longer ships, and return all scout configs. Normally the Temporal coordinator does this on its next tick; this action exists so the scout UIs and setup flows (e.g. the wizard's self-driving program) can hand the user a tunable fleet immediately. With surface=onboarding, new configs stay disabled until explicitly activated.
Required API key scopes
signal_scout:writeQuery parameters
- surfacestringOne of:
"roster""desktop""wizard""onboarding"
Example request
POST /api /projects /:project_id /signals /scout /configs /syncExample response
Status 200 The team's full scout fleet after the sync, ordered by skill name.
Retrieve signals scout config tool
List every MCP tool a scout could be configured with. Each entry carries the tool's name, label, one-line summary, category, and required scopes, plus holdable: whether a scout run can hold every scope the tool needs, and missing_scopes: what it would have to be granted on top of the baseline preset. The response also returns the scout scope presets and the write scopes a person can grant to one scout, so a caller can show why a tool is out of reach. Tools a successor has replaced are left out. A tool can carry a feature_flag, which resolves per project: evaluate it for the project you are configuring before you offer the tool. Read-only, and the same for every project.
Required API key scopes
signal_scout:readResponse
Example request
GET /api /projects /:project_id /signals /scout /configs /tool_catalogueExample response
Status 200 Every catalogued MCP tool, with the scout scope postures to read it against.
List all signals scout members
Return the people who can review work on this project — one row per member with access to it, each with their user_uuid, email, first_name/last_name, resolved GitHub login (null when they have no linked GitHub identity), and the teams they're on. The cold-start reviewer-routing path: when a finding's owner can't be read off a fetched entity's created_by and there's no cached reviewer:<area> memory or inbox precedent, list members, match the owner by email/name, then put their resolved github_login in suggested_reviewers on emit-report / edit-report. Pass team to resolve a team slug to the people on it, maintainers first. Pass search to narrow a large roster; the result is capped at 200. Strictly team-scoped.
Required API key scopes
signal_scout_internal:readQuery parameters
- searchstring
- teamstring
Example request
GET /api /projects /:project_id /signals /scout /membersExample response
Status 200 The project's members, each with their routing identity.
Retrieve signals scout metadata
Return the project's scout metadata: whether it is enrolled, the current announcement banner (e.g. an alpha run-limit notice, or null when unset), and the enforced run limits with current usage. Limits reflect what the coordinator actually applies at dispatch, so a user can see the real throttle rather than what they assume they set. All values come from the signals-scout flag payload, so the banner and caps can change with no deploy.
Required API key scopes
signal_scout:readResponse
Example request
GET /api /projects /:project_id /signals /scout /metadata /currentExample response
Status 200 This project's scout enrollment, announcement banner, and enforced run limits.
List all signals scout notes
Return the steering notes left for this project's scouts, newest first. Pass skill_name to get the notes addressed to one scout (or one pipeline audience, e.g. pipeline:report-research) plus the general (blank-target) fleet-wide notes — the shape a scout run reads at cold start. Omit skill_name to browse every note. Expired notes are excluded unless include_expired=true. date_from / date_to are a half-open window on created_at (>= date_from, < date_to); pass date_to (the created_at of the oldest note seen) to walk past the cap. Pass text to keep only the notes whose content contains it, case-insensitively. Results capped at 500.
Required API key scopes
signal_scout:readQuery parameters
- content_max_charsinteger
- date_fromstring
- date_tostring
- include_expiredbooleanDefault:
false - include_generalbooleanDefault:
true - limitinteger
- skill_namestring
- textstring
Example request
GET /api /projects /:project_id /signals /scout /notes










