mcp-servers
Install, configure, authenticate, and troubleshoot MCP (Model Context Protocol) servers for…
Signals scout for PostHog workflows. Looks at the workflows whose owner asked for suggestions, reads each email step's per-version delivery metrics, and proposes one concrete change a person can approve, filed through the workflows suggestions API. It files no report and emits
$ npx -y skills add posthog/posthog --skill signals-scout-workflows --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/signals-scout-workflowsContext preview
The summary Claude sees to decide when to auto-load this skill.
Signals scout for PostHog workflows. Looks at the workflows whose owner asked for suggestions, reads each email step's per-version delivery metrics, and proposes one concrete change a person can approve, filed through the workflows suggestions API. It files no report and emits
name: signals-scout-workflows scout-display-name: Workflows description: > Signals scout for PostHog workflows. Looks at the workflows whose owner asked for suggestions, reads each email step's per-version delivery metrics, and proposes one concrete change a person can approve, filed through the workflows suggestions API. It files no report and emits no signal: the suggestion on the workflow page is the output. compatibility: > PostHog Signals agent (Claude sandbox). Read-only analytics + signal_scout_internal:write (scratchpad) + hog_flow_proposal:write (declared below, granted to this scout only), plus the workflows tools in the MCP tools section. The suggestion tools exist only on projects with the `self-optimising-workflows` flag; hold the scout back from a team with the `signals-scout` flag's `withheld_skills` until the project has it. Deliberately on neither output channel - see "Why this scout files no reports". metadata: owner_team: workflows scope: workflows
You suggest changes to workflows their owner already asked you to look at, and you never make one. A suggestion becomes a draft only when a person approves it, and reaches anyone only when they publish that draft. That gate is the product; your job is to make what lands in front of them worth reading.
The discriminator is **a step whose own numbers say it underperforms, where the change you would make is the thing those numbers point at**. An email step opened by 8% of the people who could open it, with a subject line running to 90 characters, is signal. A step with 12 sends, or one whose opens look low because half its sends have tracking off, or one whose real problem is that a fifth of its mail bounces, is not — the first has no sample, the second has a measurement artefact, and the third has a deliverability problem that rewriting copy makes worse.
You produce **at most one suggestion per workflow per run**. A queue of five suggestions for one workflow is a queue nobody reads.
Call `workflows-list` with `optimization_enabled=true` — the work list, the workflows whose owner turned on "Suggest improvements". The list comes back a page at a time, so keep advancing `offset` until a page returns fewer rows than you asked for; a project with more opted-in workflows than one page holds is otherwise read as if the rest were not there. Read it before looking at any workflow: the opt-in is what keeps a run from spending anything on workflows nobody asked about, and it only does that if you check it first. A 404 from a suggestions endpoint means the project does not have this feature at all, so close out immediately — nothing you do next can land. If the list is empty, nobody has asked for this here. Write one scratchpad entry:
Close out empty. Re-running with the same key refreshes the timestamp. Never suggest against a workflow that is not on this list — the API refuses it anyway, with `workflow_not_optimized`.
A workflow with a suggestion still `suggested` is waiting on a person, not on you. A step whose suggestion was `applied` already got its change: let that version collect its own feedback before suggesting again, and read its outcome first. A step whose suggestion was `rejected` is a human saying no: do not re-file the same idea in different words. A rejected suggestion stays rejected however many times the workflow is published since: `is_stale` reads against the version live now, not against the version the person was looking at, so it cannot tell you the idea went unjudged.
Per workflow, `workflows-version-stats` with `version=<the workflow's current version>`, `breakdown_by=name`, and `instance_id` set to the email step you are reading. `workflows-stats` gives every version of that workflow merged together, which cannot tell you whether the last change helped. The metrics that matter:
| Metric | Reading | | -------------------------------- | ------------------------------------------------------------------------ | | `email_sent` | Everything that went out. The denominator for bounce and complaint rates | | `email_untracked` | Sends with open/click tracking off. They can never record an open | | `email_opened` | Opens. Divide by `email_sent - email_untracked`, never by `email_sent` | | `email_link_clicked` | Clicks. Same denominator as opens | | `email_bounced`, `email_blocked` | The counter-metrics. Read them before proposing anything about copy |
**Feedback arrives after the send, so read a version that has had time to answer.** A send is counted the moment it goes out; an open or a bounce is counted when the pixel or the provider reports it, which for most people is hours later and for some is days. Reading both from the same window therefore understates every rate at the window's leading edge, and a version published yesterday reads as a copy problem for no other reason than that.
So end the read before now, and check the version's age before you trust it:
:hedgehog: PostHog is the leading platform for building self-driving products. Our developer tools – AI observability, analytics, session replay, flags, experiments, error tracking, logs, and more – capture all the context agents need to diagnose problems, uncover opportunities, and ship fixes. Steer it all from Slack, web, desktop, or the MCP.
Repo: posthog/posthog
Install, configure, authenticate, and troubleshoot MCP (Model Context Protocol) servers for…
Designs and runs task-specific JavaScript harnesses with the `workflow` tool. Use for broad,…
How and when to delegate work to subagents via the `subagent` tool (Explore, Plan, General).…
Explains what a member or a role can do in a PostHog project, using the access control MCP…
Analyze the most expensive users in AI observability and explain why they cost so much. Use…
Author continuously-running online evaluations in PostHog AI observability, grounded in real…