plugins/agentic-behavior/skills/spec-management/SKILL.md
This skill should be used when creating, updating, or reviewing specifications during the PR process. Trigger phrases: "write a spec", "update the spec", "does this PR have a spec", "add a spec to this PR", "review the spec", "spec-driven development", or when making plugin changes that need specification documentation.
npx skillsauth add nsheaps/ai-mktpl spec-managementInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Specifications are natural-language descriptions of features that serve as the source of truth for PM, PO, QA, QE, and ops. Think of them as natural-language unit and integration tests -- they define what a feature does, why it exists, and how to verify it works.
Specs live co-located with the plugin they describe:
plugins/<plugin-name>/docs/specs/
draft/ # Initial drafts and brainstorming
reviewed/ # Reviewed and approved
in-progress/ # Currently being implemented
live/ # Finalized and actively in use
deprecated/ # Outdated but still referenced
archive/ # No longer in use
This follows the convention defined in common-sense/rules/mantras-and-incremental-development.md.
Each spec is a single markdown file with YAML frontmatter, a reader guide, and content sections that mix narrative with testable Given/When/Then scenarios.
---
title: "<Feature or Rule Name>"
status: draft | reviewed | in-progress | live | deprecated | archived
version: "0.1.0"
created: YYYY-MM-DD
updated: YYYY-MM-DD
pr: "<owner/repo#N or URL>" # PR that introduced or last updated this spec
---
Immediately after frontmatter, include a short section explaining who the spec is for and how to read it:
## Reader Guide
**Audience:** PM, PO, QA, QE, ops, and engineers implementing the feature.
**How to read this spec:** Narrative sections describe intent and context.
`Given/When/Then` blocks define testable acceptance criteria. If you are
reviewing for correctness, focus on the Given/When/Then blocks.
Specs use a combined format -- Problem & Requirements (what and why) plus Technical Design (how) in a single document. Do NOT separate these into distinct "PRD" and "spec" documents.
Typical sections:
Use this format for testable criteria:
### Scenario: <descriptive name>
**Given** <precondition>
**When** <action or trigger>
**Then** <expected outcome>
Group related scenarios under a shared heading. Each scenario should be independently verifiable.
plugins/<plugin>/docs/specs/draft/<spec-name>.mdstatus: draftupdated date in frontmatterWhen reviewing a PR that includes a spec:
| Anti-Pattern | Instead |
| ---------------------------------------------- | -------------------------------------------- |
| PR changes plugin behavior with no spec update | Include spec update in the same PR |
| Separate PRD and technical spec documents | Use combined format in one file |
| Spec only has narrative, no testable criteria | Add Given/When/Then acceptance criteria |
| 800-line mega-spec | Split into parent + child specs |
| Spec lives in a random location | Co-locate under plugins/<name>/docs/specs/ |
| Starting implementation before spec exists | Write at least a draft spec first |
references/spec-template.md -- starter template for plugin/PR-scoped specs, with sections for Problem, Requirements, Technical Design, and acceptance criteria. Copy this as the starting point for a new spec.sdlc-utils:spec-writing and its more comprehensive template at plugins/sdlc-utils/skills/spec-writing/references/spec-template.md.tools
Manually reproduce what the github-app plugin's SessionStart hook does to make a GitHub App installation token usable in the current session — materialize the PEM, generate the token, isolate GH_CONFIG_DIR, write the runtime env file, and wire CLAUDE_ENV_FILE so every Bash call sees GH_TOKEN/GITHUB_TOKEN. Use when the hook did not run, the token is missing from the environment, or a shell/teammate needs the token wired up by hand. <example>GH_TOKEN isn't set even though github-app is configured</example> <example>the github-app SessionStart hook didn't run, set up the token manually</example> <example>wire the github app token into CLAUDE_ENV_FILE</example> <example>gh keeps falling back to the wrong account, isolate GH_CONFIG_DIR</example>
tools
Manually configure the GitHub App bot git identity the way the github-app plugin's SessionStart hook does — resolve the app slug and bot user ID, build the <slug>[bot] name and noreply email, set GIT_AUTHOR_*/GIT_COMMITTER_* env vars, and write an isolated GIT_CONFIG_GLOBAL with the gh auth git-credential helper. Use when commits are attributed to the wrong account, "Author identity unknown" appears, or git identity must be set up by hand. <example>my commits are showing up as the handler, not the bot</example> <example>git says Author identity unknown after the github-app hook ran</example> <example>configure the github app bot git identity manually</example> <example>set up the gh credential helper for git push</example>
tools
Manages spec files for requirements capture and validation
tools
# Bash Chaining Alternatives This skill teaches you how to work around the bash command chaining restriction enforced by this plugin. ## Why Chaining is Blocked The `bash-command-rejection` plugin blocks these operators: | Operator | Name | Why Blocked | | -------- | ---------- | ----------------------------------------------------------------------------------- | | `&&` | AND chain | Runs cmd2 only if cmd1 su