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 agentmods add rules/arturogarrido/claudinho/surface-paritygit clone --depth 1 https://github.com/arturogarrido/claudinhoWrote 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/rules/arturogarrido/claudinho/surface-parity)<a href="https://agentmods.dev/rules/arturogarrido/claudinho/surface-parity"><img src="https://agentmods.dev/badge/rules/arturogarrido/claudinho/surface-parity.svg" alt="Measured on agentmods" 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.00000 | $0.01143 |
| Opus 5 | $0.00000 | $0.00571 |
| Sonnet 5 | $0.00000 | $0.00229 |
| Haiku 4.5 | $0.00000 | $0.00114 |
Grade A, and why
surface-parity 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 6d ago.
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 — 61 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Surface parity (CLI / MCP / share)
Any user-visible formatter change must land on all three surfaces before merge:
| Surface | Verify |
|---|---|
| CLI | packages/cli command + packages/cli/test/ |
| MCP | toolGet* in packages/mcp/src/tools.ts + packages/mcp/test/tools.test.ts |
| Share | formatShare* + packages/mcp/test/share.test.ts |
scripts/release-qa.sh exercises CLI + share rendering across locales and timezones; MCP arg threading is not rendered there — guard it with unit tests.
Knockout surfaces live-resolve — never read the skeleton (the #1 recurring bug)
The bundled schedule's knockout slots are resultless placeholders (codes like 2A/2B, flag 🏳️). So a team-facing surface that reads the static bundle is silently blind to a confirmed knockout tie — no crash, no wrong data, just a stale placeholder. Knockout live-resolve regressions shipped repeatedly in different surfaces (root cause: skeleton reads, cache gaps, or both):
- v0.8.2 — R32 pre-draw seeds rendered static, didn't live-resolve.
- v0.8.6 — bracket third-place slots never read the merged live
match.home/away. - v0.8.7 —
next/share next/ MCP next-fixture resolvers read only the static bundle. - v0.8.8 — statusline next-match countdown read the static bundle (
🏳️ vs 🏳️/⚽ —in knockouts). - v0.8.9 — empty fixtures cache stamped the full 15min TTL at phase boundaries; stale-cache
live · syncing…still read the skeleton.
Rule: every team-facing surface must reach the live overlay (getBracket / getNextFixtureForTeam — the same fetchWindow the bracket uses), fail closed on outage, and attribute the provider only when the overlay served the chosen fixture. Exception — statusline: hot path cannot fetch; the cold-path refresher calls getKnockoutFixtures and caches to CacheState.fixtures; renderPrompt merges that slice over the bundle (countdown and live · syncing…), never leaking 🏳️. Exception — MCP fixtures://{date} resource: deliberately static ("Static fixture list"; a resource URI carries no tz and gets no live overlay) — do not "fix" it to live-resolve without a maintainer decision; agents use get_today/get_bracket for resolved pairings.
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.
- 6d ago First seen · 61 lines · 0 tokens per session scan A 6b114a1ed02e
surface-parity is a cursor rule published in the GitHub repository arturogarrido/claudinho (28 stars, last pushed 6d ago), licensed MIT. It costs nothing until one of its globs matches a file; then it loads 1,143 tokens. 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-08-30.
Other cursor rules, from other repositories
internationalization
Cursor rule "internationalization" from dtyq/magic, covering internationalization (i18n) rules, 国际化基本规范, 1. 文件结构, 2. 命名空间规范 and 3. 组件中使用国际化.
nuxt-error-localization
UI 錯誤訊息必須本地化(繁體中文),禁止直接顯示原始英文 error code 或 message.
chinese-language
CRITICAL: You MUST respond in Simplified Chinese at ALL times unless explicitly requested otherwise. 回复、注释、commit message 使用简体中文。技术术语保持英文原文。.
cmd-moodle-mustache-lint
Lint Mustache templates for accessibility, security, hard-coded strings, and Moodle template conventions. (invoke by typing: @moodle-mustache-lint).
cursorrules
Cursor rule "cursorrules" from KyaniteLabs/DialectOS, covering kyanitelabs — ai agent instructions, organization, code quality, security and testing.
uninettuno-monografia
Regole UNINETTUNO per tesi TRIENNALE in italiano, con termini tecnici inglesi ammessi.