> AI agents: this is one page from PostHog's docs. Full index of Markdown docs for LLMs: https://posthog.com/llms.txt # Catch a core action failing without errors – Self-driving pocket guide Canonical URL: https://posthog.com/docs/self-driving/pocket-guide/silent-failure-core-action > **Cloud region:** This page uses US Cloud hosts. For an EU Cloud project, use `https://eu.posthog.com` instead of `https://app.posthog.com` (app host for links). ## On this page - [What the scout looks at](#what-the-scout-looks-at) - [The report in your inbox](#the-report-in-your-inbox) - [The pull request you merge](#the-pull-request-you-merge) - [The scout itself](#the-scout-itself) - [The schedule it runs on](#the-schedule-it-runs-on) - [Add this to your scout troop](#add-this-to-your-scout-troop) Chapter 04 # Catch a core action failing without errors – Self-driving pocket guide Every product has one action that matters more than the rest: checkout, publish, send, or deploy. When it fails loudly, you hear about it. When it fails quietly, nobody sees an error and nobody files a ticket. This scout watches your most important flow and catches the failures nobody reports. ## What the scout looks at You deployed at `14:02`. People are still trying to publish, but fewer are finishing. No error page rendered and no alert fired. Which is it? - If both lines drop together, that's a traffic change, not a break. The scout stays *quiet*. - If traffic is flat but the finish rate drops, it signals a silent failure. The scout ***reports***. That second pattern is what the scout looks for – Fig. 1 shows the gap it caught. 14:02 deploy ~1,240/day vanish here – no error, no alert Started publishing · ~4,000/dayFinished · 92% → 61% Fig. 1 – What the scout saw: Your deploy went out at 14:02. The orange gap is everyone who started and never finished. ## The report in your inbox When your product emits [signals](https://posthog.com/docs/self-driving/signals.md) that indicate your core action is failing, a [scout](https://posthog.com/docs/self-driving/scouts.md) opens a [report](https://posthog.com/docs/self-driving/reports.md). Fig. 2 breaks the card down part by part. Click **Review** and the report opens Fig. 3 with the full evidence, the raw signals, and options to take action. P11Publish completion rate down 31 points while attempts hold steady 2Completion rate fell 92% → 61% after the 14:02 deploy while attempts held steady – a handled timeout, retried silently3Scout · core action funnel4ReadyActionable52h ago ArchiveReview6 Fig. 2 – Once surfaced, your inbox surfaces this report card. The card includes its claim and triage, with the evidence sitting inside the report itself.Hover over the figure to learn about each element. P1Publish completion rate down 31 points while attempts hold steady 1ReadyActionableScout · core action funnel· 2h ago ArchiveCreate PR2 Summary3 Since the 14:02 deploy, publish attempts are flat at ~4,000/day but the completion rate fell from 92% to 61%. The drop is uniform across source, device, and geo, so it isn't a traffic-mix change, and the `publish_completed` event is still firing normally elsewhere. Error Tracking shows a new handled timeout on the publish path, caught by the retry wrapper and never rethrown – so no error page rendered and no alert fired. Session Replay matches: users click Publish, watch the spinner, and leave after ~8 seconds. ~1,240 publishes/day failing silently **Suggested fix:** Surface the failure to the user instead of retrying silently. The timeout itself is the root cause and a separate follow-up – this PR is about making it visible. 4 Evidence4 sources5 Your product eventsHow many people start your core action and how many finish, compared with the last two weeks. Error TrackingThe failures that show up as errors – including the ones your code catches, so the user never sees them. Session ReplayThe failures that never become errors – recordings of people who started, got stuck, and gave up. Your codebaseYour deploys, so a drop can be matched to the change that caused it instead of just a time of day. Fig. 3 – The report opened. From here, you can review the evidence and open a pull request.Hover over the figure to learn about each element. ## The pull request you merge When you're ready to open a pull request, PostHog dispatches an agent to do it for you with the report and evidence attached as context. You review and merge it like any other PR – nothing merges without you. Reports are free. Pull requests are **$15 each**, with your first three a month **free**. See self-driving [Pricing](https://posthog.com/docs/self-driving/pricing.md). ## The scout itself Scouts are the heart of the self-driving system – they're instructions an agent follows on a schedule – Fig. 4 is the actual skill file for this guide's custom scout. signals-scout-silent-failure/SKILL.md ```markdown --- name: signals-scout-silent-failure description: > Watches the completion rate of one named core action for breaks from its own norm, and reports the likely cause – with swallowed exceptions as the first thing it looks for. allowed_tools: - emit_report - edit_report --- # Silent failure in the core action Watch one named flow for failures that never surface as errors. The mechanism this is built around: **something caught the failure.** A retry wrapper, a `try`/`catch` with a log line, a fallback that returns an empty result. The user sees a spinner and then nothing, no error page renders, no alert fires, and the only trace is the completion rate quietly dropping. That's what makes it silent, and it's what this scout looks for first. Narrower than `signals-scout-anomaly-detection`, which builds a durable watchlist of the insights a team actually looks at and scores each one against a seasonality-matched baseline. This one watches a single flow you name, every run, whether or not anyone has built an insight for it. If the core action is already on that scout's watchlist and you're hearing about breaks in time, you don't need both. Daily is the fleet default. For a flow where hours matter, set `run_interval_minutes` to 60 when you create the scout – the tradeoff is that hourly buckets are noisier, so raise the volume floor below to match. ## Discriminator Emit a report when the **completion rate** – completions divided by attempts – breaks from its trailing two-week norm for the same day of week. Write nothing when attempts and completions moved together and the rate held: that's a traffic change, not breakage. Attempts are the disqualifier check, not half the trigger. Watching two counts separately leaves you stuck the moment both move a little; watching the rate doesn't. ### The bar A starting point, to be tuned against what this flow's data actually does: - a completion rate **≥10 points below** its trailing 14-day median for the same weekday, on a complete bucket, and - **≥500 attempts** in that bucket. The volume floor matters more than the threshold. A completion rate computed on 40 attempts is noise, and a scout that fires on it is exactly the crying-wolf failure the discriminator is meant to prevent. If the flow doesn't clear the floor, widen the bucket rather than lowering the bar, and write what you chose to the scratchpad. ## Explore 1. **Confirm the instrumentation still works.** Before anything else: is the completion event still firing at all, and was it renamed, moved, or removed in the deploy window? A broken tracking call looks identical to a broken product – attempts flat, completions gone – and it is the most likely false positive for this scout. Check the event's total volume across all properties, not just within the flow. `signals-scout-observability-gaps` watches this kind of drift more broadly. 2. **Check whether the drop is uniform.** Did the completion rate fall across every segment, or only inside a new or shifted one? Steady attempts with a falling rate is also the shape of a traffic-composition change – a campaign bringing lower-intent users, a new geo, a bot wave. Nothing is broken in that case, and the rate framing alone won't catch it. Break down by source, device, geo, and new-vs-returning before going further. 3. **Find what was caught.** Look for new or spiking error-tracking issues on the same code path, weighting **handled** exceptions – the ones that never reached the user. A caught timeout, a retry that exhausted, a fallback that returned empty. This is the mechanism the whole scout is built around, so look here before looking anywhere else. 4. **Check the failures that never reached your server.** If Error Tracking is clean, the failure may not have made it out of the browser: a dropped request, an ad blocker or CSP rule blocking the call, the tab closing mid-request. Session Replay is the only thing that sees these – look for stalls, rage clicks, and abandonment at a consistent point in the flow. 5. **Locate it in the flow.** If intermediate events exist, find the step where the drop happens. Without them you can say the flow broke, but not where. 6. **Tie it to a deploy.** Where a deploy sits in the window, include the commit range. 7. Name the most likely cause in the report. A rate that moved with no cause attached is something the reader still has to go investigate themselves. ## Disqualifiers - Attempts and completions moved together – the rate held. - The completion event stopped firing entirely, or was renamed in the window. That's an instrumentation finding, not a product one, and it should say so. - The rate fell only inside one new or shifted segment – that's a mix change, not breakage. - The bucket is below the volume floor. - The change is within normal weekday/weekend variance. - A known, announced maintenance window covers the period. ``` Show full example Fig. 4 – The scout itself – the file an agent follows on a schedule. It reads more than one [signal source](https://posthog.com/docs/self-driving/inbox/sources.md), so the report will name a likely cause, not just a number that moved. This scout's signal sources come from the following product data: - [Your product events](https://posthog.com/docs/product-analytics.md) How many people start your core action and how many finish, compared with the last two weeks. - [Error Tracking](https://posthog.com/docs/error-tracking.md) The failures that show up as errors – including the ones your code catches, so the user never sees them. - [Session Replay](https://posthog.com/docs/session-replay.md) The failures that never become errors – recordings of people who started, got stuck, and gave up. - [Your codebase](https://posthog.com/docs/self-driving/context.md) Your deploys, so a drop can be matched to the change that caused it instead of just a time of day. ## The schedule it runs on This custom scout runs **daily** by default. You can choose to run it every 30 minutes up to once a day. It only writes when something is wrong, so most days it's silent. ## Add this to your scout troop You'll need these to run this scout. - RequiredA core action with a start and finish event, named explicitly when you add the scout – it can't guess which flow is the whole point of your product - Required[Error Tracking](https://posthog.com/docs/error-tracking/installation.md) instrumented, including the paths where exceptions are caught - Recommended[Your codebase](https://posthog.com/docs/self-driving/context.md) connected via GitHub, to correlate a break against deploys - Recommended[Session Replay](https://posthog.com/docs/session-replay/installation.md), for failures that never reach your server at all - OptionalIntermediate events inside the flow, if you have them – they're what turns "it broke" into "it broke at the payment step" [Add this scout](https://app.posthog.com/inbox/config#createScout=eyJuYW1lIjoic2lnbmFscy1zY291dC1zaWxlbnQtZmFpbHVyZSIsImRlc2NyaXB0aW9uIjoiV2F0Y2hlcyB0aGUgY29tcGxldGlvbiByYXRlIG9mIG9uZSBuYW1lZCBjb3JlIGFjdGlvbiBmb3IgYnJlYWtzIGZyb20gaXRzIG93biBub3JtLCBhbmQgcmVwb3J0cyB0aGUgbGlrZWx5IGNhdXNlIOKAkyB3aXRoIHN3YWxsb3dlZCBleGNlcHRpb25zIGFzIHRoZSBmaXJzdCB0aGluZyBpdCBsb29rcyBmb3IuXG4iLCJib2R5IjoiIyBTaWxlbnQgZmFpbHVyZSBpbiB0aGUgY29yZSBhY3Rpb25cblxuV2F0Y2ggb25lIG5hbWVkIGZsb3cgZm9yIGZhaWx1cmVzIHRoYXQgbmV2ZXIgc3VyZmFjZSBhcyBlcnJvcnMuXG5cblRoZSBtZWNoYW5pc20gdGhpcyBpcyBidWlsdCBhcm91bmQ6ICoqc29tZXRoaW5nIGNhdWdodCB0aGUgZmFpbHVyZS4qKiBBIHJldHJ5IHdyYXBwZXIsIGFcbmB0cnlgL2BjYXRjaGAgd2l0aCBhIGxvZyBsaW5lLCBhIGZhbGxiYWNrIHRoYXQgcmV0dXJucyBhbiBlbXB0eSByZXN1bHQuIFRoZSB1c2VyIHNlZXMgYSBzcGlubmVyXG5hbmQgdGhlbiBub3RoaW5nLCBubyBlcnJvciBwYWdlIHJlbmRlcnMsIG5vIGFsZXJ0IGZpcmVzLCBhbmQgdGhlIG9ubHkgdHJhY2UgaXMgdGhlIGNvbXBsZXRpb25cbnJhdGUgcXVpZXRseSBkcm9wcGluZy4gVGhhdCdzIHdoYXQgbWFrZXMgaXQgc2lsZW50LCBhbmQgaXQncyB3aGF0IHRoaXMgc2NvdXQgbG9va3MgZm9yIGZpcnN0LlxuXG5OYXJyb3dlciB0aGFuIGBzaWduYWxzLXNjb3V0LWFub21hbHktZGV0ZWN0aW9uYCwgd2hpY2ggYnVpbGRzIGEgZHVyYWJsZSB3YXRjaGxpc3Qgb2YgdGhlXG5pbnNpZ2h0cyBhIHRlYW0gYWN0dWFsbHkgbG9va3MgYXQgYW5kIHNjb3JlcyBlYWNoIG9uZSBhZ2FpbnN0IGEgc2Vhc29uYWxpdHktbWF0Y2hlZCBiYXNlbGluZS5cblRoaXMgb25lIHdhdGNoZXMgYSBzaW5nbGUgZmxvdyB5b3UgbmFtZSwgZXZlcnkgcnVuLCB3aGV0aGVyIG9yIG5vdCBhbnlvbmUgaGFzIGJ1aWx0IGFuIGluc2lnaHRcbmZvciBpdC4gSWYgdGhlIGNvcmUgYWN0aW9uIGlzIGFscmVhZHkgb24gdGhhdCBzY291dCdzIHdhdGNobGlzdCBhbmQgeW91J3JlIGhlYXJpbmcgYWJvdXQgYnJlYWtzXG5pbiB0aW1lLCB5b3UgZG9uJ3QgbmVlZCBib3RoLlxuXG5EYWlseSBpcyB0aGUgZmxlZXQgZGVmYXVsdC4gRm9yIGEgZmxvdyB3aGVyZSBob3VycyBtYXR0ZXIsIHNldCBgcnVuX2ludGVydmFsX21pbnV0ZXNgIHRvIDYwIHdoZW5cbnlvdSBjcmVhdGUgdGhlIHNjb3V0IOKAkyB0aGUgdHJhZGVvZmYgaXMgdGhhdCBob3VybHkgYnVja2V0cyBhcmUgbm9pc2llciwgc28gcmFpc2UgdGhlIHZvbHVtZVxuZmxvb3IgYmVsb3cgdG8gbWF0Y2guXG5cbiMjIERpc2NyaW1pbmF0b3JcblxuRW1pdCBhIHJlcG9ydCB3aGVuIHRoZSAqKmNvbXBsZXRpb24gcmF0ZSoqIOKAkyBjb21wbGV0aW9ucyBkaXZpZGVkIGJ5IGF0dGVtcHRzIOKAkyBicmVha3MgZnJvbSBpdHNcbnRyYWlsaW5nIHR3by13ZWVrIG5vcm0gZm9yIHRoZSBzYW1lIGRheSBvZiB3ZWVrLiBXcml0ZSBub3RoaW5nIHdoZW4gYXR0ZW1wdHMgYW5kIGNvbXBsZXRpb25zXG5tb3ZlZCB0b2dldGhlciBhbmQgdGhlIHJhdGUgaGVsZDogdGhhdCdzIGEgdHJhZmZpYyBjaGFuZ2UsIG5vdCBicmVha2FnZS5cblxuQXR0ZW1wdHMgYXJlIHRoZSBkaXNxdWFsaWZpZXIgY2hlY2ssIG5vdCBoYWxmIHRoZSB0cmlnZ2VyLiBXYXRjaGluZyB0d28gY291bnRzIHNlcGFyYXRlbHkgbGVhdmVzXG55b3Ugc3R1Y2sgdGhlIG1vbWVudCBib3RoIG1vdmUgYSBsaXR0bGU7IHdhdGNoaW5nIHRoZSByYXRlIGRvZXNuJ3QuXG5cbiMjIyBUaGUgYmFyXG5cbkEgc3RhcnRpbmcgcG9pbnQsIHRvIGJlIHR1bmVkIGFnYWluc3Qgd2hhdCB0aGlzIGZsb3cncyBkYXRhIGFjdHVhbGx5IGRvZXM6XG5cbi0gYSBjb21wbGV0aW9uIHJhdGUgKiriiaUxMCBwb2ludHMgYmVsb3cqKiBpdHMgdHJhaWxpbmcgMTQtZGF5IG1lZGlhbiBmb3IgdGhlIHNhbWUgd2Vla2RheSwgb24gYVxuICBjb21wbGV0ZSBidWNrZXQsIGFuZFxuLSAqKuKJpTUwMCBhdHRlbXB0cyoqIGluIHRoYXQgYnVja2V0LlxuXG5UaGUgdm9sdW1lIGZsb29yIG1hdHRlcnMgbW9yZSB0aGFuIHRoZSB0aHJlc2hvbGQuIEEgY29tcGxldGlvbiByYXRlIGNvbXB1dGVkIG9uIDQwIGF0dGVtcHRzIGlzXG5ub2lzZSwgYW5kIGEgc2NvdXQgdGhhdCBmaXJlcyBvbiBpdCBpcyBleGFjdGx5IHRoZSBjcnlpbmctd29sZiBmYWlsdXJlIHRoZSBkaXNjcmltaW5hdG9yIGlzXG5tZWFudCB0byBwcmV2ZW50LiBJZiB0aGUgZmxvdyBkb2Vzbid0IGNsZWFyIHRoZSBmbG9vciwgd2lkZW4gdGhlIGJ1Y2tldCByYXRoZXIgdGhhbiBsb3dlcmluZyB0aGVcbmJhciwgYW5kIHdyaXRlIHdoYXQgeW91IGNob3NlIHRvIHRoZSBzY3JhdGNocGFkLlxuXG4jIyBFeHBsb3JlXG5cbjEuICoqQ29uZmlybSB0aGUgaW5zdHJ1bWVudGF0aW9uIHN0aWxsIHdvcmtzLioqIEJlZm9yZSBhbnl0aGluZyBlbHNlOiBpcyB0aGUgY29tcGxldGlvbiBldmVudFxuICAgc3RpbGwgZmlyaW5nIGF0IGFsbCwgYW5kIHdhcyBpdCByZW5hbWVkLCBtb3ZlZCwgb3IgcmVtb3ZlZCBpbiB0aGUgZGVwbG95IHdpbmRvdz8gQSBicm9rZW5cbiAgIHRyYWNraW5nIGNhbGwgbG9va3MgaWRlbnRpY2FsIHRvIGEgYnJva2VuIHByb2R1Y3Qg4oCTIGF0dGVtcHRzIGZsYXQsIGNvbXBsZXRpb25zIGdvbmUg4oCTIGFuZCBpdFxuICAgaXMgdGhlIG1vc3QgbGlrZWx5IGZhbHNlIHBvc2l0aXZlIGZvciB0aGlzIHNjb3V0LiBDaGVjayB0aGUgZXZlbnQncyB0b3RhbCB2b2x1bWUgYWNyb3NzIGFsbFxuICAgcHJvcGVydGllcywgbm90IGp1c3Qgd2l0aGluIHRoZSBmbG93LiBgc2lnbmFscy1zY291dC1vYnNlcnZhYmlsaXR5LWdhcHNgIHdhdGNoZXMgdGhpcyBraW5kIG9mXG4gICBkcmlmdCBtb3JlIGJyb2FkbHkuXG4yLiAqKkNoZWNrIHdoZXRoZXIgdGhlIGRyb3AgaXMgdW5pZm9ybS4qKiBEaWQgdGhlIGNvbXBsZXRpb24gcmF0ZSBmYWxsIGFjcm9zcyBldmVyeSBzZWdtZW50LCBvclxuICAgb25seSBpbnNpZGUgYSBuZXcgb3Igc2hpZnRlZCBvbmU_IFN0ZWFkeSBhdHRlbXB0cyB3aXRoIGEgZmFsbGluZyByYXRlIGlzIGFsc28gdGhlIHNoYXBlIG9mIGFcbiAgIHRyYWZmaWMtY29tcG9zaXRpb24gY2hhbmdlIOKAkyBhIGNhbXBhaWduIGJyaW5naW5nIGxvd2VyLWludGVudCB1c2VycywgYSBuZXcgZ2VvLCBhIGJvdCB3YXZlLlxuICAgTm90aGluZyBpcyBicm9rZW4gaW4gdGhhdCBjYXNlLCBhbmQgdGhlIHJhdGUgZnJhbWluZyBhbG9uZSB3b24ndCBjYXRjaCBpdC4gQnJlYWsgZG93biBieVxuICAgc291cmNlLCBkZXZpY2UsIGdlbywgYW5kIG5ldy12cy1yZXR1cm5pbmcgYmVmb3JlIGdvaW5nIGZ1cnRoZXIuXG4zLiAqKkZpbmQgd2hhdCB3YXMgY2F1Z2h0LioqIExvb2sgZm9yIG5ldyBvciBzcGlraW5nIGVycm9yLXRyYWNraW5nIGlzc3VlcyBvbiB0aGUgc2FtZSBjb2RlXG4gICBwYXRoLCB3ZWlnaHRpbmcgKipoYW5kbGVkKiogZXhjZXB0aW9ucyDigJMgdGhlIG9uZXMgdGhhdCBuZXZlciByZWFjaGVkIHRoZSB1c2VyLiBBIGNhdWdodFxuICAgdGltZW91dCwgYSByZXRyeSB0aGF0IGV4aGF1c3RlZCwgYSBmYWxsYmFjayB0aGF0IHJldHVybmVkIGVtcHR5LiBUaGlzIGlzIHRoZSBtZWNoYW5pc20gdGhlXG4gICB3aG9sZSBzY291dCBpcyBidWlsdCBhcm91bmQsIHNvIGxvb2sgaGVyZSBiZWZvcmUgbG9va2luZyBhbnl3aGVyZSBlbHNlLlxuNC4gKipDaGVjayB0aGUgZmFpbHVyZXMgdGhhdCBuZXZlciByZWFjaGVkIHlvdXIgc2VydmVyLioqIElmIEVycm9yIFRyYWNraW5nIGlzIGNsZWFuLCB0aGUgZmFpbHVyZVxuICAgbWF5IG5vdCBoYXZlIG1hZGUgaXQgb3V0IG9mIHRoZSBicm93c2VyOiBhIGRyb3BwZWQgcmVxdWVzdCwgYW4gYWQgYmxvY2tlciBvciBDU1AgcnVsZVxuICAgYmxvY2tpbmcgdGhlIGNhbGwsIHRoZSB0YWIgY2xvc2luZyBtaWQtcmVxdWVzdC4gU2Vzc2lvbiBSZXBsYXkgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBzZWVzXG4gICB0aGVzZSDigJMgbG9vayBmb3Igc3RhbGxzLCByYWdlIGNsaWNrcywgYW5kIGFiYW5kb25tZW50IGF0IGEgY29uc2lzdGVudCBwb2ludCBpbiB0aGUgZmxvdy5cbjUuICoqTG9jYXRlIGl0IGluIHRoZSBmbG93LioqIElmIGludGVybWVkaWF0ZSBldmVudHMgZXhpc3QsIGZpbmQgdGhlIHN0ZXAgd2hlcmUgdGhlIGRyb3AgaGFwcGVucy5cbiAgIFdpdGhvdXQgdGhlbSB5b3UgY2FuIHNheSB0aGUgZmxvdyBicm9rZSwgYnV0IG5vdCB3aGVyZS5cbjYuICoqVGllIGl0IHRvIGEgZGVwbG95LioqIFdoZXJlIGEgZGVwbG95IHNpdHMgaW4gdGhlIHdpbmRvdywgaW5jbHVkZSB0aGUgY29tbWl0IHJhbmdlLlxuNy4gTmFtZSB0aGUgbW9zdCBsaWtlbHkgY2F1c2UgaW4gdGhlIHJlcG9ydC4gQSByYXRlIHRoYXQgbW92ZWQgd2l0aCBubyBjYXVzZSBhdHRhY2hlZCBpc1xuICAgc29tZXRoaW5nIHRoZSByZWFkZXIgc3RpbGwgaGFzIHRvIGdvIGludmVzdGlnYXRlIHRoZW1zZWx2ZXMuXG5cbiMjIERpc3F1YWxpZmllcnNcblxuLSBBdHRlbXB0cyBhbmQgY29tcGxldGlvbnMgbW92ZWQgdG9nZXRoZXIg4oCTIHRoZSByYXRlIGhlbGQuXG4tIFRoZSBjb21wbGV0aW9uIGV2ZW50IHN0b3BwZWQgZmlyaW5nIGVudGlyZWx5LCBvciB3YXMgcmVuYW1lZCBpbiB0aGUgd2luZG93LiBUaGF0J3MgYW5cbiAgaW5zdHJ1bWVudGF0aW9uIGZpbmRpbmcsIG5vdCBhIHByb2R1Y3Qgb25lLCBhbmQgaXQgc2hvdWxkIHNheSBzby5cbi0gVGhlIHJhdGUgZmVsbCBvbmx5IGluc2lkZSBvbmUgbmV3IG9yIHNoaWZ0ZWQgc2VnbWVudCDigJMgdGhhdCdzIGEgbWl4IGNoYW5nZSwgbm90IGJyZWFrYWdlLlxuLSBUaGUgYnVja2V0IGlzIGJlbG93IHRoZSB2b2x1bWUgZmxvb3IuXG4tIFRoZSBjaGFuZ2UgaXMgd2l0aGluIG5vcm1hbCB3ZWVrZGF5L3dlZWtlbmQgdmFyaWFuY2UuXG4tIEEga25vd24sIGFubm91bmNlZCBtYWludGVuYW5jZSB3aW5kb3cgY292ZXJzIHRoZSBwZXJpb2QuIiwic291cmNlIjoicG9ja2V0X2d1aWRlIn0)Opens PostHog with it prefilled. Review it, then hit Create. Not set up yet? One command installs PostHog, connects GitHub, and turns on a default troop of scouts. That troop doesn't include this one – add it above once you're set up. ``` npx @posthog/wizard self-driving ```