A discipline harness for AI-assisted analytics: agent skills for every moment a number gets built, broken, or trusted — requirements, definitions, audits, triage, migrations, dashboards, briefs — every claim carrying its provenance in one living knowledge base.
> /plugin marketplace add debabsah/analytics-office> /plugin install analytics-office@analytics-office
What's inside
A discipline harness for AI-assisted analytics.
AI is genuinely good at analytics work. It fails in one specific way: not by being unable, but by being agreeable. Handed an inherited warehouse with no docs, it starts building instead of orienting. Handed "build me a dashboard with these KPIs," it builds exactly that — without ever asking what decision the dashboard serves. Asked what "active customer" means, it picks a sensible default instead of pinning the choice with the person who owns it. Handed a number, it writes the confident story. The fix is a model that refuses and redirects — that refusal-then-redirect is the whole product.
analytics-office is a bench of 19 read-only skills for Claude Code that switches the model out of answer-mode and into the discipline each moment of analytics work actually needs — orienting on an unfamiliar estate, interrogating requirements, proposing the questions worth asking when the stakeholder has none, locking metric definitions, designing models, auditing inherited premises, reviewing the code behind a number, diagnosing a break, exploring a dataset without dredging it, mapping the estate, scoping a change's blast radius, QA-ing the dashboard before the QBR, proving a migration ties out, briefing stakeholders, writing the weekly status, surviving the meeting. Each skill is engineered against a documented failure of the bare model. All of them write to one living knowledge base you resume from.
Read-only by construction · computes instead of eyeballing · no required sequence — any skill, any moment.
/plugin marketplace add debabsah/analytics-office
/plugin install analytics-office@analytics-office
Nineteen skills in five families — each family owns an ask-shape, and every member's description opens with its family's shared stanza (that structure is measured, not aesthetic; see Engineered, not vibed). The deep dive — every skill's job, trap, loop, and artifact, with diagrams — is docs/skills-deep-dive.md. Ordered here like a project — but there is no pipeline. Every skill fires independently, at any moment, with or without the others having run.
Shape — the work itself is still being shaped, before anything is built
| You say | What fires | You walk away with |
|---|---|---|
| "I inherited this warehouse and the analyst left." | groundwork | a living knowledge-base/ — and a map of what you don't know yet |
| "Build me a dashboard with these KPIs." | requirements-interrogator | the decision behind the ask, the requested-vs-derived delta, a verdict |
| "We don't know what we need — what can our data tell us?" | worth-knowing | the question charter: candidate questions ranked by decision-weight, the unasked included, hypotheses never findings |
| "Lock down what 'active customer' actually means." | kpi-contract | a versioned contract — every definitional fork pinned by its owner or flagged [needs decision] |
| "How should I model this mart?" | model-contract | a logical star with the grain declared and gated on evidence — no DDL invented on a guess |
Audit — a built thing is about to be trusted; the gate fires before the work leans on it
| You say | What fires | You walk away with |
|---|---|---|
| "Turn this proc's output into the board number." | audit-my-assumptions | a graded register of every silent premise, falsified before you build on it |
| "Is this SQL right?" | review-my-query | findings graded Blocking / Latent / Advisory against the locked definition — a review, never a rewrite |
| "Is our knowledge base still true?" | kb-reconcile | a graded drift report — contradictions, stale claims, unsourced numbers |
| "QA my dashboard before the QBR." | review-my-dashboard | the assembly review: dashboards fail between correct parts — totals, defaults, titles, staleness |
Validate — a measured result is about to drive a decision; the checks are computed first
| You say | What fires | You walk away with |
|---|---|---|
| "Did our A/B test really win?" | audit-my-experiment | computed validity checks (SRM, peeking, multiplicity, power) gating the ship decision |
| "Can we plan against this forecast?" | audit-my-forecast | leakage, backtest, interval-honesty, and drift checks gating the plan |
| "The totals match — sign off the migration." | prove-my-parity | the stratified parity proof: offsetting errors caught, tolerance owned before results |
Investigate — hands-in-the-data right now
| You say | What fires | You walk away with |
|---|---|---|
| "Churn jumped to 11% overnight. Why?" | triage-my-number | a ranked differential across code / data / pipeline / definition / real change — plus a calibrated line for the exec who's asking |
| "Explore this data — find me insights." | explore-my-data | a harnessed exploration: every cut counted, found ≠ confirmed, the lucky cell never becomes the headline |
| "Draw the ER / lineage diagram of our mart." | map-my-estate | a cited map: every edge carries its evidence, guesses render dashed, islands stay islands |
| "What breaks if I rename this column?" | change-impact | the graded blast radius: breaks, silent meaning-drifts, and honest UNKNOWNs — before it ships |
Deliver — work is leaving the desk
| You say | What fires | You walk away with |
|---|---|---|
| "Write up my findings for the VP." | brief-my-findings | a brief where every claim carries its provenance and open questions stay open |
| "The CFO will grill me on this number." | defend-my-number | a live sparring drill, graded honestly, and a defense sheet of what held and what cracked |
| "Write my weekly status update for steering." | status-truth | a provenance-graded status where every green earns its color and slips carry their delta |
A mode adds a job to a moment a skill already owns — a branch inside the host, zero new routing surface (that's the growth rule: modes before skills). The daily ones:
[unconfirmed], owner-pinned before write.LLMs in analytics fail through answer-mode: the pull to be immediately useful. Answer-mode inherits a stale filter as fact because "that's what the proc does." It eyeballs a check it could compute. It resolves a contested definition with a "sensible default, confirm later." It smooths an open question into a clean narrative because the deck reads better that way. None of these are knowledge failures — they're discipline failures, and they produce confident, well-formatted, plausible, wrong output.
A harness is the countermeasure, built into every skill:
A trap, named. Each skill documents the exact thing a capable model does by default — then refuses it. The skills know their own failure modes before you hit them.
Bright lines. Non-negotiables with teeth: never touch a live system, never compute the user's deliverable, never resolve an owner's decision silently, never grade a guess as a finding.
Anti-evasion tables. The mid-task rationalizations, pre-rebutted. Two real rows:
| The thought | The reality |
|---|---|
| "The QBR's in an hour, I'll just write the SQL so they're unblocked." | Surface, don't build. The contract is the deliverable; the runnable query is downstream of the pinned definition. |
| "It's obviously X." | Obvious = untested. Hold the differential until a check confirms. |
A graded artifact, every time. No skill ends in vibes. Each emits a committable file where every line carries a status. The signature example — kpi-contract's fork log:
Fork Options Pinned Why it matters
Revenue basis bookings/recognized recognized biggest gap vs Finance
Refunds gross/net net gross overstates by refund rate
Attribution first/last/multi [needs decision] changes who gets credit
Verdicts that carry. A "not ship-ready" from an audit cannot be upgraded into a win by the write-up downstream. The brief inherits the verdict; it does not soften it.
Engineering constraints, enforced. Every skill body is capped at 200 lines by a structural validator (depth lives in references/, loaded on demand), and every skill declares least-privilege tool access — the validator rejects a wildcard grant. The whole bench is about 1,300 lines of always-loaded skill text — roughly 4,000 counting the on-demand references and kits.
Every skill reads from and writes to the same knowledge-base/ directory in your project — current truth in STATE files, history in an append-only timeline, and one graded artifact per job done.
flowchart TD
KB[("knowledge-base/<br/>STATE + timeline + decisions<br/>catches.md + house-rules.md + inputs/")]
GW[groundwork] -->|stands up + seeds| KB
KC[kpi-contract] -->|locked fork log| KB
AA[audit-my-assumptions] -->|assumption register| KB
ME[map-my-estate] -->|the cited map| KB
KB -->|the contract anchors the review| RQ[review-my-query]
RQ -->|graded findings| KB
KB -->|known defects become first suspects| TN[triage-my-number]
KB -->|the map becomes the blast radius| CI[change-impact]
KB -->|verdicts carried with their age — expired ones can't be quoted| DEL[brief-my-findings<br/>status-truth<br/>defend-my-number]
FAQ
analytics-office is a Claude Code plugin with 19 hand-picked skills for data work, indexed on Flowy. Install it with the command on its page. It includes audit-my-assumptions, audit-my-experiment, audit-my-forecast. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it