Borrowing it
Nothing to install: this file belongs to Cratis/VerticalSlices. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/Cratis/VerticalSlices/main/.ai/skills/review-security/SKILL.mdgit clone --depth 1 https://github.com/Cratis/VerticalSlicesWrote 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/cratis/verticalslices/review-security)<a href="https://agentmods.dev/skills/cratis/verticalslices/review-security"><img src="https://agentmods.dev/badge/skills/cratis/verticalslices/review-security/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/cratis/verticalslices/review-security"><img src="https://agentmods.dev/badge/skills/cratis/verticalslices/review-security.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.00045 | $0.00537 |
| Opus 5.5 | $0.00018 | $0.00215 |
| Sonnet 5.5 | $0.00009 | $0.00107 |
| Haiku 4.5 | $0.00005 | $0.00054 |
Grade A, and why
review-security 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 1mo 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.
This is a copy
100% identical to review-security — 3 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.
How it starts
The opening of the file, as written. The whole thing — 58 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Perform a structured security review of changed code.
Input Validation & Injection
- All command properties validated before use (null, empty, range, format)
- No raw SQL concatenation — parameterized queries or EF Core only
- No user-supplied values passed to
Path.Combine,File.*, shell commands, or process args - No user-supplied values used as event-store keys without sanitization
Authentication & Authorization
- All HTTP endpoints decorated with
[Authorize]or explicitly[AllowAnonymous]with justification - Tenant isolation enforced — no cross-tenant data accessible without authorization
- Claims verified before acting on identity-dependent command data
Sensitive Data Exposure
- No passwords, secrets, API keys, or tokens stored in event properties or read models
- No PII returned to clients that did not provide it
- Query results scoped to requesting tenant/user — never return all-tenant data
Secrets & Configuration
- No secrets in source code, config files, or test fixtures
- Secrets loaded from environment variables or a secrets manager
- No hard-coded connection strings in non-test code
Event Sourcing Specifics
- Events are immutable records — no mutable state in the event store
- Aggregate/event-store IDs generated server-side, never accepted from untrusted clients
- Event upcasting logic does not allow injection of unexpected properties
- Uniqueness constraints cannot be bypassed by concurrent multi-tenant writes
Frontend
- No user-supplied values in
dangerouslySetInnerHTML - No tokens or secrets in
localStorage— usehttpOnlycookies or in-memory state - Command DTOs contain only the minimum required fields
- No client-side access control not also enforced server-side
Risk classification
- 🔴 Critical — must fix before merge
- 🟡 Medium — should fix soon
- 🟢 Low — fix when convenient
Output format
Start with: Security Review: ✅ No issues / ⚠️ Low-risk findings / ❌ Blocking issues found
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.
- 1mo ago First seen · 58 lines · 45 tokens per session scan A bb8e4a571f28
review-security is a skill published in the GitHub repository Cratis/VerticalSlices (2 stars, last pushed 1mo ago), licensed MIT. It adds 45 tokens to every session and 537 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. It is 100% identical to review-security, differing in 3 lines, and is treated as a copy.
Other skills, from other repositories
cratis-engineering-csharp-conventions
Apply the Cratis C# house conventions when writing or reviewing C# in a Cratis repository - formatting, naming, records and primary constructors, nullable handling, XML documentation, custom exceptions, structured logging, dependency injection, and service lifetimes. Use for any "how should this be written" C# style…
cratis-screenplay-model-review
Critic-mode review of a Cratis Screenplay .play model, candidate, proposal or edit request: verdict evidence, element sweep, entity walk, field lineage, an 89-check phased checklist, anti-pattern signals, event-sourcing correctness and a PASS / PASS WITH WARNINGS / FAIL report pinned to declarations, plus a…
cratis-code-review
Review changed code in a Cratis application against the architecture, style, and specification-coverage criteria that the compiler cannot check, and produce a structured report with blocking issues separated from suggestions. Use when asked to review, check, or validate a change. Do not substitute it for a focused…
cratis-application-slice-conformance
Reconcile a Cratis slice's hand-written or gap-filled code and specifications with its contract (the .play slice and its specifications, else the agreed slice outline) in both directions: every contracted field, rule, event, read-model property and specification has a realization, and nothing in code lacks authority.…
cratis-engineering-effect-boundaries
Apply the Cratis effect-boundary contract when writing or reviewing code that publishes, persists, generates, propagates, or releases. On those boundaries partial success is failure - no catch-and-continue, no defaulting to success on an unknown outcome. Use when a degraded run could still report success; defer style…
cratis-performance-review
Perform a focused scalability review of changed code in a Cratis application — Chronicle observers and replay, read-model query shape, command and query payloads, .NET enumeration, and React render cost — and report findings by risk. Use when asked to check for performance or scalability problems. Do not use for…