Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build and sharpen a project's domain model. Use when the user wants to pin down domain terminology or a ubiquitous language, record an architectural decision, or when another skill needs to maintain the domain model.
.claude/skills/fradser-domain-modeling/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -28% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 23% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -23% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -30% | 0% |
Actively build and sharpen the project's domain model as you design. This is the active discipline — challenging terms, inventing edge-case scenarios, and writing the glossary and decisions down the moment they crystallise. (Merely reading CONTEXT.md for vocabulary is not this skill — that's a one-line habit any skill can do. This skill is for when you're changing the model, not just consuming it.)
Most repos have a single context:
/
├── CONTEXT.md
├── docs/
│ └── adr/
│ ├── 0001-event-sourced-orders.md
│ └── 0002-postgres-for-write-model.md
└── src/If a CONTEXT-MAP.md exists at the root, the repo has multiple contexts. The map points to where each one lives:
/
├── CONTEXT-MAP.md
├── docs/
│ └── adr/ ← system-wide decisions
├── src/
│ ├── ordering/
│ │ ├── CONTEXT.md
│ │ └── docs/adr/ ← context-specific decisions
│ └── billing/
│ ├── CONTEXT.md
│ └── docs/adr/Create files lazily — only when you have something to write. If no CONTEXT.md exists, create one when the first term is resolved. If no docs/adr/ exists, create it when the first ADR is needed.
When the user uses a term that conflicts with the existing language in CONTEXT.md, call it out immediately. "Your glossary defines 'cancellation' as X, but you seem to mean Y — which is it?"
When the user uses vague or overloaded terms, propose a precise canonical term. "You're saying 'account' — do you mean the Customer or the User? Those are different things."
When domain relationships are being discussed, stress-test them with specific scenarios. Invent scenarios that probe edge cases and force the user to be precise about the boundaries between concepts.
When the user states how something works, check whether the code agrees. If you find a contradiction, surface it: "Your code cancels entire Orders, but you just said partial cancellation is possible — which is right?"
When a term is resolved, update CONTEXT.md right there. Don't batch these up — capture them as they happen. Use the format in CONTEXT-FORMAT.md.
CONTEXT.md should be totally devoid of implementation details. Do not treat CONTEXT.md as a spec, a scratch pad, or a repository for implementation decisions. It is a glossary and nothing else.
Never treat CONTEXT.md as a spec, a scratch pad, or a home for implementation decisions — implementation details are forbidden there. Capture resolved terms inline the moment they crystallise, and offer an ADR only when a decision is hard to reverse, surprising without context, and the result of a real trade-off.
Only offer to create an ADR when all three are true:
If any of the three is missing, skip the ADR. Use the format in ADR-FORMAT.md.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-12 | pass→pass | 6,803 | 7,230 | +6% | 1 | 1 | 0% | 1,159 | 1,878 | +62% | 0 | 0 | — |
case-01 | fail→fail | 24,563 | 15,041 | -39% | 1 | 1 | 0% | 4,046 | 1,095 | -73% | 0 | 0 | — |
case-02 | fail→fail | 15,532 | 3,715 | -76% | 1 | 1 | 0% | 2,246 | 1,072 | -52% | 0 | 0 | — |
case-03 | fail→fail | 17,022 | 3,788 | -78% | 1 | 1 | 0% | 2,782 | 1,060 | -62% | 0 | 0 | — |
case-04 | fail→pass | 15,152 | 5,314 | -65% | 1 | 1 | 0% | 2,598 | 1,875 | -28% | 0 | 0 | — |
case-05 | fail→pass | 12,258 | 4,446 | -64% | 1 | 1 | 0% | 2,010 | 1,587 | -21% | 0 | 0 | — |
case-06 | fail→pass | 14,659 | 11,974 | -18% | 1 | 1 | 0% | 2,429 | 2,980 | +23% | 0 | 0 | — |
case-07 | fail→pass | 11,706 | 4,152 | -65% | 1 | 1 | 0% | 1,823 | 1,411 | -23% | 0 | 0 | — |
case-08 | pass→pass | 11,344 | 5,477 | -52% | 1 | 1 | 0% | 1,815 | 1,677 | -8% | 0 | 0 | — |
case-09 | fail→pass | 13,317 | 4,711 | -65% | 1 | 1 | 0% | 2,152 | 1,501 | -30% | 0 | 0 | — |
case-10 | pass→pass | 11,469 | 7,806 | -32% | 1 | 1 | 0% | 1,959 | 2,159 | +10% | 0 | 0 | — |
case-11 | pass→pass | 10,149 | 3,684 | -64% | 1 | 1 | 0% | 1,763 | 1,427 | -19% | 0 | 0 | — |
case-13 | pass→pass | 14,111 | 12,356 | -12% | 1 | 1 | 0% | 2,256 | 2,429 | +8% | 0 | 0 | — |
case-14 | pass→pass | 17,563 | 12,394 | -29% | 1 | 1 | 0% | 2,923 | 2,503 | -14% | 0 | 0 | — |
case-15 | pass→fail | 13,559 | 3,643 | -73% | 1 | 1 | 0% | 2,736 | 1,128 | -59% | 0 | 0 | — |
case-16 | pass→pass | 5,069 | 3,687 | -27% | 1 | 1 | 0% | 781 | 1,436 | +84% | 0 | 0 | — |
case-17 | pass→pass | 9,705 | 4,858 | -50% | 1 | 1 | 0% | 1,788 | 1,701 | -5% | 0 | 0 | — |
case-18 | pass→pass | 3,919 | 6,089 | +55% | 1 | 1 | 0% | 627 | 1,896 | +202% | 0 | 0 | — |
case-19 | pass→pass | 7,376 | 7,263 | -2% | 1 | 1 | 0% | 1,316 | 2,193 | +67% | 0 | 0 | — |
case-20 | pass→pass | 14,864 | 16,163 | +9% | 1 | 1 | 0% | 2,425 | 3,691 | +52% | 0 | 0 | — |
case-21 | pass→pass | 5,460 | 4,911 | -10% | 1 | 1 | 0% | 1,136 | 1,739 | +53% | 0 | 0 | — |
case-22 | pass→pass | 8,435 | 5,236 | -38% | 1 | 1 | 0% | 1,561 | 1,764 | +13% | 0 | 0 | — |
case-23 | pass→pass | 10,268 | 4,589 | -55% | 1 | 1 | 0% | 1,822 | 1,616 | -11% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 19 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +17 percentage points is the difference between those two pass rates over the 19 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.