Skip to content

feat(signals): add "Run with note" option to the scout Run now button #115210

Open

Description

@andrewm4894

Problem

On a scout's detail page, Run now dispatches a run with no steering. To point a one-off run at something ("check the checkout regression from this morning"), you have to leave a durable scout note. Every later scheduled run then reads that note too, until someone deletes it or it expires.

The backend already supports a note that applies to one run only. SignalScoutManualRunRequestSerializer.note is optional and capped at MAX_RUN_NOTE_CHARS (1,000). The MCP scout-run-now tool uses it. The UI never sends it.

Proposal

Add a dropdown side action to the Run now button in ScoutDetailHeader.tsx. It opens a "Run with note" option.

  • Run now (main click) works the same as today and sends no body.
  • Run with note opens a small dialog with:
    • A textarea with a live character count, capped at 1,000 to match the backend.
    • Helper copy: the note steers this run only. Later runs don't read it, but it stays in this run's history. It directs the scout's attention and doesn't force a finding.
    • A Run button that keeps the loading and disabled state the current button already has.
  • Submitting calls signalsScoutConfigRun(teamId, configId, { note }).

Implementation notes

  • scoutFleetLogic.runScoutNow takes an optional note and passes it through. The manualRunScoutIds loading state stays as it is.
  • Use the LemonButton sideAction dropdown pattern (see ImplementButton.tsx).
  • Permissions: a run with a note needs skill editor access, plus llm_skill:write on a scoped credential. Without it the endpoint returns 403. Disable the "Run with note" item with getAccessControlDisabledReason(AccessControlResourceType.LlmSkill, AccessControlLevel.Editor), as the Publish button already does. Plain Run now stays available.
  • Analytics: keep actionType: 'run_now' and add extra: { has_note: boolean, note_length }, so we can tell how often people steer runs.
  • Errors: no change. Budget and already-running errors still show the backend message in a toast.

Out of scope / follow-up

  • Show run_note in the run history and run detail UI. It's stored in run metadata but not rendered yet, so a person can't see why a run looked at something.

Acceptance criteria

  • Clicking Run now behaves exactly as before.
  • Run with note dispatches a run with the note, and that run's metadata.run_note holds the note.
  • Notes over 1,000 characters can't be submitted.
  • Users without skill editor access see a disabled reason on Run with note, not a 403.
  • The run_now event records whether a note was sent.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions