[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-automattic-identify-employees":3,"mdc-g3tiwk-key":32,"related-org-automattic-identify-employees":957,"related-repo-automattic-identify-employees":1147},{"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},"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},"automattic","Automattic","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fautomattic.png",[12,16,19],{"name":13,"slug":14,"type":15},"Operations","operations","tag",{"name":17,"slug":18,"type":15},"Data Cleaning","data-cleaning",{"name":20,"slug":21,"type":15},"Analytics","analytics",1,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fagentic-analytics","2026-07-24T05:42:07.991328",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\u002Fidentify-employees","---\nname: identify-employees\ndescription: 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.\n---\n\n# Identify employee traffic\n\nSome Parse.ly customers tag their employees' pageviews in the tracker via `extra_data` (e.g., `extra_data['Internal'] = true` set on logged-in users). Parse.ly's dashboard uses that tag for segment filtering, but the DPL stream is raw – tagged events still arrive. This flow finds that tag (when present and unambiguous) and saves it to `bucket.json`. Subsequent staircase runs apply the filter automatically and surface a one-line note in the report.\n\nCustomers who use Parse.ly's account-level IP blocklist instead (the more common pattern) need nothing from this flow – their DPL events are already filtered upstream.\n\nThe user may ask to **clear** the saved filter instead of detecting one (e.g. \"remove the employee filter\", or the `--clear` argument on harnesses with slash commands).\n\n## Output discipline\n\nTerse. The detection script prints its own one-line result; output it verbatim and stop.\n\n## Steps\n\n0. **Resolve the plugin root.** Every bash snippet below assumes `$plugin_root` is set in that shell invocation; re-run this line whenever you start a new shell:\n\n   ```bash\n   plugin_root=\"${CLAUDE_PLUGIN_ROOT:-${CURSOR_PLUGIN_ROOT:-\u003Cplugin-root>}}\"\n   plugin_python=\"${AGENTIC_ANALYTICS_VENV:-${AGENTIC_ANALYTICS_DATA_DIR:-$HOME\u002F.local\u002Fshare\u002Fagentic-analytics}\u002Fvenv}\u002Fbin\u002Fpython\"\n   [ -x \"$plugin_python\" ] || plugin_python=\"python3\"\n   ```\n\n   `\u003Cplugin-root>` is the plugin's install directory – the directory two levels above this SKILL.md file. In a dev checkout of the source repo that's `plugin\u002F`. `$plugin_python` is the plugin's isolated venv (created by the init flow at `$AGENTIC_ANALYTICS_DATA_DIR\u002Fvenv`, default `~\u002F.local\u002Fshare\u002Fagentic-analytics\u002Fvenv`); it falls back to `python3` if the venv doesn't exist yet.\n\n1. **Load bucket config.** Read `${XDG_CONFIG_HOME:-~\u002F.config}\u002Fagentic-analytics\u002Fbucket.json`. It contains:\n\n   - `bucket` – S3 bucket holding the customer's DPL events.\n   - `cache_dir` – a slug identifying the customer's data (e.g. `acme`).\n\n   If the file is missing, tell the user to run the init flow first (`\u002Fagentic-analytics:init` on harnesses with slash commands, or \"set up agentic analytics\" in chat) and stop.\n\n2. **Handle a clear request.** If the user asked to clear, remove any saved filter and stop:\n\n   ```bash\n   \"$plugin_python\" \"$plugin_root\u002Fskills\u002Fidentify-employees\u002Fscripts\u002Fdetect_employee_filter.py\" \\\n     --bucket-config \"${XDG_CONFIG_HOME:-$HOME\u002F.config}\u002Fagentic-analytics\u002Fbucket.json\" \\\n     --clear\n   ```\n\n   Output the script's one-line result and stop.\n\n3. **Run detection.** Otherwise sample events from the catalog and write any unambiguous filter to `bucket.json`. Pass `--site \u003Csite>` to scope the sample to a specific site (when the user provides one – via a slash-command argument on harnesses that have them, or in chat); omit it to sample across all sites:\n\n   ```bash\n   \"$plugin_python\" \"$plugin_root\u002Fskills\u002Fidentify-employees\u002Fscripts\u002Fdetect_employee_filter.py\" \\\n     --bucket-config \"${XDG_CONFIG_HOME:-$HOME\u002F.config}\u002Fagentic-analytics\u002Fbucket.json\" \\\n     [--site \u003Csite>]\n   ```\n\n4. **Output the script's one-line result verbatim.** Three possibilities:\n\n   - **Match found:** \"Detected employee traffic tagged with `extra_data['\u003Ckey>'] = \u003Cvalue>` (X% of N sampled pageviews). Will filter this out of audience reports so it doesn't skew your results. Tell me if this is incorrect.\"\n   - **No match:** \"No unambiguous employee-traffic tag detected in N sampled pageviews. No filter applied.\"\n   - **Lake empty:** \"No pageview events found in the lake[ for site '\u003Csite>']. Run \u002Fagentic-analytics:staircase or \u002Fagentic-analytics:refresh-cache first.\" – tell the user to run the staircase report or the refresh-cache flow first to populate the lake, then re-run this flow.\n\n   Don't add framing or summary.\n\n## Notes\n\n- The filter is **auto-applied only when unambiguous** (matched case-insensitively): known key name in `internal`, `is_internal`, `is_employee`, `employee`, `staff`, `internal_user`\u002F`internalUser`, `internal_traffic`; boolean-ish value (`true`\u002F`1`\u002F`yes`); and tagged share between 0.1% and 25% of sampled pageviews. Ambiguous setups (multiple distinct values on the same key, or a share outside that range) are silently skipped.\n- Re-running this flow after the customer changes their tracker is the right way to refresh the detected filter.\n- A clear request removes any saved filter and exits without scanning – useful when detection got the wrong key and you want to start over.\n- This flow does not touch Parse.ly's per-account IP blocklist, which is the canonical mechanism for customers who go that route (managed by Parse.ly Support, applied upstream of the DPL).\n",{"data":33,"body":34},{"name":4,"description":6},{"type":35,"children":36},"root",[37,46,77,82,103,110,115,121,835,841,951],{"type":38,"tag":39,"props":40,"children":42},"element","h1",{"id":41},"identify-employee-traffic",[43],{"type":44,"value":45},"text","Identify employee traffic",{"type":38,"tag":47,"props":48,"children":49},"p",{},[50,52,59,61,67,69,75],{"type":44,"value":51},"Some Parse.ly customers tag their employees' pageviews in the tracker via ",{"type":38,"tag":53,"props":54,"children":56},"code",{"className":55},[],[57],{"type":44,"value":58},"extra_data",{"type":44,"value":60}," (e.g., ",{"type":38,"tag":53,"props":62,"children":64},{"className":63},[],[65],{"type":44,"value":66},"extra_data['Internal'] = true",{"type":44,"value":68}," set on logged-in users). Parse.ly's dashboard uses that tag for segment filtering, but the DPL stream is raw – tagged events still arrive. This flow finds that tag (when present and unambiguous) and saves it to ",{"type":38,"tag":53,"props":70,"children":72},{"className":71},[],[73],{"type":44,"value":74},"bucket.json",{"type":44,"value":76},". Subsequent staircase runs apply the filter automatically and surface a one-line note in the report.",{"type":38,"tag":47,"props":78,"children":79},{},[80],{"type":44,"value":81},"Customers who use Parse.ly's account-level IP blocklist instead (the more common pattern) need nothing from this flow – their DPL events are already filtered upstream.",{"type":38,"tag":47,"props":83,"children":84},{},[85,87,93,95,101],{"type":44,"value":86},"The user may ask to ",{"type":38,"tag":88,"props":89,"children":90},"strong",{},[91],{"type":44,"value":92},"clear",{"type":44,"value":94}," the saved filter instead of detecting one (e.g. \"remove the employee filter\", or the ",{"type":38,"tag":53,"props":96,"children":98},{"className":97},[],[99],{"type":44,"value":100},"--clear",{"type":44,"value":102}," argument on harnesses with slash commands).",{"type":38,"tag":104,"props":105,"children":107},"h2",{"id":106},"output-discipline",[108],{"type":44,"value":109},"Output discipline",{"type":38,"tag":47,"props":111,"children":112},{},[113],{"type":44,"value":114},"Terse. The detection script prints its own one-line result; output it verbatim and stop.",{"type":38,"tag":104,"props":116,"children":118},{"id":117},"steps",[119],{"type":44,"value":120},"Steps",{"type":38,"tag":122,"props":123,"children":125},"ol",{"start":124},0,[126,428,493,617,766],{"type":38,"tag":127,"props":128,"children":129},"li",{},[130,135,137,143,145,378,382,388,390,396,398,403,405,411,413,419,421,426],{"type":38,"tag":88,"props":131,"children":132},{},[133],{"type":44,"value":134},"Resolve the plugin root.",{"type":44,"value":136}," Every bash snippet below assumes ",{"type":38,"tag":53,"props":138,"children":140},{"className":139},[],[141],{"type":44,"value":142},"$plugin_root",{"type":44,"value":144}," is set in that shell invocation; re-run this line whenever you start a new shell:",{"type":38,"tag":146,"props":147,"children":152},"pre",{"className":148,"code":149,"language":150,"meta":151,"style":151},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","plugin_root=\"${CLAUDE_PLUGIN_ROOT:-${CURSOR_PLUGIN_ROOT:-\u003Cplugin-root>}}\"\nplugin_python=\"${AGENTIC_ANALYTICS_VENV:-${AGENTIC_ANALYTICS_DATA_DIR:-$HOME\u002F.local\u002Fshare\u002Fagentic-analytics}\u002Fvenv}\u002Fbin\u002Fpython\"\n[ -x \"$plugin_python\" ] || plugin_python=\"python3\"\n","bash","",[153],{"type":38,"tag":53,"props":154,"children":155},{"__ignoreMap":151},[156,219,317],{"type":38,"tag":157,"props":158,"children":160},"span",{"class":159,"line":22},"line",[161,167,173,178,183,188,193,198,204,209,214],{"type":38,"tag":157,"props":162,"children":164},{"style":163},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[165],{"type":44,"value":166},"plugin_root",{"type":38,"tag":157,"props":168,"children":170},{"style":169},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[171],{"type":44,"value":172},"=",{"type":38,"tag":157,"props":174,"children":175},{"style":169},[176],{"type":44,"value":177},"\"${",{"type":38,"tag":157,"props":179,"children":180},{"style":163},[181],{"type":44,"value":182},"CLAUDE_PLUGIN_ROOT",{"type":38,"tag":157,"props":184,"children":185},{"style":169},[186],{"type":44,"value":187},":-${",{"type":38,"tag":157,"props":189,"children":190},{"style":163},[191],{"type":44,"value":192},"CURSOR_PLUGIN_ROOT",{"type":38,"tag":157,"props":194,"children":195},{"style":169},[196],{"type":44,"value":197},":-",{"type":38,"tag":157,"props":199,"children":201},{"style":200},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[202],{"type":44,"value":203},"\u003C",{"type":38,"tag":157,"props":205,"children":206},{"style":163},[207],{"type":44,"value":208},"plugin-root",{"type":38,"tag":157,"props":210,"children":211},{"style":200},[212],{"type":44,"value":213},">",{"type":38,"tag":157,"props":215,"children":216},{"style":169},[217],{"type":44,"value":218},"}}\"\n",{"type":38,"tag":157,"props":220,"children":222},{"class":159,"line":221},2,[223,228,232,236,241,245,250,254,259,264,269,274,278,283,287,292,297,302,307,312],{"type":38,"tag":157,"props":224,"children":225},{"style":163},[226],{"type":44,"value":227},"plugin_python",{"type":38,"tag":157,"props":229,"children":230},{"style":169},[231],{"type":44,"value":172},{"type":38,"tag":157,"props":233,"children":234},{"style":169},[235],{"type":44,"value":177},{"type":38,"tag":157,"props":237,"children":238},{"style":163},[239],{"type":44,"value":240},"AGENTIC_ANALYTICS_VENV",{"type":38,"tag":157,"props":242,"children":243},{"style":169},[244],{"type":44,"value":187},{"type":38,"tag":157,"props":246,"children":247},{"style":163},[248],{"type":44,"value":249},"AGENTIC_ANALYTICS_DATA_DIR",{"type":38,"tag":157,"props":251,"children":252},{"style":169},[253],{"type":44,"value":197},{"type":38,"tag":157,"props":255,"children":256},{"style":163},[257],{"type":44,"value":258},"$HOME",{"type":38,"tag":157,"props":260,"children":261},{"style":169},[262],{"type":44,"value":263},"\u002F",{"type":38,"tag":157,"props":265,"children":266},{"style":200},[267],{"type":44,"value":268},".",{"type":38,"tag":157,"props":270,"children":271},{"style":163},[272],{"type":44,"value":273},"local",{"type":38,"tag":157,"props":275,"children":276},{"style":169},[277],{"type":44,"value":263},{"type":38,"tag":157,"props":279,"children":280},{"style":163},[281],{"type":44,"value":282},"share",{"type":38,"tag":157,"props":284,"children":285},{"style":169},[286],{"type":44,"value":263},{"type":38,"tag":157,"props":288,"children":289},{"style":163},[290],{"type":44,"value":291},"agentic-analytics",{"type":38,"tag":157,"props":293,"children":294},{"style":169},[295],{"type":44,"value":296},"}\u002F",{"type":38,"tag":157,"props":298,"children":299},{"style":163},[300],{"type":44,"value":301},"venv",{"type":38,"tag":157,"props":303,"children":304},{"style":169},[305],{"type":44,"value":306},"}",{"type":38,"tag":157,"props":308,"children":309},{"style":200},[310],{"type":44,"value":311},"\u002Fbin\u002Fpython",{"type":38,"tag":157,"props":313,"children":314},{"style":169},[315],{"type":44,"value":316},"\"\n",{"type":38,"tag":157,"props":318,"children":320},{"class":159,"line":319},3,[321,326,331,336,341,346,351,356,361,365,369,374],{"type":38,"tag":157,"props":322,"children":323},{"style":169},[324],{"type":44,"value":325},"[",{"type":38,"tag":157,"props":327,"children":328},{"style":169},[329],{"type":44,"value":330}," -x",{"type":38,"tag":157,"props":332,"children":333},{"style":169},[334],{"type":44,"value":335}," \"",{"type":38,"tag":157,"props":337,"children":338},{"style":163},[339],{"type":44,"value":340},"$plugin_python",{"type":38,"tag":157,"props":342,"children":343},{"style":169},[344],{"type":44,"value":345},"\"",{"type":38,"tag":157,"props":347,"children":348},{"style":169},[349],{"type":44,"value":350}," ]",{"type":38,"tag":157,"props":352,"children":353},{"style":169},[354],{"type":44,"value":355}," ||",{"type":38,"tag":157,"props":357,"children":358},{"style":163},[359],{"type":44,"value":360}," plugin_python",{"type":38,"tag":157,"props":362,"children":363},{"style":169},[364],{"type":44,"value":172},{"type":38,"tag":157,"props":366,"children":367},{"style":169},[368],{"type":44,"value":345},{"type":38,"tag":157,"props":370,"children":371},{"style":200},[372],{"type":44,"value":373},"python3",{"type":38,"tag":157,"props":375,"children":376},{"style":169},[377],{"type":44,"value":316},{"type":38,"tag":379,"props":380,"children":381},"br",{},[],{"type":38,"tag":53,"props":383,"children":385},{"className":384},[],[386],{"type":44,"value":387},"\u003Cplugin-root>",{"type":44,"value":389}," is the plugin's install directory – the directory two levels above this SKILL.md file. In a dev checkout of the source repo that's ",{"type":38,"tag":53,"props":391,"children":393},{"className":392},[],[394],{"type":44,"value":395},"plugin\u002F",{"type":44,"value":397},". ",{"type":38,"tag":53,"props":399,"children":401},{"className":400},[],[402],{"type":44,"value":340},{"type":44,"value":404}," is the plugin's isolated venv (created by the init flow at ",{"type":38,"tag":53,"props":406,"children":408},{"className":407},[],[409],{"type":44,"value":410},"$AGENTIC_ANALYTICS_DATA_DIR\u002Fvenv",{"type":44,"value":412},", default ",{"type":38,"tag":53,"props":414,"children":416},{"className":415},[],[417],{"type":44,"value":418},"~\u002F.local\u002Fshare\u002Fagentic-analytics\u002Fvenv",{"type":44,"value":420},"); it falls back to ",{"type":38,"tag":53,"props":422,"children":424},{"className":423},[],[425],{"type":44,"value":373},{"type":44,"value":427}," if the venv doesn't exist yet.",{"type":38,"tag":127,"props":429,"children":430},{},[431,436,438,444,446,480,483,485,491],{"type":38,"tag":88,"props":432,"children":433},{},[434],{"type":44,"value":435},"Load bucket config.",{"type":44,"value":437}," Read ",{"type":38,"tag":53,"props":439,"children":441},{"className":440},[],[442],{"type":44,"value":443},"${XDG_CONFIG_HOME:-~\u002F.config}\u002Fagentic-analytics\u002Fbucket.json",{"type":44,"value":445},". It contains:",{"type":38,"tag":447,"props":448,"children":449},"ul",{},[450,461],{"type":38,"tag":127,"props":451,"children":452},{},[453,459],{"type":38,"tag":53,"props":454,"children":456},{"className":455},[],[457],{"type":44,"value":458},"bucket",{"type":44,"value":460}," – S3 bucket holding the customer's DPL events.",{"type":38,"tag":127,"props":462,"children":463},{},[464,470,472,478],{"type":38,"tag":53,"props":465,"children":467},{"className":466},[],[468],{"type":44,"value":469},"cache_dir",{"type":44,"value":471}," – a slug identifying the customer's data (e.g. ",{"type":38,"tag":53,"props":473,"children":475},{"className":474},[],[476],{"type":44,"value":477},"acme",{"type":44,"value":479},").",{"type":38,"tag":379,"props":481,"children":482},{},[],{"type":44,"value":484},"If the file is missing, tell the user to run the init flow first (",{"type":38,"tag":53,"props":486,"children":488},{"className":487},[],[489],{"type":44,"value":490},"\u002Fagentic-analytics:init",{"type":44,"value":492}," on harnesses with slash commands, or \"set up agentic analytics\" in chat) and stop.",{"type":38,"tag":127,"props":494,"children":495},{},[496,501,503,612,615],{"type":38,"tag":88,"props":497,"children":498},{},[499],{"type":44,"value":500},"Handle a clear request.",{"type":44,"value":502}," If the user asked to clear, remove any saved filter and stop:",{"type":38,"tag":146,"props":504,"children":506},{"className":148,"code":505,"language":150,"meta":151,"style":151},"\"$plugin_python\" \"$plugin_root\u002Fskills\u002Fidentify-employees\u002Fscripts\u002Fdetect_employee_filter.py\" \\\n  --bucket-config \"${XDG_CONFIG_HOME:-$HOME\u002F.config}\u002Fagentic-analytics\u002Fbucket.json\" \\\n  --clear\n",[507],{"type":38,"tag":53,"props":508,"children":509},{"__ignoreMap":151},[510,548,604],{"type":38,"tag":157,"props":511,"children":512},{"class":159,"line":22},[513,518,522,526,530,534,539,543],{"type":38,"tag":157,"props":514,"children":516},{"style":515},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[517],{"type":44,"value":345},{"type":38,"tag":157,"props":519,"children":520},{"style":163},[521],{"type":44,"value":340},{"type":38,"tag":157,"props":523,"children":524},{"style":515},[525],{"type":44,"value":345},{"type":38,"tag":157,"props":527,"children":528},{"style":169},[529],{"type":44,"value":335},{"type":38,"tag":157,"props":531,"children":532},{"style":163},[533],{"type":44,"value":142},{"type":38,"tag":157,"props":535,"children":536},{"style":200},[537],{"type":44,"value":538},"\u002Fskills\u002Fidentify-employees\u002Fscripts\u002Fdetect_employee_filter.py",{"type":38,"tag":157,"props":540,"children":541},{"style":169},[542],{"type":44,"value":345},{"type":38,"tag":157,"props":544,"children":545},{"style":163},[546],{"type":44,"value":547}," \\\n",{"type":38,"tag":157,"props":549,"children":550},{"class":159,"line":221},[551,556,561,566,570,574,578,582,587,591,596,600],{"type":38,"tag":157,"props":552,"children":553},{"style":200},[554],{"type":44,"value":555},"  --bucket-config",{"type":38,"tag":157,"props":557,"children":558},{"style":169},[559],{"type":44,"value":560}," \"${",{"type":38,"tag":157,"props":562,"children":563},{"style":163},[564],{"type":44,"value":565},"XDG_CONFIG_HOME",{"type":38,"tag":157,"props":567,"children":568},{"style":169},[569],{"type":44,"value":197},{"type":38,"tag":157,"props":571,"children":572},{"style":163},[573],{"type":44,"value":258},{"type":38,"tag":157,"props":575,"children":576},{"style":169},[577],{"type":44,"value":263},{"type":38,"tag":157,"props":579,"children":580},{"style":200},[581],{"type":44,"value":268},{"type":38,"tag":157,"props":583,"children":584},{"style":163},[585],{"type":44,"value":586},"config",{"type":38,"tag":157,"props":588,"children":589},{"style":169},[590],{"type":44,"value":306},{"type":38,"tag":157,"props":592,"children":593},{"style":200},[594],{"type":44,"value":595},"\u002Fagentic-analytics\u002Fbucket.json",{"type":38,"tag":157,"props":597,"children":598},{"style":169},[599],{"type":44,"value":345},{"type":38,"tag":157,"props":601,"children":602},{"style":163},[603],{"type":44,"value":547},{"type":38,"tag":157,"props":605,"children":606},{"class":159,"line":319},[607],{"type":38,"tag":157,"props":608,"children":609},{"style":200},[610],{"type":44,"value":611},"  --clear\n",{"type":38,"tag":379,"props":613,"children":614},{},[],{"type":44,"value":616},"Output the script's one-line result and stop.",{"type":38,"tag":127,"props":618,"children":619},{},[620,625,627,632,634,640,642],{"type":38,"tag":88,"props":621,"children":622},{},[623],{"type":44,"value":624},"Run detection.",{"type":44,"value":626}," Otherwise sample events from the catalog and write any unambiguous filter to ",{"type":38,"tag":53,"props":628,"children":630},{"className":629},[],[631],{"type":44,"value":74},{"type":44,"value":633},". Pass ",{"type":38,"tag":53,"props":635,"children":637},{"className":636},[],[638],{"type":44,"value":639},"--site \u003Csite>",{"type":44,"value":641}," to scope the sample to a specific site (when the user provides one – via a slash-command argument on harnesses that have them, or in chat); omit it to sample across all sites:",{"type":38,"tag":146,"props":643,"children":645},{"className":148,"code":644,"language":150,"meta":151,"style":151},"\"$plugin_python\" \"$plugin_root\u002Fskills\u002Fidentify-employees\u002Fscripts\u002Fdetect_employee_filter.py\" \\\n  --bucket-config \"${XDG_CONFIG_HOME:-$HOME\u002F.config}\u002Fagentic-analytics\u002Fbucket.json\" \\\n  [--site \u003Csite>]\n",[646],{"type":38,"tag":53,"props":647,"children":648},{"__ignoreMap":151},[649,684,735],{"type":38,"tag":157,"props":650,"children":651},{"class":159,"line":22},[652,656,660,664,668,672,676,680],{"type":38,"tag":157,"props":653,"children":654},{"style":515},[655],{"type":44,"value":345},{"type":38,"tag":157,"props":657,"children":658},{"style":163},[659],{"type":44,"value":340},{"type":38,"tag":157,"props":661,"children":662},{"style":515},[663],{"type":44,"value":345},{"type":38,"tag":157,"props":665,"children":666},{"style":169},[667],{"type":44,"value":335},{"type":38,"tag":157,"props":669,"children":670},{"style":163},[671],{"type":44,"value":142},{"type":38,"tag":157,"props":673,"children":674},{"style":200},[675],{"type":44,"value":538},{"type":38,"tag":157,"props":677,"children":678},{"style":169},[679],{"type":44,"value":345},{"type":38,"tag":157,"props":681,"children":682},{"style":163},[683],{"type":44,"value":547},{"type":38,"tag":157,"props":685,"children":686},{"class":159,"line":221},[687,691,695,699,703,707,711,715,719,723,727,731],{"type":38,"tag":157,"props":688,"children":689},{"style":200},[690],{"type":44,"value":555},{"type":38,"tag":157,"props":692,"children":693},{"style":169},[694],{"type":44,"value":560},{"type":38,"tag":157,"props":696,"children":697},{"style":163},[698],{"type":44,"value":565},{"type":38,"tag":157,"props":700,"children":701},{"style":169},[702],{"type":44,"value":197},{"type":38,"tag":157,"props":704,"children":705},{"style":163},[706],{"type":44,"value":258},{"type":38,"tag":157,"props":708,"children":709},{"style":169},[710],{"type":44,"value":263},{"type":38,"tag":157,"props":712,"children":713},{"style":200},[714],{"type":44,"value":268},{"type":38,"tag":157,"props":716,"children":717},{"style":163},[718],{"type":44,"value":586},{"type":38,"tag":157,"props":720,"children":721},{"style":169},[722],{"type":44,"value":306},{"type":38,"tag":157,"props":724,"children":725},{"style":200},[726],{"type":44,"value":595},{"type":38,"tag":157,"props":728,"children":729},{"style":169},[730],{"type":44,"value":345},{"type":38,"tag":157,"props":732,"children":733},{"style":163},[734],{"type":44,"value":547},{"type":38,"tag":157,"props":736,"children":737},{"class":159,"line":319},[738,743,747,752,757,761],{"type":38,"tag":157,"props":739,"children":740},{"style":163},[741],{"type":44,"value":742},"  [--site ",{"type":38,"tag":157,"props":744,"children":745},{"style":169},[746],{"type":44,"value":203},{"type":38,"tag":157,"props":748,"children":749},{"style":200},[750],{"type":44,"value":751},"sit",{"type":38,"tag":157,"props":753,"children":754},{"style":163},[755],{"type":44,"value":756},"e",{"type":38,"tag":157,"props":758,"children":759},{"style":169},[760],{"type":44,"value":213},{"type":38,"tag":157,"props":762,"children":763},{"style":200},[764],{"type":44,"value":765},"]\n",{"type":38,"tag":127,"props":767,"children":768},{},[769,774,776,830,833],{"type":38,"tag":88,"props":770,"children":771},{},[772],{"type":44,"value":773},"Output the script's one-line result verbatim.",{"type":44,"value":775}," Three possibilities:",{"type":38,"tag":447,"props":777,"children":778},{},[779,797,807],{"type":38,"tag":127,"props":780,"children":781},{},[782,787,789,795],{"type":38,"tag":88,"props":783,"children":784},{},[785],{"type":44,"value":786},"Match found:",{"type":44,"value":788}," \"Detected employee traffic tagged with ",{"type":38,"tag":53,"props":790,"children":792},{"className":791},[],[793],{"type":44,"value":794},"extra_data['\u003Ckey>'] = \u003Cvalue>",{"type":44,"value":796}," (X% of N sampled pageviews). Will filter this out of audience reports so it doesn't skew your results. Tell me if this is incorrect.\"",{"type":38,"tag":127,"props":798,"children":799},{},[800,805],{"type":38,"tag":88,"props":801,"children":802},{},[803],{"type":44,"value":804},"No match:",{"type":44,"value":806}," \"No unambiguous employee-traffic tag detected in N sampled pageviews. No filter applied.\"",{"type":38,"tag":127,"props":808,"children":809},{},[810,815,817,828],{"type":38,"tag":88,"props":811,"children":812},{},[813],{"type":44,"value":814},"Lake empty:",{"type":44,"value":816}," \"No pageview events found in the lake",{"type":38,"tag":157,"props":818,"children":819},{},[820,822],{"type":44,"value":821}," for site '",{"type":38,"tag":823,"props":824,"children":825},"site",{},[826],{"type":44,"value":827},"'",{"type":44,"value":829},". Run \u002Fagentic-analytics:staircase or \u002Fagentic-analytics:refresh-cache first.\" – tell the user to run the staircase report or the refresh-cache flow first to populate the lake, then re-run this flow.",{"type":38,"tag":379,"props":831,"children":832},{},[],{"type":44,"value":834},"Don't add framing or summary.",{"type":38,"tag":104,"props":836,"children":838},{"id":837},"notes",[839],{"type":44,"value":840},"Notes",{"type":38,"tag":447,"props":842,"children":843},{},[844,936,941,946],{"type":38,"tag":127,"props":845,"children":846},{},[847,849,854,856,862,864,870,871,877,878,884,885,891,892,898,899,905,906,912,914,920,921,927,928,934],{"type":44,"value":848},"The filter is ",{"type":38,"tag":88,"props":850,"children":851},{},[852],{"type":44,"value":853},"auto-applied only when unambiguous",{"type":44,"value":855}," (matched case-insensitively): known key name in ",{"type":38,"tag":53,"props":857,"children":859},{"className":858},[],[860],{"type":44,"value":861},"internal",{"type":44,"value":863},", ",{"type":38,"tag":53,"props":865,"children":867},{"className":866},[],[868],{"type":44,"value":869},"is_internal",{"type":44,"value":863},{"type":38,"tag":53,"props":872,"children":874},{"className":873},[],[875],{"type":44,"value":876},"is_employee",{"type":44,"value":863},{"type":38,"tag":53,"props":879,"children":881},{"className":880},[],[882],{"type":44,"value":883},"employee",{"type":44,"value":863},{"type":38,"tag":53,"props":886,"children":888},{"className":887},[],[889],{"type":44,"value":890},"staff",{"type":44,"value":863},{"type":38,"tag":53,"props":893,"children":895},{"className":894},[],[896],{"type":44,"value":897},"internal_user",{"type":44,"value":263},{"type":38,"tag":53,"props":900,"children":902},{"className":901},[],[903],{"type":44,"value":904},"internalUser",{"type":44,"value":863},{"type":38,"tag":53,"props":907,"children":909},{"className":908},[],[910],{"type":44,"value":911},"internal_traffic",{"type":44,"value":913},"; boolean-ish value (",{"type":38,"tag":53,"props":915,"children":917},{"className":916},[],[918],{"type":44,"value":919},"true",{"type":44,"value":263},{"type":38,"tag":53,"props":922,"children":924},{"className":923},[],[925],{"type":44,"value":926},"1",{"type":44,"value":263},{"type":38,"tag":53,"props":929,"children":931},{"className":930},[],[932],{"type":44,"value":933},"yes",{"type":44,"value":935},"); and tagged share between 0.1% and 25% of sampled pageviews. Ambiguous setups (multiple distinct values on the same key, or a share outside that range) are silently skipped.",{"type":38,"tag":127,"props":937,"children":938},{},[939],{"type":44,"value":940},"Re-running this flow after the customer changes their tracker is the right way to refresh the detected filter.",{"type":38,"tag":127,"props":942,"children":943},{},[944],{"type":44,"value":945},"A clear request removes any saved filter and exits without scanning – useful when detection got the wrong key and you want to start over.",{"type":38,"tag":127,"props":947,"children":948},{},[949],{"type":44,"value":950},"This flow does not touch Parse.ly's per-account IP blocklist, which is the canonical mechanism for customers who go that route (managed by Parse.ly Support, applied upstream of the DPL).",{"type":38,"tag":952,"props":953,"children":954},"style",{},[955],{"type":44,"value":956},"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":958,"total":1146},[959,980,999,1013,1030,1045,1059,1074,1091,1102,1115,1131],{"slug":960,"name":960,"fn":961,"description":962,"org":963,"tags":964,"stars":977,"repoUrl":978,"updatedAt":979},"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},[965,968,971,974],{"name":966,"slug":967,"type":15},"Frontend","frontend",{"name":969,"slug":970,"type":15},"Productivity","productivity",{"name":972,"slug":973,"type":15},"UX Copy","ux-copy",{"name":975,"slug":976,"type":15},"UX Design","ux-design",484,"https:\u002F\u002Fgithub.com\u002FAutomattic\u002Fstudio","2026-05-06T05:40:01.516544",{"slug":981,"name":981,"fn":982,"description":983,"org":984,"tags":985,"stars":977,"repoUrl":978,"updatedAt":998},"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},[986,989,992,995],{"name":987,"slug":988,"type":15},"Block Editor","block-editor",{"name":990,"slug":991,"type":15},"CSS","css",{"name":993,"slug":994,"type":15},"HTML","html",{"name":996,"slug":997,"type":15},"WordPress","wordpress","2026-05-27T07:01:55.629681",{"slug":1000,"name":1000,"fn":1001,"description":1002,"org":1003,"tags":1004,"stars":977,"repoUrl":978,"updatedAt":1012},"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},[1005,1008,1011],{"name":1006,"slug":1007,"type":15},"Pricing","pricing",{"name":1009,"slug":1010,"type":15},"Reference","reference",{"name":996,"slug":997,"type":15},"2026-07-02T07:42:33.654791",{"slug":1014,"name":1014,"fn":1015,"description":1016,"org":1017,"tags":1018,"stars":977,"repoUrl":978,"updatedAt":1029},"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},[1019,1022,1025,1028],{"name":1020,"slug":1021,"type":15},"CMS","cms",{"name":1023,"slug":1024,"type":15},"Migration","migration",{"name":1026,"slug":1027,"type":15},"Web Development","web-development",{"name":996,"slug":997,"type":15},"2026-07-09T06:47:33.454311",{"slug":1031,"name":1031,"fn":1032,"description":1033,"org":1034,"tags":1035,"stars":977,"repoUrl":978,"updatedAt":1044},"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},[1036,1039,1040,1043],{"name":1037,"slug":1038,"type":15},"Audit","audit",{"name":966,"slug":967,"type":15},{"name":1041,"slug":1042,"type":15},"Performance","performance",{"name":996,"slug":997,"type":15},"2026-05-06T05:40:06.433267",{"slug":1046,"name":1046,"fn":1047,"description":1048,"org":1049,"tags":1050,"stars":977,"repoUrl":978,"updatedAt":1058},"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},[1051,1054,1057],{"name":1052,"slug":1053,"type":15},"Content Creation","content-creation",{"name":1055,"slug":1056,"type":15},"Plugin Development","plugin-development",{"name":996,"slug":997,"type":15},"2026-05-27T07:01:58.249105",{"slug":1060,"name":1060,"fn":1061,"description":1062,"org":1063,"tags":1064,"stars":977,"repoUrl":978,"updatedAt":1073},"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},[1065,1066,1069,1072],{"name":1037,"slug":1038,"type":15},{"name":1067,"slug":1068,"type":15},"Marketing","marketing",{"name":1070,"slug":1071,"type":15},"SEO","seo",{"name":996,"slug":997,"type":15},"2026-05-06T05:40:05.196367",{"slug":1075,"name":1075,"fn":1076,"description":1077,"org":1078,"tags":1079,"stars":977,"repoUrl":978,"updatedAt":1090},"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},[1080,1083,1086,1089],{"name":1081,"slug":1082,"type":15},"Design","design",{"name":1084,"slug":1085,"type":15},"Product Management","product-management",{"name":1087,"slug":1088,"type":15},"Specs","specs",{"name":996,"slug":997,"type":15},"2026-05-06T05:40:02.739409",{"slug":1092,"name":1092,"fn":1093,"description":1094,"org":1095,"tags":1096,"stars":977,"repoUrl":978,"updatedAt":1101},"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},[1097,1100],{"name":1098,"slug":1099,"type":15},"CLI","cli",{"name":996,"slug":997,"type":15},"2026-04-06T18:02:57.150231",{"slug":1103,"name":1103,"fn":1104,"description":1105,"org":1106,"tags":1107,"stars":977,"repoUrl":978,"updatedAt":1114},"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},[1108,1111,1112,1113],{"name":1109,"slug":1110,"type":15},"Content Strategy","content-strategy",{"name":17,"slug":18,"type":15},{"name":1070,"slug":1071,"type":15},{"name":996,"slug":997,"type":15},"2026-05-06T05:40:03.966799",{"slug":1116,"name":1116,"fn":1117,"description":1118,"org":1119,"tags":1120,"stars":977,"repoUrl":978,"updatedAt":1130},"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},[1121,1124,1125,1128],{"name":1122,"slug":1123,"type":15},"Animation","animation",{"name":1081,"slug":1082,"type":15},{"name":1126,"slug":1127,"type":15},"Typography","typography",{"name":1129,"slug":1116,"type":15},"Visual Design","2026-07-24T05:40:57.887452",{"slug":1132,"name":1132,"fn":1133,"description":1134,"org":1135,"tags":1136,"stars":977,"repoUrl":978,"updatedAt":1145},"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},[1137,1140,1141,1144],{"name":1138,"slug":1139,"type":15},"Debugging","debugging",{"name":966,"slug":967,"type":15},{"name":1142,"slug":1143,"type":15},"Screenshots","screenshots",{"name":1129,"slug":1116,"type":15},"2026-06-06T07:09:59.809812",81,{"items":1148,"total":1231},[1149,1163,1177,1189,1195,1207,1219],{"slug":1150,"name":1150,"fn":1151,"description":1152,"org":1153,"tags":1154,"stars":22,"repoUrl":23,"updatedAt":1162},"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},[1155,1158,1161],{"name":1156,"slug":1157,"type":15},"AWS","aws",{"name":1159,"slug":1160,"type":15},"Configuration","configuration",{"name":13,"slug":14,"type":15},"2026-07-24T06:08:49.942979",{"slug":1164,"name":1164,"fn":1165,"description":1166,"org":1167,"tags":1168,"stars":22,"repoUrl":23,"updatedAt":1176},"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},[1169,1170,1173],{"name":20,"slug":21,"type":15},{"name":1171,"slug":1172,"type":15},"Reporting","reporting",{"name":1174,"slug":1175,"type":15},"Sales","sales","2026-05-23T06:06:37.112153",{"slug":1178,"name":1178,"fn":1179,"description":1180,"org":1181,"tags":1182,"stars":22,"repoUrl":23,"updatedAt":1188},"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},[1183,1184,1187],{"name":20,"slug":21,"type":15},{"name":1185,"slug":1186,"type":15},"Documentation","documentation",{"name":1009,"slug":1010,"type":15},"2026-07-24T05:42:05.056763",{"slug":4,"name":4,"fn":5,"description":6,"org":1190,"tags":1191,"stars":22,"repoUrl":23,"updatedAt":24},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1192,1193,1194],{"name":20,"slug":21,"type":15},{"name":17,"slug":18,"type":15},{"name":13,"slug":14,"type":15},{"slug":1196,"name":1196,"fn":1197,"description":1198,"org":1199,"tags":1200,"stars":22,"repoUrl":23,"updatedAt":1206},"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},[1201,1204,1205],{"name":1202,"slug":1203,"type":15},"Caching","caching",{"name":1138,"slug":1139,"type":15},{"name":1041,"slug":1042,"type":15},"2026-07-24T05:42:07.032844",{"slug":1208,"name":1208,"fn":1209,"description":1210,"org":1211,"tags":1212,"stars":22,"repoUrl":23,"updatedAt":1218},"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},[1213,1214,1217],{"name":20,"slug":21,"type":15},{"name":1215,"slug":1216,"type":15},"Customer Success","customer-success",{"name":1171,"slug":1172,"type":15},"2026-07-24T05:42:06.016457",{"slug":1220,"name":1220,"fn":1221,"description":1222,"org":1223,"tags":1224,"stars":22,"repoUrl":23,"updatedAt":1230},"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},[1225,1226,1229],{"name":1202,"slug":1203,"type":15},{"name":1227,"slug":1228,"type":15},"Data Analysis","data-analysis",{"name":13,"slug":14,"type":15},"2026-07-24T06:08:50.338585",7]