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

  1. Install one profile: wk mcp posthog --install (or --project). Do not stack PostHog onto default.
  2. Query the set below. Write a findings table into ~/.agents/handover/<project>/ using templates/posthog-findings.md. If handover_posthog.md already records SDK wiring, add a PostHog findings heading rather than wiping that handover.
  3. Do not create Linear issues in this session. Do not call Linear MCP. Stop at the handover.
  4. Restore wk mcp default --install (or --project) when Session A ends, even if filing happens later. --install replaces the default profile (Linear is gone until restore). The same chat can continue Session A after OAuth; do not stack PostHog onto default.
  5. 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.
  6. projects-get and 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

  1. Confirm the profile is default (wk mcp default --install / --project) so Linear is available.
  2. File only confirmed rows:
    • bugagent-debug (or the empty-events checklist on the PostHog SOP if events never arrived).
    • contract and size sittingagent-user-stories.
    • bet or size epicagent-prd, then INVEST children.
    • skip → leave the row, no ticket.
  3. Play one Linear issue after it exists. Do not invent a product-insights specialist.

Query set (Session A)

Look forTreat as until classified
Errors / error clustersbug
Empty or dropping eventsempty-events checklist, then bug or skip
Funnel drop-offscontract or bet
Flag exposure vs leading indicatorbet if the flag is still a timeboxed experiment
Timeboxed bets dueconfirm 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.

Markdown source