[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-automattic-getting-started":3,"mdc-tjwz6n-key":32,"related-org-automattic-getting-started":1623,"related-repo-automattic-getting-started":1813},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":22,"topics":26,"repo":27,"sourceUrl":30,"mdContent":31},"getting-started","set up agentic-analytics plugin","Walk the user through first-time setup of the agentic-analytics plugin. Use when the user asks how to get started, how to set up the plugin, where to put their credentials, what the plugin can do for them, or any variant of \"first run\" \u002F \"onboarding\" \u002F \"walk me through this.\"",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"automattic","Automattic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fautomattic.png",[12,16,19],{"name":13,"slug":14,"type":15},"Documentation","documentation","tag",{"name":17,"slug":18,"type":15},"Reference","reference",{"name":20,"slug":21,"type":15},"Analytics","analytics",1,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fagentic-analytics","2026-07-24T05:42:05.056763",null,[],{"repoUrl":23,"stars":22,"forks":22,"topics":28,"description":29},[],"Claude Code plugin for analytics across Parse.ly, GA, and your own data.","https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fagentic-analytics\u002Ftree\u002FHEAD\u002Fskills\u002Fgetting-started","---\nname: getting-started\ndescription: Walk the user through first-time setup of the agentic-analytics plugin. Use when the user asks how to get started, how to set up the plugin, where to put their credentials, what the plugin can do for them, or any variant of \"first run\" \u002F \"onboarding\" \u002F \"walk me through this.\"\n---\n\n# First-run onboarding\n\nThis is the first thing a new user runs after installing the plugin. Init asks for the bucket name in chat (the only piece of customer data the plugin needs that isn't already on disk), walks the user through `aws configure` for their AWS credentials, verifies, and persists the runtime config to `bucket.json`.\n\nThe plugin gives the user direct access to their Parse.ly Data Pipeline (DPL) so they can ask questions of their raw event firehose in chat. More data sources land in future versions; v1 is DPL only.\n\n## Output discipline\n\nThis is a customer-facing first-run flow. Keep it quiet and on-script.\n\n- **Verbatim where shown.** Blockquoted text (`> like this`) prescribes the exact words you say to the user. Output those words and nothing else for that step.\n- **Silent steps stay silent.** Steps tagged `(silent on success)` produce no chat output when they succeed. Run the shell command, move on. Don't summarize results, don't announce upcoming actions, don't recap state.\n- **No task lists.** Don't surface this flow as a todo\u002Ftask list.\n- **Off-script questions get short answers, then resume.** If the customer interrupts with a question, answer briefly and pick up at the next step.\n- **Bucket name lives in `bucket.json`.** If it's already there from a previous run, reuse it silently. Only ask the customer for it if it isn't.\n- **AWS credentials live in `~\u002F.aws\u002Fcredentials`.** They're set up by the user via `aws configure --profile agentic-analytics` in step 5. Subsequent `aws` invocations pick them up via `--profile agentic-analytics`. Never ask for them in chat.\n\n## Tone\n\nWelcoming, not robust. The user is a Parse.ly customer, so don't explain Parse.ly or the DPL to them. The goal is a productive first run, not a tutorial.\n\n## Steps\n\n1. **Greet briefly.** Output this verbatim, then immediately continue to step 2:\n\n   > Setting up your Parse.ly Data Pipeline access – about thirty seconds.\n\n   Do not wait for the user to respond. The customer's \"yes\" was their request to set up; nothing destructive happens here so no further confirmation is needed.\n\n2. **Get the bucket name.** Look at `${XDG_CONFIG_HOME:-$HOME\u002F.config}\u002Fagentic-analytics\u002Fbucket.json`. If it exists and has a `bucket` field, hold that value and continue silently (subsequent steps reuse it; this is the idempotent re-run path).\n\n   If the file doesn't exist or the field is missing, output verbatim and wait for a reply:\n\n   > What's the **bucket name** holding your DPL events? Your Parse.ly contact should have provided this – it usually looks like `parsely-dw-\u003Cpublisher>`.\n\n   Record the user's reply as the bucket value. Don't validate the format (step 6's connectivity check is the real test). If the user doesn't have a bucket name, tell them to reach back out to their Parse.ly contact and stop here.\n\n3. **Detect platform and check prerequisites** (silent on success). Run `uname -s`, `python3 --version`, and `aws --version`. If platform is `Darwin` or Linux-family and both tools resolve, continue without comment. If platform is native Windows (no WSL) or a prerequisite is missing, surface the issue and follow the install guidance in \"Cross-platform notes\" below.\n\n   Then create the plugin's isolated Python venv and install DuckDB into it (silent on success). The venv lives at `$AGENTIC_ANALYTICS_DATA_DIR\u002Fvenv` (default `~\u002F.local\u002Fshare\u002Fagentic-analytics\u002Fvenv`); `ensure_venv.sh` is idempotent — it's a fast no-op if the venv already exists and DuckDB is importable, so this only installs once and is safe to re-run:\n\n   ```bash\n   plugin_root=\"${CLAUDE_PLUGIN_ROOT:-${CURSOR_PLUGIN_ROOT:-\u003Cplugin-root>}}\"\n   bash \"$plugin_root\u002Fscripts\u002Fensure_venv.sh\" \\\n     \"${AGENTIC_ANALYTICS_VENV:-${AGENTIC_ANALYTICS_DATA_DIR:-$HOME\u002F.local\u002Fshare\u002Fagentic-analytics}\u002Fvenv}\" \\\n     \"$plugin_root\u002Frequirements.txt\"\n   ```\n\n   Using an isolated venv (rather than `pip install` into your system Python) avoids PEP 668 \"externally-managed-environment\" failures on Homebrew and some distro Pythons — nothing is installed system-wide, and the plugin doesn't make assumptions about your Python install.\n\n4. **Ensure the data directory exists** (silent). Safe to run unconditionally:\n\n   ```bash\n   mkdir -p \"${AGENTIC_ANALYTICS_DATA_DIR:-$HOME\u002F.local\u002Fshare\u002Fagentic-analytics}\"\n   ```\n\n5. **Set up AWS credentials.** Pre-set region and output format silently (idempotent – safe on re-runs):\n\n   ```bash\n   aws configure set region us-east-1 --profile agentic-analytics\n   aws configure set output json --profile agentic-analytics\n   ```\n\n   Then check whether an access key is already configured for the profile:\n\n   ```bash\n   aws configure get aws_access_key_id --profile agentic-analytics 2>\u002Fdev\u002Fnull\n   ```\n\n   If that returns a non-empty value, the user already set up credentials on a previous run. Continue silently to step 6 – no verbatim instruction needed.\n\n   If it returns empty (no access key set), the user needs to set up credentials. Output verbatim:\n\n   > Now your access key and secret. Open a new terminal window and run:\n   >\n   > ```\n   > aws configure --profile agentic-analytics\n   > ```\n   >\n   > You'll see four prompts in order. Here's what to do at each:\n   >\n   > ```\n   > AWS Access Key ID [None]:        # paste your access key, then Enter\n   > AWS Secret Access Key [None]:    # paste your secret, then Enter (input is hidden – that's normal)\n   > Default region name [us-east-1]: # just press Enter (already set)\n   > Default output format [json]:    # just press Enter (already set)\n   > ```\n   >\n   > When your shell prompt comes back, let me know.\n\n   Wait for the user to confirm completion before continuing.\n\n6. **Verify connectivity** (silent on success). List the by-apikey parquet prefix, substituting the bucket value held from step 2 for `\u003Cbucket>`:\n\n   ```bash\n   aws --profile agentic-analytics s3 ls \"s3:\u002F\u002F\u003Cbucket>\u002Fby-apikey\u002F\" | head\n   ```\n\n   If files come back, continue without comment. If the listing is empty or errors, output verbatim:\n\n   > I couldn't list files in your bucket. The most likely causes:\n   >\n   > - The bucket name has a typo. Want to re-enter it? (Clear the saved configs, then run setup again.)\n   > - Your AWS access key or secret has a typo. Re-run `aws configure --profile agentic-analytics` in your terminal to redo them.\n   > - The AWS keys haven't propagated on Parse.ly's side yet (can take a minute). Want to wait and retry?\n   >\n   > Let me know how you'd like to proceed.\n\n   Do not continue until verify passes.\n\n7. **Offer to wire up the email-campaign join key.** Reports include \"cohort CSVs\" – lists of visitors who churned, are at risk of churning, or just became brand lovers. By default these are keyed on a Parse.ly cookie hash that's opaque to your CRM, so they're useful for diagnosis but not for direct re-engagement sends. The fix is for the customer to mint a per-recipient identifier and embed it in URLs in their email campaigns (e.g. `?pid=\u003Cid>`); the report can then surface that identifier in cohort CSVs and the customer merges results back into their CRM list.\n\n   If `bucket.json` from step 2 already has a `join_id_key`, hold that value and continue silently.\n\n   Otherwise, output verbatim and wait for a reply:\n\n   > Optional: do your email campaigns embed a per-recipient identifier in URLs (e.g. `?pid=...`)? If so, what's the parameter name? Type the name (e.g. `pid`) or \"skip\" if you don't have this set up yet – you can configure it later by re-running setup.\n\n   Treat any reply of `skip`, `no`, `none`, or empty as \"no key configured\" and continue without setting one. Otherwise record the reply as the `join_id_key` value. Don't validate further (the report harmlessly emits empty values until matching `?\u003Ckey>=...` URLs land in cached events).\n\n8. **Persist the runtime config** (silent on success). Derive a `cache_dir` slug from the bucket name by stripping the `parsely-dw-` prefix (e.g. `parsely-dw-acme` → `acme`, `parsely-dw-acme-co` → `acme-co`). If the bucket doesn't start with `parsely-dw-`, use the full bucket name as the slug. Then write `${XDG_CONFIG_HOME:-~\u002F.config}\u002Fagentic-analytics\u002Fbucket.json` (`mkdir -p` the directory first if needed), substituting the bucket value held from step 2 for `\u003Cbucket>`. Include `join_id_key` only when step 7 captured a value:\n\n   ```json\n   {\n     \"bucket\": \"\u003Cbucket>\",\n     \"profile\": \"agentic-analytics\",\n     \"cache_dir\": \"\u003Cslug>\",\n     \"join_id_key\": \"\u003Ckey>\"\n   }\n   ```\n\n   Safe to overwrite on re-runs: this is the file step 2 reads from on subsequent inits.\n\n9. **Show what's available.** Output verbatim:\n\n   > You're all set. Here's what the plugin can do today:\n   >\n   > **Staircase report** – visitor-tier audience report (1 visit \u002F 2-4 \u002F 5+) over a 60-day window, comparing the most recent 30 days against the prior 30. Shows tier counts, deltas, tier-to-tier transitions, and per-channel climb yield (the fraction of each channel's prior-window arrivals whose tier rank rose in the current window).\n   >\n   > Two ways to run it:\n   >\n   > - `\u002Fagentic-analytics:staircase` runs across every site in your bucket.\n   > - `\u002Fagentic-analytics:staircase \u003Csite>` filters to one site (e.g. `your-site.com`).\n   >\n   > Or just ask in chat: \"Run the staircase report.\"\n\n10. **Suggest a first thing to try.** Output verbatim:\n\n   > Want to try it? Just say:\n   >\n   > ```\n   > Run the staircase report\n   > ```\n\n## Cross-platform notes\n\n- **macOS (Darwin):** primary supported platform. All steps verified there.\n  - Python 3 missing: offer to run `xcode-select --install` in the shell. The user has to click through the GUI dialog. Wait for them to confirm.\n  - AWS CLI missing: point to [aws.amazon.com\u002Fcli](https:\u002F\u002Faws.amazon.com\u002Fcli\u002F) for the installer.\n- **Linux:** supported via the same flow with distro-specific package commands.\n  - Python 3 missing: `sudo apt install python3` (Debian\u002FUbuntu), `sudo dnf install python3` (Fedora\u002FRHEL), `sudo apk add python3` (Alpine). User runs it themselves.\n  - AWS CLI missing: distro package (`sudo apt install awscli` etc.) or Amazon's curl-based installer per [aws.amazon.com\u002Fcli](https:\u002F\u002Faws.amazon.com\u002Fcli\u002F).\n- **Native Windows:** not officially supported in v1. WSL users can follow the Linux path.\n\n## Out of scope for v1\n\n- No synthetic data fallback. v1 assumes the user has real DPL access; the \"first thing to try\" runs against their data.\n- No support for non-S3 DPL delivery formats. v1 assumes S3-direct access.\n- No multi-bucket configuration. A customer with multiple Parse.ly buckets (rare) can clear the saved configs and re-run setup to switch, but only one bucket is active at a time.\n",{"data":33,"body":34},{"name":4,"description":6},{"type":35,"children":36},"root",[37,46,69,74,81,86,205,211,216,222,1454,1471,1477,1593,1599,1617],{"type":38,"tag":39,"props":40,"children":42},"element","h1",{"id":41},"first-run-onboarding",[43],{"type":44,"value":45},"text","First-run onboarding",{"type":38,"tag":47,"props":48,"children":49},"p",{},[50,52,59,61,67],{"type":44,"value":51},"This is the first thing a new user runs after installing the plugin. Init asks for the bucket name in chat (the only piece of customer data the plugin needs that isn't already on disk), walks the user through ",{"type":38,"tag":53,"props":54,"children":56},"code",{"className":55},[],[57],{"type":44,"value":58},"aws configure",{"type":44,"value":60}," for their AWS credentials, verifies, and persists the runtime config to ",{"type":38,"tag":53,"props":62,"children":64},{"className":63},[],[65],{"type":44,"value":66},"bucket.json",{"type":44,"value":68},".",{"type":38,"tag":47,"props":70,"children":71},{},[72],{"type":44,"value":73},"The plugin gives the user direct access to their Parse.ly Data Pipeline (DPL) so they can ask questions of their raw event firehose in chat. More data sources land in future versions; v1 is DPL only.",{"type":38,"tag":75,"props":76,"children":78},"h2",{"id":77},"output-discipline",[79],{"type":44,"value":80},"Output discipline",{"type":38,"tag":47,"props":82,"children":83},{},[84],{"type":44,"value":85},"This is a customer-facing first-run flow. Keep it quiet and on-script.",{"type":38,"tag":87,"props":88,"children":89},"ul",{},[90,110,128,138,148,164],{"type":38,"tag":91,"props":92,"children":93},"li",{},[94,100,102,108],{"type":38,"tag":95,"props":96,"children":97},"strong",{},[98],{"type":44,"value":99},"Verbatim where shown.",{"type":44,"value":101}," Blockquoted text (",{"type":38,"tag":53,"props":103,"children":105},{"className":104},[],[106],{"type":44,"value":107},"> like this",{"type":44,"value":109},") prescribes the exact words you say to the user. Output those words and nothing else for that step.",{"type":38,"tag":91,"props":111,"children":112},{},[113,118,120,126],{"type":38,"tag":95,"props":114,"children":115},{},[116],{"type":44,"value":117},"Silent steps stay silent.",{"type":44,"value":119}," Steps tagged ",{"type":38,"tag":53,"props":121,"children":123},{"className":122},[],[124],{"type":44,"value":125},"(silent on success)",{"type":44,"value":127}," produce no chat output when they succeed. Run the shell command, move on. Don't summarize results, don't announce upcoming actions, don't recap state.",{"type":38,"tag":91,"props":129,"children":130},{},[131,136],{"type":38,"tag":95,"props":132,"children":133},{},[134],{"type":44,"value":135},"No task lists.",{"type":44,"value":137}," Don't surface this flow as a todo\u002Ftask list.",{"type":38,"tag":91,"props":139,"children":140},{},[141,146],{"type":38,"tag":95,"props":142,"children":143},{},[144],{"type":44,"value":145},"Off-script questions get short answers, then resume.",{"type":44,"value":147}," If the customer interrupts with a question, answer briefly and pick up at the next step.",{"type":38,"tag":91,"props":149,"children":150},{},[151,162],{"type":38,"tag":95,"props":152,"children":153},{},[154,156,161],{"type":44,"value":155},"Bucket name lives in ",{"type":38,"tag":53,"props":157,"children":159},{"className":158},[],[160],{"type":44,"value":66},{"type":44,"value":68},{"type":44,"value":163}," If it's already there from a previous run, reuse it silently. Only ask the customer for it if it isn't.",{"type":38,"tag":91,"props":165,"children":166},{},[167,179,181,187,189,195,197,203],{"type":38,"tag":95,"props":168,"children":169},{},[170,172,178],{"type":44,"value":171},"AWS credentials live in ",{"type":38,"tag":53,"props":173,"children":175},{"className":174},[],[176],{"type":44,"value":177},"~\u002F.aws\u002Fcredentials",{"type":44,"value":68},{"type":44,"value":180}," They're set up by the user via ",{"type":38,"tag":53,"props":182,"children":184},{"className":183},[],[185],{"type":44,"value":186},"aws configure --profile agentic-analytics",{"type":44,"value":188}," in step 5. Subsequent ",{"type":38,"tag":53,"props":190,"children":192},{"className":191},[],[193],{"type":44,"value":194},"aws",{"type":44,"value":196}," invocations pick them up via ",{"type":38,"tag":53,"props":198,"children":200},{"className":199},[],[201],{"type":44,"value":202},"--profile agentic-analytics",{"type":44,"value":204},". Never ask for them in chat.",{"type":38,"tag":75,"props":206,"children":208},{"id":207},"tone",[209],{"type":44,"value":210},"Tone",{"type":38,"tag":47,"props":212,"children":213},{},[214],{"type":44,"value":215},"Welcoming, not robust. The user is a Parse.ly customer, so don't explain Parse.ly or the DPL to them. The goal is a productive first run, not a tutorial.",{"type":38,"tag":75,"props":217,"children":219},{"id":218},"steps",[220],{"type":44,"value":221},"Steps",{"type":38,"tag":223,"props":224,"children":225},"ol",{},[226,251,309,607,687,878,999,1108,1374,1445],{"type":38,"tag":91,"props":227,"children":228},{},[229,234,236,245,249],{"type":38,"tag":95,"props":230,"children":231},{},[232],{"type":44,"value":233},"Greet briefly.",{"type":44,"value":235}," Output this verbatim, then immediately continue to step 2:",{"type":38,"tag":237,"props":238,"children":239},"blockquote",{},[240],{"type":38,"tag":47,"props":241,"children":242},{},[243],{"type":44,"value":244},"Setting up your Parse.ly Data Pipeline access – about thirty seconds.",{"type":38,"tag":246,"props":247,"children":248},"br",{},[],{"type":44,"value":250},"Do not wait for the user to respond. The customer's \"yes\" was their request to set up; nothing destructive happens here so no further confirmation is needed.",{"type":38,"tag":91,"props":252,"children":253},{},[254,259,261,267,269,275,277,280,282,304,307],{"type":38,"tag":95,"props":255,"children":256},{},[257],{"type":44,"value":258},"Get the bucket name.",{"type":44,"value":260}," Look at ",{"type":38,"tag":53,"props":262,"children":264},{"className":263},[],[265],{"type":44,"value":266},"${XDG_CONFIG_HOME:-$HOME\u002F.config}\u002Fagentic-analytics\u002Fbucket.json",{"type":44,"value":268},". If it exists and has a ",{"type":38,"tag":53,"props":270,"children":272},{"className":271},[],[273],{"type":44,"value":274},"bucket",{"type":44,"value":276}," field, hold that value and continue silently (subsequent steps reuse it; this is the idempotent re-run path).",{"type":38,"tag":246,"props":278,"children":279},{},[],{"type":44,"value":281},"If the file doesn't exist or the field is missing, output verbatim and wait for a reply:",{"type":38,"tag":237,"props":283,"children":284},{},[285],{"type":38,"tag":47,"props":286,"children":287},{},[288,290,295,297,303],{"type":44,"value":289},"What's the ",{"type":38,"tag":95,"props":291,"children":292},{},[293],{"type":44,"value":294},"bucket name",{"type":44,"value":296}," holding your DPL events? Your Parse.ly contact should have provided this – it usually looks like ",{"type":38,"tag":53,"props":298,"children":300},{"className":299},[],[301],{"type":44,"value":302},"parsely-dw-\u003Cpublisher>",{"type":44,"value":68},{"type":38,"tag":246,"props":305,"children":306},{},[],{"type":44,"value":308},"Record the user's reply as the bucket value. Don't validate the format (step 6's connectivity check is the real test). If the user doesn't have a bucket name, tell them to reach back out to their Parse.ly contact and stop here.",{"type":38,"tag":91,"props":310,"children":311},{},[312,317,319,325,327,333,335,341,343,349,351,354,356,362,364,370,372,378,380,594,597,599,605],{"type":38,"tag":95,"props":313,"children":314},{},[315],{"type":44,"value":316},"Detect platform and check prerequisites",{"type":44,"value":318}," (silent on success). Run ",{"type":38,"tag":53,"props":320,"children":322},{"className":321},[],[323],{"type":44,"value":324},"uname -s",{"type":44,"value":326},", ",{"type":38,"tag":53,"props":328,"children":330},{"className":329},[],[331],{"type":44,"value":332},"python3 --version",{"type":44,"value":334},", and ",{"type":38,"tag":53,"props":336,"children":338},{"className":337},[],[339],{"type":44,"value":340},"aws --version",{"type":44,"value":342},". If platform is ",{"type":38,"tag":53,"props":344,"children":346},{"className":345},[],[347],{"type":44,"value":348},"Darwin",{"type":44,"value":350}," or Linux-family and both tools resolve, continue without comment. If platform is native Windows (no WSL) or a prerequisite is missing, surface the issue and follow the install guidance in \"Cross-platform notes\" below.",{"type":38,"tag":246,"props":352,"children":353},{},[],{"type":44,"value":355},"Then create the plugin's isolated Python venv and install DuckDB into it (silent on success). The venv lives at ",{"type":38,"tag":53,"props":357,"children":359},{"className":358},[],[360],{"type":44,"value":361},"$AGENTIC_ANALYTICS_DATA_DIR\u002Fvenv",{"type":44,"value":363}," (default ",{"type":38,"tag":53,"props":365,"children":367},{"className":366},[],[368],{"type":44,"value":369},"~\u002F.local\u002Fshare\u002Fagentic-analytics\u002Fvenv",{"type":44,"value":371},"); ",{"type":38,"tag":53,"props":373,"children":375},{"className":374},[],[376],{"type":44,"value":377},"ensure_venv.sh",{"type":44,"value":379}," is idempotent — it's a fast no-op if the venv already exists and DuckDB is importable, so this only installs once and is safe to re-run:",{"type":38,"tag":381,"props":382,"children":387},"pre",{"className":383,"code":384,"language":385,"meta":386,"style":386},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","plugin_root=\"${CLAUDE_PLUGIN_ROOT:-${CURSOR_PLUGIN_ROOT:-\u003Cplugin-root>}}\"\nbash \"$plugin_root\u002Fscripts\u002Fensure_venv.sh\" \\\n  \"${AGENTIC_ANALYTICS_VENV:-${AGENTIC_ANALYTICS_DATA_DIR:-$HOME\u002F.local\u002Fshare\u002Fagentic-analytics}\u002Fvenv}\" \\\n  \"$plugin_root\u002Frequirements.txt\"\n","bash","",[388],{"type":38,"tag":53,"props":389,"children":390},{"__ignoreMap":386},[391,454,488,571],{"type":38,"tag":392,"props":393,"children":395},"span",{"class":394,"line":22},"line",[396,402,408,413,418,423,428,433,439,444,449],{"type":38,"tag":392,"props":397,"children":399},{"style":398},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[400],{"type":44,"value":401},"plugin_root",{"type":38,"tag":392,"props":403,"children":405},{"style":404},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[406],{"type":44,"value":407},"=",{"type":38,"tag":392,"props":409,"children":410},{"style":404},[411],{"type":44,"value":412},"\"${",{"type":38,"tag":392,"props":414,"children":415},{"style":398},[416],{"type":44,"value":417},"CLAUDE_PLUGIN_ROOT",{"type":38,"tag":392,"props":419,"children":420},{"style":404},[421],{"type":44,"value":422},":-${",{"type":38,"tag":392,"props":424,"children":425},{"style":398},[426],{"type":44,"value":427},"CURSOR_PLUGIN_ROOT",{"type":38,"tag":392,"props":429,"children":430},{"style":404},[431],{"type":44,"value":432},":-",{"type":38,"tag":392,"props":434,"children":436},{"style":435},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[437],{"type":44,"value":438},"\u003C",{"type":38,"tag":392,"props":440,"children":441},{"style":398},[442],{"type":44,"value":443},"plugin-root",{"type":38,"tag":392,"props":445,"children":446},{"style":435},[447],{"type":44,"value":448},">",{"type":38,"tag":392,"props":450,"children":451},{"style":404},[452],{"type":44,"value":453},"}}\"\n",{"type":38,"tag":392,"props":455,"children":457},{"class":394,"line":456},2,[458,463,468,473,478,483],{"type":38,"tag":392,"props":459,"children":461},{"style":460},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[462],{"type":44,"value":385},{"type":38,"tag":392,"props":464,"children":465},{"style":404},[466],{"type":44,"value":467}," \"",{"type":38,"tag":392,"props":469,"children":470},{"style":398},[471],{"type":44,"value":472},"$plugin_root",{"type":38,"tag":392,"props":474,"children":475},{"style":435},[476],{"type":44,"value":477},"\u002Fscripts\u002Fensure_venv.sh",{"type":38,"tag":392,"props":479,"children":480},{"style":404},[481],{"type":44,"value":482},"\"",{"type":38,"tag":392,"props":484,"children":485},{"style":398},[486],{"type":44,"value":487}," \\\n",{"type":38,"tag":392,"props":489,"children":491},{"class":394,"line":490},3,[492,497,502,506,511,515,520,525,529,534,538,543,547,552,557,562,567],{"type":38,"tag":392,"props":493,"children":494},{"style":404},[495],{"type":44,"value":496},"  \"${",{"type":38,"tag":392,"props":498,"children":499},{"style":398},[500],{"type":44,"value":501},"AGENTIC_ANALYTICS_VENV",{"type":38,"tag":392,"props":503,"children":504},{"style":404},[505],{"type":44,"value":422},{"type":38,"tag":392,"props":507,"children":508},{"style":398},[509],{"type":44,"value":510},"AGENTIC_ANALYTICS_DATA_DIR",{"type":38,"tag":392,"props":512,"children":513},{"style":404},[514],{"type":44,"value":432},{"type":38,"tag":392,"props":516,"children":517},{"style":398},[518],{"type":44,"value":519},"$HOME",{"type":38,"tag":392,"props":521,"children":522},{"style":404},[523],{"type":44,"value":524},"\u002F",{"type":38,"tag":392,"props":526,"children":527},{"style":435},[528],{"type":44,"value":68},{"type":38,"tag":392,"props":530,"children":531},{"style":398},[532],{"type":44,"value":533},"local",{"type":38,"tag":392,"props":535,"children":536},{"style":404},[537],{"type":44,"value":524},{"type":38,"tag":392,"props":539,"children":540},{"style":398},[541],{"type":44,"value":542},"share",{"type":38,"tag":392,"props":544,"children":545},{"style":404},[546],{"type":44,"value":524},{"type":38,"tag":392,"props":548,"children":549},{"style":398},[550],{"type":44,"value":551},"agentic-analytics",{"type":38,"tag":392,"props":553,"children":554},{"style":404},[555],{"type":44,"value":556},"}\u002F",{"type":38,"tag":392,"props":558,"children":559},{"style":398},[560],{"type":44,"value":561},"venv",{"type":38,"tag":392,"props":563,"children":564},{"style":404},[565],{"type":44,"value":566},"}\"",{"type":38,"tag":392,"props":568,"children":569},{"style":398},[570],{"type":44,"value":487},{"type":38,"tag":392,"props":572,"children":574},{"class":394,"line":573},4,[575,580,584,589],{"type":38,"tag":392,"props":576,"children":577},{"style":404},[578],{"type":44,"value":579},"  \"",{"type":38,"tag":392,"props":581,"children":582},{"style":398},[583],{"type":44,"value":472},{"type":38,"tag":392,"props":585,"children":586},{"style":435},[587],{"type":44,"value":588},"\u002Frequirements.txt",{"type":38,"tag":392,"props":590,"children":591},{"style":404},[592],{"type":44,"value":593},"\"\n",{"type":38,"tag":246,"props":595,"children":596},{},[],{"type":44,"value":598},"Using an isolated venv (rather than ",{"type":38,"tag":53,"props":600,"children":602},{"className":601},[],[603],{"type":44,"value":604},"pip install",{"type":44,"value":606}," into your system Python) avoids PEP 668 \"externally-managed-environment\" failures on Homebrew and some distro Pythons — nothing is installed system-wide, and the plugin doesn't make assumptions about your Python install.",{"type":38,"tag":91,"props":608,"children":609},{},[610,615,617],{"type":38,"tag":95,"props":611,"children":612},{},[613],{"type":44,"value":614},"Ensure the data directory exists",{"type":44,"value":616}," (silent). Safe to run unconditionally:",{"type":38,"tag":381,"props":618,"children":620},{"className":383,"code":619,"language":385,"meta":386,"style":386},"mkdir -p \"${AGENTIC_ANALYTICS_DATA_DIR:-$HOME\u002F.local\u002Fshare\u002Fagentic-analytics}\"\n",[621],{"type":38,"tag":53,"props":622,"children":623},{"__ignoreMap":386},[624],{"type":38,"tag":392,"props":625,"children":626},{"class":394,"line":22},[627,632,637,642,646,650,654,658,662,666,670,674,678,682],{"type":38,"tag":392,"props":628,"children":629},{"style":460},[630],{"type":44,"value":631},"mkdir",{"type":38,"tag":392,"props":633,"children":634},{"style":435},[635],{"type":44,"value":636}," -p",{"type":38,"tag":392,"props":638,"children":639},{"style":404},[640],{"type":44,"value":641}," \"${",{"type":38,"tag":392,"props":643,"children":644},{"style":398},[645],{"type":44,"value":510},{"type":38,"tag":392,"props":647,"children":648},{"style":404},[649],{"type":44,"value":432},{"type":38,"tag":392,"props":651,"children":652},{"style":398},[653],{"type":44,"value":519},{"type":38,"tag":392,"props":655,"children":656},{"style":404},[657],{"type":44,"value":524},{"type":38,"tag":392,"props":659,"children":660},{"style":435},[661],{"type":44,"value":68},{"type":38,"tag":392,"props":663,"children":664},{"style":398},[665],{"type":44,"value":533},{"type":38,"tag":392,"props":667,"children":668},{"style":404},[669],{"type":44,"value":524},{"type":38,"tag":392,"props":671,"children":672},{"style":398},[673],{"type":44,"value":542},{"type":38,"tag":392,"props":675,"children":676},{"style":404},[677],{"type":44,"value":524},{"type":38,"tag":392,"props":679,"children":680},{"style":398},[681],{"type":44,"value":551},{"type":38,"tag":392,"props":683,"children":684},{"style":404},[685],{"type":44,"value":686},"}\"\n",{"type":38,"tag":91,"props":688,"children":689},{},[690,695,697,774,777,779,826,829,831,834,836,873,876],{"type":38,"tag":95,"props":691,"children":692},{},[693],{"type":44,"value":694},"Set up AWS credentials.",{"type":44,"value":696}," Pre-set region and output format silently (idempotent – safe on re-runs):",{"type":38,"tag":381,"props":698,"children":700},{"className":383,"code":699,"language":385,"meta":386,"style":386},"aws configure set region us-east-1 --profile agentic-analytics\naws configure set output json --profile agentic-analytics\n",[701],{"type":38,"tag":53,"props":702,"children":703},{"__ignoreMap":386},[704,741],{"type":38,"tag":392,"props":705,"children":706},{"class":394,"line":22},[707,711,716,721,726,731,736],{"type":38,"tag":392,"props":708,"children":709},{"style":460},[710],{"type":44,"value":194},{"type":38,"tag":392,"props":712,"children":713},{"style":435},[714],{"type":44,"value":715}," configure",{"type":38,"tag":392,"props":717,"children":718},{"style":435},[719],{"type":44,"value":720}," set",{"type":38,"tag":392,"props":722,"children":723},{"style":435},[724],{"type":44,"value":725}," region",{"type":38,"tag":392,"props":727,"children":728},{"style":435},[729],{"type":44,"value":730}," us-east-1",{"type":38,"tag":392,"props":732,"children":733},{"style":435},[734],{"type":44,"value":735}," --profile",{"type":38,"tag":392,"props":737,"children":738},{"style":435},[739],{"type":44,"value":740}," agentic-analytics\n",{"type":38,"tag":392,"props":742,"children":743},{"class":394,"line":456},[744,748,752,756,761,766,770],{"type":38,"tag":392,"props":745,"children":746},{"style":460},[747],{"type":44,"value":194},{"type":38,"tag":392,"props":749,"children":750},{"style":435},[751],{"type":44,"value":715},{"type":38,"tag":392,"props":753,"children":754},{"style":435},[755],{"type":44,"value":720},{"type":38,"tag":392,"props":757,"children":758},{"style":435},[759],{"type":44,"value":760}," output",{"type":38,"tag":392,"props":762,"children":763},{"style":435},[764],{"type":44,"value":765}," json",{"type":38,"tag":392,"props":767,"children":768},{"style":435},[769],{"type":44,"value":735},{"type":38,"tag":392,"props":771,"children":772},{"style":435},[773],{"type":44,"value":740},{"type":38,"tag":246,"props":775,"children":776},{},[],{"type":44,"value":778},"Then check whether an access key is already configured for the profile:",{"type":38,"tag":381,"props":780,"children":782},{"className":383,"code":781,"language":385,"meta":386,"style":386},"aws configure get aws_access_key_id --profile agentic-analytics 2>\u002Fdev\u002Fnull\n",[783],{"type":38,"tag":53,"props":784,"children":785},{"__ignoreMap":386},[786],{"type":38,"tag":392,"props":787,"children":788},{"class":394,"line":22},[789,793,797,802,807,811,816,821],{"type":38,"tag":392,"props":790,"children":791},{"style":460},[792],{"type":44,"value":194},{"type":38,"tag":392,"props":794,"children":795},{"style":435},[796],{"type":44,"value":715},{"type":38,"tag":392,"props":798,"children":799},{"style":435},[800],{"type":44,"value":801}," get",{"type":38,"tag":392,"props":803,"children":804},{"style":435},[805],{"type":44,"value":806}," aws_access_key_id",{"type":38,"tag":392,"props":808,"children":809},{"style":435},[810],{"type":44,"value":735},{"type":38,"tag":392,"props":812,"children":813},{"style":435},[814],{"type":44,"value":815}," agentic-analytics",{"type":38,"tag":392,"props":817,"children":818},{"style":404},[819],{"type":44,"value":820}," 2>",{"type":38,"tag":392,"props":822,"children":823},{"style":435},[824],{"type":44,"value":825},"\u002Fdev\u002Fnull\n",{"type":38,"tag":246,"props":827,"children":828},{},[],{"type":44,"value":830},"If that returns a non-empty value, the user already set up credentials on a previous run. Continue silently to step 6 – no verbatim instruction needed.",{"type":38,"tag":246,"props":832,"children":833},{},[],{"type":44,"value":835},"If it returns empty (no access key set), the user needs to set up credentials. Output verbatim:",{"type":38,"tag":237,"props":837,"children":838},{},[839,844,854,859,868],{"type":38,"tag":47,"props":840,"children":841},{},[842],{"type":44,"value":843},"Now your access key and secret. Open a new terminal window and run:",{"type":38,"tag":381,"props":845,"children":849},{"className":846,"code":848,"language":44},[847],"language-text","aws configure --profile agentic-analytics\n",[850],{"type":38,"tag":53,"props":851,"children":852},{"__ignoreMap":386},[853],{"type":44,"value":848},{"type":38,"tag":47,"props":855,"children":856},{},[857],{"type":44,"value":858},"You'll see four prompts in order. Here's what to do at each:",{"type":38,"tag":381,"props":860,"children":863},{"className":861,"code":862,"language":44},[847],"AWS Access Key ID [None]:        # paste your access key, then Enter\nAWS Secret Access Key [None]:    # paste your secret, then Enter (input is hidden – that's normal)\nDefault region name [us-east-1]: # just press Enter (already set)\nDefault output format [json]:    # just press Enter (already set)\n",[864],{"type":38,"tag":53,"props":865,"children":866},{"__ignoreMap":386},[867],{"type":44,"value":862},{"type":38,"tag":47,"props":869,"children":870},{},[871],{"type":44,"value":872},"When your shell prompt comes back, let me know.",{"type":38,"tag":246,"props":874,"children":875},{},[],{"type":44,"value":877},"Wait for the user to confirm completion before continuing.",{"type":38,"tag":91,"props":879,"children":880},{},[881,886,888,894,896,951,954,956,994,997],{"type":38,"tag":95,"props":882,"children":883},{},[884],{"type":44,"value":885},"Verify connectivity",{"type":44,"value":887}," (silent on success). List the by-apikey parquet prefix, substituting the bucket value held from step 2 for ",{"type":38,"tag":53,"props":889,"children":891},{"className":890},[],[892],{"type":44,"value":893},"\u003Cbucket>",{"type":44,"value":895},":",{"type":38,"tag":381,"props":897,"children":899},{"className":383,"code":898,"language":385,"meta":386,"style":386},"aws --profile agentic-analytics s3 ls \"s3:\u002F\u002F\u003Cbucket>\u002Fby-apikey\u002F\" | head\n",[900],{"type":38,"tag":53,"props":901,"children":902},{"__ignoreMap":386},[903],{"type":38,"tag":392,"props":904,"children":905},{"class":394,"line":22},[906,910,914,918,923,928,932,937,941,946],{"type":38,"tag":392,"props":907,"children":908},{"style":460},[909],{"type":44,"value":194},{"type":38,"tag":392,"props":911,"children":912},{"style":435},[913],{"type":44,"value":735},{"type":38,"tag":392,"props":915,"children":916},{"style":435},[917],{"type":44,"value":815},{"type":38,"tag":392,"props":919,"children":920},{"style":435},[921],{"type":44,"value":922}," s3",{"type":38,"tag":392,"props":924,"children":925},{"style":435},[926],{"type":44,"value":927}," ls",{"type":38,"tag":392,"props":929,"children":930},{"style":404},[931],{"type":44,"value":467},{"type":38,"tag":392,"props":933,"children":934},{"style":435},[935],{"type":44,"value":936},"s3:\u002F\u002F\u003Cbucket>\u002Fby-apikey\u002F",{"type":38,"tag":392,"props":938,"children":939},{"style":404},[940],{"type":44,"value":482},{"type":38,"tag":392,"props":942,"children":943},{"style":404},[944],{"type":44,"value":945}," |",{"type":38,"tag":392,"props":947,"children":948},{"style":460},[949],{"type":44,"value":950}," head\n",{"type":38,"tag":246,"props":952,"children":953},{},[],{"type":44,"value":955},"If files come back, continue without comment. If the listing is empty or errors, output verbatim:",{"type":38,"tag":237,"props":957,"children":958},{},[959,964,989],{"type":38,"tag":47,"props":960,"children":961},{},[962],{"type":44,"value":963},"I couldn't list files in your bucket. The most likely causes:",{"type":38,"tag":87,"props":965,"children":966},{},[967,972,984],{"type":38,"tag":91,"props":968,"children":969},{},[970],{"type":44,"value":971},"The bucket name has a typo. Want to re-enter it? (Clear the saved configs, then run setup again.)",{"type":38,"tag":91,"props":973,"children":974},{},[975,977,982],{"type":44,"value":976},"Your AWS access key or secret has a typo. Re-run ",{"type":38,"tag":53,"props":978,"children":980},{"className":979},[],[981],{"type":44,"value":186},{"type":44,"value":983}," in your terminal to redo them.",{"type":38,"tag":91,"props":985,"children":986},{},[987],{"type":44,"value":988},"The AWS keys haven't propagated on Parse.ly's side yet (can take a minute). Want to wait and retry?",{"type":38,"tag":47,"props":990,"children":991},{},[992],{"type":44,"value":993},"Let me know how you'd like to proceed.",{"type":38,"tag":246,"props":995,"children":996},{},[],{"type":44,"value":998},"Do not continue until verify passes.",{"type":38,"tag":91,"props":1000,"children":1001},{},[1002,1007,1009,1015,1017,1020,1022,1027,1029,1035,1037,1040,1042,1066,1069,1071,1077,1078,1084,1085,1091,1093,1098,1100,1106],{"type":38,"tag":95,"props":1003,"children":1004},{},[1005],{"type":44,"value":1006},"Offer to wire up the email-campaign join key.",{"type":44,"value":1008}," Reports include \"cohort CSVs\" – lists of visitors who churned, are at risk of churning, or just became brand lovers. By default these are keyed on a Parse.ly cookie hash that's opaque to your CRM, so they're useful for diagnosis but not for direct re-engagement sends. The fix is for the customer to mint a per-recipient identifier and embed it in URLs in their email campaigns (e.g. ",{"type":38,"tag":53,"props":1010,"children":1012},{"className":1011},[],[1013],{"type":44,"value":1014},"?pid=\u003Cid>",{"type":44,"value":1016},"); the report can then surface that identifier in cohort CSVs and the customer merges results back into their CRM list.",{"type":38,"tag":246,"props":1018,"children":1019},{},[],{"type":44,"value":1021},"If ",{"type":38,"tag":53,"props":1023,"children":1025},{"className":1024},[],[1026],{"type":44,"value":66},{"type":44,"value":1028}," from step 2 already has a ",{"type":38,"tag":53,"props":1030,"children":1032},{"className":1031},[],[1033],{"type":44,"value":1034},"join_id_key",{"type":44,"value":1036},", hold that value and continue silently.",{"type":38,"tag":246,"props":1038,"children":1039},{},[],{"type":44,"value":1041},"Otherwise, output verbatim and wait for a reply:",{"type":38,"tag":237,"props":1043,"children":1044},{},[1045],{"type":38,"tag":47,"props":1046,"children":1047},{},[1048,1050,1056,1058,1064],{"type":44,"value":1049},"Optional: do your email campaigns embed a per-recipient identifier in URLs (e.g. ",{"type":38,"tag":53,"props":1051,"children":1053},{"className":1052},[],[1054],{"type":44,"value":1055},"?pid=...",{"type":44,"value":1057},")? If so, what's the parameter name? Type the name (e.g. ",{"type":38,"tag":53,"props":1059,"children":1061},{"className":1060},[],[1062],{"type":44,"value":1063},"pid",{"type":44,"value":1065},") or \"skip\" if you don't have this set up yet – you can configure it later by re-running setup.",{"type":38,"tag":246,"props":1067,"children":1068},{},[],{"type":44,"value":1070},"Treat any reply of ",{"type":38,"tag":53,"props":1072,"children":1074},{"className":1073},[],[1075],{"type":44,"value":1076},"skip",{"type":44,"value":326},{"type":38,"tag":53,"props":1079,"children":1081},{"className":1080},[],[1082],{"type":44,"value":1083},"no",{"type":44,"value":326},{"type":38,"tag":53,"props":1086,"children":1088},{"className":1087},[],[1089],{"type":44,"value":1090},"none",{"type":44,"value":1092},", or empty as \"no key configured\" and continue without setting one. Otherwise record the reply as the ",{"type":38,"tag":53,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":44,"value":1034},{"type":44,"value":1099}," value. Don't validate further (the report harmlessly emits empty values until matching ",{"type":38,"tag":53,"props":1101,"children":1103},{"className":1102},[],[1104],{"type":44,"value":1105},"?\u003Ckey>=...",{"type":44,"value":1107}," URLs land in cached events).",{"type":38,"tag":91,"props":1109,"children":1110},{},[1111,1116,1118,1124,1126,1132,1134,1140,1142,1148,1149,1155,1156,1162,1164,1169,1171,1177,1179,1185,1187,1192,1194,1199,1201,1369,1372],{"type":38,"tag":95,"props":1112,"children":1113},{},[1114],{"type":44,"value":1115},"Persist the runtime config",{"type":44,"value":1117}," (silent on success). Derive a ",{"type":38,"tag":53,"props":1119,"children":1121},{"className":1120},[],[1122],{"type":44,"value":1123},"cache_dir",{"type":44,"value":1125}," slug from the bucket name by stripping the ",{"type":38,"tag":53,"props":1127,"children":1129},{"className":1128},[],[1130],{"type":44,"value":1131},"parsely-dw-",{"type":44,"value":1133}," prefix (e.g. ",{"type":38,"tag":53,"props":1135,"children":1137},{"className":1136},[],[1138],{"type":44,"value":1139},"parsely-dw-acme",{"type":44,"value":1141}," → ",{"type":38,"tag":53,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":44,"value":1147},"acme",{"type":44,"value":326},{"type":38,"tag":53,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":44,"value":1154},"parsely-dw-acme-co",{"type":44,"value":1141},{"type":38,"tag":53,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":44,"value":1161},"acme-co",{"type":44,"value":1163},"). If the bucket doesn't start with ",{"type":38,"tag":53,"props":1165,"children":1167},{"className":1166},[],[1168],{"type":44,"value":1131},{"type":44,"value":1170},", use the full bucket name as the slug. Then write ",{"type":38,"tag":53,"props":1172,"children":1174},{"className":1173},[],[1175],{"type":44,"value":1176},"${XDG_CONFIG_HOME:-~\u002F.config}\u002Fagentic-analytics\u002Fbucket.json",{"type":44,"value":1178}," (",{"type":38,"tag":53,"props":1180,"children":1182},{"className":1181},[],[1183],{"type":44,"value":1184},"mkdir -p",{"type":44,"value":1186}," the directory first if needed), substituting the bucket value held from step 2 for ",{"type":38,"tag":53,"props":1188,"children":1190},{"className":1189},[],[1191],{"type":44,"value":893},{"type":44,"value":1193},". Include ",{"type":38,"tag":53,"props":1195,"children":1197},{"className":1196},[],[1198],{"type":44,"value":1034},{"type":44,"value":1200}," only when step 7 captured a value:",{"type":38,"tag":381,"props":1202,"children":1206},{"className":1203,"code":1204,"language":1205,"meta":386,"style":386},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"bucket\": \"\u003Cbucket>\",\n  \"profile\": \"agentic-analytics\",\n  \"cache_dir\": \"\u003Cslug>\",\n  \"join_id_key\": \"\u003Ckey>\"\n}\n","json",[1207],{"type":38,"tag":53,"props":1208,"children":1209},{"__ignoreMap":386},[1210,1218,1255,1291,1327,1360],{"type":38,"tag":392,"props":1211,"children":1212},{"class":394,"line":22},[1213],{"type":38,"tag":392,"props":1214,"children":1215},{"style":404},[1216],{"type":44,"value":1217},"{\n",{"type":38,"tag":392,"props":1219,"children":1220},{"class":394,"line":456},[1221,1225,1230,1234,1238,1242,1246,1250],{"type":38,"tag":392,"props":1222,"children":1223},{"style":404},[1224],{"type":44,"value":579},{"type":38,"tag":392,"props":1226,"children":1228},{"style":1227},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1229],{"type":44,"value":274},{"type":38,"tag":392,"props":1231,"children":1232},{"style":404},[1233],{"type":44,"value":482},{"type":38,"tag":392,"props":1235,"children":1236},{"style":404},[1237],{"type":44,"value":895},{"type":38,"tag":392,"props":1239,"children":1240},{"style":404},[1241],{"type":44,"value":467},{"type":38,"tag":392,"props":1243,"children":1244},{"style":435},[1245],{"type":44,"value":893},{"type":38,"tag":392,"props":1247,"children":1248},{"style":404},[1249],{"type":44,"value":482},{"type":38,"tag":392,"props":1251,"children":1252},{"style":404},[1253],{"type":44,"value":1254},",\n",{"type":38,"tag":392,"props":1256,"children":1257},{"class":394,"line":490},[1258,1262,1267,1271,1275,1279,1283,1287],{"type":38,"tag":392,"props":1259,"children":1260},{"style":404},[1261],{"type":44,"value":579},{"type":38,"tag":392,"props":1263,"children":1264},{"style":1227},[1265],{"type":44,"value":1266},"profile",{"type":38,"tag":392,"props":1268,"children":1269},{"style":404},[1270],{"type":44,"value":482},{"type":38,"tag":392,"props":1272,"children":1273},{"style":404},[1274],{"type":44,"value":895},{"type":38,"tag":392,"props":1276,"children":1277},{"style":404},[1278],{"type":44,"value":467},{"type":38,"tag":392,"props":1280,"children":1281},{"style":435},[1282],{"type":44,"value":551},{"type":38,"tag":392,"props":1284,"children":1285},{"style":404},[1286],{"type":44,"value":482},{"type":38,"tag":392,"props":1288,"children":1289},{"style":404},[1290],{"type":44,"value":1254},{"type":38,"tag":392,"props":1292,"children":1293},{"class":394,"line":573},[1294,1298,1302,1306,1310,1314,1319,1323],{"type":38,"tag":392,"props":1295,"children":1296},{"style":404},[1297],{"type":44,"value":579},{"type":38,"tag":392,"props":1299,"children":1300},{"style":1227},[1301],{"type":44,"value":1123},{"type":38,"tag":392,"props":1303,"children":1304},{"style":404},[1305],{"type":44,"value":482},{"type":38,"tag":392,"props":1307,"children":1308},{"style":404},[1309],{"type":44,"value":895},{"type":38,"tag":392,"props":1311,"children":1312},{"style":404},[1313],{"type":44,"value":467},{"type":38,"tag":392,"props":1315,"children":1316},{"style":435},[1317],{"type":44,"value":1318},"\u003Cslug>",{"type":38,"tag":392,"props":1320,"children":1321},{"style":404},[1322],{"type":44,"value":482},{"type":38,"tag":392,"props":1324,"children":1325},{"style":404},[1326],{"type":44,"value":1254},{"type":38,"tag":392,"props":1328,"children":1330},{"class":394,"line":1329},5,[1331,1335,1339,1343,1347,1351,1356],{"type":38,"tag":392,"props":1332,"children":1333},{"style":404},[1334],{"type":44,"value":579},{"type":38,"tag":392,"props":1336,"children":1337},{"style":1227},[1338],{"type":44,"value":1034},{"type":38,"tag":392,"props":1340,"children":1341},{"style":404},[1342],{"type":44,"value":482},{"type":38,"tag":392,"props":1344,"children":1345},{"style":404},[1346],{"type":44,"value":895},{"type":38,"tag":392,"props":1348,"children":1349},{"style":404},[1350],{"type":44,"value":467},{"type":38,"tag":392,"props":1352,"children":1353},{"style":435},[1354],{"type":44,"value":1355},"\u003Ckey>",{"type":38,"tag":392,"props":1357,"children":1358},{"style":404},[1359],{"type":44,"value":593},{"type":38,"tag":392,"props":1361,"children":1363},{"class":394,"line":1362},6,[1364],{"type":38,"tag":392,"props":1365,"children":1366},{"style":404},[1367],{"type":44,"value":1368},"}\n",{"type":38,"tag":246,"props":1370,"children":1371},{},[],{"type":44,"value":1373},"Safe to overwrite on re-runs: this is the file step 2 reads from on subsequent inits.",{"type":38,"tag":91,"props":1375,"children":1376},{},[1377,1382,1384],{"type":38,"tag":95,"props":1378,"children":1379},{},[1380],{"type":44,"value":1381},"Show what's available.",{"type":44,"value":1383}," Output verbatim:",{"type":38,"tag":237,"props":1385,"children":1386},{},[1387,1392,1402,1407,1440],{"type":38,"tag":47,"props":1388,"children":1389},{},[1390],{"type":44,"value":1391},"You're all set. Here's what the plugin can do today:",{"type":38,"tag":47,"props":1393,"children":1394},{},[1395,1400],{"type":38,"tag":95,"props":1396,"children":1397},{},[1398],{"type":44,"value":1399},"Staircase report",{"type":44,"value":1401}," – visitor-tier audience report (1 visit \u002F 2-4 \u002F 5+) over a 60-day window, comparing the most recent 30 days against the prior 30. Shows tier counts, deltas, tier-to-tier transitions, and per-channel climb yield (the fraction of each channel's prior-window arrivals whose tier rank rose in the current window).",{"type":38,"tag":47,"props":1403,"children":1404},{},[1405],{"type":44,"value":1406},"Two ways to run it:",{"type":38,"tag":87,"props":1408,"children":1409},{},[1410,1421],{"type":38,"tag":91,"props":1411,"children":1412},{},[1413,1419],{"type":38,"tag":53,"props":1414,"children":1416},{"className":1415},[],[1417],{"type":44,"value":1418},"\u002Fagentic-analytics:staircase",{"type":44,"value":1420}," runs across every site in your bucket.",{"type":38,"tag":91,"props":1422,"children":1423},{},[1424,1430,1432,1438],{"type":38,"tag":53,"props":1425,"children":1427},{"className":1426},[],[1428],{"type":44,"value":1429},"\u002Fagentic-analytics:staircase \u003Csite>",{"type":44,"value":1431}," filters to one site (e.g. ",{"type":38,"tag":53,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":44,"value":1437},"your-site.com",{"type":44,"value":1439},").",{"type":38,"tag":47,"props":1441,"children":1442},{},[1443],{"type":44,"value":1444},"Or just ask in chat: \"Run the staircase report.\"",{"type":38,"tag":91,"props":1446,"children":1447},{},[1448,1453],{"type":38,"tag":95,"props":1449,"children":1450},{},[1451],{"type":44,"value":1452},"Suggest a first thing to try.",{"type":44,"value":1383},{"type":38,"tag":237,"props":1455,"children":1456},{},[1457,1462],{"type":38,"tag":47,"props":1458,"children":1459},{},[1460],{"type":44,"value":1461},"Want to try it? Just say:",{"type":38,"tag":381,"props":1463,"children":1466},{"className":1464,"code":1465,"language":44},[847],"Run the staircase report\n",[1467],{"type":38,"tag":53,"props":1468,"children":1469},{"__ignoreMap":386},[1470],{"type":44,"value":1465},{"type":38,"tag":75,"props":1472,"children":1474},{"id":1473},"cross-platform-notes",[1475],{"type":44,"value":1476},"Cross-platform notes",{"type":38,"tag":87,"props":1478,"children":1479},{},[1480,1522,1583],{"type":38,"tag":91,"props":1481,"children":1482},{},[1483,1488,1490],{"type":38,"tag":95,"props":1484,"children":1485},{},[1486],{"type":44,"value":1487},"macOS (Darwin):",{"type":44,"value":1489}," primary supported platform. All steps verified there.\n",{"type":38,"tag":87,"props":1491,"children":1492},{},[1493,1506],{"type":38,"tag":91,"props":1494,"children":1495},{},[1496,1498,1504],{"type":44,"value":1497},"Python 3 missing: offer to run ",{"type":38,"tag":53,"props":1499,"children":1501},{"className":1500},[],[1502],{"type":44,"value":1503},"xcode-select --install",{"type":44,"value":1505}," in the shell. The user has to click through the GUI dialog. Wait for them to confirm.",{"type":38,"tag":91,"props":1507,"children":1508},{},[1509,1511,1520],{"type":44,"value":1510},"AWS CLI missing: point to ",{"type":38,"tag":1512,"props":1513,"children":1517},"a",{"href":1514,"rel":1515},"https:\u002F\u002Faws.amazon.com\u002Fcli\u002F",[1516],"nofollow",[1518],{"type":44,"value":1519},"aws.amazon.com\u002Fcli",{"type":44,"value":1521}," for the installer.",{"type":38,"tag":91,"props":1523,"children":1524},{},[1525,1530,1532],{"type":38,"tag":95,"props":1526,"children":1527},{},[1528],{"type":44,"value":1529},"Linux:",{"type":44,"value":1531}," supported via the same flow with distro-specific package commands.\n",{"type":38,"tag":87,"props":1533,"children":1534},{},[1535,1564],{"type":38,"tag":91,"props":1536,"children":1537},{},[1538,1540,1546,1548,1554,1556,1562],{"type":44,"value":1539},"Python 3 missing: ",{"type":38,"tag":53,"props":1541,"children":1543},{"className":1542},[],[1544],{"type":44,"value":1545},"sudo apt install python3",{"type":44,"value":1547}," (Debian\u002FUbuntu), ",{"type":38,"tag":53,"props":1549,"children":1551},{"className":1550},[],[1552],{"type":44,"value":1553},"sudo dnf install python3",{"type":44,"value":1555}," (Fedora\u002FRHEL), ",{"type":38,"tag":53,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":44,"value":1561},"sudo apk add python3",{"type":44,"value":1563}," (Alpine). User runs it themselves.",{"type":38,"tag":91,"props":1565,"children":1566},{},[1567,1569,1575,1577,1582],{"type":44,"value":1568},"AWS CLI missing: distro package (",{"type":38,"tag":53,"props":1570,"children":1572},{"className":1571},[],[1573],{"type":44,"value":1574},"sudo apt install awscli",{"type":44,"value":1576}," etc.) or Amazon's curl-based installer per ",{"type":38,"tag":1512,"props":1578,"children":1580},{"href":1514,"rel":1579},[1516],[1581],{"type":44,"value":1519},{"type":44,"value":68},{"type":38,"tag":91,"props":1584,"children":1585},{},[1586,1591],{"type":38,"tag":95,"props":1587,"children":1588},{},[1589],{"type":44,"value":1590},"Native Windows:",{"type":44,"value":1592}," not officially supported in v1. WSL users can follow the Linux path.",{"type":38,"tag":75,"props":1594,"children":1596},{"id":1595},"out-of-scope-for-v1",[1597],{"type":44,"value":1598},"Out of scope for v1",{"type":38,"tag":87,"props":1600,"children":1601},{},[1602,1607,1612],{"type":38,"tag":91,"props":1603,"children":1604},{},[1605],{"type":44,"value":1606},"No synthetic data fallback. v1 assumes the user has real DPL access; the \"first thing to try\" runs against their data.",{"type":38,"tag":91,"props":1608,"children":1609},{},[1610],{"type":44,"value":1611},"No support for non-S3 DPL delivery formats. v1 assumes S3-direct access.",{"type":38,"tag":91,"props":1613,"children":1614},{},[1615],{"type":44,"value":1616},"No multi-bucket configuration. A customer with multiple Parse.ly buckets (rare) can clear the saved configs and re-run setup to switch, but only one bucket is active at a time.",{"type":38,"tag":1618,"props":1619,"children":1620},"style",{},[1621],{"type":44,"value":1622},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1624,"total":1812},[1625,1646,1665,1677,1694,1709,1723,1738,1755,1766,1781,1797],{"slug":1626,"name":1626,"fn":1627,"description":1628,"org":1629,"tags":1630,"stars":1643,"repoUrl":1644,"updatedAt":1645},"annotate","collect visual feedback with browser annotation tools","Open a browser with visual annotation tools. The user clicks elements on their site and leaves feedback — the agent reads annotations and makes changes. Use this when the user wants to point at specific elements to fix, tweak, or redesign.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1631,1634,1637,1640],{"name":1632,"slug":1633,"type":15},"Frontend","frontend",{"name":1635,"slug":1636,"type":15},"Productivity","productivity",{"name":1638,"slug":1639,"type":15},"UX Copy","ux-copy",{"name":1641,"slug":1642,"type":15},"UX Design","ux-design",484,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fstudio","2026-05-06T05:40:01.516544",{"slug":1647,"name":1647,"fn":1648,"description":1649,"org":1650,"tags":1651,"stars":1643,"repoUrl":1644,"updatedAt":1664},"block-content","write editable WordPress block markup","Write editable WordPress block markup for local Studio sites, including core\u002Fhtml limits, block-theme layout rules, full-width sections, validation, and skeleton-first page\u002FCSS recipes.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1652,1655,1658,1661],{"name":1653,"slug":1654,"type":15},"Block Editor","block-editor",{"name":1656,"slug":1657,"type":15},"CSS","css",{"name":1659,"slug":1660,"type":15},"HTML","html",{"name":1662,"slug":1663,"type":15},"WordPress","wordpress","2026-05-27T07:01:55.629681",{"slug":1666,"name":1666,"fn":1667,"description":1668,"org":1669,"tags":1670,"stars":1643,"repoUrl":1644,"updatedAt":1676},"hosting-plans-helper","provide WordPress.com hosting plan information","Answer WordPress.com plan, pricing, upgrade, and feature-tier questions (plan names, what each tier unlocks — plugins, themes, custom code, SSH, hosting — and current prices) from authoritative live data. Load before answering ANY plan, pricing, or feature-gating question; never answer these from memory.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1671,1674,1675],{"name":1672,"slug":1673,"type":15},"Pricing","pricing",{"name":17,"slug":18,"type":15},{"name":1662,"slug":1663,"type":15},"2026-07-02T07:42:33.654791",{"slug":1678,"name":1678,"fn":1679,"description":1680,"org":1681,"tags":1682,"stars":1643,"repoUrl":1644,"updatedAt":1693},"liberate","migrate websites to WordPress","Import and rebuild a website from a closed platform (Wix, Squarespace, Webflow, Shopify, GoDaddy, Hostinger, HubSpot, Weebly) into a Studio WordPress site. Extracts pages\u002Fposts\u002Fproducts + media, then reconstructs the design as editable blocks + WooCommerce OR as a high-fidelity replica theme. Invoke when the user wants to migrate, import, liberate, or rebuild a site from one of these platforms.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1683,1686,1689,1692],{"name":1684,"slug":1685,"type":15},"CMS","cms",{"name":1687,"slug":1688,"type":15},"Migration","migration",{"name":1690,"slug":1691,"type":15},"Web Development","web-development",{"name":1662,"slug":1663,"type":15},"2026-07-09T06:47:33.454311",{"slug":1695,"name":1695,"fn":1696,"description":1697,"org":1698,"tags":1699,"stars":1643,"repoUrl":1644,"updatedAt":1708},"need-for-speed","run frontend performance audits for WordPress sites","Run a frontend performance audit on a WordPress site and get actionable optimization recommendations.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1700,1703,1704,1707],{"name":1701,"slug":1702,"type":15},"Audit","audit",{"name":1632,"slug":1633,"type":15},{"name":1705,"slug":1706,"type":15},"Performance","performance",{"name":1662,"slug":1663,"type":15},"2026-05-06T05:40:06.433267",{"slug":1710,"name":1710,"fn":1711,"description":1712,"org":1713,"tags":1714,"stars":1643,"repoUrl":1644,"updatedAt":1722},"plugin-recommendations","recommend WordPress plugins for site features","Choose recommended plugins and plugin-provided blocks for features core WordPress blocks do not cover - ecommerce (WooCommerce), forms and newsletters (Jetpack), online courses and quizzes (Sensei LMS), polls, surveys and ratings (Crowdsignal), spam protection (Akismet) - while keeping generated content editable and avoiding raw HTML fallbacks. Any request to sell products or build a shop, store, or storefront requires WooCommerce with products.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1715,1718,1721],{"name":1716,"slug":1717,"type":15},"Content Creation","content-creation",{"name":1719,"slug":1720,"type":15},"Plugin Development","plugin-development",{"name":1662,"slug":1663,"type":15},"2026-05-27T07:01:58.249105",{"slug":1724,"name":1724,"fn":1725,"description":1726,"org":1727,"tags":1728,"stars":1643,"repoUrl":1644,"updatedAt":1737},"rank-me-up","run on-page SEO audits for WordPress sites","Run an on-page SEO audit on a WordPress site and get actionable recommendations to improve search visibility.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1729,1730,1733,1736],{"name":1701,"slug":1702,"type":15},{"name":1731,"slug":1732,"type":15},"Marketing","marketing",{"name":1734,"slug":1735,"type":15},"SEO","seo",{"name":1662,"slug":1663,"type":15},"2026-05-06T05:40:05.196367",{"slug":1739,"name":1739,"fn":1740,"description":1741,"org":1742,"tags":1743,"stars":1643,"repoUrl":1644,"updatedAt":1754},"site-spec","gather specifications for new WordPress sites","Gather the site name and layout preference before building a WordPress site. Run this before creating any new site.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1744,1747,1750,1753],{"name":1745,"slug":1746,"type":15},"Design","design",{"name":1748,"slug":1749,"type":15},"Product Management","product-management",{"name":1751,"slug":1752,"type":15},"Specs","specs",{"name":1662,"slug":1663,"type":15},"2026-05-06T05:40:02.739409",{"slug":1756,"name":1756,"fn":1757,"description":1758,"org":1759,"tags":1760,"stars":1643,"repoUrl":1644,"updatedAt":1765},"studio-cli","manage local WordPress sites with Studio CLI","Use the Studio CLI to manage local WordPress sites, authentication, and preview sites. Invoke this skill when you need to run Studio CLI commands, manage sites, or troubleshoot site issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1761,1764],{"name":1762,"slug":1763,"type":15},"CLI","cli",{"name":1662,"slug":1663,"type":15},"2026-04-06T18:02:57.150231",{"slug":1767,"name":1767,"fn":1768,"description":1769,"org":1770,"tags":1771,"stars":1643,"repoUrl":1644,"updatedAt":1780},"taxonomist","optimize WordPress category taxonomy","Analyze and optimize a WordPress site's category taxonomy. Exports all posts, uses AI to suggest an improved category structure — merging duplicates, retiring dead categories, creating missing ones, writing descriptions, and re-categorizing posts. Run this when the user wants to clean up or improve their categories.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1772,1775,1778,1779],{"name":1773,"slug":1774,"type":15},"Content Strategy","content-strategy",{"name":1776,"slug":1777,"type":15},"Data Cleaning","data-cleaning",{"name":1734,"slug":1735,"type":15},{"name":1662,"slug":1663,"type":15},"2026-05-06T05:40:03.966799",{"slug":1782,"name":1782,"fn":1783,"description":1784,"org":1785,"tags":1786,"stars":1643,"repoUrl":1644,"updatedAt":1796},"visual-design","plan and execute visual design direction","Plan and execute high-quality visual direction for site creation, redesign, layout, typography, color, motion, and visual polish.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1787,1790,1791,1794],{"name":1788,"slug":1789,"type":15},"Animation","animation",{"name":1745,"slug":1746,"type":15},{"name":1792,"slug":1793,"type":15},"Typography","typography",{"name":1795,"slug":1782,"type":15},"Visual Design","2026-07-24T05:40:57.887452",{"slug":1798,"name":1798,"fn":1799,"description":1800,"org":1801,"tags":1802,"stars":1643,"repoUrl":1644,"updatedAt":1811},"visual-polish","verify and polish website visual design","Verify and polish a built or redesigned site by diagnosing rendered-DOM issues against intent and fixing them in a planned, batched screenshot-and-fix loop.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1803,1806,1807,1810],{"name":1804,"slug":1805,"type":15},"Debugging","debugging",{"name":1632,"slug":1633,"type":15},{"name":1808,"slug":1809,"type":15},"Screenshots","screenshots",{"name":1795,"slug":1782,"type":15},"2026-06-06T07:09:59.809812",81,{"items":1814,"total":1896},[1815,1830,1844,1850,1860,1872,1884],{"slug":1816,"name":1816,"fn":1817,"description":1818,"org":1819,"tags":1820,"stars":22,"repoUrl":23,"updatedAt":1829},"clear-configs","remove local agentic analytics configuration files","Remove the local config files written by first-time setup (bucket.json and the agentic-analytics AWS profile). Leaves the events cache alone. Use when the user wants to start setup over, entered the wrong bucket name, or asks to reset\u002Fclear the plugin's configuration.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1821,1823,1826],{"name":1822,"slug":194,"type":15},"AWS",{"name":1824,"slug":1825,"type":15},"Configuration","configuration",{"name":1827,"slug":1828,"type":15},"Operations","operations","2026-07-24T06:08:49.942979",{"slug":1831,"name":1831,"fn":1832,"description":1833,"org":1834,"tags":1835,"stars":22,"repoUrl":23,"updatedAt":1843},"conversions-report","generate conversion attribution reports","Seed for a future standalone conversions report. Currently holds conversion-attribution code lifted out of the staircase report (PR B of the staircase climbing revision); not yet runnable end-to-end. Use when the user asks to build out the standalone conversions report; do not invoke for \"run the conversions report\" until the file is reshaped.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1836,1837,1840],{"name":20,"slug":21,"type":15},{"name":1838,"slug":1839,"type":15},"Reporting","reporting",{"name":1841,"slug":1842,"type":15},"Sales","sales","2026-05-23T06:06:37.112153",{"slug":4,"name":4,"fn":5,"description":6,"org":1845,"tags":1846,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1847,1848,1849],{"name":20,"slug":21,"type":15},{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"slug":1851,"name":1851,"fn":1852,"description":1853,"org":1854,"tags":1855,"stars":22,"repoUrl":23,"updatedAt":1859},"identify-employees","filter internal employee traffic from reports","Detect whether the configured customer's tracker tags employee\u002Finternal pageviews via `extra_data`, and if so, save the filter so reports exclude that traffic. Use when the user asks to identify employees, exclude employee traffic, filter internal users, or says results look skewed by their own staff.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1856,1857,1858],{"name":20,"slug":21,"type":15},{"name":1776,"slug":1777,"type":15},{"name":1827,"slug":1828,"type":15},"2026-07-24T05:42:07.991328",{"slug":1861,"name":1861,"fn":1862,"description":1863,"org":1864,"tags":1865,"stars":22,"repoUrl":23,"updatedAt":1871},"refresh-cache","clear and rebuild local data cache","Blow away the local data cache and rebuild it. Use when the user asks to refresh the cache, rebuild the cache, clear cached data, start clean, recover from a bad pull, or says reports are returning stale or weird-looking numbers. Leaves config alone. Offers the lighter update-cache flow as an alternative before deleting anything.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1866,1869,1870],{"name":1867,"slug":1868,"type":15},"Caching","caching",{"name":1804,"slug":1805,"type":15},{"name":1705,"slug":1706,"type":15},"2026-07-24T05:42:07.032844",{"slug":1873,"name":1873,"fn":1874,"description":1875,"org":1876,"tags":1877,"stars":22,"repoUrl":23,"updatedAt":1883},"staircase-report","generate staircase audience relationship reports","Run the staircase audience-relationship report for a customer. Use when the user asks to run the staircase report, requests it for a specific site, or asks for an audience-tier or relationship-intelligence report.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1878,1879,1882],{"name":20,"slug":21,"type":15},{"name":1880,"slug":1881,"type":15},"Customer Success","customer-success",{"name":1838,"slug":1839,"type":15},"2026-07-24T05:42:06.016457",{"slug":1885,"name":1885,"fn":1886,"description":1887,"org":1888,"tags":1889,"stars":22,"repoUrl":23,"updatedAt":1895},"update-cache","update local agentic analytics data cache","Top up the local data cache with new data, without deleting anything. Use when the user wants to bring the cache up to date, pull the latest days, sync recent data, or top up the cache. The lighter, non-destructive sibling of refresh-cache – offered as an alternative there.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1890,1891,1894],{"name":1867,"slug":1868,"type":15},{"name":1892,"slug":1893,"type":15},"Data Analysis","data-analysis",{"name":1827,"slug":1828,"type":15},"2026-07-24T06:08:50.338585",7]