spec
SkillAI & modelsUse when the user prompts "write spec" or "make spec".
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the spec skill
What this skill tells your AI
The instructions your AI receives, as published by romeerez/orchid-orm in .agents/skills/spec/SKILL.md and read by ahel’s review.
Ignore other spec-writing or brainstorming skills.
Create or update exactly:
changes/<feature-name>/<NUMBER-idea-name>/spec.md
This is a design-completion command, not research-only and not implementation.
Input
The prompt should identify:
- a feature folder under
changes/ - an idea number or idea title inside that feature folder
- optional extra details, especially when neither
selected-variant.mdnor anideas.mdsection applies
Examples:
/spec 611-row-level-security-integration 2/spec row-level-security-integration "Run work inside an explicit RLS context"
Baseline
Resolve one authoritative requirements baseline, in this order:
changes/<feature-name>/<NUMBER-idea-name>/selected-variant.md, when it exists.- If the prompt says
<number>, the exact# <number>section inchanges/<feature-name>/ideas.md. - Otherwise, the user's prompt.
The baseline is the source of truth for goals, scope, examples, naming, constraints, trade-offs, and confirmed decisions. Fill gaps needed for a complete design, but do not contradict it. If selected-variant.md has ## Refinement, treat confirmed Q&A there as current intent; when it conflicts with the main body, the refinement wins.
If the winning baseline is missing or too thin to define user-visible requirements without inventing the feature, stop and ask one focused question.
Context To Read
- Resolve the matching feature folder in
changes/.- Prefer exact folder match, then clear feature match, then folders with numbered idea subfolders.
- If multiple folders are plausible, ask one focused question. Do not guess.
- If none match, say no matching feature folder was found. Do not create one.
- Resolve the idea folder inside it by exact number, or exact/clear title suffix.
- If multiple folders are plausible, ask one focused question.
- The path must be
changes/<feature-name>/<NUMBER-idea-name>.
- Read the full winning baseline.
- If rule 2 wins,
ideas.mdmust contain the exact# <number>section. - Do not create
selected-variant.mdorideas.md.
- If rule 2 wins,
- If
changes/<feature-name>/research.mdexists, read it after the baseline.- Use it only for broader context, terminology, external constraints, edge cases, and related capabilities.
- Ignore every other parent-folder file.
- Read relevant parts of
docs/src/.vitepress/dist/llms.txtfor Orchid API naming, user-facing patterns, and natural extension points. - Inspect only relevant code, tests, exports, docs, and guidelines.
- Always include root
guidelines/code.mdorguidelines/test.md, plus nestedguidelines/code.mdorguidelines/test.mdfiles for directories likely to change. - Check whether a similar capability already exists under another name or shape.
- Respect package boundaries: public APIs export from
src/index.ts; downstream internalpqbaccess goes throughpqb/internal.
- Always include root
Design Rules
Use the baseline, optional research, docs, and code reality together.
The design must:
- satisfy the baseline precisely
- define the public contract clearly enough to constrain implementation
- fill missing public API and high-level behavior
- fit existing Orchid naming, type-safety, package boundaries, and user expectations
- prefer TypeScript guarantees over runtime validation when possible
- decide whether the idea adds zero, one, or multiple standalone capabilities
- include important writer-made behavioral decisions in
## Assumptionsonly when the baseline leaves a real gap
The design must not:
- merely restate the baseline
- leave essential behavior ambiguous
- overfit to one implementation strategy
- invent a new public API when an existing Orchid surface extends cleanly
- drift into low-level algorithms, helper extraction, control flow, or file-by-file edits
spec.md
Output path: changes/<feature-name>/<NUMBER-idea-name>/spec.md
If it exists, read it first, preserve still-correct content, remove stale content, and reconcile it with the current baseline and codebase. Do not append duplicates.
Use this shape. No top-level title.
## Summary
<Short, concrete description of what to implement.>
```ts
<Code example for the new public API or workflow.>
```
## What Changes
- <Concise proposed change.>
- <Another proposed change.>
## Assumptions
- <Important behavioral or scope decision needed because the baseline left a real gap.>
## Capabilities
- `capability-id`: <Standalone responsibility this code addition provides.>
- `another-capability`: <Another standalone responsibility, only when needed.>
<If the idea only extends existing surfaces and adds no standalone capability, say so explicitly.>
## Detailed Design
### Public API
<Define the public surface and semantics, not implementation.>
```ts
<Optional short type or interface snippet.>
```
- <Rule, guarantee, or invariant.>
### Shared State or Data Shape
<Only if shared state, normalized options, or a cross-cutting data shape matters.>
### Integration and Lifecycle
<Where behavior plugs into existing Orchid flows.>
### <Package-Specific or Responsibility-Specific Behavior>
<Only when one package, adapter, or subsystem needs materially different behavior.>
### Error Handling and Limits
- <Contract-level failure mode, guarantee, or limit.>
### Documentation
<Only gotchas or unobvious user-facing edge cases. Do not state that public API must be documented.>
spec.md requirements:
Summarysays what to build and includes enough examples to make every new public API/workflow unambiguous.What Changesis short, targeted, and complete.Assumptionsappears beforeCapabilitiesand only when materially important; omit it otherwise. Do not list naming choices or minor API-shape preferences.Capabilitiesappears beforeDetailed Design. Do not mirror the idea name mechanically, invent placeholders, or hide separate responsibilities inside one umbrella capability.- Split capabilities by standalone responsibility. Include generic enabling capabilities when they are substantial and reusable.
- Name capability ids with sharp code-facing kebab-case, such as
role,set-config, ordynamic-query-session. - Name generic enabling capabilities by their shared responsibility, not by the first feature that needs them.
Detailed Designis responsibility-centered, concrete, and complete, but not an implementation plan. Use only needed sections.- Do not add a
Guidelinessection.
Capability examples:
- If RLS needs independent
roleswitching andset-configsupport, prefer separateroleandset-configcapabilities unless one real responsibility covers both. - If both need a generic AsyncLocalStorage-backed session state mechanism that runs SQL before each query, list that generic mechanism separately, e.g.
dynamic-query-session.
Task List Delegation
After spec.md is written and checked, launch a sub-agent to execute the task-list skill.
Pass the exact spec.md path to the sub-agent. The sub-agent is responsible for creating or updating tasks.md in the same folder. Do not write tasks.md directly in this skill unless the sub-agent mechanism is unavailable; if unavailable, say so and follow .agents/skills/task-list/SKILL.md yourself.
Final Check
Before finishing, verify:
- the correct feature and idea folder were chosen
- the baseline was resolved by the ordered rule and read fully before writing
- only optional
research.mdwas used from the parent feature folder - relevant Orchid docs and code were inspected
spec.mdpreserves the baseline, has no top-level title, and has noGuidelinessectionSummary,What Changes, optionalAssumptions,Capabilities, andDetailed Designsatisfy the rules aboveDetailed Designis complete, coherent, and not implementation-prescriptive- the task-list sub-agent was launched with the exact
spec.mdpath
Ask one focused question only when folder/idea resolution is ambiguous or the baseline is missing/too thin.
Signals
- GitHub stars
- 543
- Forks
- 18
- Last commit
- Aug 2026
Advanced
- Catalog kind
- skill
- Gateway key
spec-romeerez- Source
- github.com/romeerez/orchid-orm