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 s977043/river-review --skill react-router-action-contractgit clone --depth 1 https://github.com/s977043/river-reviewWrote 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/s977043/river-review/react-router-action-contract)<a href="https://agentmods.dev/skills/s977043/river-review/react-router-action-contract"><img src="https://agentmods.dev/badge/skills/s977043/river-review/react-router-action-contract/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/s977043/river-review/react-router-action-contract"><img src="https://agentmods.dev/badge/skills/s977043/river-review/react-router-action-contract.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.00041 | $0.00971 |
| Opus 5 | $0.00020 | $0.00485 |
| Sonnet 5 | $0.00008 | $0.00194 |
| Haiku 4.5 | $0.00004 | $0.00097 |
Grade A, and why
React Router Action Contract Review 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 5d 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.
What it actually says
Pattern declaration
Primary pattern: Reviewer Secondary patterns: Inversion Why: action のエラー契約と ErrorBoundary 分岐をチェックリスト型で検査する
Goal / 目的
- バリデーション失敗が ErrorBoundary へ throw され、フォームのインラインエラー表示と自動 revalidation の制御が壊れるのを防ぐ。
- action 成功時の
redirect()欠落による再送信問題、エラー返却時のステータス不備(2xx のまま)を検出する。
Non-goals / 扱わないこと
- loader / data loading の規約(
react-router-loader-boundaryのスコープ)。 - Form と fetcher のどちらを使うべきかの UX 判断(要件依存のため一律指摘しない。質問に留める)。
- バリデーションライブラリの選定。
Pre-execution Gate / 実行前ゲート
このスキルは以下の条件がすべて満たされない限りNO_REVIEWを返す。
- 差分に action / clientAction の追加・変更、または ErrorBoundary の変更が含まれている
- diff コンテキストが利用可能である
ゲート不成立時の出力: NO_REVIEW: react-router-action-contract — action / ErrorBoundary の変更なし
False-positive guards / 抑制条件
throw data("Not Found", { status: 404 })等、リソース不在・認可エラーの 意図的な throw は公式に許可された規約であり指摘しない(バリデーション失敗の throw と区別する)。- React Router 管理外の外部 API へ直接 POST する設計が要件上正当な場合は指摘しない。
- 成功時に同一ページへ結果を表示する設計(redirect しない)が意図的な場合は質問に留める。
Rule / ルール
- 期待されるバリデーション失敗は
return data({ errors }, { status: 400 })で返す(throw しない。2xx のままだと不要な revalidation が走る点も確認)。 - 成功時は
redirect()で再送信問題を防ぐ。 - ErrorBoundary は
isRouteErrorResponse(error)/error instanceof Error/ その他 の 3 分岐で処理し、error.messageへの直接アクセスを避ける。 - 独立して失敗してよい UI 単位にはルート単位の ErrorBoundary を検討する(root のみでも最低限は満たすため、強制はしない)。
Evidence / 根拠の取り方
- 指摘は
<file>:<line>で差分に紐づけ、公式規約(form-validation / error-boundary)を 1 行で添える。
Output / 出力(短文版の推奨)
コメントは日本語で返す。
- Finding: どの契約に反しているか(1文)
- Impact: インラインエラー不能 / 再送信 / 不要 revalidation 等
- Fix:
data({errors}, {status: 400})/redirect()/ 3 分岐の最小修正案
Sources / 出典
- React Router — Form Validation: https://reactrouter.com/how-to/form-validation
- React Router — Error Boundaries: https://reactrouter.com/how-to/error-boundary
- React Router — Actions: https://reactrouter.com/start/framework/actions
What ships with it
3 files 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.
- 5d ago First seen · 74 lines · 41 tokens per session scan A 9dfb34cf9021
React Router Action Contract Review is a skill published in the GitHub repository s977043/river-review (3 stars, last pushed yesterday), licensed MIT. It adds 41 tokens to every session and 971 once invoked, about $0.0002 per session on Opus 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-09-03.
Other skills, from other repositories
component-api-validator
Audit component APIs for consistency, breaking changes, TypeScript coverage, and contract compliance across a component library. Trigger when someone says: component prop review, verify component types are exported, component API audit, check our component interfaces, are our props consistent, API consistency check…
tailwind-css
Tailwind CSS v4 patterns: CSS-first config, utility classes, component variants, v3 migration. Use when styling with Tailwind, configuring @theme tokens, using tailwind-variants/CVA, migrating v3 to v4, or fixing Tailwind styles and dark mode.
testing-react
Writes React/TypeScript tests using Vitest and React Testing Library. Use when "write react tests", "vitest", "component test", "hook test", "RTL", "testing library", "snapshot test", or testing React components, hooks, and utilities.
react-effects-audit
Use when auditing React or Next.js components for unnecessary or unsafe useEffect usage -- detects 9 anti-patterns from "You Might Not Need an Effect".
fec-route-protection
A guide for protecting front-end routes, meaning the pages and URLs of a web application, based on whether someone is signed in and what permissions they have. It covers login checks, role-based access, expired sessions, and redirects.
fec-state-management
A guide for deciding where an application's changing information should live, such as inside a component, in the URL, in a form, in a browser cache, or in a shared store. A store is a shared place for client-side information used across parts of an app.