Not in the top 1,000 by GitHub stars
workmagicio/workmagic-agent-plugin
Ask your WorkMagic marketing data anything — attribution, lift tests and budget plans in Claude, ChatGPT, Codex, Cursor, Copilot and Gemini.
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/attribution-anomaly-diagnosis/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ef1c5166a62f
No earlier version was observed for comparison.
skills/attribution-custom-dimension/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ef1c5166a62f
No earlier version was observed for comparison.
skills/attribution-data-query/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ef1c5166a62f
No earlier version was observed for comparison.
skills/attribution-edge-routing/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → ef1c5166a62f
No earlier version was observed for comparison.
skills/attribution-intent-clarification/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ef1c5166a62f
No earlier version was observed for comparison.
skills/attribution-model-comparison/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → ef1c5166a62f
No earlier version was observed for comparison.
skills/lift-test-readout/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Network or broad shell
First observation → ef1c5166a62f
No earlier version was observed for comparison.
skills/mbo-create-scenario/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → ef1c5166a62f
No earlier version was observed for comparison.
skills/mbo-read-scenario/SKILL.md
Week of Nov 2, 2026 · Line counts unavailable
Before Not checked yet → After Instructions only
First observation → ef1c5166a62f
No earlier version was observed for comparison.
Verified commit ef1c5166a62ffcabc8092680c339e8e424b6a1f7
git clone --filter=blob:none --no-checkout https://github.com/workmagicio/workmagic-agent-plugin.git .hotskills/workmagicio-workmagic-agent-plugin && git -C .hotskills/workmagicio-workmagic-agent-plugin checkout --detach ef1c5166a62ffcabc8092680c339e8e424b6a1f7
# Copy each selected skill directory from .hotskills/workmagicio-workmagic-agent-plugin into .claude/skills/<skill-name>/git clone --filter=blob:none --no-checkout https://github.com/workmagicio/workmagic-agent-plugin.git .hotskills/workmagicio-workmagic-agent-plugin && git -C .hotskills/workmagicio-workmagic-agent-plugin checkout --detach ef1c5166a62ffcabc8092680c339e8e424b6a1f7
# Copy each selected skill directory from .hotskills/workmagicio-workmagic-agent-plugin into .gemini/skills/<skill-name>/Heat
Insufficient historyNot enough history yet to measure heat. It appears after a few days of data.
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- attribution-anomaly-diagnosis
skills/attribution-anomaly-diagnosis - attribution-custom-dimension
skills/attribution-custom-dimension - attribution-data-query
skills/attribution-data-query - attribution-edge-routing
skills/attribution-edge-routing - attribution-intent-clarification
skills/attribution-intent-clarification - attribution-model-comparison
skills/attribution-model-comparison - lift-test-readout
skills/lift-test-readout - mbo-create-scenario
skills/mbo-create-scenario - mbo-read-scenario
skills/mbo-read-scenario
How it works
attribution-anomaly-diagnosis
When your agent uses it
Diagnose "why" questions about attribution anomalies — attribution=0 (no attributed orders), and sudden drops, spikes or retroactive changes in attributed numbers. Do NOT use for "show me numbers" — that's attribution-data-query.
What it loads into context
Frontmatter
226 tokensAlways available to the agent
SKILL.md
2,697 tokensWhen the skill is activated
Reference documents
4,368 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Purpose
- 2. When to trigger
- 3. Inputs
- 4. SOP
- 5. Tools used
- 6. Output format
- 7. CRITICAL rules (top 8 — full list in references/failure-modes.md)
- 8. Edge cases
- 9. Related skills
Files
../../.claude-plugin/marketplace.jsonasset419 bytes../../.claude-plugin/plugin.jsonasset689 bytes../../assets/logo.pngasset77,840 bytesSKILL.mdcore10,709 bytesexamples/example-A-meta-roas-drop.mddoc2,951 bytesreferences/basic-checks.mddoc2,439 bytesreferences/edge-cases.mddoc816 bytesreferences/failure-modes.mddoc1,439 bytesreferences/fallback-structure.mddoc915 bytesreferences/model-branches.mddoc4,244 bytesreferences/output-template.mddoc3,047 bytesreferences/scenario-snippets.mddoc2,225 bytestemplates/01-scope-lookup.sqlasset2,148 bytestemplates/02-spend-vs-attribution.sqlasset977 bytestemplates/03-measurement-readiness.sqlasset477 bytestemplates/04-utm-health.sqlasset720 bytestemplates/05-click-distribution.sqlasset1,210 bytestemplates/06-dda-vs-anyclick.sqlasset982 bytestemplates/07-lift-test-results.sqlasset726 bytes
Read SKILL.md
## 1. Purpose
Diagnose **"why" questions** about attribution anomalies — specifically **attribution = 0** (a tactic shows no attributed orders) and **attribution swings** (sudden drops / spikes / retroactive changes to historical numbers). 5-step diagnostic tree → internal report + client-facing explanation.
> **Shared conventions (canonical elsewhere — don't re-derive):** attribution model default + aliases and sales-platform scope + measurement identity live in **`attribution-data-query`** (`references/attribution-model.md`, `references/sales-platform-scope.md`); follow those (load the `attribution-data-query` skill from this plugin if it isn't loaded). Note this skill reads MMM-calibrated measures (`calibrated_*`) for some checks — a *different* measure from the `attr_*` the other skills use; keep them clearly labeled so a $ figure here is never confused with an attributed-sales figure. (Open question flagged to DS — see the team doc.)
**Do NOT use this skill for "show me the numbers" queries** — those belong to `attribution-data-query`.
## 2. When to trigger
Trigger when user is asking **why** attribution looks wrong, not just **what** the numbers are.
**Do NOT trigger**:
View the complete source on GitHubattribution-custom-dimension
When your agent uses it
Handle attribution queries sliced by a business label ("by audience" / "by region" / "by brand") that is not a native field — it lives in campaign names and only becomes queryable once a Naming Convention (NC) rule is configured.
What it loads into context
Frontmatter
162 tokensAlways available to the agent
SKILL.md
2,509 tokensWhen the skill is activated
Reference documents
2,875 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Purpose
- 2. When to trigger
- 3. Inputs
- 4. SOP
- 5. Tools used
- 6. Output format
- 7. CRITICAL rules (top 8 — full list in references/failure-modes.md)
- 8. Edge cases
- 9. Related skills
Files
SKILL.mdcore10,630 bytesexamples/example-A-audience-state-c.mddoc3,906 bytesreferences/edge-cases.mddoc1,841 bytesreferences/failure-modes.mddoc2,063 bytesreferences/output-template.mddoc1,074 bytesreferences/state-routing.mddoc1,920 bytestemplates/01-sample-campaign-names.sqlasset593 bytestemplates/02-nc-sanity-check.sqlasset566 bytestemplates/proposal-message.mddoc1,300 bytes
Read SKILL.md
## 1. Purpose
Handle queries that slice attribution data by a **business label** (e.g., "by region", "by audience", "by brand", "by product line") where the label isn't a native field — it lives inside campaign names and only becomes a real dimension once a **Naming Convention (NC)** rule is configured for the tenant.
This skill detects NC state, guides configuration when needed in business language, and continues the original query after configuration. **The user should rarely (ideally never) have to leave the chat to set up NC themselves.**
> **Shared conventions + output mode:** the final data answer is produced by `attribution-data-query` (handoff), so it inherits that skill's conventions and **output threshold** — a "by <label>" breakdown is report-shaped and comes back as a live **artifact**, not a wall of table. Sales-platform scope + attribution model are canonical in `attribution-data-query` (`references/attribution-model.md`, `references/sales-platform-scope.md`); don't re-derive them here.
## 2. When to trigger
Trigger when the user asks for data **"by <business term>"** where the term isn't a built-in WM dimension.
**Detection rule**: after `dashboard-metrics-list` with the tenant's `tenantId`, if the requested dimension term isn't in the returned property list (built-in or NC-derived), this skill takes over.
View the complete source on GitHubattribution-data-query
When your agent uses it
Translate explicit data requests into Cube.dev SQL and return results. Default skill for query-type asks in the Attribution domain. No estimation, no fabrication, no proactive dashboards.
What it loads into context
Frontmatter
204 tokensAlways available to the agent
SKILL.md
3,076 tokensWhen the skill is activated
Reference documents
6,228 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Purpose
- 2. When to trigger
- 3. Inputs
- 4. SOP
- 5. Tools used
- 6. Output format
- 7. CRITICAL rules (top 8 — full list in references/failure-modes.md)
- 8. Edge cases & routing
- 9. Related skills
Files
SKILL.mdcore12,928 bytesexamples/example-A-meta-roas-last-week.mddoc2,676 bytesreferences/attribution-model.mddoc2,147 bytesreferences/edge-cases.mddoc2,822 bytesreferences/failure-modes.mddoc2,685 bytesreferences/granularity-default.mddoc409 bytesreferences/sales-platform-scope.mddoc4,499 bytesreferences/sql-examples.mddoc7,743 bytesreferences/time-range-resolution.mddoc1,692 bytestemplates/01-channel-roas.sqlasset705 bytestemplates/02-top-n-campaigns.sqlasset655 bytestemplates/03-period-over-period.sqlasset1,547 bytestemplates/04-creative-headlines.sqlasset779 bytestemplates/05-actual-store-sales.sqlasset718 bytes
Read SKILL.md
# attribution-data-query
## 1. Purpose
Translate the user's explicit data request into a precise Cube.dev SQL query and return results. **No estimation, no fabrication, no proactive dashboard creation.** This is the default skill for all query-type requests in the Attribution domain.
## 2. When to trigger
**Trigger condition**: the user's request explicitly states (or strongly implies) **most** of:
- A specific metric (ROAS, spend, new_customers, conversion_rate, etc.)
- A specific dimension (channel, campaign, creative, sales_channel)
- A time range (explicit or common phrasing like "last week", "last 30 days")
- Optional: filters, attribution model, sort orderView the complete source on GitHubattribution-edge-routing
When your agent uses it
Recognize when a user request falls outside attribution's capability boundary and route it gracefully — to another WM product (MBO / Lift Test / Creative Magic / Ads Magic / Audience Magic), to a human (CSM / DS / Eng), or to a clean decline that bridges back to what attribution can answer.
What it loads into context
Frontmatter
167 tokensAlways available to the agent
SKILL.md
2,477 tokensWhen the skill is activated
Reference documents
4,264 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Purpose
- 2. When to trigger
- 3. Inputs
- 4. SOP
- 5. Tools used
- 6. Output format
- 7. CRITICAL rules (top 8 — full list in references/failure-modes.md)
- 8. Edge cases
- 9. Related skills + WM product reference
Files
SKILL.mdcore10,480 bytesexamples/example-A-forecast-ask.mddoc3,298 bytesreferences/boundary-types.mddoc2,314 bytesreferences/edge-cases.mddoc1,730 bytesreferences/failure-modes.mddoc1,900 bytesreferences/output-template.mddoc2,532 bytesreferences/routing-matrix.mddoc2,547 bytesreferences/wm-products.mddoc1,734 bytestemplates/routing-response.mddoc2,397 bytes
Read SKILL.md
## 1. Purpose
Recognize when a user request falls **outside attribution's capability boundary** and route it gracefully — either to another WM product (MBO / Lift Test / Creative Magic / Ads Magic / Audience Magic), to a human (CSM / DS / Eng), or to a clean decline with a bridge to what attribution *can* answer.
Exists to **prevent fabrication** (the worst failure mode in this domain) and to keep boundary cases from feeling like a dead end. **Cold refusals destroy trust; graceful redirects preserve it.**
> **Shared conventions (canonical elsewhere — don't re-derive):** when a routing message names a limit or a next step, the attribution model + sales-platform scope conventions are canonical in **`attribution-data-query`** (`references/attribution-model.md`, `references/sales-platform-scope.md`). And "create/build a dashboard" now routes to the **`dashboard` skill** (live artifact) — there is no native custom-report skill anymore, and the platform's dashboard **write** tools are deliberately unused (§7 rule 9).
## 2. When to trigger
Trigger when the user asks for something attribution cannot answer. **Four boundary types**:
| **Type** | **Definition** | **Example** |
|-|-|-|View the complete source on GitHubattribution-intent-clarification
When your agent uses it
Resolve genuinely ambiguous attribution queries by asking ONE focused clarifying question, then hand off to attribution-data-query (or another skill). Never become a wall of questions.
What it loads into context
Frontmatter
104 tokensAlways available to the agent
SKILL.md
1,401 tokensWhen the skill is activated
Reference documents
1,135 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Purpose
- 2. When to trigger
- 3. Inputs
- 4. SOP
- 5. Tools used
- 6. Output format
- 7. CRITICAL rules (top 5 — full list in references/failure-modes.md)
- 8. Edge cases
- 9. Related skills
Files
SKILL.mdcore5,755 bytesreferences/ambiguity-types.mddoc1,079 bytesreferences/edge-cases.mddoc1,661 bytesreferences/failure-modes.mddoc925 bytesreferences/output-template.mddoc1,042 bytes
Read SKILL.md
## 1. Purpose
Resolve **genuinely ambiguous** attribution queries by asking **one focused clarifying question**, then hand the resolved query off to `attribution-data-query` (or another skill). Exists so we don't silently guess on multi-meaning inputs — but it must **never become a wall of questions**.
> **Shared conventions (canonical elsewhere — don't re-derive):** attribution model default + aliases and sales-platform scope + measurement identity are canonical in **`attribution-data-query`** (`references/attribution-model.md`, `references/sales-platform-scope.md`); when you state a default in an option, use those (load the `attribution-data-query` skill from this plugin if it isn't loaded). Note the default **time window is task-specific and not a contradiction**: a simple query defaults to 7 days, a model comparison to 30 days (needs signal) — state whichever you're using.
## 2. When to trigger
**Trigger** when the user's request has **≥ 2 plausible interpretations** on a dimension that materially changes the answer.
**5 ambiguity types** (detailed examples → `references/ambiguity-types.md`):
- **Granularity** — channel / campaign / creative?
- **Metric** — by ROAS / spend / orders / new customers?View the complete source on GitHubattribution-model-comparison
When your agent uses it
Pull attribution numbers under multiple attribution models side-by-side and explain why they differ in business language. Default 4-way comparison (idda / dda / last_click / platform_reported).
What it loads into context
Frontmatter
137 tokensAlways available to the agent
SKILL.md
2,358 tokensWhen the skill is activated
Reference documents
3,929 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Purpose
- 2. When to trigger
- 3. Inputs
- 4. SOP
- 5. Tools used
- 6. Output format
- 7. CRITICAL rules (top 9 — full list in references/failure-modes.md)
- 8. Edge cases
- 9. Related skills
Files
SKILL.mdcore9,812 bytesexamples/example-A-meta-multi-model.mddoc3,250 bytesreferences/diff-patterns.mddoc3,836 bytesreferences/edge-cases.mddoc1,915 bytesreferences/failure-modes.mddoc2,591 bytesreferences/model-reference.mddoc1,459 bytesreferences/output-template.mddoc3,398 bytestemplates/01-multi-model-comparison.sqlasset1,698 bytes
Read SKILL.md
## 1. Purpose
Pull attribution numbers under **multiple attribution models side-by-side** and explain **why they differ**, using business-language interpretation grounded in how each model works. Exists because users frequently see different numbers in different places (WorkMagic dashboard vs Meta Ads Manager vs Google Ads) and want to understand the discrepancy.
> **Shared conventions (canonical elsewhere — don't re-derive):** attribution model default + aliases and sales-platform scope + measurement identity live in **`attribution-data-query`** (`references/attribution-model.md`, `references/sales-platform-scope.md`); follow those (load the `attribution-data-query` skill from this plugin if it isn't loaded). This skill's `references/model-reference.md` owns only the model↔`model_id` SQL mapping.
**This skill is NOT**:
- Diagnosis of why a single model dropped → `attribution-anomaly-diagnosis`
- Judgment of which model is "correct" — give situational guidance only if asked; never push one as the right answer
- A pure data pull — must include the interpretation step
## 2. When to trigger
View the complete source on GitHublift-test-readout
When your agent uses it
Read and act on completed lift test results — interpret iROAS, confidence scores, and turn the data into a post-test decision.
What it loads into context
Frontmatter
117 tokensAlways available to the agent
SKILL.md
2,253 tokensWhen the skill is activated
Reference documents
4,783 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- Purpose
- When to trigger
- Inputs
- SOP
- Tools used
- Output rules
- Edge cases
- CRITICAL rules (top 6)
- References & related skills
Files
SKILL.mdcore9,886 bytesreferences/output-templates.mddoc11,111 bytesreferences/sop-detail.mddoc4,753 bytesreferences/terminology.mddoc3,241 bytesreferences/test-resolution.mddoc820 bytes
Read SKILL.md
## Purpose
How to read and act on lift test results — interpreting incremental ROAS, confidence scores, and making post-test decisions. This skill turns a completed test’s raw output into a concise, decision-oriented readout: the headline numbers, what they mean in context, and what to do next. Default interpretation skill in the Lift Test domain.
## When to trigger
**Trigger condition**: The user is asking about results, performance, or implications of one or more completed lift tests.
**Examples that should NOT trigger this skill — route to another skill instead**:
| **Input pattern** | **Route to** |
|-|-|
| “Create a lift test for me” / “set up a Meta test” | Not covered by this plugin yet — point the user to Lift Tests in the WorkMagic app, or their CSM |
| “What is iROAS?” / “what does PTM mean?” (concept, no specific test) | `database-query-ask` |View the complete source on GitHubmbo-create-scenario
When your agent uses it
Turn a natural-language ask about media budget optimization into a configured MBO scenario — "how should I split my budget", "how much should I spend on X". Also handles rename, edit and delete on existing scenarios.
What it loads into context
Frontmatter
210 tokensAlways available to the agent
SKILL.md
3,189 tokensWhen the skill is activated
Reference documents
7,650 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Purpose
- 2. When to trigger
- 3. Inputs
- 4. SOP
- 5. Tools used
- 6. Output format
- 7. CRITICAL rules (top 8)
- 8. Output artifacts
- 9. Related skills
Files
SKILL.mdcore13,746 bytesexamples/example-october-budget.mddoc3,606 bytesreferences/budget-parsing.mddoc2,334 bytesreferences/constraint-conflicts.mddoc1,341 bytesreferences/deliver-flow.mddoc4,640 bytesreferences/edge-cases.mddoc2,807 bytesreferences/failure-modes.mddoc4,545 bytesreferences/inputs-detail.mddoc2,519 bytesreferences/key-concepts.mddoc897 bytesreferences/modify-flow.mddoc976 bytesreferences/preview-format.mddoc1,415 bytesreferences/reference-period-rules.mddoc2,013 bytesreferences/saturation-tactics.mddoc2,427 bytestemplates/saturation-proposal.mddoc977 bytestemplates/scenario-preview.mddoc1,096 bytes
Read SKILL.md
## 1. Purpose
Take a user's natural-language ask about media budget optimization ("how should I split \$500K across Meta and Google next month?") and turn it into a properly configured **MBO scenario** — collecting required settings, parsing budgets / goals / constraints from natural language, validating provisioning + scope, and creating the scenario via `budget-optimizer-create`. Also handles **modify** intents (rename, change inputs, delete) on existing scenarios.
Different from `mbo-read-scenario` (interpret existing results) and from attribution skills (historical data / why questions). MBO is **forward-looking** — it produces a plan.
## 2. When to trigger
Trigger when the user wants **forward-looking budget allocation guidance** or wants to **modify an existing scenario's inputs**.
## 3. Inputs
MBO has 9 scenario settings. The skill must mirror UI defaults — if UI has a default, the skill applies it automatically and surfaces it via `appliedDefaults` in the preview so the user can override.
View the complete source on GitHubmbo-read-scenario
When your agent uses it
Interpret existing MBO scenario results — read one, compare two, or reconcile MBO against attribution, lift tests, or actual spend. Read-only; "how much should I spend" goes to mbo-create-scenario.
What it loads into context
Frontmatter
269 tokensAlways available to the agent
SKILL.md
2,563 tokensWhen the skill is activated
Reference documents
11,203 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 1. Purpose
- 2. When to trigger
- 3. Inputs
- 4. SOP
- 5. Tools used
- 6. Output format
- 7. CRITICAL rules (top 8)
- 8. Output artifacts
- 9. Related skills
Files
SKILL.mdcore10,339 bytesexamples/example-goal-vs-projection-mismatch.mddoc2,989 bytesreferences/basic-read-mode.mddoc3,988 bytesreferences/edge-cases.mddoc2,545 bytesreferences/failure-modes.mddoc4,040 bytesreferences/inputs-detail.mddoc1,022 bytesreferences/interpretation-playbook.mddoc6,932 bytesreferences/key-concepts.mddoc1,376 bytesreferences/mbo-vs-actual-mode.mddoc1,048 bytesreferences/mbo-vs-attribution-mode.mddoc1,093 bytesreferences/mbo-vs-lift-test-mode.mddoc2,628 bytesreferences/mode-detection.mddoc2,195 bytesreferences/output-format.mddoc655 bytesreferences/scenario-compare-mode.mddoc1,319 bytesreferences/term-usage.mddoc890 bytestemplates/basic-read-output.mddoc1,547 bytestemplates/mbo-vs-attribution-output.mddoc3,331 bytestemplates/mbo-vs-lift-test-output.mddoc6,192 bytestemplates/scenario-compare-output.mddoc3,792 bytes
Read SKILL.md
## 1. Purpose
Help users **interpret existing MBO scenario results** — five modes: **basic_read** / **scenario_compare** / **mbo_vs_attribution** / **mbo_vs_lift_test** / **mbo_vs_actual**. What each mode covers → references/mode-detection.md; detection in §4 Step 3, branch references in §4 Step 7.
Different from `mbo-create-scenario` (creates / modifies a scenario) and from `attribution-anomaly-diagnosis` (diagnoses historical attribution swings). This skill is purely interpretation — no writes.
## 2. When to trigger
Trigger when the user wants to **understand existing MBO results**.
**Do NOT trigger** when:
- User wants to **create** a new scenario → `mbo-create-scenario`
- **"How much should I spend on X?"** — this is a recommendation question; the only honest answer requires running a scenario → `mbo-create-scenario`. Don't use historical or list data to make up a number.View the complete source on GitHubSkills included
- attribution-anomaly-diagnosis
- attribution-custom-dimension
- attribution-data-query
- attribution-edge-routing
- attribution-intent-clarification
- attribution-model-comparison
- lift-test-readout
- mbo-create-scenario
- mbo-read-scenario
Repository facts
- License
- MIT
- Created
- Nov 5, 2026
- Last pushed
- Nov 6, 2026
- Forks
- 0
- Open issues
- 0
- Project activity
- Active
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 6, 2026
- No broad tool permissions
- No dangerous shell commands
- 98 network referencesin 21 files: attribution-custom-dimension/SKILL.md:28 .claude-plugin/plugin.json:7 attribution-custom-dimension/examples/example-A-audience-state-c.md:1 and 18 more
- No hidden or obfuscated text
- No instruction overrides
- No executable scripts
- No access to secrets
- No requests to vote in Hot
Show all 98 signals by file
.claude-plugin/marketplace.json
.claude-plugin/plugin.json
- Network accessline 7
"author": { "name": "WorkMagic", "url": "https://workmagic.io" - Network accessline 8
"name": "WorkMagic", "url": "https://workmagic.io" }, - Network accessline 9
"url": "https://workmagic.io" - Network accessline 10
}, "homepage": "https://workmagic.io", "license": "MIT", - Network accessline 11
"homepage": "https://workmagic.io", - Network accessline 12
"license": "MIT", "privacyPolicyUrl": "https://workmagic.io/privacy", "keywords": [ - Network accessline 13
"privacyPolicyUrl": "https://workmagic.io/privacy",
skills/attribution-anomaly-diagnosis/references/model-branches.md
- Network accessline 64
| `test_end_date` within 0–30 days before `anomaly_start` | Overlaps anomaly window — very likely the trigger | | `LIFT_PCT` ≈ 0 or very low | Test concluded near-zero incrementality → iDDA cuts weight sharply | | `NC_IROAS` noticeably lowe - Network accessline 65
| `LIFT_PCT` ≈ 0 or very low | Test concluded near-zero incrementality → iDDA cuts weight sharply | | `NC_IROAS` noticeably lower than previous test | Calibration was pulled down; NC attribution drops with it | | `auto_apply = 1` | Result a - Network accessline 66
| `NC_IROAS` noticeably lower than previous test | Calibration was pulled down; NC attribution drops with it |
skills/attribution-custom-dimension/SKILL.md
- Network accessline 28
This skill detects NC state, guides configuration when needed in business language, and continues the original query after configuration. **The user should rarely (ideally never) have to leave the chat to set up NC themselves.** - Network accessline 40
- Dimension is already a built-in field (`ads_platform`, `campaign_name`, `tactic_name`, etc.) → `attribution-data-query` - Dimension is already an NC-derived property the tenant has configured → `attribution-data-query` (just use the prope - Network accessline 42
- User is asking about NC configuration in general ("how does NC work?") → answer from `database-query-ask` without entering this skill - Network accessline 48
| `business_term` | Required | User's natural-language label (e.g., "audience", "region", "brand"). Preserve as candidate propertyName — rephrase later if the tenant already has a slightly different name. | | `nc_state` | Detected, not aske - Network accessline 49
| `nc_state` | Detected, not asked | One of: **A) configured + property exists**, **B) configured + property missing**, **C) not configured at all**. Determined by `naming-convention-list` + `dashboard-metrics-list`. | | `tenantId` | Requir - Network accessline 50
| `tenantId` | Required for tool calls | Pass to `dashboard-metrics-list` for tenant-specific NC propertyNames. Pass to `naming-convention-list` to read existing rules. | - Network accessline 51
| `original_query` | Required | The full attribution-data-query intent the user came in with (metric, time range, filters). Preserve so we can pick it up after NC config completes. | - Network accessline 55
**Step 1: Detect NC state** — two parallel calls: - Network accessline 57
1. `dashboard-metrics-list` with `tenantId` → list of available propertyNames (built-in + NC-derived) 2. `naming-convention-list` with `tenantId` → existing NC rules (separators, position, property mappings) - Network accessline 58
2. `naming-convention-list` with `tenantId` → existing NC rules (separators, position, property mappings) - Network accessline 62
| **State** | **How to detect** | **Next step** | |-|-|-| | **A. Configured + property exists** | Requested term (fuzzy match, case-insensitive) appears in `dashboard-metrics-list` propertyNames | Use the propertyName **exactly as returned - Network accessline 63
|-|-|-| | **A. Configured + property exists** | Requested term (fuzzy match, case-insensitive) appears in `dashboard-metrics-list` propertyNames | Use the propertyName **exactly as returned (case-sensitive)** and route to `attribution-data- - Network accessline 64
| **A. Configured + property exists** | Requested term (fuzzy match, case-insensitive) appears in `dashboard-metrics-list` propertyNames | Use the propertyName **exactly as returned (case-sensitive)** and route to `attribution-data-query`. - Network accessline 65
| **B. Configured + property missing** | `naming-convention-list` has existing rules, but the requested term doesn't appear in the propertyName set | Step 2 — add one rule to the existing NC | - Network accessline 66
| **C. Not configured at all** | `naming-convention-list` returns empty | Step 3 — set up NC from scratch | - Network accessline 83
**Step 3 [State C]: Set up NC from scratch** - Network accessline 102
| **Tool** | **Required?** | **Purpose** | |-|-|-| | `database-query-ask` | Required (first) | NC schema patterns + Cube.dev syntax + `ctx` timestamp for any SQL (sample pull + sanity check) | - Network accessline 103
|-|-|-| | `database-query-ask` | Required (first) | NC schema patterns + Cube.dev syntax + `ctx` timestamp for any SQL (sample pull + sanity check) | | `dashboard-metrics-list` | Required | List propertyNames for this tenant (built-in + NC) - Network accessline 104
| `database-query-ask` | Required (first) | NC schema patterns + Cube.dev syntax + `ctx` timestamp for any SQL (sample pull + sanity check) | - Network accessline 105
| `dashboard-metrics-list` | Required | List propertyNames for this tenant (built-in + NC). | | `naming-convention-list` | Required | Read existing NC rules to determine State A / B / C | | `naming-convention-separators-get` | Conditional ( - Network accessline 106
| `naming-convention-list` | Required | Read existing NC rules to determine State A / B / C | - Network accessline 107
| `naming-convention-separators-get` | Conditional (State C) | Detect what separators the tenant's campaign names use, before proposing a rule | | `naming-convention-create` | Conditional (B + C) | Create NC rule after user confirmation. | - Network accessline 108
| `naming-convention-create` | Conditional (B + C) | Create NC rule after user confirmation. | - Network accessline 109
| `naming-convention-update-or-delete` | Conditional (State B) | Update existing NC ruleset to add the new property | - Network accessline 116
- **State A (silent path)**: no NC interaction visible to user — just answer the original query - Network accessline 125
- **One confirmation question max**; never ask multi-question forms - **Promise the follow-through** ("I'll pull the audience-level ROAS you asked for") so user doesn't worry about losing context - **Use the user's term** as the property na - Network accessline 127
- **Use the user's term** as the property name unless their NC already has a different name for it - Network accessline 132
2. **Always sanity-check after applying** — if most rows are NULL, surface and adjust; never silently hand off bad data 3. **Never silently substitute a nearby property** — if user asked for "audience" and tenant only has "segment", don't q - Network accessline 133
3. **Never silently substitute a nearby property** — if user asked for "audience" and tenant only has "segment", don't query "segment" without telling them 4. **Never send user to UI to configure NC themselves** — the skill exists precisely - Network accessline 134
4. **Never send user to UI to configure NC themselves** — the skill exists precisely so they don't have to - Network accessline 146
- **Downstream (always)**: `attribution-data-query` — handoff after configuration completes, or directly when State A - **Upstream**: `attribution-intent-clarification` (when the business term itself is ambiguous, e.g., "by region" could me - Network accessline 147
- **Upstream**: `attribution-intent-clarification` (when the business term itself is ambiguous, e.g., "by region" could mean campaign tag vs sales region) - **Sibling**: `attribution-anomaly-diagnosis` (after slicing by NC property, user ma - Network accessline 148
- **Sibling**: `attribution-anomaly-diagnosis` (after slicing by NC property, user may ask "why is this segment down?")
skills/attribution-custom-dimension/examples/example-A-audience-state-c.md
- Network accessline 1
## Example A — "ROAS by audience" (State C, NC from scratch) - Network accessline 3
The first-time experience: a tenant that's never set up NC asks for a query that needs an NC property. - Network accessline 11
#### Step 1 — Detect NC state - Network accessline 13
- Call `dashboard-metrics-list` with tenantId. Result: built-in propertyNames only — no "Audience", no "audience", no fuzzy match. - Call `naming-convention-list` with tenantId. Result: **empty** — no existing NC rules. - Network accessline 14
- Call `naming-convention-list` with tenantId. Result: **empty** — no existing NC rules. - Network accessline 19
Ask `database-query-ask` for NC schema. Get `ctx`. - Network accessline 59
#### Step 5 — Apply NC rule
skills/attribution-custom-dimension/references/edge-cases.md
- Network accessline 7
| Campaign names look inconsistent — no clear pattern | Tell the user honestly: "Your campaign names don't follow a consistent pattern, so I can't extract this reliably. Best path: standardize the naming going forward, and we can revisit th - Network accessline 8
| Most rows resolve to NULL after applying the rule (sanity check fails) | Don't hand off. Surface the failure: "The rule I tried only caught X% of your campaigns. Here are the ones it missed — want me to adjust?" Offer 1-2 alternative inte - Network accessline 9
| User asks to set up NC without an underlying data question | Route to a general NC setup flow (could be a separate skill or product onboarding); this skill is data-query-driven. Don't run setup steps without a pending query to answer afte - Network accessline 11
| User wants to remove or rename an existing NC property | Admin-level. Confirm explicitly with extra UX confirmation ("This will affect all dashboards using this property"), then use `naming-convention-update-or-delete`. |
skills/attribution-custom-dimension/references/failure-modes.md
- Network accessline 3
- **Silently substitute a nearby property** — if user asked for "audience" and tenant only has "segment", don't just query "segment" without telling them - **Send the user to the UI to configure NC themselves** — the skill exists precisely - Network accessline 4
- **Send the user to the UI to configure NC themselves** — the skill exists precisely so they don't have to. Only escalate to UI if config is genuinely impossible from chat (e.g., needs admin permissions the agent doesn't have). - Network accessline 13
- **Skip `database-query-ask` before SQL** — required for `ctx` timestamp on both the sample pull and the sanity check - **Treat State A as needing configuration** — if the propertyName already exists, just use it; don't show the user a con - Network accessline 15
- **Propose all NC properties at once on State C** — focus on the term the user just asked about; other properties can be added later
skills/attribution-custom-dimension/references/output-template.md
- Network accessline 7
1. **Brief intro** (1-2 sentences). State B: short, no concept introduction. State C: explain NC in business language.
skills/attribution-custom-dimension/references/state-routing.md
- Network accessline 1
## NC state routing (detailed) - Network accessline 7
This is the happy path. The tenant has already configured an NC rule, and the propertyName the user asked for (or a fuzzy match) is in `dashboard-metrics-list` response. - Network accessline 9
- Use the propertyName **exactly as returned (case-sensitive)** - Hand off directly to `attribution-data-query` - **No NC interaction visible to user** — they just see the data answer to their original ask - Network accessline 10
- Hand off directly to `attribution-data-query` - **No NC interaction visible to user** — they just see the data answer to their original ask - If the user's term doesn't exactly match (e.g., user says "Region", tenant has "region") — use t - Network accessline 11
- **No NC interaction visible to user** — they just see the data answer to their original ask - Network accessline 16
Tenant has existing NC rules but not for the term the user just asked about. They've been through this process before — keep the explanation short.
skills/attribution-custom-dimension/templates/01-sample-campaign-names.sql
- Network accessline 1
-- Step 2/3: Pull 5-10 real campaign names to read before proposing an NC rule
skills/attribution-custom-dimension/templates/02-nc-sanity-check.sql
- Network accessline 1
-- Step 4: Sanity-check that the new NC property resolves to non-empty values for most rows
skills/attribution-custom-dimension/templates/proposal-message.md
skills/attribution-data-query/SKILL.md
- Network accessline 61
| dataset | Required | One of: channel_attribution (by channel) / ads_attribution (by campaign/ad) / creative_attribution (by creative) / order_sales (raw orders, no attribution split). Infer from user phrasing; never ask user to pick a Dat - Network accessline 62
| metric | Required | Extract from user input. Always call dashboard-metrics-list to validate the field name before using it. Never guess. | | dimension | Required | Validate against dashboard-metrics-list. For ads_attribution / creative_at - Network accessline 63
| dimension | Required | Validate against dashboard-metrics-list. For ads_attribution / creative_attribution with NC dimensions (Product Group, Asset Type, Creator name, etc.), pass tenantId to fan out tenant-specific propertyNames. | - Network accessline 96
- Confirm metric / dimension field names exist on the chosen DataSet - For aliases ("POAS", "return on ad spend") → find closest match. If none, ask once. - **For NC dimensions on `ads_attribution` / `creative_attribution`**: pass `tenantId - Network accessline 98
- **For NC dimensions on `ads_attribution` / `creative_attribution`**: pass `tenantId` to fan out tenant-specific propertyNames (e.g., `Product Group`, `Asset Type`). Use propertyName **exactly as returned (case-sensitive)**. - Network accessline 143
| dashboard-metrics-list | Required | Validate metric / dimension field names exist on the chosen DataSet. | | database-query-run | Required | Execute the Cube.dev SQL query. | | tenant-list | Optional | Look up tenantId when needed to fan - Network accessline 145
| tenant-list | Optional | Look up tenantId when needed to fan out NC dimensions on dashboard-metrics-list. |
skills/attribution-data-query/references/failure-modes.md
- Network accessline 6
- **Use raw warehouse SQL instead of Cube.dev syntax** — `database-query-run` only accepts Cube.dev SQL - **Use `attribution_model` as a SQL column** — the actual dimension is `attr_model_name` - **Hard-code `propertyNames` for NC dimension - Network accessline 7
- **Use `attribution_model` as a SQL column** — the actual dimension is `attr_model_name` - **Hard-code `propertyNames` for NC dimensions** — they are tenant-specific and case-sensitive; always pass `tenantId` to `dashboard-metrics-list` fi - Network accessline 8
- **Hard-code `propertyNames` for NC dimensions** — they are tenant-specific and case-sensitive; always pass `tenantId` to `dashboard-metrics-list` first
skills/attribution-intent-clarification/SKILL.md
- Network accessline 104
- **Downstream**: `attribution-data-query` (after resolution, most common) - **Route to instead**: `attribution-anomaly-diagnosis` (for "why" questions), `attribution-model-comparison` (for "X vs Y model" questions), `attribution-edge-routi - Network accessline 106
- **Sibling**: `attribution-custom-dimension` (when ambiguity is "by <business term>" that needs NC config)
skills/attribution-intent-clarification/references/ambiguity-types.md
- Network accessline 8
| **Scope** | "How are my ads doing?" | Which channels? Which time window? Compared to what? | | **Comparison** | "Compare last month to this month" | Which metric? Which dimension? Channel-level or campaign-level? | | **Subject** | "Look a - Network accessline 10
| **Subject** | "Look at my best campaign" | Best by what (ROAS / sales / NC orders)? In what window? |
skills/lift-test-readout/references/output-templates.md
- Network accessline 93
- ❌ Blaming the channel (“Meta underperformed”) — describe what the data shows - ❌ Owning cross-channel allocation decisions in prose — hand off to MBO - ❌ Inventing fields not returned by the readout tool (e.g. fabricating new-customer cou - Network accessline 95
- ❌ Inventing fields not returned by the readout tool (e.g. fabricating new-customer counts when only NC orders are present, or attribution-model breakdowns that are out of scope here) - Network accessline 131
- ❌ Saying “cut Meta” — always “reallocate toward higher-mROAS” / “shift budget” - ❌ Evaluative adjectives (strong, solid, weak, meaningful, substantial, remarkable, considerable, robust, compelling, impressive). Use neutral descriptors tie - Network accessline 133
- ❌ Calling NC iROAS < \$1 a problem unprompted — it’s normal. First-purchase revenue typically doesn’t cover full CAC.
skills/lift-test-readout/references/sop-detail.md
- Network accessline 23
- **Frame stakes in dollars where possible.** Dollar amounts beat bare percentages where it fits. “\$11k incremental sales on \$11k ad spend” lands harder than “13.5% lift.” - **Acknowledge what wasn’t measured.** Meta-only test? Don’t spec - Network accessline 24
- **Acknowledge what wasn’t measured.** Meta-only test? Don’t speculate about Google or TikTok. Amazon halo not in scope? Say so when the user asks decision questions. - **NC ROAS / NC iROAS < \$1.00 is normal.** First-purchase revenue typi - Network accessline 25
- **NC ROAS / NC iROAS < \$1.00 is normal.** First-purchase revenue typically doesn’t cover full CAC. Don’t flag it as a problem unless the user explicitly framed it that way.
skills/lift-test-readout/references/terminology.md
- Network accessline 50
|-|-| | Per-order count | ≥ 1,000 → 1,234; < 1,000 → integer 146 | | ROAS / iROAS / NC iROAS values | \$X.XX always 2 decimals — \$2.10, \$0.58 | - Network accessline 51
| Per-order count | ≥ 1,000 → 1,234; < 1,000 → integer 146 | | ROAS / iROAS / NC iROAS values | \$X.XX always 2 decimals — \$2.10, \$0.58 | | Percentages | X.X% one decimal — 13.5%, 0.2% | - Network accessline 52
| ROAS / iROAS / NC iROAS values | \$X.XX always 2 decimals — \$2.10, \$0.58 |
skills/mbo-create-scenario/examples/example-october-budget.md
- Network accessline 83
*"Scenario created — \[Open in MBO →\](https://app.workmagic.io/...). Recommended allocation: Meta \$310K (+12% vs baseline), Google \$190K (−15%). Expected sales lift: \~+\$240K vs reference allocation. Google_Brand_Search and Meta_Retarge
skills/mbo-read-scenario/SKILL.md
- Network accessline 173
**Reference docs**: [Media Budget Optimizer knowledge base](https://mc10lxkn1j7.sg.larksuite.com/wiki/R59swl3L2iW4BNkGq2Kle3jdgeb) — Reading Your Results + FAQ.
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Signal confidence: 86 facts
- Network access in prose of documentationattribution-anomaly-diagnosis/references/model-branches.md:64Low confidence
- Network access in prose of documentationattribution-anomaly-diagnosis/references/model-branches.md:65Low confidence
- Network access in prose of documentationattribution-anomaly-diagnosis/references/model-branches.md:66Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:28Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:40Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:42Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:48Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:49Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:50Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:51Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:55Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:57Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:58Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:62Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:63Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:64Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:65Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:66Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:83Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:102Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:103Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:104Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:105Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:106Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:107Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:108Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:109Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:116Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:125Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:127Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:132Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:133Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:134Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:146Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:147Low confidence
- Network access in prose of the SKILL.mdattribution-custom-dimension/SKILL.md:148Low confidence
- Network access in prose of documentationattribution-custom-dimension/examples/example-A-audience-state-c.md:1Low confidence
- Network access in prose of documentationattribution-custom-dimension/examples/example-A-audience-state-c.md:3Low confidence
- Network access in prose of documentationattribution-custom-dimension/examples/example-A-audience-state-c.md:11Low confidence
- Network access in prose of documentationattribution-custom-dimension/examples/example-A-audience-state-c.md:13Low confidence
- Network access in prose of documentationattribution-custom-dimension/examples/example-A-audience-state-c.md:14Low confidence
- Network access in prose of documentationattribution-custom-dimension/examples/example-A-audience-state-c.md:19Low confidence
- Network access in prose of documentationattribution-custom-dimension/examples/example-A-audience-state-c.md:59Low confidence
- Network access in prose of documentationattribution-custom-dimension/references/edge-cases.md:7Low confidence
- Network access in prose of documentationattribution-custom-dimension/references/edge-cases.md:8Low confidence
- Network access in prose of documentationattribution-custom-dimension/references/edge-cases.md:9Low confidence
- Network access in prose of documentationattribution-custom-dimension/references/edge-cases.md:11Low confidence
- Network access in prose of documentationattribution-custom-dimension/references/failure-modes.md:3Low confidence
- Network access in prose of documentationattribution-custom-dimension/references/failure-modes.md:4Low confidence
- Network access in prose of documentationattribution-custom-dimension/references/failure-modes.md:13Low confidence
and 36 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/attribution-anomaly-diagnosis/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/attribution-anomaly-diagnosis/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Native | Manifest gemini-extension.json | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/attribution-anomaly-diagnosis/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/attribution-anomaly-diagnosis/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.