VerticalSlices: Skill for Claude Code

.ai/skills/write-specs/SKILL.md

write-specs is a skill for Claude Code, Codex from Cratis/VerticalSlices. It costs 79 tokens per session (1,105 once invoked), scanned A, a copy of write-specs, MIT.

A hook that runs before an AI agent receives a submitted prompt. It executes a JavaScript file from the surrounding plugin or project.

In plain words
What is it for?
Triggering prompt-related setup or processing through user-prompt-hook.js. The supplied information does not describe any more specific job.
Why use it?
It lets a project perform an automatic action whenever a prompt is submitted, before the agent processes it. The input does not say what that action does.

Skill for Claude CodeCodex

Written for no agent in particular: nothing here depends on one.

This is Cratis/VerticalSlices's own configuration. It tells Claude Code and Codex how to work on VerticalSlices itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything VerticalSlices configures →

Needs its repository: it reads a path above its own folder, which exists only inside the repository. The line is **Application-oriented.** Most **framework / library** specs (Chronicle kernel, Arc pipeline, Fundamentals, generators) use the plain `Specification` base + NSu.

Reuse

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.

Copy the file
curl -O https://raw.githubusercontent.com/Cratis/VerticalSlices/main/.ai/skills/write-specs/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/Cratis/VerticalSlices

Made for: Claude Code, Codex.

Wrote 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.

agentmods badge for write-specs

README.md
[![agentmods](https://agentmods.dev/badge/skills/cratis/verticalslices/write-specs/github.svg)](https://agentmods.dev/skills/cratis/verticalslices/write-specs)
Your own site
<a href="https://agentmods.dev/skills/cratis/verticalslices/write-specs"><img src="https://agentmods.dev/badge/skills/cratis/verticalslices/write-specs/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.

agentmods 80×15 button for write-specs

Your own site · 80×15
<a href="https://agentmods.dev/skills/cratis/verticalslices/write-specs"><img src="https://agentmods.dev/badge/skills/cratis/verticalslices/write-specs.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 79 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,105 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin 100% copy Near-identical to another mod in the catalogue.
Token cost

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.

ModelPer sessionOnce invoked
Fable 5.1 $0.00079 $0.01105
Opus 5.5 $0.00032 $0.00442
Sonnet 5.5 $0.00016 $0.00221
Haiku 4.5 $0.00008 $0.00111

Measured 1mo ago against content hash e6bc79cd003e, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

write-specs 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.

Origin

This is a copy

100% identical to write-specs — 2 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.

.ai/skills/write-specs/SKILL.md · 86 lines

How it starts

The opening of the file, as written. The whole thing — 86 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Write comprehensive in-process BDD specs for an event-sourced Cratis application slice. Lead with the scenario family; reserve out-of-process Chronicle host specs for the host/transport boundary. Full patterns and assertion catalogs: .ai/rules/specs.scenarios.csharp.md (application profile).

Application-oriented. Most framework / library specs (Chronicle kernel, Arc pipeline, Fundamentals, generators) use the plain Specification base + NSubstitute — see specs.csharp.md. A framework repo reaches for the scenario family only to test the engine it provides (Arc's command pipeline, Chronicle's event/projection/reactor engine) — see specs.scenarios.csharp.md.

Spec placement

Specs live in the same slice folder as the .cs file, each file wrapped in #if DEBUG … #endif (spec code ships only in Debug):

<Feature>/<Slice>/
├── <Slice>.cs
└── when_<verb_phrase>/
    ├── and_<happy_scenario>.cs
    └── and_<failure_scenario>.cs

What to cover for every State Change command

One spec class for each of:

  1. Happy path — command succeeds, expected event appended (CommandScenario)
  2. Each validation failure — one and_ class per CommandValidator / ConceptValidator rule (CommandScenario)
  3. Each business rule violation — one and_ class per DCB condition in Handle() that inspects a read model (CommandScenario)
  4. Each constraint violation — one and_ class per IConstraint → use the write-specs-events skill (EventScenario)

Default: CommandScenario<TCommand> (in-process)

Runs authorization, validators, Provide(), and Handle() in-process and exposes the appended events — no HTTP, no fixture.

#if DEBUG
namespace MyApp.Projects.Registration.when_registering;

public class and_name_is_unique : Specification
{
    readonly CommandScenario<RegisterProject> _scenario = new();
    readonly ProjectId _id = ProjectId.New();
    CommandResult _result;

    async Task Because() => _result = await _scenario.Execute(new RegisterProject(_id, "My Project"));

    [Fact] void should_succeed() => _result.ShouldBeSuccessful();
    [Fact] async Task should_have_appended_the_registered_event() =>
        await _scenario.ShouldHaveAppendedEvent<RegisterProject, ProjectRegistered>(_id, e => e.Name == "My Project");
}
#endif

Read the full file on GitHub · 86 lines

Files

What ships with it

2 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.

Changes

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.

  1. 1mo ago First seen · 86 lines · 79 tokens per session scan A e6bc79cd003e

Subscribe to this mod's changes

write-specs is a skill published in the GitHub repository Cratis/VerticalSlices (2 stars, last pushed 1mo ago), licensed MIT. It adds 79 tokens to every session and 1,105 once invoked, about $0.0003 per session on Opus 5.5. A static security scan graded it A with 0 findings. It is 100% identical to write-specs, differing in 2 lines, and is treated as a copy.

Related

Other skills, from other repositories

cratis-specifications-csharp

Write C# specifications with Cratis.Specifications using the Establish/Because/should pattern and the for/when/and folder hierarchy. Use when adding or restructuring C# specs in any Cratis repository, choosing between an isolated unit spec and an in-process scenario spec, or building reusable given/ contexts. Do not…

Cratis/AI · 98 tokens

cratis-stage-rendering-and-sandbox

What Cratis Stage and cratis render do with a Screenplay .play model: the model shape Stage admits and refuses (STAGE-ESM-, PLAY0268 render refusals), what it emits (C# Arc/Chronicle backend, React/Vite scaffold with Arc CommandForm shell emission over Scene typed bindings, Debug specifications), managed publication…

Cratis/AI · 211 tokens

cratis-application-slice-specifications

Specify the backend behavior of an event-sourced Cratis application slice — plain-call specs for pure decisions, plus CommandScenario, EventScenario, ReadModelScenario and ReactorScenario where the pipeline, validation, constraints or projections matter — including what to cover for each slice type and where the…

Cratis/AI · 126 tokens

cratis-chronicle-event-constraints

Enforce append-time uniqueness in Chronicle with the [Unique] attribute, [RemoveConstraint], and IConstraint, and specify the violation with EventScenario. Use when a rule must hold at the event store rather than in a command, so two concurrent appends cannot both win. Do not use for ordinary command input validation…

Cratis/AI · 81 tokens

cratis-chronicle-read-model-specifications

Specify declarative projections and reducer wiring with ReadModelScenario from Cratis.Chronicle.Testing — seeding events through Given and asserting on the materialized instance; start with Specification plus a direct call for pure reducer decisions. Use when the behavior under specification is how events become…

Cratis/AI · 87 tokens

cratis-arc-command-operation

Declare immediate inline work as a Cratis Arc ICommandOperation returned by a model-bound command, with optional compensation and commit-aware recovery. Use when moving service writes out of Handle(), choosing operation return shapes, diagnosing recovery, or specifying execution and compensation through…

Cratis/AI · 83 tokens