
Feature Spec Author
- 24 installs
- 2 repo stars
- Updated July 17, 2026
- ontoledgy/ol_ai_context_library
Helps with ai & agent building tasks.
About
feature-spec-author is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- feature-spec-author
- AI & Agent Building
- AI-coding skill
Feature Spec Author by the numbers
- 24 all-time installs (skills.sh)
- Ranked #9,912 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/ontoledgy/ol_ai_context_library --skill feature-spec-authorAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 24 |
|---|---|
| repo stars | ★ 2 |
| Last updated | July 17, 2026 |
| Repository | ontoledgy/ol_ai_context_library ↗ |
What it does
Helps with ai & agent building tasks.
Files
Feature Spec Author
Role
You author the full specification for one feature. A feature spec is three documents, in strict order, with an approval gate between each. You delegate the design-level analysis to software-architect (feature-design mode) and wrap it with the requirements and tasks phases.
You are invoked by the ol-sdd-workflow orchestrator at Phase 1, or directly by a user or architect.
Deliverables
| File | Template | Produced by | Gate |
|---|---|---|---|
documentation/specs/{feature}/requirements.md | requirements-template.md | This skill | 1a — requirements approval |
documentation/specs/{feature}/design.md | design-template.md | software-architect (feature mode) | 1b — design approval |
documentation/specs/{feature}/tasks.md | tasks-template.md | This skill | 1c — tasks approval |
All three are published to the docs surface via the docs adapter (references/docs-adapter.md), selected by the docs: input (confluence | notion | ado-wiki | local, inferred from documentation/workflow-config.md if absent; defaults to local when no docs MCP is available). On Confluence: one page with H2 sub-sections (or three child pages) under the project parent. On Notion: a row in the Specs database plus a detail page. On ADO Wiki: one page with H2 sub-sections under {wikiRoot}/Specs. On local: the three documentation/specs/{feature}/ files are the published surface, plus a row in documentation/specs/index.md.
Workflow
Step 1 — Load Steering and Release Context
Read documentation/steering/product.md, tech.md, structure.md. If absent, stop and route the user back to product-vision-steering (Phase 0). A feature spec cannot be authored without steering context.
Also read documentation/releases/*/epic-map.md if any release is active. If the target feature appears in a release's epic-map, note the linked tracker epic id (JIRA/Linear key, ADO AB# Feature id, or local LOC- id) — the spec will attach to that existing epic rather than create a new one downstream.
Step 2 — Confirm Feature Scope
Confirm with the user:
- Feature name (kebab-case, e.g.,
licence-data-extraction) - One-line description (or read from the release's features.md if present)
- Release epic to attach to (if a release plan exists): confirm the tracker epic id from
epic-map.md - Upstream feature dependencies
- Known constraints (deadline, scope exclusions, must-not-change areas)
Create the directory documentation/specs/{feature}/ and initialise empty files.
Step 3 — Gate 1a: Requirements
Populate requirements.md from requirements-template.md. Each requirement:
- User story: "As a [role], I want [feature], so that [benefit]"
- Acceptance criteria in EARS format ("WHEN...THEN the system SHALL...")
- Numbered so tasks can reference them later (1.1, 1.2, 2.1, …)
Include the non-functional requirements section (performance, security, reliability, usability) — cut any that don't apply.
Present to user. Gate 1a: user approves requirements before design work begins.
Step 4 — Gate 1b: Design
Invoke software-architect in feature-design mode with:
- The approved requirements
- Steering context
- Feature scope and dependencies
The software-architect skill produces design.md from design-template.md, including:
- Overview
- Steering alignment (how design follows tech.md and structure.md)
- Code reuse analysis
- Architecture diagram (Mermaid)
- Components and interfaces
- Data models
- Error handling
- Testing strategy
- BORO grounding (if OL/bclearer project)
- Identity design (if BIE domain)
Return the design to the user. Gate 1b: user approves design before task breakdown.
Step 5 — Gate 1c: Tasks
Break the design into atomic tasks using tasks-template.md. Enforce the atomic task requirements:
- File scope: 1–3 related files maximum
- Time boxing: completable in 15–30 minutes
- Single purpose: one testable outcome per task
- Specific files: exact paths to create or modify
- Agent-friendly: clear input/output
Each task must reference:
_Requirements: X.Y_— which acceptance criteria it fulfils (links back to requirements.md)_Leverage: path/to/file_— existing code to reuse (reinforces reuse-over-reinvention)_Skill: {skill-name}_— new field — which engineer skill should implement it. Use the skill-routing table inreferences/skill-routing.md.
Estimate each task in hours (for the backlog in Phase 2).
Present to user. Gate 1c: user approves tasks before the spec is published and tracker tickets are created.
Step 6 — Publish
On all three gates passing: 1. Commit the three files to documentation/specs/{feature}/ 2. Publish to the docs surface via the docs adapter (references/docs-adapter.md): publishPage (Confluence), publishRecord into the Specs DB + a detail page (Notion), a wiki page under {wikiRoot}/Specs (ADO Wiki), or — for docs: local — the committed documentation/specs/{feature}/ files plus a row in documentation/specs/index.md. Page structure:
- H1:
{Feature Name} — Spec - H2: Requirements (embed requirements.md)
- H2: Design (embed design.md)
- H2: Tasks (embed tasks.md)
3. If a release epic exists for this feature:
- Update the tracker epic description to include a link to the spec page (Confluence/Notion/ADO-Wiki URL, or the repo-relative
documentation/specs/{feature}/path for local) - Update
documentation/releases/{release}/epic-map.md— change the Spec Status column for this feature from "not specced" to "specced" (or "specced, ready for backlog") - Do NOT create a new epic; the spec attaches to the existing release skeleton
4. If no release plan exists: a standalone epic will be created later by the tracker's backlog skill (backlog-manager / linear-backlog-manager / ado-backlog-manager / local-backlog-manager, Phase 2) 5. Record the spec page URL (or local path) in the workflow config 6. Return to caller with links (including the release epic id if applicable)
---
Task Format with Skill Routing
- [ ] 1. Add licence columns to LegalEntities model
- File: trade_analysis_services/common/models/legal_entities.py
- Add 11 licence columns per spec §3
- Purpose: Persist licence data extracted by pipeline
- _Leverage: trade_analysis_services/common/models/base.py_
- _Requirements: 1.1, 1.2_
- _Skill: python-data-engineer_
- _Estimate: 2h_The _Skill: hint is consumed by the backlog skill (as a tracker label) and by sprint-executor (as the delegation target).
What This Skill Does NOT Do
- Does not do BORO or BIE ontology analysis — delegate to
ontologist/ob-ontologist/bie-component-ontologistwhen needed - Does not create tracker tickets (Phase 2 /
backlog-manager/linear-backlog-manager/ado-backlog-manager/local-backlog-manager) - Does not implement tasks (Phase 4 /
sprint-executor) - Does not refresh steering docs (Phase 0 /
product-vision-steering)
References
prompts/coding/templates/requirements-template.mdprompts/coding/templates/design-template.mdprompts/coding/templates/tasks-template.mdskills/software-architect/SKILL.md(feature-design mode)references/skill-routing.md— skill routing table for_Skill:fieldreferences/docs-adapter.md— docs publish adapter (confluence | notion | ado-wiki | local), shared by the authoring skills
---
Feedback
If the user corrects this skill's output due to a misinterpretation or missing rule in the skill itself (not a one-off preference), invoke skill-feedback to capture structured feedback and optionally post a GitHub issue.
If skill-feedback is not installed, ask the user: "This looks like a skill defect. Would you like to install the `skill-feedback` skill to report it?" If the user declines, continue without feedback capture.
Docs Adapter
The shared contract for publishing design documentation to a docs backend. Consumed by feature-spec-author, product-vision-steering, release-planner, and sprint-planner — each takes a docs: confluence | notion | ado-wiki | local input and routes its publish/query step through the abstract operations below. Authoring logic (what the document says) stays backend-agnostic; only the publish call swaps. docs: ado-wiki publishes to an Azure DevOps project Wiki (the natural docs surface when the tracker is ado). docs: local is the offline fallback for when no Confluence/Notion/ADO-Wiki MCP is available — the repo's documentation/ markdown is the published surface.
This mirrors the tracker adapter (task-executor/references/tracker-{jira,linear}.md).
Abstract operations
| Operation | Meaning |
|---|---|
resolveParent() | locate the parent the page/record is created under |
publishPage(parent, title, body) | create a narrative page |
updatePage(id, {title?, body?}) | edit an existing page |
appendSection(id, content) | append a section to an existing page |
findPage(query) | locate a page by title/text |
publishRecord(dataset, fields) | add a structured record (a row, where the backend supports it) |
linkTracker(target, url) | link a page/record to its tracker item |
resolveParent() reads documentation/workflow-config.md: confluence.* (space key + section page ids) when docs: confluence, notion.* (root page id + section page ids + data-source ids) when docs: notion, ado.* (organisation + project + wikiIdentifier + a parent page path prefix) when docs: ado-wiki, and the local documentation/ folder tree when docs: local. If the config is missing for a remote backend, ask the user (Confluence space key + parent page id, Notion root page id, or the ADO project + wiki identifier) — or route them to confluence-space-manager / notion-workspace-manager to scaffold the container first. For docs: ado-wiki, ensure the project wiki exists (wiki_list_wikis; provision a code/project wiki in the ADO UI if none). For docs: local there is nothing to ask — the folders are created on demand.
Confluence implementation (docs: confluence)
| Operation | Atlassian MCP call |
|---|---|
resolveParent() | getConfluenceSpaces(keys=[...]) + the configured parent page id |
publishPage | createConfluencePage(spaceKey, title, body, parentId) |
updatePage | updateConfluencePage(id, ...) |
appendSection | updateConfluencePage(id, body + section) |
findPage | searchConfluenceUsingCql(...) |
publishRecord | a page (or a row in a table macro on a page) — Confluence has no native DB |
linkTracker | the project-linker macro / an inline link to the JIRA issue |
Body format: Confluence storage format. Multiple specs publish as one page with H2 sub-sections or as child pages under the project parent.
Notion implementation (docs: notion)
| Operation | Notion MCP call |
|---|---|
resolveParent() | the configured notion.rootPageId / section page id / data_source_id |
publishPage | notion-create-pages({parent:{type:"page_id", page_id}, pages:[...]}) |
updatePage | `notion-update-page({page_id, command:"update_properties"\ |
appendSection | notion-update-page({page_id, command:"insert_content", position:{type:"end"}}) |
findPage | notion-search / notion-fetch |
publishRecord | notion-create-pages({parent:{type:"data_source_id", data_source_id}, pages:[{properties}]}) — a real DB row (Specs / Releases / Impl Logs) |
linkTracker | a URL column on the record / a link on the page |
Body format: Notion-flavored Markdown (read notion://docs/enhanced-markdown-spec for non-trivial blocks). The Notion backend prefers publishRecord for Specs and Releases (the databases notion-workspace-manager provisions), so the feature/spec index is queryable rather than a flat page tree.
Azure DevOps Wiki implementation (docs: ado-wiki)
Publishes to an Azure DevOps project Wiki via the Azure DevOps MCP (ado toolset). Wiki pages are Markdown, addressed by path (a /-delimited page tree), so the canonical section structure maps onto a path prefix (e.g. /SDD/Steering/Product).
| Operation | Azure DevOps MCP call |
|---|---|
resolveParent() | wiki_list_wikis(project) → the project wiki's wikiIdentifier; the configured parent path prefix (ado.wikiRoot, e.g. /SDD) |
publishPage | wiki_create_or_update_page(wikiIdentifier, path:"{root}/{section}/{title}", content) |
updatePage | wiki_create_or_update_page(wikiIdentifier, path, content, etag) — pass the page's etag for optimistic concurrency |
appendSection | wiki_get_page_content(path) → append the section → wiki_create_or_update_page(... , content, etag) |
findPage | wiki_list_pages / wiki_get_page_content under the root path |
publishRecord | a page (or a markdown table on a page) — ADO Wiki has no native DB, same as Confluence |
linkTracker | an inline markdown link to the work item (AB#{id} autolinks, or the full work-item URL) |
Body format: ADO Wiki Markdown (GitHub-flavored + ADO extensions like [[_TOC_]], mermaid, ::: callouts). Multiple specs publish as one page with H2 sub-sections or as child pages under the section path.
Local implementation (docs: local)
The published surface is the repo's documentation/ tree (the same files the skills already author). There is no remote push and no MCP — publishing means writing/editing markdown files with Write / Edit.
| Operation | Local realisation |
|---|---|
resolveParent() | the documentation/{section}/ folder for the artifact (created on demand): steering/, specs/{feature}/, releases/{release}/, sprints/, impl-logs/ |
publishPage | Write documentation/{section}/{slug}.md (frontmatter title + markdown body) |
updatePage | Edit / Write the existing file |
appendSection | Edit to append the section to the end of the file |
findPage | Glob / Grep over documentation/ |
publishRecord | append a row to the section's index file (documentation/{section}/index.md table) — local has no DB, the index file is the queryable surface |
linkTracker | a repo-relative markdown link to the tracker item file (documentation/tracker/{id}.md) |
Body format: plain GitHub-flavored Markdown. grep over documentation/ is the local equivalent of a Confluence/Notion search.
Per-skill publish mapping
| Skill | What it publishes | Confluence | Notion | ADO Wiki | Local |
|---|---|---|---|---|---|
product-vision-steering | product/tech/structure pages | 3 pages under parent | 3 pages under 02 Steering | 3 pages under {root}/Steering | 3 files in documentation/steering/ |
feature-spec-author | a feature spec (req/design/tasks) | one page (H2 sections) under parent | publishRecord into the Specs DB + a detail page | one page (H2 sections) under {root}/Specs | the documentation/specs/{feature}/ files + a row in specs/index.md |
release-planner | release roadmap + feature list | "Release Plan" page | "Release Plan" page + rows in the Releases DB | "Release Plan" page under {root}/Releases | documentation/releases/{release}/ roadmap + epic-map.md |
sprint-planner | sprint overview / kickoff | "Sprint N" page | "Sprint N" page under 06 Sprints | "Sprint N" page under {root}/Sprints | documentation/sprints/sprint-{N}-kickoff.md |
jira-impl-logger / linear-impl-logger / ado-impl-logger / local-impl-logger | impl-log mirror | append to an Impl Logs page/table | publishRecord into the Impl Logs DB | append to an Impl Logs page (table) under {root}/ImplLogs | append to the ticket's Activity Log + documentation/impl-logs/{id}.md |
Notes
docsis inferred fromdocumentation/workflow-config.md(which backend is
configured) when not passed; if several are configured, ask. A common pairing is docs: ado-wiki with tracker: ado. With no docs MCP available, default to docs: local.
- Tracker publishing (JIRA epics in
release-planner, JIRA sprints in
sprint-planner) is a separate concern routed through the tracker adapter (task-executor/references/tracker-{jira,linear}.md), not this docs adapter.
Skill Routing Table
When writing a task in tasks.md, annotate it with the engineer skill that should implement it using _Skill: {skill-name}_. This same label drives JIRA routing (Phase 2) and sprint-executor delegation (Phase 4).
Routing guide
| Task Type | Skill | Examples |
|---|---|---|
| Python data/business logic | python-data-engineer | API endpoints, services, parsers |
| Python + BORO/OL conventions | ob-engineer | BORO-style modules, interop services |
| SQLAlchemy model + Alembic migration | python-data-engineer | Schema changes |
| FastAPI endpoint / router | python-data-engineer | REST API |
| Pydantic schema | python-data-engineer | Request/response models |
| bclearer pipeline stage | bclearer-pipeline-engineer | Stage runners, orchestration |
| BIE domain object, enum, identity | bie-data-engineer | BIE components |
| Agent (tool, orchestration, skill) | agent-engineer | ol_ai_services agents |
| React / TypeScript UI component | ui-engineer | Pages, components, hooks |
| Raw TS/JS (non-UI) | javascript-data-engineer | Node utilities, API clients |
| C# library / service | csharp-data-engineer | .NET code |
| Rust library / CLI / engine | rust-data-engineer | Performance-critical code |
| Clean code review only | clean-code-reviewer | Quality check before merge |
| Code smells / function size / naming | clean-code-refactor | Refactor-only tasks |
| Test-only task | clean-code-tests | Test coverage additions |
| Architecture-only change | software-architect (refactor) | Structural redesign with no new features |
| Ontology modelling | ob-ontologist / bie-component-ontologist | Domain analysis, BORO classification |
| Commit-only task | clean-code-commit | Validating commit messages |
Rules
1. One skill per task. If a task needs two skills, split it. 2. Prefer the most specific skill. ob-engineer over python-data-engineer when BORO conventions apply. 3. Language always matches. Don't route Python code to ui-engineer. 4. UI tasks default to `ui-engineer` (extends javascript-data-engineer) unless framework-agnostic. 5. Unknown routing? Default to the generic data-engineer and flag for review.
JIRA label convention
The _Skill: python-data-engineer_ annotation becomes JIRA label skill:python-data-engineer on the ticket, so engineers and automation can filter.
Related
skills/SKILL-ARCHITECTURE.mdfor the full skill taxonomy (role × mode × scope × language).