惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Last Watchdog
The Last Watchdog
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
G
GRAHAM CLULEY
S
Schneier on Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
S
SegmentFault 最新的问题
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
Recorded Future
Recorded Future
I
Intezer
云风的 BLOG
云风的 BLOG
博客园 - Franky
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
T
Tenable Blog
The Hacker News
The Hacker News
T
The Blog of Author Tim Ferriss
Attack and Defense Labs
Attack and Defense Labs
D
DataBreaches.Net
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
N
News and Events Feed by Topic
有赞技术团队
有赞技术团队
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
N
News and Events Feed by Topic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
S
Secure Thoughts
The Register - Security
The Register - Security
B
Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
The Cloudflare Blog
Webroot Blog
Webroot Blog
W
WeLiveSecurity
H
Heimdal Security Blog
博客园 - 三生石上(FineUI控件)
V
Vulnerabilities – Threatpost
G
Google Developers Blog
O
OpenAI News
V
V2EX
罗磊的独立博客
博客园_首页
N
News | PayPal Newsroom
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
TaoSecurity Blog
TaoSecurity Blog
Cloudbric
Cloudbric
H
Hacker News: Front Page
博客园 - 叶小钗
T
Tor Project blog
AI
AI

PostHog's RSS Feed

Training our own AI models - PostHog From 270GB RAM to 5GB: Moving local flag evaluation from Django to Rust The best analytics stack for vibe-coded apps The do's and don'ts of minimum viable product marketing - PostHog The best MCP servers for startups, by workflow 4,063 errors closed without a human opening PostHog – here's what we learned - PostHog PostHog Code and the self-driving product - PostHog Why attacking your competitors online is dumb - PostHog The best real-time analytics platforms for developers, compared DuckDB vs ClickHouse: Why we use both at PostHog - PostHog PostHog's next chapter - PostHog Making Claude Cowork actually useful - PostHog PostHog vs Matomo in-depth tool comparison You're doing lifecycle emails wrong Untangling Tokio and Rayon in production: From 2s latency spikes to 94ms flat The best HIPAA-compliant A/B testing tools - PostHog A beginner's guide to testing AI agents - PostHog I hate the standup bot (so I built an agent to do it for me) - PostHog The best CDPs for developers, compared The best error tracking tools for developers, compared The best feature flag software for developers, compared 7 best session replay tools for mobile apps 7 best free open source business intelligence tools right now 7 best free and open source LLM observability tools PostHog vs LogRocket in-depth tool comparison The most popular PostHog alternatives, compared Open source (and self-hosted) session replay tools - PostHog The 9 best GA4 alternatives for apps and websites - PostHog PostHog vs Google Analytics 4 in-depth tool comparison How we built automatic clustering for LLM traces - PostHog The 7 best HIPAA-compliant analytics tools 8 best open source analytics tools you can self-host - PostHog The best product analytics tools for startups, compared PostHog vs FullStory in-depth tool comparison The best in-app survey tools for product teams, compared The 7 best mobile app analytics tools PostHog vs Hotjar in-depth tool comparison The 8 best free and open-source feature flag services - PostHog The 5 best free and open-source A/B testing tools - PostHog The best mobile app A/B testing tools, compared What is a feature flag? Feature Flags vs Remote Config vs A/B Testing PostHog is now available in Vercel’s v0 The best Heap alternatives & competitors, compared PostHog vs Heap in-depth tool comparison PostHog vs Pendo in-depth tool comparison PostHog × Vercel: feature flags, minus the plumbing Your logs' final destination is in GA. You always end up here anyway Behind the scenes of a PostHog hackathon - PostHog The most popular Mixpanel alternatives & competitors, compared PostHog vs Mixpanel in-depth tool comparison The 9 best GDPR-compliant analytics tools How we use Logs at PostHog The best web analytics tools for developers, compared Stop AI slop: Run evals with LLM-as-a-Judge - PostHog You product data just got a job: Workflows is now out App onboarding: How to fix drop-off points Meet Logs (beta) – logs with all the tools you’re already using Why small teams crush tiger teams How we built user behavior analysis with multi-modal LLMs (in 5 not-so-easy steps) - PostHog The best Contentsquare alternatives & competitors, compared 8 learnings from 1 year of agents – PostHog AI - PostHog Why we killed our AI product assistant Workflows graduate to beta! Product data, meet automation The best Rollbar alternatives & competitors, compared Workflows are now in Alpha and I already broke mine - PostHog I've consistently underestimated how important communication is as a CEO - PostHog How we made feature flags even faster and more reliable The best session replay tools for developers, compared What I learned attending my first ever hackathon - PostHog Did you know AI is answering our community questions? - PostHog How not to be boring - PostHog We built an internal tool to generate changelog images for social media - PostHog What we built at our windswept Mykonos hackathon - PostHog How we built our onboarding email flow (with actual performance data) - PostHog We're building a better PostHog community by closing our public Slack - PostHog Introducing Notebooks for PostHog - PostHog Why we've launched PostHog user surveys - PostHog How we made feature flags faster and more reliable - PostHog In-depth: ClickHouse vs Redshift - PostHog Introducing HouseWatch: An open-source toolkit for ClickHouse - PostHog Introducing HogQL: Direct SQL access for PostHog - PostHog What we built at our sun-kissed Aruba hackathon - PostHog In-depth: ClickHouse vs BigQuery - PostHog In-depth: ClickHouse vs Elasticsearch - PostHog HogMail #22: Why do companies over-hire?" - PostHog Our simpler goal: Help engineers to be better at product - PostHog In-depth: ClickHouse vs Snowflake - PostHog HogMail #21: Avoiding the "Product Death Cycle" - PostHog Sunsetting Kubernetes support for PostHog - PostHog Why 'Product Engineer' is the most fun role I've had in tech - PostHog HogMail #20: Why do startups fail? - PostHog The best Google Optimize alternatives for apps and websites - PostHog Array 1.43.0: Massive performance improvements! - PostHog In-depth: ClickHouse vs Druid - PostHog HogMail #19: Which meetings should you kill? - PostHog CEO diary: The things I learned in 2022 - PostHog The essential tools used by product engineers - PostHog HogMail #18: What can SaaS learn from the New York Times? - PostHog What is a product engineer? - Product Engineer Handbook - PostHog Array 1.42.0: Get beta features via our roadmap! - PostHog
What is a Scout?
Andy Maguire · 2026-06-23 · via PostHog's RSS Feed

