← Seal CopilotCONTENT HISTORYWHAT CHANGED · RULE-BASED ANALYSIS
Update to Seal Copilot
Snapshot Sep 30, 2026 · 23:13 UTC · version 1.11.0
Collection source: not recorded for this historical snapshot.
First saved snapshot
No earlier snapshot is available to establish a change.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Audit a site's Sealmetrics implementation quality — tracking coverage, microconversions, properties, channel rules, alerts, and bot exposure. Trigger on: \"is my tracking set up correctly\", \"audit my setup\", \"am I measuring everything\", \"tracking audit\", \"qué me falta por medir\", \"implementation review\", or when another skill finds missing events.\n",
"included_files": [
{
"relative_path": "examples/output.md",
"size_in_bytes": 2041
}
],
"name": "setup-audit",
"skill_md_contents": "---\nname: setup-audit\ndescription: >\n Audit a site's Sealmetrics implementation quality — tracking coverage,\n microconversions, properties, channel rules, alerts, and bot exposure.\n Trigger on: \"is my tracking set up correctly\", \"audit my setup\", \"am I\n measuring everything\", \"tracking audit\", \"qué me falta por medir\",\n \"implementation review\", or when another skill finds missing events.\nshort-description: 'Score a Sealmetrics implementation and list the gaps by value. Use for \"is my tracking correct\", \"audit my setup\", \"am I measuring everything\", \"qué me falta por medir\".'\n---\n\n# Setup Audit\n\nBefore writing your answer, read `examples/output.md` in this skill directory\nand match its density, structure and tone. It is the reference for what a good\nrun of this skill looks like.\n\nGrade the implementation and produce a prioritized improvement list.\nRe-auditing is the normal workflow — ship a fix, audit again — so a repeat\nrequest always runs the full procedure, even minutes after the last one. When\nyou mention a tool's parameters in prose, use its real names (`kind`, `name`\nfor `verify_event_instrumented`), never paraphrased ones. The\nbetter the setup, the better every other skill performs — say this to the\nuser. Budget: ≤12 calls, and `get_tracking_code` is call number one.\n\n## Procedure\n\n0. `get_tracking_code` — **first, before anything else.** Its `js_api`\n signatures are the only source for any snippet you will hand the developer\n at the end. The first real audit spent nine calls on discovery, reached the\n snippet with none left, and wrote one from memory — flagged as unfetched,\n still copy-pasteable, and wrong for the site. A budget squeeze drops the\n second microconversion pass or the alert check; it never drops this call.\n1. `get_site` — basics: domains, timezone, tracking status.\n2. `get_overview(30d)` — is data flowing at expected volume? If the site has\n **no data at all**, stop auditing and hand off to `install-sealmetrics`:\n there is nothing to score until the pixel is live.\n3. `list_microconversion_types` — which funnel stages are instrumented?\n Compare against the canonical funnel for the vertical (stores:\n product_view/add_to_cart/start_checkout; hotels: search/room_view/\n booking_start).\n4. `list_property_keys(table=conversion_items)` first, then `(table=both)` — what\n enrichment exists? Flag high-value missing properties for the vertical\n (stores: category, price_range; hotels: room_type, lead_time). For\n stores, **verify that at least one product identifier exists**\n (`sku`, `product_id`, `item_id`, `product_name`) on both `view_item`\n and `add_to_cart` — without this, `product-friction` and any\n per-SKU analysis are impossible. Note which identifier is used; if\n the same product carries different identifiers on different events\n (a common integration bug), flag it as a top gap.\n5. `get_conversions(30d)` — are revenue values being passed? Rows carry\n `avg_value`; 0 or null means revenue tracking is missing. Note\n `list_property_keys` returns objects with `key` and counts, not names.\n6. `list_channel_rules` — are paid sources classified correctly? Spot-check\n against `get_traffic_sources`: cpc traffic landing in \"Referral\" means\n missing UTMs or rules.\n7. `get_top_campaigns(30d)` — UTM hygiene: \"(not set)\" dominating means\n campaigns run untagged.\n8. `list_alerts` + `get_bot_stats(days=30)` — is anyone watching? Is bot\n traffic material? An empty bot result means agent analytics is off, which\n is itself a gap worth listing. If no live monitoring of add-to-cart\n exists, recommend running `calibrate-watchdog` once and then scheduling\n `cart-watchdog` hourly with `/schedule`.\n9. `get_microconversions(period=30d)` — check that each canonical funnel\n stage receives at least 10 events/day; below that the watchdog baseline\n will be too noisy to be useful and that is a gap worth flagging.\n\n## Output format\n\n**Score: X/10** with one-line justification.\n\n**Then a gap table:** gap → why it matters (which analysis it unlocks) →\nhow to fix → effort (S/M/L). Order by value unlocked, not by effort.\n\nFor fixes, the snippet comes **verbatim** from the `js_api` signatures you\nfetched in step 0, or from `get_instrumentation_guide`. Rules that are not\nnegotiable:\n\n- **Never write a call you did not fetch.** If for any reason you have no\n fetched signature, give no code — say \"run `get_tracking_code` and use its\n `conversion` signature\" and stop. A hedge like \"I did not spend a call to\n fetch it, use it verbatim\" attached to invented code is worse than no\n code: the hedge gets trimmed and the code gets pasted.\n- **No invented numbers inside code.** A value like `1200` presented as\n \"average deal size\" will be pasted as-is. Use a visibly non-literal\n placeholder — `<average deal size in EUR>` — and say the developer replaces it.\n- Name the event with the site's own convention when one exists (the\n microconversion list shows it); otherwise use the guide's canonical name. For each canonical funnel event, confirm it is really arriving with\n`verify_event_instrumented` rather than inferring it from counts. When a symptom\nlooks like a known implementation fault, check `get_troubleshooting_guide`\nbefore theorising.\n\n**Persist:** update `<state-dir>/<site_id>/profile.json` with what this\naudit established — the real event names, the product identifier and its\ntable, `agent_analytics_enabled` as `true`/`false`/`\"unknown\"`, and\n`discovery_cached_at` as today's date (the refresh rule reads it; the first\nreal audit rewrote the profile and left it out). That last flag is what stops every later skill from reporting\n\"0% bots\" on a site that simply is not measuring them.\n\n## Channel rules — the one place this plugin can write\n\nWhen the audit finds paid traffic misclassified (cpc sessions landing in\n\"Referral\", or a source the site's rules do not cover), you may propose a fix:\n\n1. Draft the rule and show it to the user in plain language.\n2. Dry-run it with `test_channel_rules` and report exactly which sessions\n would reclassify and how the channel totals change.\n3. **Only after the user explicitly confirms**, apply it with\n `create_channel_rule` or `update_channel_rule`.\n\nNever call `create_channel_rule`, `update_channel_rule`, `delete_channel_rule`\nor `import_channel_rules` without that confirmation in the conversation. A\nchannel rule rewrites how every past and future report classifies traffic, so a\nsilent change would invalidate the user's own history. If in doubt, propose and\nstop.\n\n**Close:** offer to re-audit after fixes ship, and name the first analysis\nthat becomes possible once the top gap is closed. Where the fix is a channel\nrule (cpc traffic landing in \"Referral\"), propose the rule and offer to test\nit with `test_channel_rules` — never create or update a rule without the\nuser explicitly confirming. If a product identifier\nis missing, name `product-friction` as the unlocked analysis. If\nmicroconversions are sparse, name `property-explorer` as the next step\nonce volume grows.\n\n---\n\nLog the run in `<state-dir>/<site_id>/runs.jsonl` with exactly these fields\nand no others: `ts` (ISO timestamp, UTC), `skill`, `calls` (the number of\nSealmetrics calls you made, counted), `budget` (this skill's documented\nceiling, a number — `12` here), `verdict` (one of `on_track`, `watch`, `act`,\n`kpis_only`, `refused`, `error`, or the score for an audit), `scheduled`\n(boolean), `notes` (one line). The first real audit wrote `calls_used` and a\nfree-text verdict because this footer said \"calls used\" in prose; the field\nnames are the contract. Skip silently if the path is not writable.\n"
}SHA-256 of public snapshot: da671401f1c222c3405f8c74e140d8206fcb4452e3e5732394a8fcd796ec2539