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 Cratis/AI --skill cratis-chronicle-projectiongit clone --depth 1 https://github.com/Cratis/AIWrote 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/ai/cratis-chronicle-projection)<a href="https://agentmods.dev/skills/cratis/ai/cratis-chronicle-projection"><img src="https://agentmods.dev/badge/skills/cratis/ai/cratis-chronicle-projection/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/ai/cratis-chronicle-projection"><img src="https://agentmods.dev/badge/skills/cratis/ai/cratis-chronicle-projection.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.00136 | $0.03750 |
| Opus 5.5 | $0.00054 | $0.01500 |
| Sonnet 5.5 | $0.00027 | $0.00750 |
| Haiku 4.5 | $0.00014 | $0.00375 |
Grade A, and why
cratis-chronicle-projection 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 8d 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 — 306 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Chronicle projections
A projection consumes events and produces read-model state. It is pure: no side effects, and it never reads another read model. Prefer model-bound attributes on the read model; use the fluent builder when mappings need structure or the model should stay attribute-free; choose reducer code when state transitions read better as code. Follow the read-model style ladder: a self-reducing model is the new .NET reducer default, not a mandatory separate class. See reducers for that contract.
Verified product sources
Sources:
| Package | Purpose |
|---|---|
Cratis.Chronicle |
Cratis.Chronicle.Projections, Cratis.Chronicle.Projections.ModelBound, Cratis.Chronicle.Keys, Cratis.Chronicle.EventSequences; self-model builder conflicts (Source/Clients/DotNET/ReadModels/ReadModelBuilderOwnership.cs, Reducers/SelfReducerMethods.cs) |
Reverify product sources before claiming support for another version.
[ReadModel]and[Path]are Arc types (Cratis.Arc.Queries.ModelBound), not Chronicle types. A Chronicle read model that exists only as a projection target needs no[ReadModel]at all — that attribute is what gives it an Arc query surface.
What makes a type a model-bound projection
Chronicle treats a type as a model-bound projection when the class, its primary
constructor parameters, or its public instance properties carry an
[EventSequence] attribute or any projection annotation — except
[Passive], which is deliberately excluded. [Passive] on its own therefore
does not make a read model a projection; it changes how an existing projection
is registered.
Model-bound projections — the default
Put the projection on the read model with attributes. No separate class.
using Cratis.Chronicle.Keys;
using Cratis.Chronicle.Projections.ModelBound;
[FromEvent<<EventName>>]
public record <ReadModelName>(
[property: Key] <IdType> Id,
<PropertyType> <PropertyName>);
What ships with it
5 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.
- 8d ago Changed · +3 lines ed1eade38dae
- 10d ago Changed · -13 lines 3d75d93efa42
- 11d ago Changed · +34 lines cc2a17dec0e3
- 15d ago Changed · +9 lines · -14 tokens per session dee0884ef835
- 17d ago Changed · +13 lines 819719748d06
- 19d ago Changed · +14 lines d1b850df76e2
- 1mo ago Changed · +64 lines · +52 tokens per session 2396988e7d64
- 1mo ago Changed · +19 lines ddc939008c44
- 1mo ago First seen · 163 lines · 98 tokens per session scan A f09e9ca628a9
cratis-chronicle-projection is a skill published in the GitHub repository Cratis/AI (4 stars, last pushed today), licensed MIT. It adds 136 tokens to every session and 3,750 once invoked, about $0.0005 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-09-06.
Other skills, from other repositories
architecture-paradigm-cqrs-es
Applies CQRS and Event Sourcing for read/write separation and audit trails. Use when designing systems with complex domain logic or full state-change history.
cqrs-event-sourcing
CQRS and Event Sourcing patterns for scalable, auditable systems with separated read/write models. Use when building audit-required systems, implementing temporal queries, or designing high-scale applications with complex domain logic.
local-ai-agents
Build local-first AI agents that run entirely on a developer workstation with Microsoft Foundry Local and Qwen function-calling models. Covers Small Language Models (SLMs), the OpenAI-compatible local endpoint, sandboxed local tools, local RAG with Chroma, local MCP servers, hybrid cloud/local routing, and the…
systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.
next-cache-components-adoption
Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the cacheComponents flag, work through a flood of blocking-prerender / instant validation errors, run the cache-components-instant-false codemod, or…
chat-pet-sprite-creation
Use when creating or changing VS Code chat pet sprite art, sprite sheets, state animations, eye treatments, Stable/Insiders variants, or pet transitions under src/vs/workbench/contrib/chat/browser/widget/media/chatPet.