A scout is a small agent (don't overthink that word) that looks at, wrangles, and makes sense of any data available in PostHog. It's a core component of Self-driving in PostHog (now in open beta), an autonomous loop that monitors your product for patterns and drafts fixes.

A scout's job is to emit useful signals – things worth knowing – that you or your agents can act on. Sometimes that action happens automatically, like an agent opening a PR to fix what the scout found, sometimes it needs some human judgement before you and your agent can tackle it together.

A scout is, at its core, a skill – and that skill is the main interface everyone works through, human or agent. The business logic that used to be a sprawl of if/else branches and helper functions now starts life as a few hundred lines of English anyone can read, write, and improve (obligatory Karpathy tweet).

Andrej Karpathy's tweet: "The hottest new programming language is English"

You can't get away with this for every data pipeline – plenty still needs determinism – but where you have the flexibility, the trade-offs are increasingly worth it.

This post walks through how scouts work in PostHog, with two real scouts we run on our own project – one that watches agent-driven MCP feedback, and one that watches what the internet says about us.

This is the deep dive. If you just want the short version, the Self-driving docs walk the whole self-improving loop – scouts, signals, reports, and the inbox – at a glance.

If you just want to see scouts in action, skip to Two example scouts, explained end to end – there's an ~8 minute video walkthrough of a real scout run there too.

The scout's role in PostHog's self-driving pipeline

Scouts don't live on their own, they feed our self-driving product pipeline:

  1. A scout runs on a schedule, looks at some slice of your PostHog data, and decides whether anything is worth surfacing.
  2. If it is, the scout emits a signal – a semi-structured finding with evidence, and a suggested action.
  3. Signals get picked up by the self-driving pipeline, grouped, and turned into reports that land in your PostHog Inbox.
  4. Reports get actioned – by you, or automatically by a PostHog Code task that picks up the report and ships a fix or improvement.

A report can be made up of many signals from many sources. Scouts are just one of those sources.

A single report – say "this MCP tool keeps blowing the token budget" – might be assembled from a scout finding, error tracking, a few raw events, and a health check, all grouped together because they're about the same underlying problem.

Scouts are one (agent-pilled) way PostHog Self-driving detects there's something to do at all. They help make your product self driving by automating routine papercuts (great for full automation), so you can focus more on strategic judgement work (firmly human still).

There are really only two parts to a scout: the skill that holds all the logic (mostly markdown), and a thin harness that runs it on a loop. Here's each in turn.

Your pipeline can be (mostly) markdown

In a traditional data pipeline, the logic that decides "is this interesting?" lives in code: thresholds, if/else branches, helper functions, a scheduler, a pile of glue. Changing what you care about means a code change, a review, a deploy. This is still needed, but for more subjective and flexible pipelines, the agent-pilled approach can offer many benefits.

With a scout, almost all of that logic lives in a skill – a markdown file (at a minimum) the agent is told to read and operate by. The skill is where you encode your business knowledge: what's normal, what's noise, what's worth waking a human for.

What used to be if response_rate < 0.3 and sample_size > 30: is now a sentence like "a flagship NPS survey needs ≥30 responses/week and a ≥10% score drop before it's worth acting on." That's trivially easy to iterate on and sense check with your agents, and you don't need to be an engineer to do it.

You can be as prescriptive as you like, but in many cases you can just tell the agent what you care about, give it a goal, and let it handle the actual logic. You can then fine tune your agent as it runs by adding dos and don'ts, and other parameters that guide its approach.

Everything else – the loop, the sandbox, the scheduler, the memory – is deliberately thin plumbing around that skill. The scout harness prompt, for example, is already too long at 200-ish lines – I need to chip away at that!

"A markdown file" is the lowest possible bar to entry – and for a lot of scouts it's genuinely all you need. But a scout is also a full Agent Skill, so it scales up the same way any skill does. The SKILL.md is the entry point, and a more complex scout can bundle reference files the agent loads on demand and runnable example scripts for the parts that genuinely want code.

So the spectrum runs from "a few sentences of English" up to "a skill with reference docs and executable scripts" – and the nice part is you start at the easy end and only reach for the heavier machinery when a particular scout actually needs it.

The really nice thing here is that it's easy to get a feel for this as you can just ask your agent how a scout is performing for your project using the exploring-signals-scouts skill we ship with the PostHog AI Plugin.

Or even easier just press one of the suggested questions here on the scouts page in PostHog Code. "Make a scout" will use the authoring-signals-scouts skill, scan your project and suggest some custom scouts for you.

The scouts page in PostHog Code, with suggested questions for exploring and making scouts

The scout harness

We have a scout harness (yes, I used "harness" – cross it off your bingo card) that is really just a small layer running your scout skills in an agentic loop.

flowchart TB Coord["Coordinator<br/>~30 min tick"] Coord -->|per scout| Harness subgraph Harness["Scout harness"] direction TB Skill["SKILL.md"] --> Loop(["agent loop"]) Loop --> MCP["<b>PostHog MCP</b><br/>read your data"] Loop --> Scout["<b>scout tools</b><br/>- profile<br/>- scratchpad<br/>- emit"] end Harness -->|findings| Pipe subgraph Pipe["Self-driving pipeline"] direction LR Sig["signal"] --> Buf["buffer"] --> Grp["grouping"] --> Rep["report"] --> Act["action"] end style Coord fill:#1d4aff,stroke:#1535b3,color:#fff style Harness fill:#f9f9f9,stroke:#d0d0d0,color:#333 style Skill fill:#f54e00,stroke:#c43d00,color:#fff style Loop fill:#ffeb9c,stroke:#d9b441,color:#333 style MCP fill:#e8f0fe,stroke:#1d4aff,color:#333 style Scout fill:#eafbe7,stroke:#3aa655,color:#333 style Pipe fill:#fafafa,stroke:#e0e0e0,color:#333 style Sig fill:#fff,stroke:#999,color:#333 style Buf fill:#fff,stroke:#999,color:#333 style Grp fill:#fff,stroke:#999,color:#333 style Rep fill:#fff,stroke:#999,color:#333 style Act fill:#f54e00,stroke:#c43d00,color:#fff

The main ingredients are:

IngredientWhat it is
Agent loop runnerThe thing that actually pumps the loop (runner.py, arun_signals_scout()).
Tools for the agentMostly just the PostHog MCP – the same one you can connect to Claude Code or Cursor today. The aim is to build as little custom code as possible; the agent reads your data through the exact tools anyone else gets.
SandboxAn environment to run the loop in, with a project-scoped token so it can only touch the data it's allowed to.
MemoryAnother bingo word – don't overthink it. Lets a scout be more than a goldfish that forgets everything between runs (see the scratchpad tools).
SchedulerRuns the loop regularly. We use Temporal: a coordinator ticks every ~30 minutes, finds which scouts are due (most run hourly), and fans out one run per scout (see the coordinator code).

The bulk of what actually makes a given scout is its skill – the markdown the agent is told to follow. There are a few small config knobs too (how often it runs, whether it's allowed to emit yet), exposed via the scout-config MCP tools.

The "special" tools that make a scout more than a one-shot loop

On top of the normal read-only MCP, a scout gets a handful of scout-only tools:

ToolWhat it doesCode
emit-signalPush a finding into the pipelineRead code
scratchpad read/writeA simple, durable, per-project memoryRead code
past runs & project profileLets a run see what previous runs already found and avoid repeating itselfView code

That's it. The scout reads existing inbox reports and prior runs through plain MCP tools; the only genuinely privileged things it can do are write to its scratchpad and emit signals.

Dogfood it yourself, then let PostHog run it

Because a scout is just a skill plus the MCP, you can run one manually in any agent surface where the PostHog MCP is available – PostHog Code, Claude Code, Codex, Cursor, whatever.

This is a key feature, not an accident: you can dogfood a scout on your own project, watch it work against your real data, and tweak the scout until it's good – grounded in actual usage and the pain points you hit on the way.

The thing that's a little different – and makes all the difference – is what happens when PostHog runs your scouts for you.

On the scheduled, sandboxed runs, the scout is allowed to maintain its scratchpad and emit signals into the pipeline. That permission is what turns a stateless one-shot loop into a long-running agent that learns, adapts, and evolves as your data does – while you steer it just by maintaining the one skill it runs.

The hard part of a scout isn't finding things. It's not finding things. A scout that emits on every wobble is worse than no scout at all, because it trains you to ignore them.

So the interesting logic in a scout skill is mostly about restraint, such as:

  • A sense of when to speak up. A scout's skill tells it to only emit when it's confident the finding is real and worth your attention – otherwise it writes a note to its scratchpad and moves on. Exactly how that bar is expressed is up to each scout, and it's a convention rather than a hard gate, so you can tune how trigger-happy a given scout is.
  • Dedupe keys. Findings carry stable keys so the pipeline can group repeats and the scout can recognize "I already said this."
  • Disqualifiers. Explicit lists of things that look like signal but aren't: a single user, a dev-environment burst, a survey at the natural end of its window, an internal test response.
  • Severity (P0–P4) so downstream routing knows what's a five-alarm fire versus a nice-to-fix.
  • ...anything else you decide!

Here's the contrast that makes it concrete. On our brand-mentions scout, a lone "PostHog is down" tweet – no detail, no corroboration, one account – got held below the bar.

The same week, a "PostHog is getting expensive" complaint that showed up from multiple independent voices got emitted as a pricing-perception theme. Same surface, opposite decisions, and the reasoning for both is written in plain English in the skill and the scratchpad.

The scratchpad: How a scout remembers

The scratchpad is a simple key/value store the scout reads at the start of a run and writes to as it goes. It's deliberately low-tech, but it's where the "learning" actually lives. Over time a scout grows a small, legible memory made of a few entry types:

ElementWhat it is
A rolling cursor"I've processed everything up to timestamp X" – so the next run doesn't re-read the same data
Below-bar carriesThings not (yet) worth emitting, each with an explicit promote trigger: "emit this if a second independent voice echoes it"
Dedupe / addressed entries"I already emitted this theme on June 9; don't re-emit unless it escalates past this bar"
An evolving tag taxonomyThe scout curates its own vocabulary for categorizing findings
Cross-linksEntries reference each other with [[wiki-style links]], so the memory is a little graph, not just a flat list

Again you can steer your scout to take a different approach to memory here as works best for you.

This is the second half of the markdown thesis: not only did the if/else become English, the database row became a scratchpad note the agent reads and rewrites every run. You can read a scout's entire scratchpad and understand exactly what it knows and why it's been quiet.

A scout is 99% a skill, so making one is mostly writing (and iterating on) a skill. You don't do that by hand – you have your agent use the authoring-signals-scouts skill, which walks it through the anatomy: the emit contract, dedupe and memory conventions, disqualifiers, and the schedule config.

PostHog ships with around 20 canonical scouts out of the box – they live in products/signals/skills/. Here's a sample and high-level things they look for:

ScoutWhat it looks for
signals-scout-experimentsValidity threats like sample-ratio mismatch and zombie experiments
signals-scout-revenue-analyticsMRR/churn shifts and broken Stripe syncs
signals-scout-surveysNPS/CSAT regressions plus recurring themes in open-text responses
signals-scout-web-analyticsAcquisition channels diverging, attribution breakage, 404 spikes
signals-scout-feature-flagsEvaluation cliffs, ghost flags, and flag debt

You can also write your own custom scouts for anything you care about – again, just point your agent at authoring-signals-scouts. Here are some internal ones we've built recently to dogfood the system:

ScoutWhat it watches
signals-scout-mcp-feedbackFeedback that AI agents file about our MCP server
signals-scout-brand-mentionsWhat people say about PostHog across the internet
signals-scout-discord-feedbackOur community Discord, for bugs and feature requests
signals-scout-self-improvementThe other scouts – flags ones that are miscalibrated or broken

And to see how your scouts are doing, there's (you guessed it) an exploring-signals-scouts skill – it surveys the fleet, reads recent runs, inspects the scratchpad, and assesses each scout's health.

This is all a little hand-wavy so far, so let's trace two real scouts we run on our own project – one at the bottom of the self-driving product pyramid (an auto-fixable code paper-cut) and one nearer the top (judgment work a human owns).

Prefer to watch? Here's an ~8 minute walkthrough of a real run of the MCP feedback scout below – me clicking through an actual scout run end to end, from what it read to what it emitted.

1. The MCP feedback scout (the code one)

signals-scout-mcp-feedback (you can see it's a fairly simple skill) watches a single event: mcp feedback submitted.

When an AI agent (Claude Code, Cursor, etc.) hits friction using our MCP – a confusing schema, a tool that returns the wrong thing, a missing capability – it can file a structured report via the MCP's own agent-feedback tool.

That report becomes an event. The scout's job is to turn that low-volume, high-signal stream into actionable findings for the MCP team.

Here's one finding the whole way through that pipeline – a single agent's gripe becoming a PR. Each hop is a box: skim the summaries for the shape, or pop one open to see the actual artifact.

Step 1: An agent files feedbackview-update quietly drops the sync_frequency it advertises

On June 12th an agent set out to "set a materialized view's refresh cadence to 12 hours" – and couldn't. It filed this through the MCP's own agent-feedback tool:

What broke: view-update's description promises a sync_frequency parameter ('24hour', '12hour', '6hour', …), but its input schema has no such property and sets additionalProperties: false. Calling view-update {id, sync_frequency: '12hour'} (tried both normal and --json) returns 200 with the value unchanged – the param is silently dropped, no error. view-materialize always sets 24h and exposes no frequency arg either, so there's no MCP path to a non-default cadence.

Suggested fix: Add sync_frequency (enum 1min30day/never) to the view-update input schema so it's actually forwarded, or add a dedicated view-set-sync-frequency tool.

sentiment: negative · category: tool_input_schema · task_completed: false · via posthog-code

Step 2: The scout emits a signal – it spots the silent-drop is now blocking and re-surfaces it

The next run read that event and emitted a finding – recognizing the defect wasn't new, and that it had crossed a line:

view-update's documented sync_frequency parameter is absent from its input schema, so the value is silently dropped – and it has now hard-blocked an agent (task_completed=false), two days after we first flagged it at P3 with no fix shipped.

This is an escalation update, not a new discovery: the same defect was already emitted on 2026-06-10 at P3 – but every prior report was mixed / task_completed=TRUE (annoying but recoverable). The 06-12 report is the first negative / task_completed=FALSE. The silent drop rides the success path, so $mcp_is_error never catches it – only agent feedback surfaces it.

Fix (reporter-supplied, verbatim): Add sync_frequency to the view-update input schema so it's actually forwarded to the saved-query PATCH, or add a dedicated view-set-sync-frequency tool.

finding mcp-feedback-view-update-sync-frequency-blocks-2026-06-12 · P3 · confidence 0.74

Step 3: It becomes an inbox report – root-caused and marked immediately actionable

The pipeline turned the signal into a report, which even did the root-cause analysis:

fix(data-warehouse): expose sync_frequency in view-update MCP schema – P3, immediately actionable

Root cause: sync_frequency is declared as serializers.SerializerMethodField(), which DRF treats as read-only. That makes drf-spectacular mark it readOnly: true, so Orval omits it from the writable PATCH body, and the MCP ViewUpdateSchema never includes it. The backend actually does support the write – the serializer reads sync_frequency off request.data as a side-channel – but the generated schema can't expose what it thinks is read-only.

How to resolve: Make sync_frequency a writable serializer field so it flows into the generated PATCH body, then regenerate the MCP types; reuse the existing SyncFrequencyEnum.

Step 4: An agent opens the fixPR #63393, authored autonomously

A PostHog Code agent picked up the report and opened the PR on its own – introducing a writable SyncFrequencyField so the cadence flows into the generated PATCH body, and adding three regression tests (a writable-field guard, a round-trip update, and an invalid-value rejection).

From the PR's own agent-context section:

Authored by Claude Code (claude-opus-4-8) acting on PostHog inbox report 019ebd3a…. Decision: chose to make sync_frequency a writable serializer field over adding a dedicated view-set-sync-frequency tool – it's the minimal change that fixes the silent-drop for all clients (frontend, API, MCP) at once and follows the existing pattern. Agent-authored – requires human review; do not self-merge.

That's the whole loop this post is about: one piece of agent feedback, turned into a reproducible finding with a verbatim fix, turned into a root-caused report, and picked up by another agent – no human in the chain until review.

Those boxes trace one finding end to end. Two behaviors from this scout generalize beyond it, and both show the system learning:

BehaviorHow it works
Signals group into reportsTake a token-blowout the scout flagged in heatmaps-list: it didn't spawn a new report, it grouped into an existing one, "Add pagination and field projection to MCP list/schema tools," which was already in_progress. Multiple scout runs, over days, all noticing flavors of the same underlying problem, converging into one piece of work.
Findings escalate via memoryEarlier the same day, the scout emitted a P3 about a missing ensure_experience_continuity input – and wrote a note in its scratchpad: "promote to P2 if a second blocked report lands." When a second agent hit the same wall, the next run read that note, saw the trigger fire, and re-emitted at P2. The escalation rule isn't in any code – it's a sentence the scout wrote to itself.

2. The brand mentions scout (the non-code one)

signals-scout-brand-mentions (you can read it as a gist) watches what the internet says about PostHog. And the way it gets that data is the point.

Anything you can land in PostHog is scout-able. We pipe a social-listening tool (Octolens) into a Slack channel, and that channel is synced into the PostHog data warehouse as a regular table.

The scout just queries it with SQL like any other PostHog data. There's nothing special about "analytics events" here – warehouse sources, Slack relays, third-party feeds, all of it becomes fair game for a scout the moment it's in PostHog. This is a big part of why scouts are general-purpose rather than a product-analytics-only feature.

This scout sits higher on the self-driving pyramid than the MCP one: when it finds something, the action usually isn't a PR – it's comms, product strategy, or just situational awareness. A few real (anonymized) examples it surfaced:

FindingWhat happened
A reputational narrative escalatingA privacy claim about PostHog jumped from niche threads to a large-audience commentator, with the framing shifting to attack PostHog directly (and, notably, inaccurately). The scout emitted a P2 recommending comms/legal own the narrative – citing the two earlier, lower-severity findings it had filed about the same theme as it built.
Us, roasted, repeatedlyThe scout keeps a running "PostHog is too complex / bloated" theme – and the genuinely useful part is watching it decide what's worth your attention. Most of these never clear the bar (one voice, low reach, a matter of taste), so the scout logs each with a deadpan verdict and a "promote if a second voice echoes" trigger, and stays quiet. Pop these open for the actual public roasts – and the scout's clinical reasoning for holding them.

Pop these open for the actual public roasts and the scout's clinical reason for holding them:

🦔 "Creeped out by the hedgehog sound"

"Am I the only one who is creeped out by the hedgehog sound posthog code makes every time it finishes a task?"

The scout's note to itself: "a real shipped audio cue and the feedback is specific, but n=1, low reach, and a matter of taste → does not clear the bar at n=1. If a 2nd distinct voice complains about the PostHog Code sound, this becomes an emittable P3 (suggest a mute/volume toggle)."

"Too complicated, too much noise" – the too-complex / bloat drip

A steady multi-day trickle, all real, all public:

"Am I the only one who hates Posthog UX?"

"PostHog. Too complicated, too much noise."

"is it just me or the dashboard is so bloated now? 😭 … this thing could've been a sidebar imo"

"yeah too much useless features"

"not sure what substances @posthog employees take to have that much beef with their UI; they're constantly changing it!"

The scout's verdict: "steady multi-day drip, not a spike… all generic, low-reach, no high-reach/press voice. Held below bar. Escalate only if a high-reach voice or a tight cluster of 3+ fresh distinct voices in a single day lands." It did cross that bar once – an r/posthog "the UX is just terrible (new user rant)" thread tipped it into an emitted P3.

"Don't make the AI the first thing I see" – Max-as-landing-page

"as much as i love the posthog ai it shouldn't be the first thing i see when i go to posthog… not the thing i wanna see"

The sharp bit the scout pulled out: this isn't "AI bad." The same accounts praise it ("they cooked on that thing, it's really really good") – the gripe is specifically that the AI is the default landing screen, which is a default-setting and discoverability call (there's already an option to customize the landing screen), not a missing feature. Held below bar as a single thread.

All real, all public, all genuinely useful to know in aggregate – and all held back until they actually matter.

And this is the scout whose scratchpad best shows the memory model evolving. Across runs it has built up:

  • a pattern:brand_mentions:cursor entry it overwrites every run (the rolling "I've read up to here" mark),
  • a stack of *-belowbar carries – "a user says PostHog's bot-filtering is letting bots through; n=1, low reach – promote if a second independent voice reports the same,"
  • addressed:* entries recording every theme it's already emitted and the exact bar for re-emitting,
  • and its own tags:brand_mentions:taxonomy vocabulary, with entries cross-linked by [[name]] references.

You can read that scratchpad top to bottom and reconstruct everything the scout knows, every judgment call it's made, and why it's been quiet on the things it's chosen to stay quiet on.

That legibility – being able to audit an agent's memory in plain text – is, to me, the whole pitch.

Those two are just two shapes. The thing to internalize is that anything you can land in PostHog is scout-able, and a scout's whole job is encoded in a skill you can write in an afternoon. Some directions to steal – most of these are scouts we already run on our own project:

Use caseWhat it does
Mine any Slack channelSync a channel into the data warehouse and a scout reads it like any other table – a user-feedback channel, an internal team channel (we run one over our own #team-self-driving), an external alerting or on-call channel, even a community Discord relay. The moment it's a table, it's fair game.
Watch any custom eventScouts aren't limited to analytics events – point one at any event you capture: a custom customer-support event, a feedback submission, a domain-specific action. Internally we run separate scouts on PostHog AI thumbs-down feedback, PostHog Code task feedback, and the per-product in-app feedback widgets.
Keep an eye on what you already care aboutHand a scout a curated set of your dashboards, insights, and alerts – the metrics your team checks every morning – and have it stay quiet until one of them actually moves against its own baseline.
Own a funnel or a journeyA scout can watch your key funnels and activation flows across every PostHog feature you use, flag a conversion or retention regression against the flow's own trailing baseline – and even propose the A/B experiment to fix the weakest step.
Have it read your codebaseGive a scout a repo and a job: scan recent code changes and keep your agent skills in sync as things move, catch docs that have drifted out of date, flag a feature shipped with no instrumentation, spot a third-party API version about to be deprecated, or run a static-analysis tool over the last week's diffs.
Let it dogfood your own toolsA scout can use your product, not just read it – we run one that random-walks our own MCP tool surface and files the rough edges it hits first-hand (and once scouts can reach external MCPs, this extends to whatever you've built).
Point a scout at your scoutsA meta-scout that audits the rest of the fleet for miscalibration, plus a follow-up scout that re-checks "resolved" reports after a soak window to confirm the fix actually held.
Let findings carry real depthWhen a finding is more than a sentence, a scout can write the charts and supporting queries into a notebook and link it from the signal – the inbox stays scannable, and the full analysis is one click away.

The pattern across all of these: pick a surface you wish someone was watching, write down what "worth my attention" means for it in plain English, and let the scout hold that bar for you.

Scouts today are deliberately narrow: read your data, decide if something's worth knowing, emit a signal. That's the foundation, and keeping it small is the point. But there's a lot of obvious headroom, and a bunch of it is already on the roadmap:

DirectionWhat it means
Richer, more visual reportsRight now a scout emits a structured finding and the pipeline turns it into a report. We want scouts to produce more of that report directly – charts, embedded insights, the actual visual evidence – rather than handing off a block of text for something downstream to dress up.
Scouts that take action, not just surface itA finding is only useful if something happens. The natural next step is letting a scout do more than emit: ping you on the right channel, or take a PostHog MCP write action on your behalf – keep a dashboard tidy automatically, file an alert, tweak a flag – all within guardrails you set.
Bring your own MCPScouts read PostHog through the PostHog MCP today. There's no reason they should be limited to it. Letting a scout reach an external MCP would let it plug into the other tools and systems you already use – your issue tracker, your data stack, your on-call – so a finding can flow straight into where you actually work.
Whole units of work, not just PRsA real change is rarely one PR. It's the PR plus a tracking dashboard, the feature flag to roll it out, the alert to watch it, and an experiment to prove it worked. The ambition is for a scout (and the agents downstream of it) to assemble that whole collection, not just the code.
Right-sized modelsA scout watching for a simple threshold breach doesn't need the same horsepower as one reasoning across products. Letting simpler scouts run on cheaper, faster base models keeps the fleet economical as it grows.
Smarter triggersScouts run on a schedule today. Time is the simplest trigger, but not always the right one – we want scouts that wake on the event that matters (a deploy, a spike, another scout's finding) instead of just waiting for the next tick.

The pattern here is to lean in and embrace being agent pilled, keep the core tiny and the skill in charge, and let scouts climb the self-driving pyramid – from noticing, to recommending, to doing.

Scouts are still rolling out gradually and are invite-only for now while we shake out the rough edges – wider access is coming soon. If you want in early, email team-self-driving@posthog.com and we'll get you set up.

Once they're available to you, the home base is PostHog Code, our desktop coding agent – download it, sign in, and the PostHog MCP is wired up for you. From there you can navigate to the Agents section and explore the set of canonical scouts PostHog ships with as well as make your own custom scouts.

We hit a lot of AGI-era buzzwords on the way here. If you've been keeping score, here's your card – how many did we land?

B

I

N

G

O

Agent

a for-loop with ambitionssaid it ✓

Memory

a .txt file, basicallysaid it ✓

Harness

a while-loop in a lanyardsaid it ✓

Skills

markdown that did a coursesaid it ✓

MCP

USB-C for LLMssaid it ✓

Tools

functions that RTFM'dsaid it ✓

Sandbox

where it can't break prodsaid it ✓

Agent loop

the for-loop's TED talksaid it ✓

Markdown

code minus the bracketssaid it ✓

Agent-pilled

you, by the end of thissaid it ✓

Signal

noise we chose to likesaid it ✓

Scratchpad

a sticky note with dreamssaid it ✓

Vibe coding

git commit -m 'trust me'never said it ✗

Self-driving

not the car. relax.said it ✓

Pipeline

if/else with a personalitysaid it ✓

Ship the loop

we said it unironicallynever said it ✗

Agent dreaming

REM cycles for robotsnever said it ✗

Temporal

cron with a pitch decksaid it ✓

"in the weights"

the shrug of MLsaid it ✓

Skills-pilled

agent-pilled's cousinnever said it ✗

Karpathy tweet

obligatory. see above.said it ✓

Agentic

agent, but billablesaid it ✓

Confidence

a vibe, to two decimalssaid it ✓

Progressive disclosure

telling you later, on purposesaid it ✓

p(doom)

the spiciest floatnever said it ✗

Long-running agent

a goldfish taking notessaid it ✓

One-shot

no pressure, lil buddysaid it ✓

Guardrails

the 'please don't' in prodsaid it ✓

Agent surface

where you yell at itsaid it ✓

Dogfood

we ate it. it was fine.said it ✓

(p.s. flip a card for its real definition – and the ✗'s are the few we never actually managed to get in)