From our inbox
Contents
We run self-driving on PostHog itself. This page is a feed of real reports from our own inbox that turned into useful work. Nothing here is a mockup: each report was found by a scout or a signal source.
Not every useful report ends in code. Some end in a merged pull request, and we link to it. Others end in a change that needs no code at all, like a scout that fixes its own instructions or a dashboard that gets the tile it was missing.
A scout curates this page, just like the scouts that found these reports. Once a day, this curator scout reads our inbox, picks the best new examples, and files a report for each one. Self-driving then opens the pull request that adds the example here, and a person on the team decides whether to merge it. So every new entry on this page is itself a small run of the loop. See how this page stays up to date.
Inbox
PostHog's own project · 23 reports, every one acted on- Scout · Inbox validation
A delayed inbox page replaces a new claim with an old assignee
A follow-up scout tested whether report claims stayed current while the inbox loaded another page. It held the page response, claimed an existing report, and then released the response. The new claim disappeared because the loader restored an older copy of the list.
Suggested action:Keep the latest rows when the next page arrives. Add regression tests for claims, releases, and removed rows during pending requests.
What happened next
fix(signals): preserve inbox claims during page loads #130402
Merged Nov 6, 2026
The merged fix appends the latest rows and preserves changes made while requests are pending. A follow-up check passed the regression tests for claims, releases, and removals during page loads.
- Scout · Skills store
An alert skill loads its full reference material for every task
A skills-store scout found an alert skill that kept its inventory, setup instructions, and operating guide in one long body. It had no bundled reference files. Agents had to load the full body before they could choose the information their task needed.
Suggested action:Keep the purpose and essential rules in the skill body. Move the detailed material into reference files, and explain when to load each file.
What happened next
Skill updated, no pull request needed
Resolved Oct 30, 2026
The published skill revision replaced the long body with a short guide and links to separate reference files. A later check confirmed that the body named the files in its manifest.
- Error tracking
A missing pull request diff crashes the whole inbox report page
Error tracking caught a crash when an inbox report tried to show a pull request diff. The file summary called a string method before it checked whether the response contained a diff. That exception replaced the whole report page.
Suggested action:Check the diff before reading it, and keep invalid responses from crashing the report. Add a regression test for a response with no diff field.
What happened next
fix(signals): handle missing pull request diff data #130583
Merged Nov 6, 2026
The merged fix rejects invalid diff responses and shows the existing load error. Regression tests cover missing, null, and non-string values; they fail before the fix and pass with it.
- Scout · Code quality (custom)
An alert detector replaces a valid zero setting with its default
A code quality scout found that the IQR alert detector treated a zero multiplier as a missing value. The fallback replaced zero with the default and widened the alert boundaries. A small test case showed that this could hide an anomaly that the chosen setting should detect.
Suggested action:Keep an explicit zero multiplier. Use the default only when the value is missing or null, and test all three detector paths.
What happened next
fix(alerts): preserve a zero iqr multiplier #125136
Merged Oct 30, 2026
The merged fix resolves the multiplier once and uses it for live detection, batch detection, and model fitting. Regression tests cover zero, null, and omitted values; the pull request records that the zero case failed before the fix.
- Scout · CI merge queue (custom)
A scout repeats a failed query because its instructions compare text with dates
A scout that watches the CI merge queue repeatedly starts with a query that cannot run. Its instructions compare a timestamp stored as text with a date value. The scout finds a working conversion during its runs, but the saved query still contains the same mistake.
Suggested action:Update the query in the scout's instructions to convert the text timestamp to a date before comparing it.
What happened next
Scout updated, no pull request needed
Resolved Oct 27, 2026
The corrected query was published in a new version of the scout's instructions. A query check confirmed that the conversion works and returns results.
- Scout · Unfrozen time in visual tests (custom)
Date picker screenshots change with the clock even when the code stays the same
A custom scout found that DateTimePicker stories build date ranges, labels, and calendar bounds from the real clock. Screenshots therefore change with the date even when the component code stays the same. These differences add noise to visual reviews.
Suggested action:Freeze the clock for these stories. Render them with different browser dates and check that the screenshots stay the same.
What happened next
fix(quill): freeze clock in DateTimePicker stories #117992
Merged Oct 19, 2026
The implementation agent added the missing Storybook clock decorator and moved initial date construction into rendering. The merged pull request records that all seven checked stories stayed identical across two browser dates after the fix.
- Scout · Posthog docs freshness (custom)
The Twilio guide still says alpha after the source becomes generally available
The Twilio source guide still warns that the source is in alpha. A custom scout compared the guide with merged product code. The code marks the source as generally available, but the old warning remains in the documentation.
Suggested action:Remove the obsolete alpha callout so the guide matches the source's release status.
What happened next
docs(data-warehouse): remove the alpha callout from the Twilio source page #20652
Merged Oct 18, 2026
Self-driving opened a pull request that removed the alpha callout, and the pull request merged. The change corrected the release-status wording without changing source behavior.
- Scout · Scouts dashboard (custom)
A chart hides its newest dates even though the source data is current
A saved chart stops before the end of its date range. A dashboard scout runs the same query with a larger row limit and finds the missing recent dates. The query returns older dates first, so its default row limit excludes the newest results.
Suggested action:Add an explicit row limit with room for the full date range. Run the saved chart again and verify that recent dates appear.
What happened next
Insight updated, no pull request needed
Resolved Oct 14, 2026
The scout updated the saved query and verified that recent dates returned. A follow-up change added more room, excluded incomplete days and small samples, and verified the latest complete day.
- Scout · Self improvement (custom)
A daily digest scout keeps adding permanent memory for work it already tracked
A daily digest scout saves new memory entries under each day's date. Those entries repeat work boundaries that its existing progress markers already retain. A scout review traced the growing memory to instructions that require new dated entries on every run.
Suggested action:Update the instructions to reuse one current report pointer and a bounded record of processed work. Preserve progress markers and report history, and verify the replacement before removing old entries.
What happened next
Scout updated, no pull request needed
Resolved Oct 13, 2026
An agent published the revised instructions and checked the memory migration in maintenance runs. The cleanup removed obsolete entries while preserving progress markers, current work boundaries, and historical inbox reports.
- Scout · Website 404s (custom)
The legacy feed URL returns 404 while the canonical feed works
A custom scout found repeated requests to /feed.xml that returned 404. It checked the live URLs and found that /rss.xml still served the feed. Other legacy feed paths already redirected there, but /feed.xml had no redirect rule.
Suggested action:Add an exact permanent redirect from /feed.xml to /rss.xml. Check that the old URL redirects and the destination still serves the feed.
What happened next
fix(redirects): redirect legacy /feed.xml to /rss.xml #21053
Merged Oct 12, 2026
Self-driving opened a pull request that added the missing redirect beside the existing feed rules. The pull request merged with one configuration file changed.
- GitHub
Automatic scouts make a new project skip inbox onboarding
A GitHub issue showed that opening the inbox creates an automatic maintenance scout. The setup checks treated that scout as proof that a person had enabled self-driving. Projects with only automatic scouts skipped the introduction and later lost their background scout.
Suggested action:Exclude automatic maintenance scouts from the frontend and backend setup checks. Keep them running, and test that scouts or sources enabled by a person still count as setup.
What happened next
fix(signals): keep operational scouts out of set-up checks #114577
Merged Oct 12, 2026
Self-driving opened a pull request that corrected both setup checks and added regression tests. The pull request merged with tests for automatic scouts and setup completed by a person.
- Error tracking
Invalid Claude Code settings produce an exception without a useful next step
Invalid JSON in
~/.claude/settings.jsonstops the PostHog Claude Code plugin from installing. The wizard shows the command's error text without explaining what to fix. Error tracking and a code review also show that changing command text creates separate issues for the same failure.Suggested action:Tell users to fix the JSON in their local settings file and retry. Treat this known local problem as an expected failure, and use a stable message for unexpected failures.
What happened next
fix(mcp): show a hint for invalid Claude Code settings JSON on plugin install #1366
Merged Oct 7, 2026
The merged change adds a repair hint for invalid user settings and keeps unexpected failures in error tracking under stable messages. Tests cover the hint and confirm that invalid project settings still produce an exception.
- Scout · Self driving dwh (custom)
Partial hours make a warehouse check report a false gap
A warehouse scout compares run records with completion events to check for missing data. Its instructions say to compare complete hours, but the query starts and ends partway through an hour. The two sources use different timestamps, so those partial hours create a false gap. The scout traced the discrepancy to its own comparison query.
Suggested action:Align both query branches to whole-hour boundaries and exclude recent hours that still need time to settle. Publish the corrected query in the scout's instructions.
What happened next
Scout updated, no pull request needed
Resolved Oct 4, 2026
The corrected instructions were published and checked against live data. The check no longer included partial hours, and the complete-hour comparison showed only small differences. No warehouse view change was needed.
- GitHub
Each warehouse sync sends the same open pganalyze issues again
A GitHub issue led the investigation to a mismatch between warehouse syncs and signal collection. Each sync gives every open pganalyze issue a new sync timestamp. The signal collector treats that timestamp as evidence of a new issue, so unchanged issues enter processing again.
Suggested action:Check which issue IDs have already been processed before sending new signals. Page through the remaining issues so a large backlog does not hide new work, and keep failed sends eligible for retry.
What happened next
fix(signals): stop pganalyze re-emitting open issues every sync #108417
Merged Oct 1, 2026
Self-driving opened a fix, and review added safeguards for paging and retries before the pull request merged. Tests cover repeated syncs, new issues, large backlogs, and failed sends using synthetic data.





