Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add ignaciohermosillacornejo/copilot-money-mcp --skill release-parity-testgit clone --depth 1 https://github.com/ignaciohermosillacornejo/copilot-money-mcpWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/ignaciohermosillacornejo/copilot-money-mcp/release-parity-test)<a href="https://agentmods.dev/skills/ignaciohermosillacornejo/copilot-money-mcp/release-parity-test"><img src="https://agentmods.dev/badge/skills/ignaciohermosillacornejo/copilot-money-mcp/release-parity-test/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/ignaciohermosillacornejo/copilot-money-mcp/release-parity-test"><img src="https://agentmods.dev/badge/skills/ignaciohermosillacornejo/copilot-money-mcp/release-parity-test.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00106 | $0.02908 |
| Opus 5.5 | $0.00042 | $0.01163 |
| Sonnet 5.5 | $0.00021 | $0.00582 |
| Haiku 4.5 | $0.00011 | $0.00291 |
Grade A, and why
release-parity-test scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 201 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Release Parity Test
A repeatable end-to-end check that what the MCP reports matches what Copilot's
own web app shows, in both read modes, and that every write is visible to the
next read. First run: 2026-10-14, before v3.0 (issues #820–#825). The plan was
then reviewed against the code and the docs/bugs/ corpus, which added most of
the not run rows.
The case list lives in test-matrix.md. This file is the
procedure. To extend the test, add rows there (its "How to extend" section);
change this file only when the procedure itself changes.
A full run is long. When time is short, run every [P1] row plus the rows whose Last run is a FAIL, and record the rest as SKIP (not run this time).
When to use
- Before a release (the version-bump PR), after the last feature merge
- After a change to
src/tools/live/,src/core/live-database.ts, the write tools insrc/tools/tools.ts, the field-selection presets, orskills/(then include the SKL section) - The user asks to "test against the web app", "run the parity test", or "check the MCP matches Copilot"
Do NOT use if
- The question is one enum or field against production →
bun run smoke - The user wants a financial analysis →
/finance-pulse,/finance-cleanup - There is no Manual account and the user has not agreed to the write cases being skipped (see Guardrail 2)
Guardrails
- The web app is ground truth. When the MCP and the web app disagree, the bug is in our code or our description until shown otherwise. Copilot-side quirks get documented, not "fixed".
- Writes go only to the Manual account the user names in chat for this run.
Every created object's name starts with
ZZ MCP Test <RUN>, where<RUN>is the run'sYYYYMMDD-HHMM, so leftovers from an earlier run cannot be mistaken for this run's objects. The cleanup ledger is a section of the local report file. Log each write before sending it (planned name, account, date, amount, expected balance effect, statussent); when the response arrives, add the id and setcreated; save after every line. Before any update, split or delete, the id must be in this run's ledger, itsaccount_idmust be the Manual account, and a live read must show its name still carries the run prefix. - Changing a setting on a real account (hiding it, for example) needs the user's explicit yes in chat for that run, and must be undone in the same run. Approval from a previous run does not carry over.
- Never delete a split parent. Delete the children only (#822). Deleting the parent double-credits the account balance.
- PII. Real balances, amounts, account, merchant and place names go only
into the local report under
docs/superpowers/(gitignored).test-matrix.md, issues and PRs get PASS/FAIL, ratios and synthetic numbers. The session transcript holds real figures too (tool output, page text): never paste from it into an issue or PR without rewriting the figures. - Cleanup always runs, including after a failure partway through. It works
from the ledger file, so a new session can finish it: Phase 0 reads the
latest
RELEASE-PARITY-TEST-*.mdand completes any ledger line not markedconfirmed-gonebefore starting. Check the balance after every cleanup group (CL-07). Stop and tell the user, without trying to repair anything, if the balance moves by an amount the ledger does not explain, or if any write reached a non-Manual account. - Web automation. The web column needs the Claude in Chrome extension; its skill is provided by the host, not this repo. Load its tools first. If it is unavailable, every web comparison is SKIP (no browser), never PASS on two sources: the web is the ground truth. Read pages with the extension's page-text tool rather than screenshots, and read figures from the page's own search, filters and totals, never by counting rendered rows (lists load more as you scroll). Record the raw text you read. Before filing a FAIL that rests on a web figure, reload and read it again; right after a write, wait 30 seconds and reload once. If an input misbehaves (masked or content-editable fields), stop and ask the user to do that one step; never commit a value you have not read back.
- A write that errors may still have landed. On any write error do not
retry. That includes
writeMayHaveApplied, a bulk edit's "N/M succeeded",deleted: false, and a shape error after the call. First runrefresh_cache { scope: "transactions", months: [...] }, search live for the run prefix, and check the web. Set the ledger line to what actually happened. Retry only once the object is confirmed absent. - Keep test rows away from real data unless the case needs it. When a case
needs a real category (TXN-05, a split child), note that category's month
total in the web before the write and check it at the end (CL-08). Test names
must contain no real merchant name, since a real recurring's rule could pick
the row up (REC-05). Use
set_budgetonly on the test category, and restore a budget to its previous value:"0"is a budget of zero, not "no budget".
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today First seen · 201 lines · 106 tokens per session scan A d3969abe69e0
release-parity-test is a skill published in the GitHub repository ignaciohermosillacornejo/copilot-money-mcp (85 stars, last pushed yesterday), licensed MIT. It adds 106 tokens to every session and 2,908 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-16.
Other skills, from other repositories
mandu-testing
Testing patterns for Mandu applications. Use when writing unit tests, integration tests, or E2E tests. Triggers on test, spec, Bun test, Playwright, or testing tasks.
smoke-test
Post-restart smoke tests + auto-fix for the memex server environment. Walks a fixed check list over the real CLI and MCP surface (status, doctor, search, page round-trip), auto-fixes known issues, and reports what's left.
e2e-test-engineer
Use when the user asks to create, improve, review, or repair end-to-end tests for a meaningful user workflow across the UI, runtime, backend, or installed application. Validate the real workflow at the highest useful boundary while keeping environments, accounts, and test data controlled.
visual-regression-tester
Use when the user asks to detect, review, prevent, or update visual regressions in a web, desktop, or mobile interface. Capture comparable rendered states, control viewport and data variance, inspect image differences, and distinguish intended design changes from rendering defects.
bxc-next-playwright
This skill should be used for @aphrody/next-playwright — the Next.js instant() navigation-testing primitive ported to bxc's CDP-backed runner, the next-instant-navigation-testing cookie protocol over Network.setCookies/getCookies/deleteCookies, adapting a bxc page to a Playwright-like page, and step reporting.
cuj-guardian
Run and triage AI Atelie's Critical User Journey (CUJ) for every PR — the single end-to-end test that proves a user can open the app, create a project, drive the Claude Code agent, and see the canvas render. Before running, gate by inspecting the PR diff for changes that plausibly affect the journey (routes…