- title
- Product signal intake - two-session PostHog to Linear
- kind
- sop
- triggers
- tools
Standard Operating Procedure: Product signal intake
Two sessions. One MCP profile each. A human gate before any Linear create.
This is the contract text for product-signal-intake. Skills that should load it later (pointer story, not this file): agent-posthog (Session A), agent-user-stories and agent-prd (Session B), agent-orchestrator (route, do not invent a product-insights skill), agent-debug when the row is a bug.
SDK wiring and empty-events proof stay on posthog-product-analytics. Filing tickets stays on linear-ticket-workflow in Session B only.
Session A — wk mcp posthog
- Install one profile:
wk mcp posthog --install(or--project). Do not stack PostHog ontodefault. - Query the set below. Write a findings table into
~/.agents/handover/<project>/using templates/posthog-findings.md. Ifhandover_posthog.mdalready records SDK wiring, add a PostHog findings heading rather than wiping that handover. - Do not create Linear issues in this session. Do not call Linear MCP. Stop at the handover.
- Restore
wk mcp default --install(or--project) when Session A ends, even if filing happens later.--installreplaces the default profile (Linear is gone until restore). The same chat can continue Session A after OAuth; do not stack PostHog ontodefault. - If the nominated consumer has no dedicated PostHog project, query the org project that actually ingested events. Name hosts from web stats, not tokens. Classify mixed-host ingest as its own row when traffic is not one site.
projects-getand the MCP active-environment blurb may include a project API key. Never copy it into the handover, memory, or chat tables.
Human gate
The operator marks which rows to file. Unconfirmed rows stay skip. No agent creates Linear work from usage, a timer, or an unconfirmed table. If the operator asks to wrap up or finish intake without filling the Operator column, treat the Session notes recommended file/skip as confirmed. Blank rows that were not recommended stay skip.
Session B — wk mcp default
- Confirm the profile is
default(wk mcp default --install/--project) so Linear is available. - File only confirmed rows:
- bug → agent-debug (or the empty-events checklist on the PostHog SOP if events never arrived).
- contract and size sitting → agent-user-stories.
- bet or size epic → agent-prd, then INVEST children.
- skip → leave the row, no ticket.
- Play one Linear issue after it exists. Do not invent a product-insights specialist.
Query set (Session A)
| Look for | Treat as until classified |
|---|---|
| Errors / error clusters | bug |
| Empty or dropping events | empty-events checklist, then bug or skip |
| Funnel drop-offs | contract or bet |
| Flag exposure vs leading indicator | bet if the flag is still a timeboxed experiment |
| Timeboxed bets due | confirm or kill via stories + prune, not a new skill |
Evidence window: date range and event names. Never paste phc_ keys, project API secrets, or person identifiers into the handover.
Findings columns
Every row: signal, evidence window (no project keys), kind (bug / contract / bet / skip), size (sitting / epic), proposed next agent.
Saved prompts
Paste in order. They match the diagram: Intake → File → Play.
Intake (Session A)
Session A: wk mcp posthog --install. Run product-signal-intake. Query errors, empty or dropping events, funnel drop-offs, flag exposure vs leading indicator, and timeboxed bets due. Fill templates/posthog-findings.md in the project handover. Do not create Linear issues. Restore wk mcp default when done.
File (Session B, after the human gate)
Session B: wk mcp default --install. File only operator-confirmed rows from the PostHog findings handover. Bug → agent-debug. Sitting contract → agent-user-stories. Bet or epic → agent-prd then stories. Skip the rest. Do not invent a product-insights skill.
Play
Play one confirmed Linear issue from the filed rows. Claim it In Progress, stay on main, leave the tree uncommitted.