From dc299950ceb1a65dc8ea86a5e6f18e9a05ea1ec3 Mon Sep 17 00:00:00 2001 From: Dyan Galih Date: Thu, 14 May 2026 16:43:09 +0000 Subject: [PATCH 1/6] docs: generate community extensions index from catalog --- docs/community/extensions.md | 217 +++++++++--------- .../generate_community_extensions_index.py | 68 ++++++ src/specify_cli/community_catalog_docs.py | 133 +++++++++++ tests/test_community_catalog_docs.py | 46 ++++ 4 files changed, 350 insertions(+), 114 deletions(-) create mode 100644 scripts/generate_community_extensions_index.py create mode 100644 src/specify_cli/community_catalog_docs.py create mode 100644 tests/test_community_catalog_docs.py diff --git a/docs/community/extensions.md b/docs/community/extensions.md index a32d214b4a..73080054f4 100644 --- a/docs/community/extensions.md +++ b/docs/community/extensions.md @@ -1,125 +1,114 @@ # Community Extensions > [!NOTE] -> Community extensions are independently created and maintained by their respective authors. Maintainers only verify that catalog entries are complete and correctly formatted — they do **not review, audit, endorse, or support the extension code itself**. The Community Extensions website is also a third-party resource. Review extension source code before installation and use at your own discretion. +> Community extensions are independently created and maintained by their respective authors. Maintainers only verify that catalog entries are complete and correctly formatted - they do **not review, audit, endorse, or support the extension code itself**. The Community Extensions website is also a third-party resource. Review extension source code before installation and use at your own discretion. 🔍 **Browse and search community extensions on the [Community Extensions website](https://speckit-community.github.io/extensions/).** The following community-contributed extensions are available in [`catalog.community.json`](https://github.com/github/spec-kit/blob/main/extensions/catalog.community.json): -**Categories:** + -- `docs` — reads, validates, or generates spec artifacts -- `code` — reviews, validates, or modifies source code -- `process` — orchestrates workflow across phases -- `integration` — syncs with external platforms -- `visibility` — reports on project health or progress - -**Effect:** - -- `Read-only` — produces reports without modifying files -- `Read+Write` — modifies files, creates artifacts, or updates specs - -| Extension | Purpose | Category | Effect | URL | -|-----------|---------|----------|--------|-----| -| Agent Assign | Assign specialized Claude Code agents to spec-kit tasks for targeted execution | `process` | Read+Write | [spec-kit-agent-assign](https://github.com/xymelon/spec-kit-agent-assign) | -| Agent Governance | Project-local agent governance memory and context projection | `process` | Read+Write | [spec-kit-agent-governance](https://github.com/bigsmartben/spec-kit-agent-governance) | -| AI-Driven Engineering (AIDE) | A structured 7-step workflow for building new projects from scratch with AI assistants — from vision through implementation | `process` | Read+Write | [aide](https://github.com/mnriem/spec-kit-extensions/tree/main/aide) | -| API Evolve | Managed API contract evolution — breaking-change detection, semver enforcement, deprecation orchestration, and lifecycle gates across REST, GraphQL, and gRPC | `process` | Read+Write | [spec-kit-api-evolve](https://github.com/Quratulain-bilal/spec-kit-api-evolve) | -| Architect Impact Previewer | Predicts architectural impact, complexity, and risks of proposed changes before implementation. | `visibility` | Read-only | [spec-kit-architect-preview](https://github.com/UmmeHabiba1312/spec-kit-architect-preview) | -| Architecture Guard | Continuous architecture governance for AI-assisted development. Reviews specs, plans, and code for architecture drift, producing structured refactor tasks and evolution proposals. | `process` | Read+Write | [spec-kit-architecture-guard](https://github.com/DyanGalih/spec-kit-architecture-guard) | -| Architecture Workflow | Generate project-level 4+1 architecture view artifacts and synthesis | `docs` | Read+Write | [spec-kit-arch](https://github.com/bigsmartben/spec-kit-arch) | -| Archive Extension | Archive merged features into main project memory. | `docs` | Read+Write | [spec-kit-archive](https://github.com/stn1slv/spec-kit-archive) | -| Azure DevOps Integration | Sync user stories and tasks to Azure DevOps work items using OAuth authentication | `integration` | Read+Write | [spec-kit-azure-devops](https://github.com/pragya247/spec-kit-azure-devops) | -| Blueprint | Stay code-literate in AI-driven development: review a complete code blueprint for every task from spec artifacts before /speckit.implement runs | `docs` | Read+Write | [spec-kit-blueprint](https://github.com/chordpli/spec-kit-blueprint) | -| Branch Convention | Configurable branch and folder naming conventions for /specify with presets and custom patterns | `process` | Read+Write | [spec-kit-branch-convention](https://github.com/Quratulain-bilal/spec-kit-branch-convention) | -| Brownfield Bootstrap | Bootstrap spec-kit for existing codebases — auto-discover architecture and adopt SDD incrementally | `process` | Read+Write | [spec-kit-brownfield](https://github.com/Quratulain-bilal/spec-kit-brownfield) | -| BrownKit | Evidence-driven capability discovery, security and QA risk assessment for existing codebases | `process` | Read+Write | [BrownKit](https://github.com/MaksimShevtsov/BrownKit) | -| Bugfix Workflow | Structured bugfix workflow — capture bugs, trace to spec artifacts, and patch specs surgically | `process` | Read+Write | [spec-kit-bugfix](https://github.com/Quratulain-bilal/spec-kit-bugfix) | -| Canon | Adds canon-driven (baseline-driven) workflows: spec-first, code-first, spec-drift. Requires Canon Core preset installation. | `process` | Read+Write | [spec-kit-canon](https://github.com/maximiliamus/spec-kit-canon/tree/master/extension) | -| Catalog CI | Automated validation for spec-kit community catalog entries — structure, URLs, diffs, and linting | `process` | Read-only | [spec-kit-catalog-ci](https://github.com/Quratulain-bilal/spec-kit-catalog-ci) | -| CI Guard | Spec compliance gates for CI/CD — verify specs exist, check drift, and block merges on gaps | `process` | Read-only | [spec-kit-ci-guard](https://github.com/Quratulain-bilal/spec-kit-ci-guard) | -| Checkpoint Extension | Commit the changes made during the middle of the implementation, so you don't end up with just one very large commit at the end | `code` | Read+Write | [spec-kit-checkpoint](https://github.com/aaronrsun/spec-kit-checkpoint) | -| Cleanup Extension | Post-implementation quality gate that reviews changes, fixes small issues (scout rule), creates tasks for medium issues, and generates analysis for large issues | `code` | Read+Write | [spec-kit-cleanup](https://github.com/dsrednicki/spec-kit-cleanup) | -| Conduct Extension | Orchestrates spec-kit phases via sub-agent delegation to reduce context pollution. | `process` | Read+Write | [spec-kit-conduct-ext](https://github.com/twbrandon7/spec-kit-conduct-ext) | -| Confluence Extension | Create a doc in Confluence summarizing the specifications and planning files | `integration` | Read+Write | [spec-kit-confluence](https://github.com/aaronrsun/spec-kit-confluence) | -| Cost Tracker | Track real LLM dollar cost across SDD workflows — per-feature budgets, per-integration comparison, and finance-ready exports | `visibility` | Read+Write | [spec-kit-cost](https://github.com/Quratulain-bilal/spec-kit-cost) | -| DocGuard — CDD Enforcement | Canonical-Driven Development enforcement. Validates, scores, and traces project documentation with automated checks, AI-driven workflows, and spec-kit hooks. Zero NPM runtime dependencies. | `docs` | Read+Write | [spec-kit-docguard](https://github.com/raccioly/docguard) | -| Extensify | Create and validate extensions and extension catalogs | `process` | Read+Write | [extensify](https://github.com/mnriem/spec-kit-extensions/tree/main/extensify) | -| Fix Findings | Automated analyze-fix-reanalyze loop that resolves spec findings until clean | `code` | Read+Write | [spec-kit-fix-findings](https://github.com/Quratulain-bilal/spec-kit-fix-findings) | -| FixIt Extension | Spec-aware bug fixing — maps bugs to spec artifacts, proposes a plan, applies minimal changes | `code` | Read+Write | [spec-kit-fixit](https://github.com/speckit-community/spec-kit-fixit) | -| Fleet Orchestrator | Orchestrate a full feature lifecycle with human-in-the-loop gates across all SpecKit phases | `process` | Read+Write | [spec-kit-fleet](https://github.com/sharathsatish/spec-kit-fleet) | -| GitHub Issues Integration 1 | Generate spec artifacts from GitHub Issues - import issues, sync updates, and maintain bidirectional traceability | `integration` | Read+Write | [spec-kit-github-issues](https://github.com/Fatima367/spec-kit-github-issues) | -| GitHub Issues Integration 2 | Creates and syncs local specs from an existing GitHub issue | `integration` | Read+Write | [spec-kit-issue](https://github.com/aaronrsun/spec-kit-issue) | -| Intelligent Agent Orchestrator | Cross-catalog agent discovery and intelligent prompt-to-command routing | `process` | Read+Write | [spec-kit-orchestrator](https://github.com/pragya247/spec-kit-orchestrator) | -| Iterate | Iterate on spec documents with a two-phase define-and-apply workflow — refine specs mid-implementation and go straight back to building | `docs` | Read+Write | [spec-kit-iterate](https://github.com/imviancagrace/spec-kit-iterate) | -| Jira Integration | Create Jira Epics, Stories, and Issues from spec-kit specifications and task breakdowns with configurable hierarchy and custom field support | `integration` | Read+Write | [spec-kit-jira](https://github.com/mbachorik/spec-kit-jira) | -| Learning Extension | Generate educational guides from implementations and enhance clarifications with mentoring context | `docs` | Read+Write | [spec-kit-learn](https://github.com/imviancagrace/spec-kit-learn) | -| MAQA — Multi-Agent & Quality Assurance | Coordinator → feature → QA agent workflow with parallel worktree-based implementation. Language-agnostic. Auto-detects installed board plugins. Optional CI gate. | `process` | Read+Write | [spec-kit-maqa-ext](https://github.com/GenieRobot/spec-kit-maqa-ext) | -| MAQA Azure DevOps Integration | Azure DevOps Boards integration for MAQA — syncs User Stories and Task children as features progress | `integration` | Read+Write | [spec-kit-maqa-azure-devops](https://github.com/GenieRobot/spec-kit-maqa-azure-devops) | -| MAQA CI/CD Gate | Auto-detects GitHub Actions, CircleCI, GitLab CI, and Bitbucket Pipelines. Blocks QA handoff until pipeline is green. | `process` | Read+Write | [spec-kit-maqa-ci](https://github.com/GenieRobot/spec-kit-maqa-ci) | -| MAQA GitHub Projects Integration | GitHub Projects v2 integration for MAQA — syncs draft issues and Status columns as features progress | `integration` | Read+Write | [spec-kit-maqa-github-projects](https://github.com/GenieRobot/spec-kit-maqa-github-projects) | -| MAQA Jira Integration | Jira integration for MAQA — syncs Stories and Subtasks as features progress through the board | `integration` | Read+Write | [spec-kit-maqa-jira](https://github.com/GenieRobot/spec-kit-maqa-jira) | -| MAQA Linear Integration | Linear integration for MAQA — syncs issues and sub-issues across workflow states as features progress | `integration` | Read+Write | [spec-kit-maqa-linear](https://github.com/GenieRobot/spec-kit-maqa-linear) | -| MAQA Trello Integration | Trello board integration for MAQA — populates board from specs, moves cards, real-time checklist ticking | `integration` | Read+Write | [spec-kit-maqa-trello](https://github.com/GenieRobot/spec-kit-maqa-trello) | -| MarkItDown Document Converter | Convert documents (PDF, Word, PowerPoint, Excel, and more) to Markdown for use as spec reference material | `docs` | Read+Write | [spec-kit-markitdown](https://github.com/BenBtg/spec-kit-markitdown) | -| MDE | Minimal model-driven engineering workflow with setup, next, and status commands | `process` | Read+Write | [spec-kit-mde](https://github.com/AI-MDE/spec-kit-mde) | -| Memory Loader | Loads .specify/memory/ files before lifecycle commands so LLM agents have project governance context | `docs` | Read-only | [spec-kit-memory-loader](https://github.com/KevinBrown5280/spec-kit-memory-loader) | -| Memory MD | Spec Kit extension for repository-native Markdown memory that captures durable decisions, bugs, and project context | `docs` | Read+Write | [spec-kit-memory-hub](https://github.com/DyanGalih/spec-kit-memory-hub) | -| MemoryLint | Agent memory governance tool: Automatically audits and fixes boundary conflicts between AGENTS.md and the constitution. | `process` | Read+Write | [memorylint](https://github.com/RbBtSn0w/spec-kit-extensions/tree/main/memorylint) | -| Microsoft 365 Integration | Fetch Teams messages, meeting transcripts, and SharePoint/OneDrive files as local Markdown for spec generation | `integration` | Read+Write | [spec-kit-m365](https://github.com/BenBtg/spec-kit-m365) | -| Multi-Model Review | Cross-model Spec Kit handoffs for spec authoring, implementation routing, and review. | `process` | Read+Write | [multi-model-review](https://github.com/formin/multi-model-review) | -| .NET Framework to Modern .NET Migration | Orchestrate end-to-end .NET Framework to modern .NET migration across 7 phases, with SDD lifecycle integration | `process` | Read+Write | [spec-kit-fx-to-net](https://github.com/RogerBestMsft/spec-kit-FxToNet) | -| Onboard | Contextual onboarding and progressive growth for developers new to spec-kit projects. Explains specs, maps dependencies, validates understanding, and guides the next step | `process` | Read+Write | [spec-kit-onboard](https://github.com/dmux/spec-kit-onboard) | -| Optimize | Audit and optimize AI governance for context efficiency — token budgets, rule health, interpretability, compression, coherence, and echo detection | `process` | Read+Write | [spec-kit-optimize](https://github.com/sakitA/spec-kit-optimize) | -| OWASP LLM Threat Model | OWASP Top 10 for LLM Applications 2025 threat analysis on agent artifacts | `code` | Read-only | [spec-kit-threatmodel](https://github.com/NaviaSamal/spec-kit-threatmodel) | -| Plan Review Gate | Require spec.md and plan.md to be merged via MR/PR before allowing task generation | `process` | Read-only | [spec-kit-plan-review-gate](https://github.com/luno/spec-kit-plan-review-gate) | -| PR Bridge | Auto-generate pull request descriptions, checklists, and summaries from spec artifacts | `process` | Read-only | [spec-kit-pr-bridge-](https://github.com/Quratulain-bilal/spec-kit-pr-bridge-) | -| Presetify | Create and validate presets and preset catalogs | `process` | Read+Write | [presetify](https://github.com/mnriem/spec-kit-extensions/tree/main/presetify) | -| Product Forge | Full product lifecycle from research to release — portfolio, lite mode, monorepo, optional V-Model | `process` | Read+Write | [speckit-product-forge](https://github.com/VaiYav/speckit-product-forge) | -| Project Health Check | Diagnose a Spec Kit project and report health issues across structure, agents, features, scripts, extensions, and git | `visibility` | Read-only | [spec-kit-doctor](https://github.com/KhawarHabibKhan/spec-kit-doctor) | -| Project Status | Show current SDD workflow progress — active feature, artifact status, task completion, workflow phase, and extensions summary | `visibility` | Read-only | [spec-kit-status](https://github.com/KhawarHabibKhan/spec-kit-status) | -| QA Testing Extension | Systematic QA testing with browser-driven or CLI-based validation of acceptance criteria from spec | `code` | Read-only | [spec-kit-qa](https://github.com/arunt14/spec-kit-qa) | -| Ralph Loop | Autonomous implementation loop using AI agent CLI | `code` | Read+Write | [spec-kit-ralph](https://github.com/Rubiss-Projects/spec-kit-ralph) | -| Reconcile Extension | Reconcile implementation drift by surgically updating feature artifacts. | `docs` | Read+Write | [spec-kit-reconcile](https://github.com/stn1slv/spec-kit-reconcile) | -| Red Team | Adversarial review of specs before /speckit.plan — parallel lens agents surface risks that clarify/analyze structurally can't (prompt injection, integrity gaps, cross-spec drift, silent failures). Produces a structured findings report; no auto-edits to specs. | `docs` | Read+Write | [spec-kit-red-team](https://github.com/ashbrener/spec-kit-red-team) | -| Repository Index | Generate index for existing repo for overview, architecture and module level. | `docs` | Read-only | [spec-kit-repoindex](https://github.com/liuyiyu/spec-kit-repoindex) | -| Reqnroll BDD | Adds Reqnroll BDD planning, Gherkin generation, traceability, safe task injection, handoff, and verification to Spec Kit | `process` | Read+Write | [spec-kit-reqnroll-bdd](https://github.com/LoogacyStudio/spec-kit-reqnroll-bdd) | -| Retro Extension | Sprint retrospective analysis with metrics, spec accuracy assessment, and improvement suggestions | `process` | Read+Write | [spec-kit-retro](https://github.com/arunt14/spec-kit-retro) | -| Retrospective Extension | Post-implementation retrospective with spec adherence scoring, drift analysis, and human-gated spec updates | `docs` | Read+Write | [spec-kit-retrospective](https://github.com/emi-dm/spec-kit-retrospective) | -| Review Extension | Post-implementation comprehensive code review with specialized agents for code quality, comments, tests, error handling, type design, and simplification | `code` | Read-only | [spec-kit-review](https://github.com/ismaelJimenez/spec-kit-review) | -| Ripple | Detect side effects that tests can't catch after implementation — delta-anchored analysis across 9 domain-agnostic categories | `code` | Read+Write | [spec-kit-ripple](https://github.com/chordpli/spec-kit-ripple) | -| SDD Utilities | Resume interrupted workflows, validate project health, and verify spec-to-task traceability | `process` | Read+Write | [speckit-utils](https://github.com/mvanhorn/speckit-utils) | -| Security Review | Full-project secure-by-design security audits plus staged, branch/PR, plan, task, follow-up, and apply reviews | `code` | Read+Write | [spec-kit-security-review](https://github.com/DyanGalih/spec-kit-security-review) | -| SFSpeckit | Enterprise Salesforce SDLC with 18 commands for the full SDD lifecycle. | `process` | Read+Write | [spec-kit-sf](https://github.com/ysumanth06/spec-kit-sf) | -| Ship Release Extension | Automates release pipeline: pre-flight checks, branch sync, changelog generation, CI verification, and PR creation | `process` | Read+Write | [spec-kit-ship](https://github.com/arunt14/spec-kit-ship) | -| Spec Changelog | Auto-generate changelogs and release notes from spec git history and requirement diffs | `docs` | Read-only | [spec-kit-changelog](https://github.com/Quratulain-bilal/spec-kit-changelog) | -| Spec Critique Extension | Dual-lens critical review of spec and plan from product strategy and engineering risk perspectives | `docs` | Read-only | [spec-kit-critique](https://github.com/arunt14/spec-kit-critique) | -| Spec Diagram | Auto-generate Mermaid diagrams of SDD workflow state, feature progress, and task dependencies | `visibility` | Read-only | [spec-kit-diagram-](https://github.com/Quratulain-bilal/spec-kit-diagram-) | -| Spec Kit Schedule | Optimal multi-agent task scheduling via CP-SAT — DAG precedence, hallucination-aware caps, file-conflict avoidance, stochastic durations, replanning, and interactive HTML output | `process` | Read+Write | [spec-kit-schedule](https://github.com/jfranc38/spec-kit-schedule) | -| Spec Orchestrator | Cross-feature orchestration — track state, select tasks, and detect conflicts across parallel specs | `process` | Read-only | [spec-kit-orchestrator](https://github.com/Quratulain-bilal/spec-kit-orchestrator) | -| Spec Reference Loader | Reads the ## References section from the feature spec and loads only the listed docs into context | `docs` | Read-only | [spec-kit-spec-reference-loader](https://github.com/KevinBrown5280/spec-kit-spec-reference-loader) | -| Spec Refine | Update specs in-place, propagate changes to plan and tasks, and diff impact across artifacts | `process` | Read+Write | [spec-kit-refine](https://github.com/Quratulain-bilal/spec-kit-refine) | -| Spec Scope | Effort estimation and scope tracking — estimate work, detect creep, and budget time per phase | `process` | Read-only | [spec-kit-scope-](https://github.com/Quratulain-bilal/spec-kit-scope-) | -| Spec Sync | Detect and resolve drift between specs and implementation. AI-assisted resolution with human approval | `docs` | Read+Write | [spec-kit-sync](https://github.com/bgervin/spec-kit-sync) | -| Spec Validate | Comprehension validation, review gating, and approval state for spec-kit artifacts — staged quizzes, peer review SLA, and a hard gate before /speckit.implement | `process` | Read+Write | [spec-kit-spec-validate](https://github.com/aeltayeb/spec-kit-spec-validate) | -| Spec2Cloud | Spec-driven workflow tuned for shipping to Azure | `process` | Read+Write | [spec2cloud](https://github.com/Azure-Samples/Spec2Cloud) | -| SpecTest | Auto-generate test scaffolds from spec criteria, map coverage, and find untested requirements | `code` | Read+Write | [spec-kit-spectest](https://github.com/Quratulain-bilal/spec-kit-spectest) | -| Squad Bridge | Bootstrap and synchronize a Squad agent team from your Speckit spec and tasks | `process` | Read+Write | [spec-kit-squad](https://github.com/jwill824/spec-kit-squad) | -| Staff Review Extension | Staff-engineer-level code review that validates implementation against spec, checks security, performance, and test coverage | `code` | Read-only | [spec-kit-staff-review](https://github.com/arunt14/spec-kit-staff-review) | -| Status Report | Project status, feature progress, and next-action recommendations for spec-driven workflows | `visibility` | Read-only | [Open-Agent-Tools/spec-kit-status](https://github.com/Open-Agent-Tools/spec-kit-status) | -| Superpowers Bridge | Orchestrates obra/superpowers skills within the spec-kit SDD workflow across the full lifecycle (clarification, TDD, review, verification, critique, debugging, branch completion) | `process` | Read+Write | [superpowers-bridge](https://github.com/RbBtSn0w/spec-kit-extensions/tree/main/superpowers-bridge) | -| Superpowers Bridge (WangX0111) | Bridges spec-kit with obra/superpowers (brainstorming, TDD, subagent, code-review) into a unified, resumable workflow with graceful degradation and session progress tracking | `process` | Read+Write | [superspec](https://github.com/WangX0111/superspec) | -| TinySpec | Lightweight single-file workflow for small tasks — skip the heavy multi-step SDD process | `process` | Read+Write | [spec-kit-tinyspec](https://github.com/Quratulain-bilal/spec-kit-tinyspec) | -| Token Consumption Analyzer | Captures, analyzes, and compares token consumption across SDD workflows | `visibility` | Read-only | [spec-kit-token-analyzer](https://github.com/coderandhiker/spec-kit-token-analyzer) | -| V-Model Extension Pack | Enforces V-Model paired generation of development specs and test specs with full traceability | `docs` | Read+Write | [spec-kit-v-model](https://github.com/leocamello/spec-kit-v-model) | -| Verify Extension | Post-implementation quality gate that validates implemented code against specification artifacts | `code` | Read-only | [spec-kit-verify](https://github.com/ismaelJimenez/spec-kit-verify) | -| Verify Tasks Extension | Detect phantom completions: tasks marked [X] in tasks.md with no real implementation | `code` | Read-only | [spec-kit-verify-tasks](https://github.com/datastone-inc/spec-kit-verify-tasks) | -| Version Guard | Verify tech stack versions against live npm registries before planning and implementation | `process` | Read-only | [spec-kit-version-guard](https://github.com/KevinBrown5280/spec-kit-version-guard) | -| What-if Analysis | Preview the downstream impact (complexity, effort, tasks, risks) of requirement changes before committing to them | `visibility` | Read-only | [spec-kit-whatif](https://github.com/DevAbdullah90/spec-kit-whatif) | -| Wireframe Visual Feedback Loop | SVG wireframe generation, review, and sign-off for spec-driven development. Approved wireframes become spec constraints honored by /speckit.plan, /speckit.tasks, and /speckit.implement | `visibility` | Read+Write | [spec-kit-extension-wireframe](https://github.com/TortoiseWolfe/spec-kit-extension-wireframe) | -| Work IQ | Integrate Microsoft 365 organizational knowledge into spec-driven development workflows | `integration` | Read-only | [spec-kit-workiq](https://github.com/sakitA/spec-kit-workiq) | -| Worktree Isolation | Spawn isolated git worktrees for parallel feature development without checkout switching | `process` | Read+Write | [spec-kit-worktree](https://github.com/Quratulain-bilal/spec-kit-worktree) | -| Worktrees | Default-on worktree isolation for parallel agents — sibling or nested layout | `process` | Read+Write | [spec-kit-worktree-parallel](https://github.com/dango85/spec-kit-worktree-parallel) | +| Extension | ID | Description | Tags | Verified | +| ----------------------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------- | +| [.NET Framework to Modern .NET Migration](https://github.com/RogerBestMsft/spec-kit-FxToNet) | `fx-to-dotnet` | Orchestrate end-to-end .NET Framework to modern .NET migration across 7 phases, with SDD lifecycle integration. | `dotnet`, `migration`, `modernization`, `framework`, `aspnet`, `shared-artifact` | No | +| [Agent Assign](https://github.com/xymelon/spec-kit-agent-assign) | `agent-assign` | Assign specialized Claude Code agents to spec-kit tasks for targeted execution | `agent`, `automation`, `implementation`, `multi-agent`, `task-routing` | No | +| [Agent Governance](https://github.com/bigsmartben/spec-kit-agent-governance) | `agent-governance` | Project-local agent governance memory and context projection. | `governance`, `agents`, `memory`, `context` | No | +| [AI-Driven Engineering (AIDE)](https://github.com/mnriem/spec-kit-extensions) | `aide` | A structured 7-step workflow for building new projects from scratch with AI assistants — from vision through implementation. | `workflow`, `project-management`, `ai-driven`, `new-project`, `planning`, `experimental` | No | +| [API Evolve](https://github.com/Quratulain-bilal/spec-kit-api-evolve) | `api-evolve` | Managed API contract evolution — breaking-change detection, semver enforcement, deprecation orchestration, and lifecycle gates across REST, GraphQL, and gRPC. | `api`, `contracts`, `versioning`, `openapi`, `graphql`, `grpc`, `deprecation`, `breaking-changes`, `semver`, `governance` | No | +| [Architect Impact Previewer](https://github.com/UmmeHabiba1312/spec-kit-architect-preview) | `architect-preview` | Predicts architectural impact, complexity, and risks of proposed changes before implementation. | `architecture`, `analysis`, `risk-assessment`, `planning`, `preview` | No | +| [Architecture Guard](https://github.com/DyanGalih/spec-kit-architecture-guard) | `architecture-guard` | Continuous architecture governance for AI-assisted development. Reviews specs, plans, and code for architecture drift, producing structured refactor tasks and evolution proposals. | `architecture`, `governance`, `drift-detection`, `refactor`, `monolithic`, `microservices` | No | +| [Archive Extension](https://github.com/stn1slv/spec-kit-archive) | `archive` | Archive merged features into main project memory, resolving gaps and conflicts. | `archive`, `memory`, `merge`, `changelog` | No | +| [Azure DevOps Integration](https://github.com/pragya247/spec-kit-azure-devops) | `azure-devops` | Sync user stories and tasks to Azure DevOps work items using OAuth authentication. | `azure`, `devops`, `project-management`, `work-items`, `issue-tracking` | No | +| [Blueprint](https://github.com/chordpli/spec-kit-blueprint) | `blueprint` | Stay code-literate in AI-driven development: review a complete code blueprint for every task from spec artifacts before /speckit.implement runs | `blueprint`, `pre-implementation`, `review`, `scaffolding`, `code-literacy` | No | +| [Branch Convention](https://github.com/Quratulain-bilal/spec-kit-branch-convention) | `branch-convention` | Configurable branch and folder naming conventions for /specify with presets and custom patterns. | `branch`, `naming`, `convention`, `gitflow`, `workflow` | No | +| [Brownfield Bootstrap](https://github.com/Quratulain-bilal/spec-kit-brownfield) | `brownfield` | Bootstrap spec-kit for existing codebases — auto-discover architecture and adopt SDD incrementally. | `brownfield`, `bootstrap`, `existing-project`, `migration`, `onboarding` | No | +| [BrownKit — Brownfield Discovery for Spec-Kit](https://github.com/MaksimShevtsov/BrownKit) | `brownkit` | Evidence-driven capability discovery, security and QA risk assessment for existing codebases. | `brownfield`, `discovery`, `security`, `qa`, `capabilities` | No | +| [Bugfix Workflow](https://github.com/Quratulain-bilal/spec-kit-bugfix) | `bugfix` | Structured bugfix workflow — capture bugs, trace to spec artifacts, and patch specs surgically. | `bugfix`, `debugging`, `workflow`, `traceability`, `maintenance` | No | +| [Canon](https://github.com/maximiliamus/spec-kit-canon) | `canon` | Adds canon-driven (baseline-driven) workflows: spec-first, code-first, spec-drift. Requires Canon Core preset installation. | `process`, `baseline`, `canon`, `drift`, `spec-first`, `code-first`, `spec-drift`, `vibecoding` | No | +| [Catalog CI](https://github.com/Quratulain-bilal/spec-kit-catalog-ci) | `catalog-ci` | Automated validation for spec-kit community catalog entries — structure, URLs, diffs, and linting. | `ci`, `validation`, `catalog`, `quality`, `automation` | No | +| [Checkpoint Extension](https://github.com/aaronrsun/spec-kit-checkpoint) | `checkpoint` | An extension to commit the changes made during the middle of the implementation, so you don't end up with just one very large commit at the end. | `checkpoint`, `commit` | No | +| [CI Guard](https://github.com/Quratulain-bilal/spec-kit-ci-guard) | `ci-guard` | Spec compliance gates for CI/CD — verify specs exist, check drift, and block merges on gaps. | `ci-cd`, `compliance`, `governance`, `quality-gate`, `drift-detection`, `automation` | No | +| [Cleanup Extension](https://github.com/dsrednicki/spec-kit-cleanup) | `cleanup` | Post-implementation quality gate that reviews changes, fixes small issues (scout rule), creates tasks for medium issues, and generates analysis for large issues. | `quality`, `tech-debt`, `review`, `cleanup`, `scout-rule` | No | +| [Conduct Extension](https://github.com/twbrandon7/spec-kit-conduct-ext) | `conduct` | Executes a single spec-kit phase via sub-agent delegation to reduce context pollution. | `conduct`, `workflow`, `automation` | No | +| [Confluence Extension](https://github.com/aaronrsun/spec-kit-confluence) | `confluence` | Create, read, and update Confluence docs for your project | `confluence` | No | +| [Cost Tracker](https://github.com/Quratulain-bilal/spec-kit-cost) | `cost` | Track real LLM dollar cost across SDD workflows — per-feature budgets, per-integration comparison, and finance-ready exports. | `cost`, `budget`, `tokens`, `visibility`, `finance` | No | +| [DocGuard — CDD Enforcement](https://github.com/raccioly/docguard) | `docguard` | Canonical-Driven Development enforcement. Validates, scores, and traces project documentation with automated checks, AI-driven workflows, and spec-kit hooks. Zero NPM runtime dependencies. | `documentation`, `validation`, `quality`, `cdd`, `traceability`, `ai-agents`, `enforcement`, `spec-kit` | No | +| [Extensify](https://github.com/mnriem/spec-kit-extensions) | `extensify` | Create and validate extensions and extension catalogs. | `extensions`, `workflow`, `validation`, `experimental` | No | +| [Fix Findings](https://github.com/Quratulain-bilal/spec-kit-fix-findings) | `fix-findings` | Automated analyze-fix-reanalyze loop that resolves spec findings until clean. | `code`, `analysis`, `quality`, `automation`, `findings` | No | +| [FixIt Extension](https://github.com/speckit-community/spec-kit-fixit) | `fixit` | Spec-aware bug fixing: maps bugs to spec artifacts, proposes a plan, applies minimal changes. | `debugging`, `fixit`, `spec-alignment`, `post-implementation` | No | +| [Fleet Orchestrator](https://github.com/sharathsatish/spec-kit-fleet) | `fleet` | Orchestrate a full feature lifecycle with human-in-the-loop gates across all SpecKit phases. | `orchestration`, `workflow`, `human-in-the-loop`, `parallel` | No | +| [GitHub Issues Integration 1](https://github.com/Fatima367/spec-kit-github-issues) | `github-issues` | Generate spec artifacts from GitHub Issues - import issues, sync updates, and maintain bidirectional traceability | `integration`, `github`, `issues`, `import`, `sync`, `traceability` | No | +| [GitHub Issues Integration 2](https://github.com/aaronrsun/spec-kit-issue) | `issue` | Creates and syncs local specs based on an existing issue in GitHub | `issue`, `integration`, `github`, `issues`, `sync` | No | +| [Intelligent Agent Orchestrator](https://github.com/pragya247/spec-kit-orchestrator) | `agent-orchestrator` | Cross-catalog agent discovery and intelligent prompt-to-command routing | `orchestrator`, `routing`, `discovery`, `agent`, `ai` | No | +| [Iterate](https://github.com/imviancagrace/spec-kit-iterate) | `iterate` | Iterate on spec documents with a two-phase define-and-apply workflow — refine specs mid-implementation and go straight back to building | `iteration`, `change-management`, `spec-maintenance` | No | +| [Jira Integration](https://github.com/mbachorik/spec-kit-jira) | `jira` | Create Jira Epics, Stories, and Issues from spec-kit specifications and task breakdowns with configurable hierarchy and custom field support. | `issue-tracking`, `jira`, `atlassian`, `project-management` | No | +| [Learning Extension](https://github.com/imviancagrace/spec-kit-learn) | `learn` | Generate educational guides from implementations and enhance clarifications with mentoring context. | `learning`, `education`, `mentoring`, `knowledge-transfer` | No | +| [MAQA Azure DevOps Integration](https://github.com/GenieRobot/spec-kit-maqa-azure-devops) | `maqa-azure-devops` | Azure DevOps Boards integration for the MAQA extension. Populates work items from specs, moves User Stories across columns as features progress, real-time Task child ticking. | `azure-devops`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA CI/CD Gate](https://github.com/GenieRobot/spec-kit-maqa-ci) | `maqa-ci` | CI/CD pipeline gate for the MAQA extension. Auto-detects GitHub Actions, CircleCI, GitLab CI, and Bitbucket Pipelines. Blocks QA handoff until pipeline is green. | `ci-cd`, `github-actions`, `circleci`, `gitlab-ci`, `quality-gate`, `maqa` | No | +| [MAQA GitHub Projects Integration](https://github.com/GenieRobot/spec-kit-maqa-github-projects) | `maqa-github-projects` | GitHub Projects v2 integration for the MAQA extension. Populates draft issues from specs, moves items across Status columns as features progress, real-time task list ticking. | `github-projects`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA Jira Integration](https://github.com/GenieRobot/spec-kit-maqa-jira) | `maqa-jira` | Jira integration for the MAQA extension. Populates Stories from specs, moves issues across board columns as features progress, real-time Subtask ticking. | `jira`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA Linear Integration](https://github.com/GenieRobot/spec-kit-maqa-linear) | `maqa-linear` | Linear integration for the MAQA extension. Populates issues from specs, moves items across workflow states as features progress, real-time sub-issue ticking. | `linear`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA Trello Integration](https://github.com/GenieRobot/spec-kit-maqa-trello) | `maqa-trello` | Trello board integration for the MAQA extension. Populates board from specs, moves cards between lists as features progress, real-time checklist ticking. | `trello`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA — Multi-Agent & Quality Assurance](https://github.com/GenieRobot/spec-kit-maqa-ext) | `maqa` | Coordinator → feature → QA agent workflow with parallel worktree-based implementation. Language-agnostic. Auto-detects installed board plugins (Trello, Linear, GitHub Projects, Jira, Azure DevOps). Optional CI gate. | `multi-agent`, `orchestration`, `quality-assurance`, `workflow`, `parallel`, `tdd` | No | +| [MarkItDown Document Converter](https://github.com/BenBtg/spec-kit-markitdown) | `markitdown` | Convert documents (PDF, Word, PowerPoint, Excel, and more) to Markdown for use as spec reference material in Spec Kit workflows. | `markdown`, `pdf`, `document-conversion`, `reference-material`, `extraction` | No | +| [MDE](https://github.com/AI-MDE/spec-kit-mde) | `mde` | A Spec Kit extension that exposes a minimal model-driven engineering workflow with setup, next, and status commands. | `mde`, `model-driven-engineering`, `workflow`, `process` | No | +| [Memory Loader](https://github.com/KevinBrown5280/spec-kit-memory-loader) | `memory-loader` | Loads .specify/memory/ files before spec-kit lifecycle commands so LLM agents have project governance context | `context`, `memory`, `governance`, `hooks` | No | +| [Memory MD](https://github.com/DyanGalih/spec-kit-memory-hub) | `memory-md` | Spec Kit extension for repository-native Markdown memory that captures durable decisions, bugs, and project context | `memory`, `workflow`, `docs`, `copilot`, `markdown`, `ai-context` | No | +| [MemoryLint](https://github.com/RbBtSn0w/spec-kit-extensions) | `memorylint` | Agent memory governance tool: Automatically audits and fixes boundary conflicts between AGENTS.md and the constitution. | `memory`, `governance`, `constitution`, `agents-md`, `process` | No | +| [Microsoft 365 Integration](https://github.com/BenBtg/spec-kit-m365) | `m365` | Fetch Teams messages, meeting transcripts, and SharePoint/OneDrive files as local Markdown for spec generation. | `microsoft-365`, `teams`, `transcripts`, `collaboration`, `summarization` | No | +| [Multi-Model Review](https://github.com/formin/multi-model-review) | `multi-model-review` | Cross-model Spec Kit handoffs for spec authoring, implementation routing, and review. | `review`, `workflow`, `multi-model`, `spec-driven-development`, `code` | No | +| [Onboard](https://github.com/dmux/spec-kit-onboard) | `onboard` | Contextual onboarding and progressive growth for developers new to spec-kit projects. Explains specs, maps dependencies, validates understanding, and guides the next step. | `onboarding`, `learning`, `mentoring`, `developer-experience`, `gamification`, `knowledge-transfer` | No | +| [Optimize Extension](https://github.com/sakitA/spec-kit-optimize) | `optimize` | Audits and optimizes AI governance for context efficiency | `constitution`, `optimization`, `token-budget`, `governance`, `audit` | No | +| [OWASP LLM Threat Model](https://github.com/NaviaSamal/spec-kit-threatmodel) | `threatmodel` | OWASP Top 10 for LLM Applications 2025 threat analysis on agent artifacts | `security`, `owasp`, `threat-model`, `llm`, `analysis` | No | +| [Plan Review Gate](https://github.com/luno/spec-kit-plan-review-gate) | `plan-review-gate` | Require spec.md and plan.md to be merged via MR/PR before allowing task generation | `review`, `quality`, `workflow`, `gate` | No | +| [PR Bridge](https://github.com/Quratulain-bilal/spec-kit-pr-bridge-) | `pr-bridge` | Auto-generate pull request descriptions, checklists, and summaries from spec artifacts. | `pull-request`, `automation`, `traceability`, `workflow`, `review` | No | +| [Presetify](https://github.com/mnriem/spec-kit-extensions) | `presetify` | Create and validate presets and preset catalogs. | `presets`, `workflow`, `templates`, `experimental` | No | +| [Product Forge](https://github.com/VaiYav/speckit-product-forge) | `product-forge` | Full product lifecycle from research to release — portfolio, lite mode, monorepo, optional V-Model | `process`, `lifecycle`, `monorepo`, `v-model`, `portfolio` | No | +| [Project Health Check](https://github.com/KhawarHabibKhan/spec-kit-doctor) | `doctor` | Diagnose a Spec Kit project and report health issues across structure, agents, features, scripts, extensions, and git. | `diagnostics`, `health-check`, `validation`, `project-structure` | No | +| [Project Status](https://github.com/KhawarHabibKhan/spec-kit-status) | `status` | Show current SDD workflow progress — active feature, artifact status, task completion, workflow phase, and extensions summary. | `status`, `workflow`, `progress`, `feature-tracking`, `task-progress` | No | +| [QA Testing Extension](https://github.com/arunt14/spec-kit-qa) | `qa` | Systematic QA testing with browser-driven or CLI-based validation of acceptance criteria from spec. | `code`, `testing`, `qa` | No | +| [Ralph Loop](https://github.com/Rubiss-Projects/spec-kit-ralph) | `ralph` | Autonomous implementation loop using AI agent CLI. | `implementation`, `automation`, `loop`, `copilot` | No | +| [Reconcile Extension](https://github.com/stn1slv/spec-kit-reconcile) | `reconcile` | Reconcile implementation drift by surgically updating the feature's own spec, plan, and tasks. | `reconcile`, `drift`, `tasks`, `remediation` | No | +| [Red Team](https://github.com/ashbrener/spec-kit-red-team) | `red-team` | Adversarial review of functional specs before /speckit.plan. Parallel adversarial lens agents catch hostile actors, silent failures, and regulatory blind spots that clarify/analyze cannot. | `adversarial-review`, `quality-gate`, `spec-hardening`, `pre-plan`, `audit` | No | +| [Repository Index](https://github.com/liuyiyu/spec-kit-repoindex) | `repoindex` | Generate index of your repo for overview, architecture and module | `utility`, `brownfield`, `analysis` | No | +| [Reqnroll BDD](https://github.com/LoogacyStudio/spec-kit-reqnroll-bdd) | `reqnroll-bdd` | Adds Reqnroll BDD planning, Gherkin generation, traceability, safe task injection, handoff, and verification to Spec Kit. | `bdd`, `reqnroll`, `dotnet`, `gherkin`, `acceptance-testing` | No | +| [Retro Extension](https://github.com/arunt14/spec-kit-retro) | `retro` | Sprint retrospective analysis with metrics, spec accuracy assessment, and improvement suggestions. | `process`, `retrospective`, `metrics` | No | +| [Retrospective Extension](https://github.com/emi-dm/spec-kit-retrospective) | `retrospective` | Post-implementation retrospective with spec adherence scoring, drift analysis, and human-gated spec updates. | `retrospective`, `spec-drift`, `quality`, `analysis`, `governance` | No | +| [Review Extension](https://github.com/ismaelJimenez/spec-kit-review) | `review` | Post-implementation comprehensive code review with specialized agents for code quality, comments, tests, error handling, type design, and simplification. | `code-review`, `quality`, `review`, `testing`, `error-handling`, `type-design`, `simplification` | No | +| [Ripple](https://github.com/chordpli/spec-kit-ripple) | `ripple` | Detect side effects that tests can't catch after implementation — delta-anchored analysis across 9 domain-agnostic categories with fix-induced side effect detection | `side-effects`, `post-implementation`, `analysis`, `quality`, `risk-detection` | No | +| [SDD Utilities](https://github.com/mvanhorn/speckit-utils) | `speckit-utils` | Resume interrupted workflows, validate project health, and verify spec-to-task traceability. | `resume`, `doctor`, `validate`, `workflow`, `health-check` | No | +| [Security Review](https://github.com/DyanGalih/spec-kit-security-review) | `security-review` | Full-project secure-by-design security audits plus staged, branch/PR, plan, task, follow-up, and apply reviews | `security`, `devsecops`, `audit`, `owasp`, `compliance` | No | +| [SFSpeckit — Salesforce Spec-Driven Development](https://github.com/ysumanth06/spec-kit-sf) | `sf` | Enterprise-Grade Spec-Driven Development (SDD) Framework for Salesforce. | `salesforce`, `enterprise`, `sdlc`, `apex`, `devops` | No | +| [Ship Release Extension](https://github.com/arunt14/spec-kit-ship) | `ship` | Automates release pipeline: pre-flight checks, branch sync, changelog generation, CI verification, and PR creation. | `process`, `release`, `automation` | No | +| [Spec Changelog](https://github.com/Quratulain-bilal/spec-kit-changelog) | `changelog` | Auto-generate changelogs and release notes from spec git history and requirement diffs. | `changelog`, `release-notes`, `documentation`, `git-history`, `notifications` | No | +| [Spec Critique Extension](https://github.com/arunt14/spec-kit-critique) | `critique` | Dual-lens critical review of spec and plan from product strategy and engineering risk perspectives. | `docs`, `review`, `planning` | No | +| [Spec Diagram](https://github.com/Quratulain-bilal/spec-kit-diagram-) | `diagram` | Auto-generate Mermaid diagrams of SDD workflow state, feature progress, and task dependencies. | `diagram`, `mermaid`, `visualization`, `workflow`, `dependencies` | No | +| [Spec Kit Schedule — CP-SAT Agent Orchestrator](https://github.com/jfranc38/spec-kit-schedule) | `schedule` | Optimal multi-agent task scheduling via CP-SAT solver with DAG precedence, hallucination-aware caps, file-conflict avoidance, stochastic durations, replanning, and interactive HTML output | `scheduling`, `optimization`, `multi-agent`, `cp-sat`, `operations-research` | No | +| [Spec Orchestrator](https://github.com/Quratulain-bilal/spec-kit-orchestrator) | `orchestrator` | Cross-feature orchestration — track state, select tasks, and detect conflicts across parallel specs. | `orchestration`, `multi-feature`, `coordination`, `workflow`, `parallel` | No | +| [Spec Reference Loader](https://github.com/KevinBrown5280/spec-kit-spec-reference-loader) | `spec-reference-loader` | Reads the ## References section from the current feature spec and loads the listed files into context | `context`, `references`, `docs`, `hooks` | No | +| [Spec Refine](https://github.com/Quratulain-bilal/spec-kit-refine) | `refine` | Update specs in-place, propagate changes to plan and tasks, and diff impact across artifacts. | `refine`, `iterate`, `propagation`, `workflow`, `specifications` | No | +| [Spec Scope](https://github.com/Quratulain-bilal/spec-kit-scope-) | `scope` | Effort estimation and scope tracking — estimate work, detect creep, and budget time per phase. | `estimation`, `scope`, `effort`, `planning`, `project-management`, `tracking` | No | +| [Spec Sync](https://github.com/bgervin/spec-kit-sync) | `sync` | Detect and resolve drift between specs and implementation. AI-assisted resolution with human approval. | `sync`, `drift`, `validation`, `bidirectional`, `backfill` | No | +| [Spec Validate](https://github.com/aeltayeb/spec-kit-spec-validate) | `spec-validate` | Comprehension validation, review gating, and approval state for spec-kit artifacts — staged-reveal quizzes, peer review SLA, and a hard gate before /speckit.implement. | `validation`, `review`, `quality`, `workflow`, `process` | No | +| [Spec2Cloud](https://github.com/Azure-Samples/Spec2Cloud) | `spec2cloud` | Spec-driven workflow tuned for shipping to Azure: spec → plan → tasks → implement → deploy. | `spec2cloud`, `azure`, `cloud`, `deploy`, `workflow` | No | +| [SpecTest](https://github.com/Quratulain-bilal/spec-kit-spectest) | `spectest` | Auto-generate test scaffolds from spec criteria, map coverage, and find untested requirements. | `testing`, `test-generation`, `coverage`, `quality`, `automation`, `traceability` | No | +| [Squad Bridge](https://github.com/jwill824/spec-kit-squad) | `squad` | Bootstrap and synchronize a Squad agent team from your Spec Kit spec and tasks. | `multi-agent`, `agents`, `orchestration`, `process`, `integration` | No | +| [Staff Review Extension](https://github.com/arunt14/spec-kit-staff-review) | `staff-review` | Staff-engineer-level code review that validates implementation against spec, checks security, performance, and test coverage. | `code`, `review`, `quality` | No | +| [Status Report](https://github.com/Open-Agent-Tools/spec-kit-status) | `status-report` | Project status, feature progress, and next-action recommendations for spec-driven workflows. | `workflow`, `project-management`, `status` | No | +| [Superpowers Bridge](https://github.com/RbBtSn0w/spec-kit-extensions) | `superb` | Orchestrates obra/superpowers skills within the spec-kit SDD workflow. Thin bridge commands delegate to superpowers' authoritative SKILL.md files at runtime (with graceful fallback), while bridge-original commands provide spec-kit-native value. Eight commands cover the full lifecycle: intent clarification, TDD enforcement, task review, verification, critique, systematic debugging, branch completion, and review response. Hook-bound commands fire automatically; standalone commands are invoked when needed. | `methodology`, `tdd`, `code-review`, `workflow`, `superpowers`, `brainstorming`, `verification`, `debugging`, `branch-management` | No | +| [Superpowers Bridge](https://github.com/WangX0111/superspec) | `superpowers-bridge` | Bridges spec-kit workflows with obra/superpowers capabilities for brainstorming, TDD, code review, and resumable execution. | `superpowers`, `brainstorming`, `tdd`, `code-review`, `subagent`, `workflow` | No | +| [TinySpec](https://github.com/Quratulain-bilal/spec-kit-tinyspec) | `tinyspec` | Lightweight single-file workflow for small tasks — skip the heavy multi-step SDD process. | `lightweight`, `small-tasks`, `workflow`, `productivity`, `efficiency` | No | +| [Token Consumption Analyzer](https://github.com/coderandhiker/spec-kit-token-analyzer) | `token-analyzer` | Captures, analyzes, and compares token consumption across SDD workflows | `tokens`, `measurement`, `optimization`, `analysis` | No | +| [V-Model Extension Pack](https://github.com/leocamello/spec-kit-v-model) | `v-model` | Enforces V-Model paired generation of development specs and test specs with full traceability. | `v-model`, `traceability`, `testing`, `compliance`, `safety-critical` | No | +| [Verify Extension](https://github.com/ismaelJimenez/spec-kit-verify) | `verify` | Post-implementation quality gate that validates implemented code against specification artifacts. | `verification`, `quality-gate`, `implementation`, `spec-adherence`, `compliance` | No | +| [Verify Tasks Extension](https://github.com/datastone-inc/spec-kit-verify-tasks) | `verify-tasks` | Detect phantom completions: tasks marked [X] in tasks.md with no real implementation. | `verification`, `quality`, `phantom-completion`, `tasks` | No | +| [Version Guard](https://github.com/KevinBrown5280/spec-kit-version-guard) | `version-guard` | Verify tech stack versions against live registries before planning and implementation | `versioning`, `npm`, `validation`, `hooks` | No | +| [What-if Analysis](https://github.com/DevAbdullah90/spec-kit-whatif) | `whatif` | Preview the downstream impact (complexity, effort, tasks, risks) of requirement changes before committing to them. | `analysis`, `planning`, `simulation` | No | +| [Wireframe Visual Feedback Loop](https://github.com/TortoiseWolfe/spec-kit-extension-wireframe) | `wireframe` | SVG wireframe generation, review, and sign-off for spec-driven development. Approved wireframes become spec constraints honored by /speckit.plan, /speckit.tasks, and /speckit.implement. | `wireframe`, `visual`, `design`, `ui`, `mockup`, `svg`, `feedback-loop`, `sign-off` | No | +| [Work IQ](https://github.com/sakitA/spec-kit-workiq) | `workiq` | Integrate Microsoft 365 organizational knowledge into spec-driven development workflows | `microsoft-365`, `work-iq`, `context`, `integration`, `productivity` | No | +| [Worktree Isolation](https://github.com/Quratulain-bilal/spec-kit-worktree) | `worktree` | Spawn isolated git worktrees for parallel feature development without checkout switching. | `worktree`, `git`, `parallel`, `isolation`, `workflow` | No | +| [Worktrees](https://github.com/dango85/spec-kit-worktree-parallel) | `worktrees` | Default-on worktree isolation for parallel agents — sibling or nested layout | `worktree`, `git`, `parallel`, `isolation`, `agents` | No | + To submit your own extension, see the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md). diff --git a/scripts/generate_community_extensions_index.py b/scripts/generate_community_extensions_index.py new file mode 100644 index 0000000000..49573566eb --- /dev/null +++ b/scripts/generate_community_extensions_index.py @@ -0,0 +1,68 @@ +#!/usr/bin/env python3 +"""Generate docs/community/extensions.md from extensions/catalog.community.json.""" + +from __future__ import annotations + +import argparse +from pathlib import Path +import sys + +ROOT_DIR = Path(__file__).resolve().parents[1] +SRC_DIR = ROOT_DIR / "src" +if str(SRC_DIR) not in sys.path: + sys.path.insert(0, str(SRC_DIR)) + +from specify_cli.community_catalog_docs import ( # noqa: E402 + COMMUNITY_CATALOG_PATH, + COMMUNITY_INDEX_PATH, + render_community_extensions_index, +) + + +def parse_args(argv: list[str]) -> argparse.Namespace: + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--write", + action="store_true", + help="Rewrite docs/community/extensions.md in place", + ) + parser.add_argument( + "--check", + action="store_true", + help="Exit non-zero if the generated file would differ from the committed file", + ) + parser.add_argument( + "--catalog", + type=Path, + default=COMMUNITY_CATALOG_PATH, + help="Path to extensions/catalog.community.json", + ) + parser.add_argument( + "--doc", + type=Path, + default=COMMUNITY_INDEX_PATH, + help="Path to docs/community/extensions.md", + ) + return parser.parse_args(argv) + + +def main(argv: list[str] | None = None) -> int: + args = parse_args(sys.argv[1:] if argv is None else argv) + generated = render_community_extensions_index(args.catalog, args.doc) + + if args.check: + current = args.doc.read_text(encoding="utf-8") + if current != generated: + return 1 + return 0 + + if args.write: + args.doc.write_text(generated, encoding="utf-8") + return 0 + + sys.stdout.write(generated) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/src/specify_cli/community_catalog_docs.py b/src/specify_cli/community_catalog_docs.py new file mode 100644 index 0000000000..5f56d585d7 --- /dev/null +++ b/src/specify_cli/community_catalog_docs.py @@ -0,0 +1,133 @@ +"""Helpers for generating community extension reference docs.""" + +from __future__ import annotations + +import json +from pathlib import Path +from typing import Any + + +ROOT_DIR = Path(__file__).resolve().parents[2] +COMMUNITY_CATALOG_PATH = ROOT_DIR / "extensions" / "catalog.community.json" +COMMUNITY_INDEX_PATH = ROOT_DIR / "docs" / "community" / "extensions.md" + +GENERATED_START_MARKER = "" +GENERATED_END_MARKER = "" + + +def load_community_catalog(path: Path = COMMUNITY_CATALOG_PATH) -> dict[str, Any]: + """Load and validate the community catalog JSON file.""" + data = json.loads(path.read_text(encoding="utf-8")) + if not isinstance(data, dict): + raise ValueError(f"Expected {path} to contain a JSON object") + extensions = data.get("extensions") + if not isinstance(extensions, dict): + raise ValueError(f"Expected {path} to contain an 'extensions' object") + return data + + +def _render_cell(value: str) -> str: + return value.replace("\n", " ") + + +def _format_tags(tags: Any) -> str: + if not isinstance(tags, list) or not tags: + return "—" + cleaned = [f"`{str(tag)}`" for tag in tags if str(tag).strip()] + return ", ".join(cleaned) if cleaned else "—" + + +def iter_community_extensions(catalog: dict[str, Any]) -> list[dict[str, Any]]: + """Return community extensions ordered for the generated index.""" + extensions = catalog.get("extensions", {}) + if not isinstance(extensions, dict): + raise ValueError("Community catalog must contain an 'extensions' object") + + rows: list[dict[str, Any]] = [] + for ext_id, ext in extensions.items(): + if not isinstance(ext, dict): + raise ValueError(f"Community extension {ext_id!r} must be a mapping") + rows.append( + { + "name": str(ext.get("name") or ext_id), + "id": str(ext.get("id") or ext_id), + "description": str(ext.get("description") or ""), + "tags": _format_tags(ext.get("tags")), + "verified": "Yes" if bool(ext.get("verified")) else "No", + "repository": str(ext.get("repository") or ""), + } + ) + + return sorted(rows, key=lambda row: (row["name"].casefold(), row["id"].casefold())) + + +def render_community_extensions_table(catalog: dict[str, Any]) -> str: + """Render the community extensions index table from catalog data.""" + rows = iter_community_extensions(catalog) + if not rows: + raise ValueError("Community catalog has no extensions") + + table_rows: list[list[str]] = [] + for row in rows: + name = ( + f"[{row['name']}]({row['repository']})" + if row["repository"] + else row["name"] + ) + table_rows.append( + [ + name, + f"`{row['id']}`", + row["description"], + row["tags"], + row["verified"], + ] + ) + + widths = [ + max(len(header), *(len(_render_cell(row[index])) for row in table_rows)) + for index, header in enumerate(("Extension", "ID", "Description", "Tags", "Verified")) + ] + + def render_row(values: list[str]) -> str: + return "| " + " | ".join( + _render_cell(value).ljust(widths[index]) for index, value in enumerate(values) + ) + " |" + + lines = [ + render_row(["Extension", "ID", "Description", "Tags", "Verified"]), + "| " + " | ".join("-" * width for width in widths) + " |", + ] + lines.extend(render_row(row) for row in table_rows) + return "\n".join(lines) + + +def render_community_extensions_index( + catalog_path: Path = COMMUNITY_CATALOG_PATH, + doc_path: Path = COMMUNITY_INDEX_PATH, +) -> str: + """Return the community extensions index markdown with the generated table updated.""" + catalog = load_community_catalog(catalog_path) + table = render_community_extensions_table(catalog) + + content = doc_path.read_text(encoding="utf-8") + start = content.find(GENERATED_START_MARKER) + end = content.find(GENERATED_END_MARKER) + if start == -1 or end == -1 or end < start: + raise ValueError(f"Could not find generated table markers in {doc_path}") + + start_end = start + len(GENERATED_START_MARKER) + before = content[:start_end] + after = content[end:] + generated_block = f"\n\n{table}\n" + return before + generated_block + after + + +def update_community_extensions_index( + catalog_path: Path = COMMUNITY_CATALOG_PATH, + doc_path: Path = COMMUNITY_INDEX_PATH, +) -> str: + """Rewrite the community extensions index markdown file and return the new content.""" + updated = render_community_extensions_index(catalog_path, doc_path) + doc_path.write_text(updated, encoding="utf-8") + return updated diff --git a/tests/test_community_catalog_docs.py b/tests/test_community_catalog_docs.py new file mode 100644 index 0000000000..173c00c141 --- /dev/null +++ b/tests/test_community_catalog_docs.py @@ -0,0 +1,46 @@ +from __future__ import annotations + +import subprocess +import sys +from pathlib import Path + +from specify_cli.community_catalog_docs import ( + COMMUNITY_INDEX_PATH, + iter_community_extensions, + load_community_catalog, + render_community_extensions_index, +) + + +ROOT_DIR = Path(__file__).resolve().parents[1] + + +def test_community_extensions_index_matches_generator() -> None: + """The committed community index should stay in sync with the generator.""" + assert COMMUNITY_INDEX_PATH.read_text(encoding="utf-8") == render_community_extensions_index() + + +def test_community_extensions_are_sorted_by_name() -> None: + """The generated index should keep entries in a stable alphabetical order.""" + catalog = load_community_catalog() + rows = iter_community_extensions(catalog) + names = [row["name"] for row in rows] + + assert names == sorted(names, key=str.casefold) + + +def test_community_extensions_generator_check_mode() -> None: + """The CLI check mode should fail when the committed index drifts.""" + result = subprocess.run( + [ + sys.executable, + "scripts/generate_community_extensions_index.py", + "--check", + ], + cwd=ROOT_DIR, + capture_output=True, + text=True, + check=False, + ) + + assert result.returncode == 0, result.stderr or result.stdout From 9d04c2582a474a20fe4a8ebab27303d7904ff21e Mon Sep 17 00:00:00 2001 From: Dyan Galih Date: Thu, 14 May 2026 22:50:44 +0000 Subject: [PATCH 2/6] refactor: integrate table rendering into specify extension search --markdown - Remove standalone scripts/generate_community_extensions_index.py - Strip doc injection machinery from community_catalog_docs.py; keep only table rendering - Rename iter_community_extensions -> list_community_extensions (public, reflects return type) - Fix _render_cell to also normalize \r\n/\r and escape | as \| (parity with catalog_docs.py) - Wire render_community_extensions_table() into new --markdown flag of extension search - Simplify tests: drop subprocess/doc-path tests, keep table rendering and sort tests - Clean up docs/community/extensions.md: remove generated markers, add regen note --- docs/community/extensions.md | 3 +- .../generate_community_extensions_index.py | 68 ------------------ src/specify_cli/__init__.py | 6 ++ src/specify_cli/community_catalog_docs.py | 72 ++++--------------- tests/test_community_catalog_docs.py | 46 +++--------- 5 files changed, 31 insertions(+), 164 deletions(-) delete mode 100644 scripts/generate_community_extensions_index.py diff --git a/docs/community/extensions.md b/docs/community/extensions.md index 73080054f4..1132cef52d 100644 --- a/docs/community/extensions.md +++ b/docs/community/extensions.md @@ -7,7 +7,7 @@ The following community-contributed extensions are available in [`catalog.community.json`](https://github.com/github/spec-kit/blob/main/extensions/catalog.community.json): - +> Run `specify extension search --markdown` to regenerate this table. | Extension | ID | Description | Tags | Verified | | ----------------------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------- | @@ -109,6 +109,5 @@ The following community-contributed extensions are available in [`catalog.commun | [Work IQ](https://github.com/sakitA/spec-kit-workiq) | `workiq` | Integrate Microsoft 365 organizational knowledge into spec-driven development workflows | `microsoft-365`, `work-iq`, `context`, `integration`, `productivity` | No | | [Worktree Isolation](https://github.com/Quratulain-bilal/spec-kit-worktree) | `worktree` | Spawn isolated git worktrees for parallel feature development without checkout switching. | `worktree`, `git`, `parallel`, `isolation`, `workflow` | No | | [Worktrees](https://github.com/dango85/spec-kit-worktree-parallel) | `worktrees` | Default-on worktree isolation for parallel agents — sibling or nested layout | `worktree`, `git`, `parallel`, `isolation`, `agents` | No | - To submit your own extension, see the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md). diff --git a/scripts/generate_community_extensions_index.py b/scripts/generate_community_extensions_index.py deleted file mode 100644 index 49573566eb..0000000000 --- a/scripts/generate_community_extensions_index.py +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env python3 -"""Generate docs/community/extensions.md from extensions/catalog.community.json.""" - -from __future__ import annotations - -import argparse -from pathlib import Path -import sys - -ROOT_DIR = Path(__file__).resolve().parents[1] -SRC_DIR = ROOT_DIR / "src" -if str(SRC_DIR) not in sys.path: - sys.path.insert(0, str(SRC_DIR)) - -from specify_cli.community_catalog_docs import ( # noqa: E402 - COMMUNITY_CATALOG_PATH, - COMMUNITY_INDEX_PATH, - render_community_extensions_index, -) - - -def parse_args(argv: list[str]) -> argparse.Namespace: - parser = argparse.ArgumentParser(description=__doc__) - parser.add_argument( - "--write", - action="store_true", - help="Rewrite docs/community/extensions.md in place", - ) - parser.add_argument( - "--check", - action="store_true", - help="Exit non-zero if the generated file would differ from the committed file", - ) - parser.add_argument( - "--catalog", - type=Path, - default=COMMUNITY_CATALOG_PATH, - help="Path to extensions/catalog.community.json", - ) - parser.add_argument( - "--doc", - type=Path, - default=COMMUNITY_INDEX_PATH, - help="Path to docs/community/extensions.md", - ) - return parser.parse_args(argv) - - -def main(argv: list[str] | None = None) -> int: - args = parse_args(sys.argv[1:] if argv is None else argv) - generated = render_community_extensions_index(args.catalog, args.doc) - - if args.check: - current = args.doc.read_text(encoding="utf-8") - if current != generated: - return 1 - return 0 - - if args.write: - args.doc.write_text(generated, encoding="utf-8") - return 0 - - sys.stdout.write(generated) - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index f97dbde09f..def7078ff2 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -3985,8 +3985,14 @@ def extension_search( tag: Optional[str] = typer.Option(None, "--tag", help="Filter by tag"), author: Optional[str] = typer.Option(None, "--author", help="Filter by author"), verified: bool = typer.Option(False, "--verified", help="Show only verified extensions"), + markdown: bool = typer.Option(False, "--markdown", help="Output results as a markdown table"), ): """Search for available extensions in catalog.""" + if markdown: + from .community_catalog_docs import render_community_extensions_table + typer.echo(render_community_extensions_table()) + return + from .extensions import ExtensionCatalog, ExtensionError project_root = _require_specify_project() diff --git a/src/specify_cli/community_catalog_docs.py b/src/specify_cli/community_catalog_docs.py index 5f56d585d7..7e3055e74b 100644 --- a/src/specify_cli/community_catalog_docs.py +++ b/src/specify_cli/community_catalog_docs.py @@ -1,4 +1,4 @@ -"""Helpers for generating community extension reference docs.""" +"""Helpers for rendering the community extensions reference table.""" from __future__ import annotations @@ -9,25 +9,10 @@ ROOT_DIR = Path(__file__).resolve().parents[2] COMMUNITY_CATALOG_PATH = ROOT_DIR / "extensions" / "catalog.community.json" -COMMUNITY_INDEX_PATH = ROOT_DIR / "docs" / "community" / "extensions.md" - -GENERATED_START_MARKER = "" -GENERATED_END_MARKER = "" - - -def load_community_catalog(path: Path = COMMUNITY_CATALOG_PATH) -> dict[str, Any]: - """Load and validate the community catalog JSON file.""" - data = json.loads(path.read_text(encoding="utf-8")) - if not isinstance(data, dict): - raise ValueError(f"Expected {path} to contain a JSON object") - extensions = data.get("extensions") - if not isinstance(extensions, dict): - raise ValueError(f"Expected {path} to contain an 'extensions' object") - return data def _render_cell(value: str) -> str: - return value.replace("\n", " ") + return value.replace("\r\n", " ").replace("\r", " ").replace("\n", " ").replace("|", "\\|") def _format_tags(tags: Any) -> str: @@ -37,11 +22,14 @@ def _format_tags(tags: Any) -> str: return ", ".join(cleaned) if cleaned else "—" -def iter_community_extensions(catalog: dict[str, Any]) -> list[dict[str, Any]]: - """Return community extensions ordered for the generated index.""" - extensions = catalog.get("extensions", {}) +def list_community_extensions() -> list[dict[str, Any]]: + """Return community extensions sorted alphabetically by name then ID.""" + data = json.loads(COMMUNITY_CATALOG_PATH.read_text(encoding="utf-8")) + if not isinstance(data, dict): + raise ValueError(f"Expected {COMMUNITY_CATALOG_PATH} to contain a JSON object") + extensions = data.get("extensions", {}) if not isinstance(extensions, dict): - raise ValueError("Community catalog must contain an 'extensions' object") + raise ValueError(f"Expected {COMMUNITY_CATALOG_PATH} to contain an 'extensions' object") rows: list[dict[str, Any]] = [] for ext_id, ext in extensions.items(): @@ -61,9 +49,9 @@ def iter_community_extensions(catalog: dict[str, Any]) -> list[dict[str, Any]]: return sorted(rows, key=lambda row: (row["name"].casefold(), row["id"].casefold())) -def render_community_extensions_table(catalog: dict[str, Any]) -> str: - """Render the community extensions index table from catalog data.""" - rows = iter_community_extensions(catalog) +def render_community_extensions_table() -> str: + """Render the community extensions table from catalog.community.json.""" + rows = list_community_extensions() if not rows: raise ValueError("Community catalog has no extensions") @@ -84,9 +72,10 @@ def render_community_extensions_table(catalog: dict[str, Any]) -> str: ] ) + headers = ("Extension", "ID", "Description", "Tags", "Verified") widths = [ max(len(header), *(len(_render_cell(row[index])) for row in table_rows)) - for index, header in enumerate(("Extension", "ID", "Description", "Tags", "Verified")) + for index, header in enumerate(headers) ] def render_row(values: list[str]) -> str: @@ -95,39 +84,8 @@ def render_row(values: list[str]) -> str: ) + " |" lines = [ - render_row(["Extension", "ID", "Description", "Tags", "Verified"]), + render_row(list(headers)), "| " + " | ".join("-" * width for width in widths) + " |", ] lines.extend(render_row(row) for row in table_rows) return "\n".join(lines) - - -def render_community_extensions_index( - catalog_path: Path = COMMUNITY_CATALOG_PATH, - doc_path: Path = COMMUNITY_INDEX_PATH, -) -> str: - """Return the community extensions index markdown with the generated table updated.""" - catalog = load_community_catalog(catalog_path) - table = render_community_extensions_table(catalog) - - content = doc_path.read_text(encoding="utf-8") - start = content.find(GENERATED_START_MARKER) - end = content.find(GENERATED_END_MARKER) - if start == -1 or end == -1 or end < start: - raise ValueError(f"Could not find generated table markers in {doc_path}") - - start_end = start + len(GENERATED_START_MARKER) - before = content[:start_end] - after = content[end:] - generated_block = f"\n\n{table}\n" - return before + generated_block + after - - -def update_community_extensions_index( - catalog_path: Path = COMMUNITY_CATALOG_PATH, - doc_path: Path = COMMUNITY_INDEX_PATH, -) -> str: - """Rewrite the community extensions index markdown file and return the new content.""" - updated = render_community_extensions_index(catalog_path, doc_path) - doc_path.write_text(updated, encoding="utf-8") - return updated diff --git a/tests/test_community_catalog_docs.py b/tests/test_community_catalog_docs.py index 173c00c141..fa23101718 100644 --- a/tests/test_community_catalog_docs.py +++ b/tests/test_community_catalog_docs.py @@ -1,46 +1,18 @@ from __future__ import annotations -import subprocess -import sys -from pathlib import Path +from specify_cli.community_catalog_docs import list_community_extensions, render_community_extensions_table -from specify_cli.community_catalog_docs import ( - COMMUNITY_INDEX_PATH, - iter_community_extensions, - load_community_catalog, - render_community_extensions_index, -) - -ROOT_DIR = Path(__file__).resolve().parents[1] - - -def test_community_extensions_index_matches_generator() -> None: - """The committed community index should stay in sync with the generator.""" - assert COMMUNITY_INDEX_PATH.read_text(encoding="utf-8") == render_community_extensions_index() +def test_community_extensions_table_renders() -> None: + table = render_community_extensions_table() + assert "| Extension" in table + assert "| ID" in table + assert "| Description" in table + assert "| Tags" in table + assert "| Verified" in table def test_community_extensions_are_sorted_by_name() -> None: - """The generated index should keep entries in a stable alphabetical order.""" - catalog = load_community_catalog() - rows = iter_community_extensions(catalog) + rows = list_community_extensions() names = [row["name"] for row in rows] - assert names == sorted(names, key=str.casefold) - - -def test_community_extensions_generator_check_mode() -> None: - """The CLI check mode should fail when the committed index drifts.""" - result = subprocess.run( - [ - sys.executable, - "scripts/generate_community_extensions_index.py", - "--check", - ], - cwd=ROOT_DIR, - capture_output=True, - text=True, - check=False, - ) - - assert result.returncode == 0, result.stderr or result.stdout From c666109cbdce87ebd50ae676b89476b23a762489 Mon Sep 17 00:00:00 2001 From: Dyan Galih Date: Thu, 14 May 2026 22:55:21 +0000 Subject: [PATCH 3/6] fix: address Copilot review feedback on community_catalog_docs - Restore em dash in docs/community/extensions.md (was accidentally changed to hyphen) - Move _format_tags() call from list_community_extensions() to render layer: list_community_extensions() now returns raw tags list (data-pure); render_community_extensions_table() formats tags at render time --- docs/community/extensions.md | 2 +- src/specify_cli/community_catalog_docs.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/community/extensions.md b/docs/community/extensions.md index 1132cef52d..750a59f08d 100644 --- a/docs/community/extensions.md +++ b/docs/community/extensions.md @@ -1,7 +1,7 @@ # Community Extensions > [!NOTE] -> Community extensions are independently created and maintained by their respective authors. Maintainers only verify that catalog entries are complete and correctly formatted - they do **not review, audit, endorse, or support the extension code itself**. The Community Extensions website is also a third-party resource. Review extension source code before installation and use at your own discretion. +> Community extensions are independently created and maintained by their respective authors. Maintainers only verify that catalog entries are complete and correctly formatted — they do **not review, audit, endorse, or support the extension code itself**. The Community Extensions website is also a third-party resource. Review extension source code before installation and use at your own discretion. 🔍 **Browse and search community extensions on the [Community Extensions website](https://speckit-community.github.io/extensions/).** diff --git a/src/specify_cli/community_catalog_docs.py b/src/specify_cli/community_catalog_docs.py index 7e3055e74b..fd1053c9ad 100644 --- a/src/specify_cli/community_catalog_docs.py +++ b/src/specify_cli/community_catalog_docs.py @@ -40,7 +40,7 @@ def list_community_extensions() -> list[dict[str, Any]]: "name": str(ext.get("name") or ext_id), "id": str(ext.get("id") or ext_id), "description": str(ext.get("description") or ""), - "tags": _format_tags(ext.get("tags")), + "tags": ext.get("tags") or [], "verified": "Yes" if bool(ext.get("verified")) else "No", "repository": str(ext.get("repository") or ""), } @@ -67,7 +67,7 @@ def render_community_extensions_table() -> str: name, f"`{row['id']}`", row["description"], - row["tags"], + _format_tags(row["tags"]), row["verified"], ] ) From 0cb36ea567dedd4ba84ad01bd5dc088092a1475c Mon Sep 17 00:00:00 2001 From: Dyan Galih Date: Thu, 14 May 2026 23:03:43 +0000 Subject: [PATCH 4/6] fix: address second round of Copilot review feedback on community_catalog_docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove width-padding from render_community_extensions_table(); use simple '| value |' separators — Markdown ignores column alignment padding and it inflates diff noise considerably (r3244775940) - Strip '|' from tag values in _format_tags() so tags wrapped in backtick code spans don't produce malformed escaped sequences like '\|' inside code spans (r3244775963) - Add FileNotFoundError with actionable message when catalog file is missing (e.g. when package is installed via pip/pipx outside a source checkout) (r3244775915) - Warn when --markdown is combined with filters (query/--tag/--author/--verified) which are silently ignored; catch ValueError/FileNotFoundError and surface clean error via console instead of raw traceback (r3244775855, r3244775979) - Add 9 edge-case tests covering: missing file, malformed JSON, non-dict root, missing extensions key, non-dict extension value, empty catalog, missing repository, tags with pipes, and non-list tags (r3244776046) - Regenerate docs/community/extensions.md with compact table format --- docs/community/extensions.md | 201 +++++++++++----------- src/specify_cli/__init__.py | 11 +- src/specify_cli/community_catalog_docs.py | 26 ++- tests/test_community_catalog_docs.py | 94 ++++++++++ 4 files changed, 216 insertions(+), 116 deletions(-) diff --git a/docs/community/extensions.md b/docs/community/extensions.md index 750a59f08d..7558dbd5b1 100644 --- a/docs/community/extensions.md +++ b/docs/community/extensions.md @@ -9,105 +9,104 @@ The following community-contributed extensions are available in [`catalog.commun > Run `specify extension search --markdown` to regenerate this table. -| Extension | ID | Description | Tags | Verified | -| ----------------------------------------------------------------------------------------------- | ----------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- | -------- | -| [.NET Framework to Modern .NET Migration](https://github.com/RogerBestMsft/spec-kit-FxToNet) | `fx-to-dotnet` | Orchestrate end-to-end .NET Framework to modern .NET migration across 7 phases, with SDD lifecycle integration. | `dotnet`, `migration`, `modernization`, `framework`, `aspnet`, `shared-artifact` | No | -| [Agent Assign](https://github.com/xymelon/spec-kit-agent-assign) | `agent-assign` | Assign specialized Claude Code agents to spec-kit tasks for targeted execution | `agent`, `automation`, `implementation`, `multi-agent`, `task-routing` | No | -| [Agent Governance](https://github.com/bigsmartben/spec-kit-agent-governance) | `agent-governance` | Project-local agent governance memory and context projection. | `governance`, `agents`, `memory`, `context` | No | -| [AI-Driven Engineering (AIDE)](https://github.com/mnriem/spec-kit-extensions) | `aide` | A structured 7-step workflow for building new projects from scratch with AI assistants — from vision through implementation. | `workflow`, `project-management`, `ai-driven`, `new-project`, `planning`, `experimental` | No | -| [API Evolve](https://github.com/Quratulain-bilal/spec-kit-api-evolve) | `api-evolve` | Managed API contract evolution — breaking-change detection, semver enforcement, deprecation orchestration, and lifecycle gates across REST, GraphQL, and gRPC. | `api`, `contracts`, `versioning`, `openapi`, `graphql`, `grpc`, `deprecation`, `breaking-changes`, `semver`, `governance` | No | -| [Architect Impact Previewer](https://github.com/UmmeHabiba1312/spec-kit-architect-preview) | `architect-preview` | Predicts architectural impact, complexity, and risks of proposed changes before implementation. | `architecture`, `analysis`, `risk-assessment`, `planning`, `preview` | No | -| [Architecture Guard](https://github.com/DyanGalih/spec-kit-architecture-guard) | `architecture-guard` | Continuous architecture governance for AI-assisted development. Reviews specs, plans, and code for architecture drift, producing structured refactor tasks and evolution proposals. | `architecture`, `governance`, `drift-detection`, `refactor`, `monolithic`, `microservices` | No | -| [Archive Extension](https://github.com/stn1slv/spec-kit-archive) | `archive` | Archive merged features into main project memory, resolving gaps and conflicts. | `archive`, `memory`, `merge`, `changelog` | No | -| [Azure DevOps Integration](https://github.com/pragya247/spec-kit-azure-devops) | `azure-devops` | Sync user stories and tasks to Azure DevOps work items using OAuth authentication. | `azure`, `devops`, `project-management`, `work-items`, `issue-tracking` | No | -| [Blueprint](https://github.com/chordpli/spec-kit-blueprint) | `blueprint` | Stay code-literate in AI-driven development: review a complete code blueprint for every task from spec artifacts before /speckit.implement runs | `blueprint`, `pre-implementation`, `review`, `scaffolding`, `code-literacy` | No | -| [Branch Convention](https://github.com/Quratulain-bilal/spec-kit-branch-convention) | `branch-convention` | Configurable branch and folder naming conventions for /specify with presets and custom patterns. | `branch`, `naming`, `convention`, `gitflow`, `workflow` | No | -| [Brownfield Bootstrap](https://github.com/Quratulain-bilal/spec-kit-brownfield) | `brownfield` | Bootstrap spec-kit for existing codebases — auto-discover architecture and adopt SDD incrementally. | `brownfield`, `bootstrap`, `existing-project`, `migration`, `onboarding` | No | -| [BrownKit — Brownfield Discovery for Spec-Kit](https://github.com/MaksimShevtsov/BrownKit) | `brownkit` | Evidence-driven capability discovery, security and QA risk assessment for existing codebases. | `brownfield`, `discovery`, `security`, `qa`, `capabilities` | No | -| [Bugfix Workflow](https://github.com/Quratulain-bilal/spec-kit-bugfix) | `bugfix` | Structured bugfix workflow — capture bugs, trace to spec artifacts, and patch specs surgically. | `bugfix`, `debugging`, `workflow`, `traceability`, `maintenance` | No | -| [Canon](https://github.com/maximiliamus/spec-kit-canon) | `canon` | Adds canon-driven (baseline-driven) workflows: spec-first, code-first, spec-drift. Requires Canon Core preset installation. | `process`, `baseline`, `canon`, `drift`, `spec-first`, `code-first`, `spec-drift`, `vibecoding` | No | -| [Catalog CI](https://github.com/Quratulain-bilal/spec-kit-catalog-ci) | `catalog-ci` | Automated validation for spec-kit community catalog entries — structure, URLs, diffs, and linting. | `ci`, `validation`, `catalog`, `quality`, `automation` | No | -| [Checkpoint Extension](https://github.com/aaronrsun/spec-kit-checkpoint) | `checkpoint` | An extension to commit the changes made during the middle of the implementation, so you don't end up with just one very large commit at the end. | `checkpoint`, `commit` | No | -| [CI Guard](https://github.com/Quratulain-bilal/spec-kit-ci-guard) | `ci-guard` | Spec compliance gates for CI/CD — verify specs exist, check drift, and block merges on gaps. | `ci-cd`, `compliance`, `governance`, `quality-gate`, `drift-detection`, `automation` | No | -| [Cleanup Extension](https://github.com/dsrednicki/spec-kit-cleanup) | `cleanup` | Post-implementation quality gate that reviews changes, fixes small issues (scout rule), creates tasks for medium issues, and generates analysis for large issues. | `quality`, `tech-debt`, `review`, `cleanup`, `scout-rule` | No | -| [Conduct Extension](https://github.com/twbrandon7/spec-kit-conduct-ext) | `conduct` | Executes a single spec-kit phase via sub-agent delegation to reduce context pollution. | `conduct`, `workflow`, `automation` | No | -| [Confluence Extension](https://github.com/aaronrsun/spec-kit-confluence) | `confluence` | Create, read, and update Confluence docs for your project | `confluence` | No | -| [Cost Tracker](https://github.com/Quratulain-bilal/spec-kit-cost) | `cost` | Track real LLM dollar cost across SDD workflows — per-feature budgets, per-integration comparison, and finance-ready exports. | `cost`, `budget`, `tokens`, `visibility`, `finance` | No | -| [DocGuard — CDD Enforcement](https://github.com/raccioly/docguard) | `docguard` | Canonical-Driven Development enforcement. Validates, scores, and traces project documentation with automated checks, AI-driven workflows, and spec-kit hooks. Zero NPM runtime dependencies. | `documentation`, `validation`, `quality`, `cdd`, `traceability`, `ai-agents`, `enforcement`, `spec-kit` | No | -| [Extensify](https://github.com/mnriem/spec-kit-extensions) | `extensify` | Create and validate extensions and extension catalogs. | `extensions`, `workflow`, `validation`, `experimental` | No | -| [Fix Findings](https://github.com/Quratulain-bilal/spec-kit-fix-findings) | `fix-findings` | Automated analyze-fix-reanalyze loop that resolves spec findings until clean. | `code`, `analysis`, `quality`, `automation`, `findings` | No | -| [FixIt Extension](https://github.com/speckit-community/spec-kit-fixit) | `fixit` | Spec-aware bug fixing: maps bugs to spec artifacts, proposes a plan, applies minimal changes. | `debugging`, `fixit`, `spec-alignment`, `post-implementation` | No | -| [Fleet Orchestrator](https://github.com/sharathsatish/spec-kit-fleet) | `fleet` | Orchestrate a full feature lifecycle with human-in-the-loop gates across all SpecKit phases. | `orchestration`, `workflow`, `human-in-the-loop`, `parallel` | No | -| [GitHub Issues Integration 1](https://github.com/Fatima367/spec-kit-github-issues) | `github-issues` | Generate spec artifacts from GitHub Issues - import issues, sync updates, and maintain bidirectional traceability | `integration`, `github`, `issues`, `import`, `sync`, `traceability` | No | -| [GitHub Issues Integration 2](https://github.com/aaronrsun/spec-kit-issue) | `issue` | Creates and syncs local specs based on an existing issue in GitHub | `issue`, `integration`, `github`, `issues`, `sync` | No | -| [Intelligent Agent Orchestrator](https://github.com/pragya247/spec-kit-orchestrator) | `agent-orchestrator` | Cross-catalog agent discovery and intelligent prompt-to-command routing | `orchestrator`, `routing`, `discovery`, `agent`, `ai` | No | -| [Iterate](https://github.com/imviancagrace/spec-kit-iterate) | `iterate` | Iterate on spec documents with a two-phase define-and-apply workflow — refine specs mid-implementation and go straight back to building | `iteration`, `change-management`, `spec-maintenance` | No | -| [Jira Integration](https://github.com/mbachorik/spec-kit-jira) | `jira` | Create Jira Epics, Stories, and Issues from spec-kit specifications and task breakdowns with configurable hierarchy and custom field support. | `issue-tracking`, `jira`, `atlassian`, `project-management` | No | -| [Learning Extension](https://github.com/imviancagrace/spec-kit-learn) | `learn` | Generate educational guides from implementations and enhance clarifications with mentoring context. | `learning`, `education`, `mentoring`, `knowledge-transfer` | No | -| [MAQA Azure DevOps Integration](https://github.com/GenieRobot/spec-kit-maqa-azure-devops) | `maqa-azure-devops` | Azure DevOps Boards integration for the MAQA extension. Populates work items from specs, moves User Stories across columns as features progress, real-time Task child ticking. | `azure-devops`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | -| [MAQA CI/CD Gate](https://github.com/GenieRobot/spec-kit-maqa-ci) | `maqa-ci` | CI/CD pipeline gate for the MAQA extension. Auto-detects GitHub Actions, CircleCI, GitLab CI, and Bitbucket Pipelines. Blocks QA handoff until pipeline is green. | `ci-cd`, `github-actions`, `circleci`, `gitlab-ci`, `quality-gate`, `maqa` | No | -| [MAQA GitHub Projects Integration](https://github.com/GenieRobot/spec-kit-maqa-github-projects) | `maqa-github-projects` | GitHub Projects v2 integration for the MAQA extension. Populates draft issues from specs, moves items across Status columns as features progress, real-time task list ticking. | `github-projects`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | -| [MAQA Jira Integration](https://github.com/GenieRobot/spec-kit-maqa-jira) | `maqa-jira` | Jira integration for the MAQA extension. Populates Stories from specs, moves issues across board columns as features progress, real-time Subtask ticking. | `jira`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | -| [MAQA Linear Integration](https://github.com/GenieRobot/spec-kit-maqa-linear) | `maqa-linear` | Linear integration for the MAQA extension. Populates issues from specs, moves items across workflow states as features progress, real-time sub-issue ticking. | `linear`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | -| [MAQA Trello Integration](https://github.com/GenieRobot/spec-kit-maqa-trello) | `maqa-trello` | Trello board integration for the MAQA extension. Populates board from specs, moves cards between lists as features progress, real-time checklist ticking. | `trello`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | -| [MAQA — Multi-Agent & Quality Assurance](https://github.com/GenieRobot/spec-kit-maqa-ext) | `maqa` | Coordinator → feature → QA agent workflow with parallel worktree-based implementation. Language-agnostic. Auto-detects installed board plugins (Trello, Linear, GitHub Projects, Jira, Azure DevOps). Optional CI gate. | `multi-agent`, `orchestration`, `quality-assurance`, `workflow`, `parallel`, `tdd` | No | -| [MarkItDown Document Converter](https://github.com/BenBtg/spec-kit-markitdown) | `markitdown` | Convert documents (PDF, Word, PowerPoint, Excel, and more) to Markdown for use as spec reference material in Spec Kit workflows. | `markdown`, `pdf`, `document-conversion`, `reference-material`, `extraction` | No | -| [MDE](https://github.com/AI-MDE/spec-kit-mde) | `mde` | A Spec Kit extension that exposes a minimal model-driven engineering workflow with setup, next, and status commands. | `mde`, `model-driven-engineering`, `workflow`, `process` | No | -| [Memory Loader](https://github.com/KevinBrown5280/spec-kit-memory-loader) | `memory-loader` | Loads .specify/memory/ files before spec-kit lifecycle commands so LLM agents have project governance context | `context`, `memory`, `governance`, `hooks` | No | -| [Memory MD](https://github.com/DyanGalih/spec-kit-memory-hub) | `memory-md` | Spec Kit extension for repository-native Markdown memory that captures durable decisions, bugs, and project context | `memory`, `workflow`, `docs`, `copilot`, `markdown`, `ai-context` | No | -| [MemoryLint](https://github.com/RbBtSn0w/spec-kit-extensions) | `memorylint` | Agent memory governance tool: Automatically audits and fixes boundary conflicts between AGENTS.md and the constitution. | `memory`, `governance`, `constitution`, `agents-md`, `process` | No | -| [Microsoft 365 Integration](https://github.com/BenBtg/spec-kit-m365) | `m365` | Fetch Teams messages, meeting transcripts, and SharePoint/OneDrive files as local Markdown for spec generation. | `microsoft-365`, `teams`, `transcripts`, `collaboration`, `summarization` | No | -| [Multi-Model Review](https://github.com/formin/multi-model-review) | `multi-model-review` | Cross-model Spec Kit handoffs for spec authoring, implementation routing, and review. | `review`, `workflow`, `multi-model`, `spec-driven-development`, `code` | No | -| [Onboard](https://github.com/dmux/spec-kit-onboard) | `onboard` | Contextual onboarding and progressive growth for developers new to spec-kit projects. Explains specs, maps dependencies, validates understanding, and guides the next step. | `onboarding`, `learning`, `mentoring`, `developer-experience`, `gamification`, `knowledge-transfer` | No | -| [Optimize Extension](https://github.com/sakitA/spec-kit-optimize) | `optimize` | Audits and optimizes AI governance for context efficiency | `constitution`, `optimization`, `token-budget`, `governance`, `audit` | No | -| [OWASP LLM Threat Model](https://github.com/NaviaSamal/spec-kit-threatmodel) | `threatmodel` | OWASP Top 10 for LLM Applications 2025 threat analysis on agent artifacts | `security`, `owasp`, `threat-model`, `llm`, `analysis` | No | -| [Plan Review Gate](https://github.com/luno/spec-kit-plan-review-gate) | `plan-review-gate` | Require spec.md and plan.md to be merged via MR/PR before allowing task generation | `review`, `quality`, `workflow`, `gate` | No | -| [PR Bridge](https://github.com/Quratulain-bilal/spec-kit-pr-bridge-) | `pr-bridge` | Auto-generate pull request descriptions, checklists, and summaries from spec artifacts. | `pull-request`, `automation`, `traceability`, `workflow`, `review` | No | -| [Presetify](https://github.com/mnriem/spec-kit-extensions) | `presetify` | Create and validate presets and preset catalogs. | `presets`, `workflow`, `templates`, `experimental` | No | -| [Product Forge](https://github.com/VaiYav/speckit-product-forge) | `product-forge` | Full product lifecycle from research to release — portfolio, lite mode, monorepo, optional V-Model | `process`, `lifecycle`, `monorepo`, `v-model`, `portfolio` | No | -| [Project Health Check](https://github.com/KhawarHabibKhan/spec-kit-doctor) | `doctor` | Diagnose a Spec Kit project and report health issues across structure, agents, features, scripts, extensions, and git. | `diagnostics`, `health-check`, `validation`, `project-structure` | No | -| [Project Status](https://github.com/KhawarHabibKhan/spec-kit-status) | `status` | Show current SDD workflow progress — active feature, artifact status, task completion, workflow phase, and extensions summary. | `status`, `workflow`, `progress`, `feature-tracking`, `task-progress` | No | -| [QA Testing Extension](https://github.com/arunt14/spec-kit-qa) | `qa` | Systematic QA testing with browser-driven or CLI-based validation of acceptance criteria from spec. | `code`, `testing`, `qa` | No | -| [Ralph Loop](https://github.com/Rubiss-Projects/spec-kit-ralph) | `ralph` | Autonomous implementation loop using AI agent CLI. | `implementation`, `automation`, `loop`, `copilot` | No | -| [Reconcile Extension](https://github.com/stn1slv/spec-kit-reconcile) | `reconcile` | Reconcile implementation drift by surgically updating the feature's own spec, plan, and tasks. | `reconcile`, `drift`, `tasks`, `remediation` | No | -| [Red Team](https://github.com/ashbrener/spec-kit-red-team) | `red-team` | Adversarial review of functional specs before /speckit.plan. Parallel adversarial lens agents catch hostile actors, silent failures, and regulatory blind spots that clarify/analyze cannot. | `adversarial-review`, `quality-gate`, `spec-hardening`, `pre-plan`, `audit` | No | -| [Repository Index](https://github.com/liuyiyu/spec-kit-repoindex) | `repoindex` | Generate index of your repo for overview, architecture and module | `utility`, `brownfield`, `analysis` | No | -| [Reqnroll BDD](https://github.com/LoogacyStudio/spec-kit-reqnroll-bdd) | `reqnroll-bdd` | Adds Reqnroll BDD planning, Gherkin generation, traceability, safe task injection, handoff, and verification to Spec Kit. | `bdd`, `reqnroll`, `dotnet`, `gherkin`, `acceptance-testing` | No | -| [Retro Extension](https://github.com/arunt14/spec-kit-retro) | `retro` | Sprint retrospective analysis with metrics, spec accuracy assessment, and improvement suggestions. | `process`, `retrospective`, `metrics` | No | -| [Retrospective Extension](https://github.com/emi-dm/spec-kit-retrospective) | `retrospective` | Post-implementation retrospective with spec adherence scoring, drift analysis, and human-gated spec updates. | `retrospective`, `spec-drift`, `quality`, `analysis`, `governance` | No | -| [Review Extension](https://github.com/ismaelJimenez/spec-kit-review) | `review` | Post-implementation comprehensive code review with specialized agents for code quality, comments, tests, error handling, type design, and simplification. | `code-review`, `quality`, `review`, `testing`, `error-handling`, `type-design`, `simplification` | No | -| [Ripple](https://github.com/chordpli/spec-kit-ripple) | `ripple` | Detect side effects that tests can't catch after implementation — delta-anchored analysis across 9 domain-agnostic categories with fix-induced side effect detection | `side-effects`, `post-implementation`, `analysis`, `quality`, `risk-detection` | No | -| [SDD Utilities](https://github.com/mvanhorn/speckit-utils) | `speckit-utils` | Resume interrupted workflows, validate project health, and verify spec-to-task traceability. | `resume`, `doctor`, `validate`, `workflow`, `health-check` | No | -| [Security Review](https://github.com/DyanGalih/spec-kit-security-review) | `security-review` | Full-project secure-by-design security audits plus staged, branch/PR, plan, task, follow-up, and apply reviews | `security`, `devsecops`, `audit`, `owasp`, `compliance` | No | -| [SFSpeckit — Salesforce Spec-Driven Development](https://github.com/ysumanth06/spec-kit-sf) | `sf` | Enterprise-Grade Spec-Driven Development (SDD) Framework for Salesforce. | `salesforce`, `enterprise`, `sdlc`, `apex`, `devops` | No | -| [Ship Release Extension](https://github.com/arunt14/spec-kit-ship) | `ship` | Automates release pipeline: pre-flight checks, branch sync, changelog generation, CI verification, and PR creation. | `process`, `release`, `automation` | No | -| [Spec Changelog](https://github.com/Quratulain-bilal/spec-kit-changelog) | `changelog` | Auto-generate changelogs and release notes from spec git history and requirement diffs. | `changelog`, `release-notes`, `documentation`, `git-history`, `notifications` | No | -| [Spec Critique Extension](https://github.com/arunt14/spec-kit-critique) | `critique` | Dual-lens critical review of spec and plan from product strategy and engineering risk perspectives. | `docs`, `review`, `planning` | No | -| [Spec Diagram](https://github.com/Quratulain-bilal/spec-kit-diagram-) | `diagram` | Auto-generate Mermaid diagrams of SDD workflow state, feature progress, and task dependencies. | `diagram`, `mermaid`, `visualization`, `workflow`, `dependencies` | No | -| [Spec Kit Schedule — CP-SAT Agent Orchestrator](https://github.com/jfranc38/spec-kit-schedule) | `schedule` | Optimal multi-agent task scheduling via CP-SAT solver with DAG precedence, hallucination-aware caps, file-conflict avoidance, stochastic durations, replanning, and interactive HTML output | `scheduling`, `optimization`, `multi-agent`, `cp-sat`, `operations-research` | No | -| [Spec Orchestrator](https://github.com/Quratulain-bilal/spec-kit-orchestrator) | `orchestrator` | Cross-feature orchestration — track state, select tasks, and detect conflicts across parallel specs. | `orchestration`, `multi-feature`, `coordination`, `workflow`, `parallel` | No | -| [Spec Reference Loader](https://github.com/KevinBrown5280/spec-kit-spec-reference-loader) | `spec-reference-loader` | Reads the ## References section from the current feature spec and loads the listed files into context | `context`, `references`, `docs`, `hooks` | No | -| [Spec Refine](https://github.com/Quratulain-bilal/spec-kit-refine) | `refine` | Update specs in-place, propagate changes to plan and tasks, and diff impact across artifacts. | `refine`, `iterate`, `propagation`, `workflow`, `specifications` | No | -| [Spec Scope](https://github.com/Quratulain-bilal/spec-kit-scope-) | `scope` | Effort estimation and scope tracking — estimate work, detect creep, and budget time per phase. | `estimation`, `scope`, `effort`, `planning`, `project-management`, `tracking` | No | -| [Spec Sync](https://github.com/bgervin/spec-kit-sync) | `sync` | Detect and resolve drift between specs and implementation. AI-assisted resolution with human approval. | `sync`, `drift`, `validation`, `bidirectional`, `backfill` | No | -| [Spec Validate](https://github.com/aeltayeb/spec-kit-spec-validate) | `spec-validate` | Comprehension validation, review gating, and approval state for spec-kit artifacts — staged-reveal quizzes, peer review SLA, and a hard gate before /speckit.implement. | `validation`, `review`, `quality`, `workflow`, `process` | No | -| [Spec2Cloud](https://github.com/Azure-Samples/Spec2Cloud) | `spec2cloud` | Spec-driven workflow tuned for shipping to Azure: spec → plan → tasks → implement → deploy. | `spec2cloud`, `azure`, `cloud`, `deploy`, `workflow` | No | -| [SpecTest](https://github.com/Quratulain-bilal/spec-kit-spectest) | `spectest` | Auto-generate test scaffolds from spec criteria, map coverage, and find untested requirements. | `testing`, `test-generation`, `coverage`, `quality`, `automation`, `traceability` | No | -| [Squad Bridge](https://github.com/jwill824/spec-kit-squad) | `squad` | Bootstrap and synchronize a Squad agent team from your Spec Kit spec and tasks. | `multi-agent`, `agents`, `orchestration`, `process`, `integration` | No | -| [Staff Review Extension](https://github.com/arunt14/spec-kit-staff-review) | `staff-review` | Staff-engineer-level code review that validates implementation against spec, checks security, performance, and test coverage. | `code`, `review`, `quality` | No | -| [Status Report](https://github.com/Open-Agent-Tools/spec-kit-status) | `status-report` | Project status, feature progress, and next-action recommendations for spec-driven workflows. | `workflow`, `project-management`, `status` | No | -| [Superpowers Bridge](https://github.com/RbBtSn0w/spec-kit-extensions) | `superb` | Orchestrates obra/superpowers skills within the spec-kit SDD workflow. Thin bridge commands delegate to superpowers' authoritative SKILL.md files at runtime (with graceful fallback), while bridge-original commands provide spec-kit-native value. Eight commands cover the full lifecycle: intent clarification, TDD enforcement, task review, verification, critique, systematic debugging, branch completion, and review response. Hook-bound commands fire automatically; standalone commands are invoked when needed. | `methodology`, `tdd`, `code-review`, `workflow`, `superpowers`, `brainstorming`, `verification`, `debugging`, `branch-management` | No | -| [Superpowers Bridge](https://github.com/WangX0111/superspec) | `superpowers-bridge` | Bridges spec-kit workflows with obra/superpowers capabilities for brainstorming, TDD, code review, and resumable execution. | `superpowers`, `brainstorming`, `tdd`, `code-review`, `subagent`, `workflow` | No | -| [TinySpec](https://github.com/Quratulain-bilal/spec-kit-tinyspec) | `tinyspec` | Lightweight single-file workflow for small tasks — skip the heavy multi-step SDD process. | `lightweight`, `small-tasks`, `workflow`, `productivity`, `efficiency` | No | -| [Token Consumption Analyzer](https://github.com/coderandhiker/spec-kit-token-analyzer) | `token-analyzer` | Captures, analyzes, and compares token consumption across SDD workflows | `tokens`, `measurement`, `optimization`, `analysis` | No | -| [V-Model Extension Pack](https://github.com/leocamello/spec-kit-v-model) | `v-model` | Enforces V-Model paired generation of development specs and test specs with full traceability. | `v-model`, `traceability`, `testing`, `compliance`, `safety-critical` | No | -| [Verify Extension](https://github.com/ismaelJimenez/spec-kit-verify) | `verify` | Post-implementation quality gate that validates implemented code against specification artifacts. | `verification`, `quality-gate`, `implementation`, `spec-adherence`, `compliance` | No | -| [Verify Tasks Extension](https://github.com/datastone-inc/spec-kit-verify-tasks) | `verify-tasks` | Detect phantom completions: tasks marked [X] in tasks.md with no real implementation. | `verification`, `quality`, `phantom-completion`, `tasks` | No | -| [Version Guard](https://github.com/KevinBrown5280/spec-kit-version-guard) | `version-guard` | Verify tech stack versions against live registries before planning and implementation | `versioning`, `npm`, `validation`, `hooks` | No | -| [What-if Analysis](https://github.com/DevAbdullah90/spec-kit-whatif) | `whatif` | Preview the downstream impact (complexity, effort, tasks, risks) of requirement changes before committing to them. | `analysis`, `planning`, `simulation` | No | -| [Wireframe Visual Feedback Loop](https://github.com/TortoiseWolfe/spec-kit-extension-wireframe) | `wireframe` | SVG wireframe generation, review, and sign-off for spec-driven development. Approved wireframes become spec constraints honored by /speckit.plan, /speckit.tasks, and /speckit.implement. | `wireframe`, `visual`, `design`, `ui`, `mockup`, `svg`, `feedback-loop`, `sign-off` | No | -| [Work IQ](https://github.com/sakitA/spec-kit-workiq) | `workiq` | Integrate Microsoft 365 organizational knowledge into spec-driven development workflows | `microsoft-365`, `work-iq`, `context`, `integration`, `productivity` | No | -| [Worktree Isolation](https://github.com/Quratulain-bilal/spec-kit-worktree) | `worktree` | Spawn isolated git worktrees for parallel feature development without checkout switching. | `worktree`, `git`, `parallel`, `isolation`, `workflow` | No | -| [Worktrees](https://github.com/dango85/spec-kit-worktree-parallel) | `worktrees` | Default-on worktree isolation for parallel agents — sibling or nested layout | `worktree`, `git`, `parallel`, `isolation`, `agents` | No | - +| Extension | ID | Description | Tags | Verified | +| --- | --- | --- | --- | --- | +| [.NET Framework to Modern .NET Migration](https://github.com/RogerBestMsft/spec-kit-FxToNet) | `fx-to-dotnet` | Orchestrate end-to-end .NET Framework to modern .NET migration across 7 phases, with SDD lifecycle integration. | `dotnet`, `migration`, `modernization`, `framework`, `aspnet`, `shared-artifact` | No | +| [Agent Assign](https://github.com/xymelon/spec-kit-agent-assign) | `agent-assign` | Assign specialized Claude Code agents to spec-kit tasks for targeted execution | `agent`, `automation`, `implementation`, `multi-agent`, `task-routing` | No | +| [Agent Governance](https://github.com/bigsmartben/spec-kit-agent-governance) | `agent-governance` | Project-local agent governance memory and context projection. | `governance`, `agents`, `memory`, `context` | No | +| [AI-Driven Engineering (AIDE)](https://github.com/mnriem/spec-kit-extensions) | `aide` | A structured 7-step workflow for building new projects from scratch with AI assistants — from vision through implementation. | `workflow`, `project-management`, `ai-driven`, `new-project`, `planning`, `experimental` | No | +| [API Evolve](https://github.com/Quratulain-bilal/spec-kit-api-evolve) | `api-evolve` | Managed API contract evolution — breaking-change detection, semver enforcement, deprecation orchestration, and lifecycle gates across REST, GraphQL, and gRPC. | `api`, `contracts`, `versioning`, `openapi`, `graphql`, `grpc`, `deprecation`, `breaking-changes`, `semver`, `governance` | No | +| [Architect Impact Previewer](https://github.com/UmmeHabiba1312/spec-kit-architect-preview) | `architect-preview` | Predicts architectural impact, complexity, and risks of proposed changes before implementation. | `architecture`, `analysis`, `risk-assessment`, `planning`, `preview` | No | +| [Architecture Guard](https://github.com/DyanGalih/spec-kit-architecture-guard) | `architecture-guard` | Continuous architecture governance for AI-assisted development. Reviews specs, plans, and code for architecture drift, producing structured refactor tasks and evolution proposals. | `architecture`, `governance`, `drift-detection`, `refactor`, `monolithic`, `microservices` | No | +| [Archive Extension](https://github.com/stn1slv/spec-kit-archive) | `archive` | Archive merged features into main project memory, resolving gaps and conflicts. | `archive`, `memory`, `merge`, `changelog` | No | +| [Azure DevOps Integration](https://github.com/pragya247/spec-kit-azure-devops) | `azure-devops` | Sync user stories and tasks to Azure DevOps work items using OAuth authentication. | `azure`, `devops`, `project-management`, `work-items`, `issue-tracking` | No | +| [Blueprint](https://github.com/chordpli/spec-kit-blueprint) | `blueprint` | Stay code-literate in AI-driven development: review a complete code blueprint for every task from spec artifacts before /speckit.implement runs | `blueprint`, `pre-implementation`, `review`, `scaffolding`, `code-literacy` | No | +| [Branch Convention](https://github.com/Quratulain-bilal/spec-kit-branch-convention) | `branch-convention` | Configurable branch and folder naming conventions for /specify with presets and custom patterns. | `branch`, `naming`, `convention`, `gitflow`, `workflow` | No | +| [Brownfield Bootstrap](https://github.com/Quratulain-bilal/spec-kit-brownfield) | `brownfield` | Bootstrap spec-kit for existing codebases — auto-discover architecture and adopt SDD incrementally. | `brownfield`, `bootstrap`, `existing-project`, `migration`, `onboarding` | No | +| [BrownKit — Brownfield Discovery for Spec-Kit](https://github.com/MaksimShevtsov/BrownKit) | `brownkit` | Evidence-driven capability discovery, security and QA risk assessment for existing codebases. | `brownfield`, `discovery`, `security`, `qa`, `capabilities` | No | +| [Bugfix Workflow](https://github.com/Quratulain-bilal/spec-kit-bugfix) | `bugfix` | Structured bugfix workflow — capture bugs, trace to spec artifacts, and patch specs surgically. | `bugfix`, `debugging`, `workflow`, `traceability`, `maintenance` | No | +| [Canon](https://github.com/maximiliamus/spec-kit-canon) | `canon` | Adds canon-driven (baseline-driven) workflows: spec-first, code-first, spec-drift. Requires Canon Core preset installation. | `process`, `baseline`, `canon`, `drift`, `spec-first`, `code-first`, `spec-drift`, `vibecoding` | No | +| [Catalog CI](https://github.com/Quratulain-bilal/spec-kit-catalog-ci) | `catalog-ci` | Automated validation for spec-kit community catalog entries — structure, URLs, diffs, and linting. | `ci`, `validation`, `catalog`, `quality`, `automation` | No | +| [Checkpoint Extension](https://github.com/aaronrsun/spec-kit-checkpoint) | `checkpoint` | An extension to commit the changes made during the middle of the implementation, so you don't end up with just one very large commit at the end. | `checkpoint`, `commit` | No | +| [CI Guard](https://github.com/Quratulain-bilal/spec-kit-ci-guard) | `ci-guard` | Spec compliance gates for CI/CD — verify specs exist, check drift, and block merges on gaps. | `ci-cd`, `compliance`, `governance`, `quality-gate`, `drift-detection`, `automation` | No | +| [Cleanup Extension](https://github.com/dsrednicki/spec-kit-cleanup) | `cleanup` | Post-implementation quality gate that reviews changes, fixes small issues (scout rule), creates tasks for medium issues, and generates analysis for large issues. | `quality`, `tech-debt`, `review`, `cleanup`, `scout-rule` | No | +| [Conduct Extension](https://github.com/twbrandon7/spec-kit-conduct-ext) | `conduct` | Executes a single spec-kit phase via sub-agent delegation to reduce context pollution. | `conduct`, `workflow`, `automation` | No | +| [Confluence Extension](https://github.com/aaronrsun/spec-kit-confluence) | `confluence` | Create, read, and update Confluence docs for your project | `confluence` | No | +| [Cost Tracker](https://github.com/Quratulain-bilal/spec-kit-cost) | `cost` | Track real LLM dollar cost across SDD workflows — per-feature budgets, per-integration comparison, and finance-ready exports. | `cost`, `budget`, `tokens`, `visibility`, `finance` | No | +| [DocGuard — CDD Enforcement](https://github.com/raccioly/docguard) | `docguard` | Canonical-Driven Development enforcement. Validates, scores, and traces project documentation with automated checks, AI-driven workflows, and spec-kit hooks. Zero NPM runtime dependencies. | `documentation`, `validation`, `quality`, `cdd`, `traceability`, `ai-agents`, `enforcement`, `spec-kit` | No | +| [Extensify](https://github.com/mnriem/spec-kit-extensions) | `extensify` | Create and validate extensions and extension catalogs. | `extensions`, `workflow`, `validation`, `experimental` | No | +| [Fix Findings](https://github.com/Quratulain-bilal/spec-kit-fix-findings) | `fix-findings` | Automated analyze-fix-reanalyze loop that resolves spec findings until clean. | `code`, `analysis`, `quality`, `automation`, `findings` | No | +| [FixIt Extension](https://github.com/speckit-community/spec-kit-fixit) | `fixit` | Spec-aware bug fixing: maps bugs to spec artifacts, proposes a plan, applies minimal changes. | `debugging`, `fixit`, `spec-alignment`, `post-implementation` | No | +| [Fleet Orchestrator](https://github.com/sharathsatish/spec-kit-fleet) | `fleet` | Orchestrate a full feature lifecycle with human-in-the-loop gates across all SpecKit phases. | `orchestration`, `workflow`, `human-in-the-loop`, `parallel` | No | +| [GitHub Issues Integration 1](https://github.com/Fatima367/spec-kit-github-issues) | `github-issues` | Generate spec artifacts from GitHub Issues - import issues, sync updates, and maintain bidirectional traceability | `integration`, `github`, `issues`, `import`, `sync`, `traceability` | No | +| [GitHub Issues Integration 2](https://github.com/aaronrsun/spec-kit-issue) | `issue` | Creates and syncs local specs based on an existing issue in GitHub | `issue`, `integration`, `github`, `issues`, `sync` | No | +| [Intelligent Agent Orchestrator](https://github.com/pragya247/spec-kit-orchestrator) | `agent-orchestrator` | Cross-catalog agent discovery and intelligent prompt-to-command routing | `orchestrator`, `routing`, `discovery`, `agent`, `ai` | No | +| [Iterate](https://github.com/imviancagrace/spec-kit-iterate) | `iterate` | Iterate on spec documents with a two-phase define-and-apply workflow — refine specs mid-implementation and go straight back to building | `iteration`, `change-management`, `spec-maintenance` | No | +| [Jira Integration](https://github.com/mbachorik/spec-kit-jira) | `jira` | Create Jira Epics, Stories, and Issues from spec-kit specifications and task breakdowns with configurable hierarchy and custom field support. | `issue-tracking`, `jira`, `atlassian`, `project-management` | No | +| [Learning Extension](https://github.com/imviancagrace/spec-kit-learn) | `learn` | Generate educational guides from implementations and enhance clarifications with mentoring context. | `learning`, `education`, `mentoring`, `knowledge-transfer` | No | +| [MAQA Azure DevOps Integration](https://github.com/GenieRobot/spec-kit-maqa-azure-devops) | `maqa-azure-devops` | Azure DevOps Boards integration for the MAQA extension. Populates work items from specs, moves User Stories across columns as features progress, real-time Task child ticking. | `azure-devops`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA CI/CD Gate](https://github.com/GenieRobot/spec-kit-maqa-ci) | `maqa-ci` | CI/CD pipeline gate for the MAQA extension. Auto-detects GitHub Actions, CircleCI, GitLab CI, and Bitbucket Pipelines. Blocks QA handoff until pipeline is green. | `ci-cd`, `github-actions`, `circleci`, `gitlab-ci`, `quality-gate`, `maqa` | No | +| [MAQA GitHub Projects Integration](https://github.com/GenieRobot/spec-kit-maqa-github-projects) | `maqa-github-projects` | GitHub Projects v2 integration for the MAQA extension. Populates draft issues from specs, moves items across Status columns as features progress, real-time task list ticking. | `github-projects`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA Jira Integration](https://github.com/GenieRobot/spec-kit-maqa-jira) | `maqa-jira` | Jira integration for the MAQA extension. Populates Stories from specs, moves issues across board columns as features progress, real-time Subtask ticking. | `jira`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA Linear Integration](https://github.com/GenieRobot/spec-kit-maqa-linear) | `maqa-linear` | Linear integration for the MAQA extension. Populates issues from specs, moves items across workflow states as features progress, real-time sub-issue ticking. | `linear`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA Trello Integration](https://github.com/GenieRobot/spec-kit-maqa-trello) | `maqa-trello` | Trello board integration for the MAQA extension. Populates board from specs, moves cards between lists as features progress, real-time checklist ticking. | `trello`, `project-management`, `multi-agent`, `maqa`, `kanban` | No | +| [MAQA — Multi-Agent & Quality Assurance](https://github.com/GenieRobot/spec-kit-maqa-ext) | `maqa` | Coordinator → feature → QA agent workflow with parallel worktree-based implementation. Language-agnostic. Auto-detects installed board plugins (Trello, Linear, GitHub Projects, Jira, Azure DevOps). Optional CI gate. | `multi-agent`, `orchestration`, `quality-assurance`, `workflow`, `parallel`, `tdd` | No | +| [MarkItDown Document Converter](https://github.com/BenBtg/spec-kit-markitdown) | `markitdown` | Convert documents (PDF, Word, PowerPoint, Excel, and more) to Markdown for use as spec reference material in Spec Kit workflows. | `markdown`, `pdf`, `document-conversion`, `reference-material`, `extraction` | No | +| [MDE](https://github.com/AI-MDE/spec-kit-mde) | `mde` | A Spec Kit extension that exposes a minimal model-driven engineering workflow with setup, next, and status commands. | `mde`, `model-driven-engineering`, `workflow`, `process` | No | +| [Memory Loader](https://github.com/KevinBrown5280/spec-kit-memory-loader) | `memory-loader` | Loads .specify/memory/ files before spec-kit lifecycle commands so LLM agents have project governance context | `context`, `memory`, `governance`, `hooks` | No | +| [Memory MD](https://github.com/DyanGalih/spec-kit-memory-hub) | `memory-md` | Spec Kit extension for repository-native Markdown memory that captures durable decisions, bugs, and project context | `memory`, `workflow`, `docs`, `copilot`, `markdown`, `ai-context` | No | +| [MemoryLint](https://github.com/RbBtSn0w/spec-kit-extensions) | `memorylint` | Agent memory governance tool: Automatically audits and fixes boundary conflicts between AGENTS.md and the constitution. | `memory`, `governance`, `constitution`, `agents-md`, `process` | No | +| [Microsoft 365 Integration](https://github.com/BenBtg/spec-kit-m365) | `m365` | Fetch Teams messages, meeting transcripts, and SharePoint/OneDrive files as local Markdown for spec generation. | `microsoft-365`, `teams`, `transcripts`, `collaboration`, `summarization` | No | +| [Multi-Model Review](https://github.com/formin/multi-model-review) | `multi-model-review` | Cross-model Spec Kit handoffs for spec authoring, implementation routing, and review. | `review`, `workflow`, `multi-model`, `spec-driven-development`, `code` | No | +| [Onboard](https://github.com/dmux/spec-kit-onboard) | `onboard` | Contextual onboarding and progressive growth for developers new to spec-kit projects. Explains specs, maps dependencies, validates understanding, and guides the next step. | `onboarding`, `learning`, `mentoring`, `developer-experience`, `gamification`, `knowledge-transfer` | No | +| [Optimize Extension](https://github.com/sakitA/spec-kit-optimize) | `optimize` | Audits and optimizes AI governance for context efficiency | `constitution`, `optimization`, `token-budget`, `governance`, `audit` | No | +| [OWASP LLM Threat Model](https://github.com/NaviaSamal/spec-kit-threatmodel) | `threatmodel` | OWASP Top 10 for LLM Applications 2025 threat analysis on agent artifacts | `security`, `owasp`, `threat-model`, `llm`, `analysis` | No | +| [Plan Review Gate](https://github.com/luno/spec-kit-plan-review-gate) | `plan-review-gate` | Require spec.md and plan.md to be merged via MR/PR before allowing task generation | `review`, `quality`, `workflow`, `gate` | No | +| [PR Bridge](https://github.com/Quratulain-bilal/spec-kit-pr-bridge-) | `pr-bridge` | Auto-generate pull request descriptions, checklists, and summaries from spec artifacts. | `pull-request`, `automation`, `traceability`, `workflow`, `review` | No | +| [Presetify](https://github.com/mnriem/spec-kit-extensions) | `presetify` | Create and validate presets and preset catalogs. | `presets`, `workflow`, `templates`, `experimental` | No | +| [Product Forge](https://github.com/VaiYav/speckit-product-forge) | `product-forge` | Full product lifecycle from research to release — portfolio, lite mode, monorepo, optional V-Model | `process`, `lifecycle`, `monorepo`, `v-model`, `portfolio` | No | +| [Project Health Check](https://github.com/KhawarHabibKhan/spec-kit-doctor) | `doctor` | Diagnose a Spec Kit project and report health issues across structure, agents, features, scripts, extensions, and git. | `diagnostics`, `health-check`, `validation`, `project-structure` | No | +| [Project Status](https://github.com/KhawarHabibKhan/spec-kit-status) | `status` | Show current SDD workflow progress — active feature, artifact status, task completion, workflow phase, and extensions summary. | `status`, `workflow`, `progress`, `feature-tracking`, `task-progress` | No | +| [QA Testing Extension](https://github.com/arunt14/spec-kit-qa) | `qa` | Systematic QA testing with browser-driven or CLI-based validation of acceptance criteria from spec. | `code`, `testing`, `qa` | No | +| [Ralph Loop](https://github.com/Rubiss-Projects/spec-kit-ralph) | `ralph` | Autonomous implementation loop using AI agent CLI. | `implementation`, `automation`, `loop`, `copilot` | No | +| [Reconcile Extension](https://github.com/stn1slv/spec-kit-reconcile) | `reconcile` | Reconcile implementation drift by surgically updating the feature's own spec, plan, and tasks. | `reconcile`, `drift`, `tasks`, `remediation` | No | +| [Red Team](https://github.com/ashbrener/spec-kit-red-team) | `red-team` | Adversarial review of functional specs before /speckit.plan. Parallel adversarial lens agents catch hostile actors, silent failures, and regulatory blind spots that clarify/analyze cannot. | `adversarial-review`, `quality-gate`, `spec-hardening`, `pre-plan`, `audit` | No | +| [Repository Index](https://github.com/liuyiyu/spec-kit-repoindex) | `repoindex` | Generate index of your repo for overview, architecture and module | `utility`, `brownfield`, `analysis` | No | +| [Reqnroll BDD](https://github.com/LoogacyStudio/spec-kit-reqnroll-bdd) | `reqnroll-bdd` | Adds Reqnroll BDD planning, Gherkin generation, traceability, safe task injection, handoff, and verification to Spec Kit. | `bdd`, `reqnroll`, `dotnet`, `gherkin`, `acceptance-testing` | No | +| [Retro Extension](https://github.com/arunt14/spec-kit-retro) | `retro` | Sprint retrospective analysis with metrics, spec accuracy assessment, and improvement suggestions. | `process`, `retrospective`, `metrics` | No | +| [Retrospective Extension](https://github.com/emi-dm/spec-kit-retrospective) | `retrospective` | Post-implementation retrospective with spec adherence scoring, drift analysis, and human-gated spec updates. | `retrospective`, `spec-drift`, `quality`, `analysis`, `governance` | No | +| [Review Extension](https://github.com/ismaelJimenez/spec-kit-review) | `review` | Post-implementation comprehensive code review with specialized agents for code quality, comments, tests, error handling, type design, and simplification. | `code-review`, `quality`, `review`, `testing`, `error-handling`, `type-design`, `simplification` | No | +| [Ripple](https://github.com/chordpli/spec-kit-ripple) | `ripple` | Detect side effects that tests can't catch after implementation — delta-anchored analysis across 9 domain-agnostic categories with fix-induced side effect detection | `side-effects`, `post-implementation`, `analysis`, `quality`, `risk-detection` | No | +| [SDD Utilities](https://github.com/mvanhorn/speckit-utils) | `speckit-utils` | Resume interrupted workflows, validate project health, and verify spec-to-task traceability. | `resume`, `doctor`, `validate`, `workflow`, `health-check` | No | +| [Security Review](https://github.com/DyanGalih/spec-kit-security-review) | `security-review` | Full-project secure-by-design security audits plus staged, branch/PR, plan, task, follow-up, and apply reviews | `security`, `devsecops`, `audit`, `owasp`, `compliance` | No | +| [SFSpeckit — Salesforce Spec-Driven Development](https://github.com/ysumanth06/spec-kit-sf) | `sf` | Enterprise-Grade Spec-Driven Development (SDD) Framework for Salesforce. | `salesforce`, `enterprise`, `sdlc`, `apex`, `devops` | No | +| [Ship Release Extension](https://github.com/arunt14/spec-kit-ship) | `ship` | Automates release pipeline: pre-flight checks, branch sync, changelog generation, CI verification, and PR creation. | `process`, `release`, `automation` | No | +| [Spec Changelog](https://github.com/Quratulain-bilal/spec-kit-changelog) | `changelog` | Auto-generate changelogs and release notes from spec git history and requirement diffs. | `changelog`, `release-notes`, `documentation`, `git-history`, `notifications` | No | +| [Spec Critique Extension](https://github.com/arunt14/spec-kit-critique) | `critique` | Dual-lens critical review of spec and plan from product strategy and engineering risk perspectives. | `docs`, `review`, `planning` | No | +| [Spec Diagram](https://github.com/Quratulain-bilal/spec-kit-diagram-) | `diagram` | Auto-generate Mermaid diagrams of SDD workflow state, feature progress, and task dependencies. | `diagram`, `mermaid`, `visualization`, `workflow`, `dependencies` | No | +| [Spec Kit Schedule — CP-SAT Agent Orchestrator](https://github.com/jfranc38/spec-kit-schedule) | `schedule` | Optimal multi-agent task scheduling via CP-SAT solver with DAG precedence, hallucination-aware caps, file-conflict avoidance, stochastic durations, replanning, and interactive HTML output | `scheduling`, `optimization`, `multi-agent`, `cp-sat`, `operations-research` | No | +| [Spec Orchestrator](https://github.com/Quratulain-bilal/spec-kit-orchestrator) | `orchestrator` | Cross-feature orchestration — track state, select tasks, and detect conflicts across parallel specs. | `orchestration`, `multi-feature`, `coordination`, `workflow`, `parallel` | No | +| [Spec Reference Loader](https://github.com/KevinBrown5280/spec-kit-spec-reference-loader) | `spec-reference-loader` | Reads the ## References section from the current feature spec and loads the listed files into context | `context`, `references`, `docs`, `hooks` | No | +| [Spec Refine](https://github.com/Quratulain-bilal/spec-kit-refine) | `refine` | Update specs in-place, propagate changes to plan and tasks, and diff impact across artifacts. | `refine`, `iterate`, `propagation`, `workflow`, `specifications` | No | +| [Spec Scope](https://github.com/Quratulain-bilal/spec-kit-scope-) | `scope` | Effort estimation and scope tracking — estimate work, detect creep, and budget time per phase. | `estimation`, `scope`, `effort`, `planning`, `project-management`, `tracking` | No | +| [Spec Sync](https://github.com/bgervin/spec-kit-sync) | `sync` | Detect and resolve drift between specs and implementation. AI-assisted resolution with human approval. | `sync`, `drift`, `validation`, `bidirectional`, `backfill` | No | +| [Spec Validate](https://github.com/aeltayeb/spec-kit-spec-validate) | `spec-validate` | Comprehension validation, review gating, and approval state for spec-kit artifacts — staged-reveal quizzes, peer review SLA, and a hard gate before /speckit.implement. | `validation`, `review`, `quality`, `workflow`, `process` | No | +| [Spec2Cloud](https://github.com/Azure-Samples/Spec2Cloud) | `spec2cloud` | Spec-driven workflow tuned for shipping to Azure: spec → plan → tasks → implement → deploy. | `spec2cloud`, `azure`, `cloud`, `deploy`, `workflow` | No | +| [SpecTest](https://github.com/Quratulain-bilal/spec-kit-spectest) | `spectest` | Auto-generate test scaffolds from spec criteria, map coverage, and find untested requirements. | `testing`, `test-generation`, `coverage`, `quality`, `automation`, `traceability` | No | +| [Squad Bridge](https://github.com/jwill824/spec-kit-squad) | `squad` | Bootstrap and synchronize a Squad agent team from your Spec Kit spec and tasks. | `multi-agent`, `agents`, `orchestration`, `process`, `integration` | No | +| [Staff Review Extension](https://github.com/arunt14/spec-kit-staff-review) | `staff-review` | Staff-engineer-level code review that validates implementation against spec, checks security, performance, and test coverage. | `code`, `review`, `quality` | No | +| [Status Report](https://github.com/Open-Agent-Tools/spec-kit-status) | `status-report` | Project status, feature progress, and next-action recommendations for spec-driven workflows. | `workflow`, `project-management`, `status` | No | +| [Superpowers Bridge](https://github.com/RbBtSn0w/spec-kit-extensions) | `superb` | Orchestrates obra/superpowers skills within the spec-kit SDD workflow. Thin bridge commands delegate to superpowers' authoritative SKILL.md files at runtime (with graceful fallback), while bridge-original commands provide spec-kit-native value. Eight commands cover the full lifecycle: intent clarification, TDD enforcement, task review, verification, critique, systematic debugging, branch completion, and review response. Hook-bound commands fire automatically; standalone commands are invoked when needed. | `methodology`, `tdd`, `code-review`, `workflow`, `superpowers`, `brainstorming`, `verification`, `debugging`, `branch-management` | No | +| [Superpowers Bridge](https://github.com/WangX0111/superspec) | `superpowers-bridge` | Bridges spec-kit workflows with obra/superpowers capabilities for brainstorming, TDD, code review, and resumable execution. | `superpowers`, `brainstorming`, `tdd`, `code-review`, `subagent`, `workflow` | No | +| [TinySpec](https://github.com/Quratulain-bilal/spec-kit-tinyspec) | `tinyspec` | Lightweight single-file workflow for small tasks — skip the heavy multi-step SDD process. | `lightweight`, `small-tasks`, `workflow`, `productivity`, `efficiency` | No | +| [Token Consumption Analyzer](https://github.com/coderandhiker/spec-kit-token-analyzer) | `token-analyzer` | Captures, analyzes, and compares token consumption across SDD workflows | `tokens`, `measurement`, `optimization`, `analysis` | No | +| [V-Model Extension Pack](https://github.com/leocamello/spec-kit-v-model) | `v-model` | Enforces V-Model paired generation of development specs and test specs with full traceability. | `v-model`, `traceability`, `testing`, `compliance`, `safety-critical` | No | +| [Verify Extension](https://github.com/ismaelJimenez/spec-kit-verify) | `verify` | Post-implementation quality gate that validates implemented code against specification artifacts. | `verification`, `quality-gate`, `implementation`, `spec-adherence`, `compliance` | No | +| [Verify Tasks Extension](https://github.com/datastone-inc/spec-kit-verify-tasks) | `verify-tasks` | Detect phantom completions: tasks marked [X] in tasks.md with no real implementation. | `verification`, `quality`, `phantom-completion`, `tasks` | No | +| [Version Guard](https://github.com/KevinBrown5280/spec-kit-version-guard) | `version-guard` | Verify tech stack versions against live registries before planning and implementation | `versioning`, `npm`, `validation`, `hooks` | No | +| [What-if Analysis](https://github.com/DevAbdullah90/spec-kit-whatif) | `whatif` | Preview the downstream impact (complexity, effort, tasks, risks) of requirement changes before committing to them. | `analysis`, `planning`, `simulation` | No | +| [Wireframe Visual Feedback Loop](https://github.com/TortoiseWolfe/spec-kit-extension-wireframe) | `wireframe` | SVG wireframe generation, review, and sign-off for spec-driven development. Approved wireframes become spec constraints honored by /speckit.plan, /speckit.tasks, and /speckit.implement. | `wireframe`, `visual`, `design`, `ui`, `mockup`, `svg`, `feedback-loop`, `sign-off` | No | +| [Work IQ](https://github.com/sakitA/spec-kit-workiq) | `workiq` | Integrate Microsoft 365 organizational knowledge into spec-driven development workflows | `microsoft-365`, `work-iq`, `context`, `integration`, `productivity` | No | +| [Worktree Isolation](https://github.com/Quratulain-bilal/spec-kit-worktree) | `worktree` | Spawn isolated git worktrees for parallel feature development without checkout switching. | `worktree`, `git`, `parallel`, `isolation`, `workflow` | No | +| [Worktrees](https://github.com/dango85/spec-kit-worktree-parallel) | `worktrees` | Default-on worktree isolation for parallel agents — sibling or nested layout | `worktree`, `git`, `parallel`, `isolation`, `agents` | No | To submit your own extension, see the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md). diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index def7078ff2..2bdda84ecf 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -3989,8 +3989,17 @@ def extension_search( ): """Search for available extensions in catalog.""" if markdown: + if query or tag or author or verified: + console.print( + "[yellow]Warning:[/yellow] --markdown outputs the full community catalog " + "and ignores filters (query, --tag, --author, --verified)." + ) from .community_catalog_docs import render_community_extensions_table - typer.echo(render_community_extensions_table()) + try: + typer.echo(render_community_extensions_table()) + except (ValueError, FileNotFoundError) as exc: + console.print(f"[red]Error:[/red] {exc}") + raise typer.Exit(1) return from .extensions import ExtensionCatalog, ExtensionError diff --git a/src/specify_cli/community_catalog_docs.py b/src/specify_cli/community_catalog_docs.py index fd1053c9ad..5ac70e08e1 100644 --- a/src/specify_cli/community_catalog_docs.py +++ b/src/specify_cli/community_catalog_docs.py @@ -18,16 +18,22 @@ def _render_cell(value: str) -> str: def _format_tags(tags: Any) -> str: if not isinstance(tags, list) or not tags: return "—" - cleaned = [f"`{str(tag)}`" for tag in tags if str(tag).strip()] + # Strip | from tag values so they don't break table syntax inside backtick spans + cleaned = [f"`{str(tag).replace('|', '').strip()}`" for tag in tags if str(tag).strip()] return ", ".join(cleaned) if cleaned else "—" def list_community_extensions() -> list[dict[str, Any]]: """Return community extensions sorted alphabetically by name then ID.""" + if not COMMUNITY_CATALOG_PATH.exists(): + raise FileNotFoundError( + f"Community catalog not found: {COMMUNITY_CATALOG_PATH}. " + "The --markdown flag requires a spec-kit source checkout." + ) data = json.loads(COMMUNITY_CATALOG_PATH.read_text(encoding="utf-8")) if not isinstance(data, dict): raise ValueError(f"Expected {COMMUNITY_CATALOG_PATH} to contain a JSON object") - extensions = data.get("extensions", {}) + extensions = data.get("extensions") if not isinstance(extensions, dict): raise ValueError(f"Expected {COMMUNITY_CATALOG_PATH} to contain an 'extensions' object") @@ -73,19 +79,11 @@ def render_community_extensions_table() -> str: ) headers = ("Extension", "ID", "Description", "Tags", "Verified") - widths = [ - max(len(header), *(len(_render_cell(row[index])) for row in table_rows)) - for index, header in enumerate(headers) - ] def render_row(values: list[str]) -> str: - return "| " + " | ".join( - _render_cell(value).ljust(widths[index]) for index, value in enumerate(values) - ) + " |" - - lines = [ - render_row(list(headers)), - "| " + " | ".join("-" * width for width in widths) + " |", - ] + return "| " + " | ".join(_render_cell(value) for value in values) + " |" + + separator = "| " + " | ".join("---" for _ in headers) + " |" + lines = [render_row(list(headers)), separator] lines.extend(render_row(row) for row in table_rows) return "\n".join(lines) diff --git a/tests/test_community_catalog_docs.py b/tests/test_community_catalog_docs.py index fa23101718..f0cf2e443b 100644 --- a/tests/test_community_catalog_docs.py +++ b/tests/test_community_catalog_docs.py @@ -1,8 +1,24 @@ from __future__ import annotations +import json +from pathlib import Path +from unittest.mock import patch + +import pytest + from specify_cli.community_catalog_docs import list_community_extensions, render_community_extensions_table +def _write_catalog(tmp_path: Path, extensions: dict) -> Path: + p = tmp_path / "catalog.community.json" + p.write_text(json.dumps({"extensions": extensions}), encoding="utf-8") + return p + + +# --------------------------------------------------------------------------- +# Happy-path tests against the real catalog +# --------------------------------------------------------------------------- + def test_community_extensions_table_renders() -> None: table = render_community_extensions_table() assert "| Extension" in table @@ -16,3 +32,81 @@ def test_community_extensions_are_sorted_by_name() -> None: rows = list_community_extensions() names = [row["name"] for row in rows] assert names == sorted(names, key=str.casefold) + + +# --------------------------------------------------------------------------- +# Edge-case tests using synthetic catalogs +# --------------------------------------------------------------------------- + +def test_missing_catalog_file(tmp_path: Path) -> None: + nonexistent = tmp_path / "missing.json" + with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", nonexistent): + with pytest.raises(FileNotFoundError, match="spec-kit source checkout"): + list_community_extensions() + + +def test_malformed_json(tmp_path: Path) -> None: + bad = tmp_path / "bad.json" + bad.write_text("not valid json", encoding="utf-8") + with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", bad): + with pytest.raises(Exception): + list_community_extensions() + + +def test_non_dict_root(tmp_path: Path) -> None: + f = tmp_path / "catalog.json" + f.write_text(json.dumps([{"id": "foo"}]), encoding="utf-8") + with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): + with pytest.raises(ValueError, match="JSON object"): + list_community_extensions() + + +def test_missing_extensions_key(tmp_path: Path) -> None: + f = tmp_path / "catalog.json" + f.write_text(json.dumps({"other": {}}), encoding="utf-8") + with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): + with pytest.raises(ValueError, match="'extensions' object"): + list_community_extensions() + + +def test_non_dict_extension_value(tmp_path: Path) -> None: + f = _write_catalog(tmp_path, {"foo": "not-a-dict"}) + with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): + with pytest.raises(ValueError, match="must be a mapping"): + list_community_extensions() + + +def test_empty_catalog_raises(tmp_path: Path) -> None: + f = _write_catalog(tmp_path, {}) + with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): + with pytest.raises(ValueError, match="no extensions"): + render_community_extensions_table() + + +def test_extension_without_repository(tmp_path: Path) -> None: + f = _write_catalog(tmp_path, { + "foo": {"name": "Foo", "id": "foo", "description": "A foo tool", "tags": [], "verified": False, "repository": ""}, + }) + with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): + table = render_community_extensions_table() + assert "Foo" in table + assert "[Foo](" not in table # plain name, no link + + +def test_tags_containing_pipe_do_not_break_table(tmp_path: Path) -> None: + f = _write_catalog(tmp_path, { + "foo": {"name": "Foo", "description": "", "tags": ["foo|bar"], "verified": False, "repository": ""}, + }) + with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): + table = render_community_extensions_table() + # pipe stripped from tag — table should render cleanly + assert "`foobar`" in table + + +def test_non_list_tags_renders_em_dash(tmp_path: Path) -> None: + f = _write_catalog(tmp_path, { + "foo": {"name": "Foo", "description": "", "tags": "not-a-list", "verified": False, "repository": ""}, + }) + with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): + table = render_community_extensions_table() + assert "—" in table From 96b0d52f011d943e85e3dec46482910311bc1c5c Mon Sep 17 00:00:00 2001 From: Dyan Galih Date: Thu, 14 May 2026 23:10:46 +0000 Subject: [PATCH 5/6] docs: regenerate community extensions table to include upstream additions Rebased onto upstream/main (6322a4d) which added Architecture Workflow extension (c1a1653). Regenerate table from updated catalog. --- docs/community/extensions.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/community/extensions.md b/docs/community/extensions.md index 7558dbd5b1..96f018a7a2 100644 --- a/docs/community/extensions.md +++ b/docs/community/extensions.md @@ -18,6 +18,7 @@ The following community-contributed extensions are available in [`catalog.commun | [API Evolve](https://github.com/Quratulain-bilal/spec-kit-api-evolve) | `api-evolve` | Managed API contract evolution — breaking-change detection, semver enforcement, deprecation orchestration, and lifecycle gates across REST, GraphQL, and gRPC. | `api`, `contracts`, `versioning`, `openapi`, `graphql`, `grpc`, `deprecation`, `breaking-changes`, `semver`, `governance` | No | | [Architect Impact Previewer](https://github.com/UmmeHabiba1312/spec-kit-architect-preview) | `architect-preview` | Predicts architectural impact, complexity, and risks of proposed changes before implementation. | `architecture`, `analysis`, `risk-assessment`, `planning`, `preview` | No | | [Architecture Guard](https://github.com/DyanGalih/spec-kit-architecture-guard) | `architecture-guard` | Continuous architecture governance for AI-assisted development. Reviews specs, plans, and code for architecture drift, producing structured refactor tasks and evolution proposals. | `architecture`, `governance`, `drift-detection`, `refactor`, `monolithic`, `microservices` | No | +| [Architecture Workflow](https://github.com/bigsmartben/spec-kit-arch) | `arch` | Generate project-level 4+1 architecture view artifacts and synthesis | `architecture`, `4plus1`, `workflow`, `design` | No | | [Archive Extension](https://github.com/stn1slv/spec-kit-archive) | `archive` | Archive merged features into main project memory, resolving gaps and conflicts. | `archive`, `memory`, `merge`, `changelog` | No | | [Azure DevOps Integration](https://github.com/pragya247/spec-kit-azure-devops) | `azure-devops` | Sync user stories and tasks to Azure DevOps work items using OAuth authentication. | `azure`, `devops`, `project-management`, `work-items`, `issue-tracking` | No | | [Blueprint](https://github.com/chordpli/spec-kit-blueprint) | `blueprint` | Stay code-literate in AI-driven development: review a complete code blueprint for every task from spec artifacts before /speckit.implement runs | `blueprint`, `pre-implementation`, `review`, `scaffolding`, `code-literacy` | No | @@ -108,5 +109,4 @@ The following community-contributed extensions are available in [`catalog.commun | [Wireframe Visual Feedback Loop](https://github.com/TortoiseWolfe/spec-kit-extension-wireframe) | `wireframe` | SVG wireframe generation, review, and sign-off for spec-driven development. Approved wireframes become spec constraints honored by /speckit.plan, /speckit.tasks, and /speckit.implement. | `wireframe`, `visual`, `design`, `ui`, `mockup`, `svg`, `feedback-loop`, `sign-off` | No | | [Work IQ](https://github.com/sakitA/spec-kit-workiq) | `workiq` | Integrate Microsoft 365 organizational knowledge into spec-driven development workflows | `microsoft-365`, `work-iq`, `context`, `integration`, `productivity` | No | | [Worktree Isolation](https://github.com/Quratulain-bilal/spec-kit-worktree) | `worktree` | Spawn isolated git worktrees for parallel feature development without checkout switching. | `worktree`, `git`, `parallel`, `isolation`, `workflow` | No | -| [Worktrees](https://github.com/dango85/spec-kit-worktree-parallel) | `worktrees` | Default-on worktree isolation for parallel agents — sibling or nested layout | `worktree`, `git`, `parallel`, `isolation`, `agents` | No | -To submit your own extension, see the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md). +| [Worktrees](https://github.com/dango85/spec-kit-worktree-parallel) | `worktrees` | Default-on worktree isolation for parallel agents — sibling or nested layout | `worktree`, `git`, `parallel`, `isolation`, `agents` | No |To submit your own extension, see the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md). From 7f284f4ce61a3ff39feb453860f662a94cc2d2a7 Mon Sep 17 00:00:00 2001 From: Dyan Galih Date: Fri, 15 May 2026 02:59:02 +0000 Subject: [PATCH 6/6] fix: address third round of Copilot review feedback on community_catalog_docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Parameterize list_community_extensions(path=) and render_community_extensions_table(path=) so callers can supply a custom catalog path without monkeypatching module globals; update tests to use explicit path= args instead of unittest.mock.patch (r3244776065) - Escape raw field values (name, description) with _render_cell() BEFORE composing Markdown link syntax [name](url) so a pipe inside a name/description cannot break a link target; render_row() no longer re-escapes already-escaped values (r3244829318) - Fix _format_tags() filter order: clean (replace+strip) first, then filter on the cleaned value — a tag like ' | ' previously passed the filter but produced an empty backtick span after pipe removal (r3244829330) - Update test_tags_containing_pipe: assert row is well-formed (6 pipe separators for 5-column table), assert id falls back to ext_id when 'id' field is absent (r3244829343) - Change pytest.raises(Exception) to pytest.raises(json.JSONDecodeError) for the malformed JSON test — the broad Exception catch masks unrelated failures (r3244829358) - render_community_extensions_table() now returns a trailing newline so Markdown renderers see a blank line between the last table row and subsequent paragraphs; restore footer paragraph in extensions.md that was previously crammed onto same line as last table row (r3244829373) - Update --markdown help text to make 'ignores filters' behavior explicit rather than relying on the runtime warning alone (r3244829452) --- docs/community/extensions.md | 5 ++- src/specify_cli/__init__.py | 2 +- src/specify_cli/community_catalog_docs.py | 39 ++++++++++-------- tests/test_community_catalog_docs.py | 49 ++++++++++------------- 4 files changed, 49 insertions(+), 46 deletions(-) diff --git a/docs/community/extensions.md b/docs/community/extensions.md index 96f018a7a2..48699919c6 100644 --- a/docs/community/extensions.md +++ b/docs/community/extensions.md @@ -109,4 +109,7 @@ The following community-contributed extensions are available in [`catalog.commun | [Wireframe Visual Feedback Loop](https://github.com/TortoiseWolfe/spec-kit-extension-wireframe) | `wireframe` | SVG wireframe generation, review, and sign-off for spec-driven development. Approved wireframes become spec constraints honored by /speckit.plan, /speckit.tasks, and /speckit.implement. | `wireframe`, `visual`, `design`, `ui`, `mockup`, `svg`, `feedback-loop`, `sign-off` | No | | [Work IQ](https://github.com/sakitA/spec-kit-workiq) | `workiq` | Integrate Microsoft 365 organizational knowledge into spec-driven development workflows | `microsoft-365`, `work-iq`, `context`, `integration`, `productivity` | No | | [Worktree Isolation](https://github.com/Quratulain-bilal/spec-kit-worktree) | `worktree` | Spawn isolated git worktrees for parallel feature development without checkout switching. | `worktree`, `git`, `parallel`, `isolation`, `workflow` | No | -| [Worktrees](https://github.com/dango85/spec-kit-worktree-parallel) | `worktrees` | Default-on worktree isolation for parallel agents — sibling or nested layout | `worktree`, `git`, `parallel`, `isolation`, `agents` | No |To submit your own extension, see the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md). +| [Worktrees](https://github.com/dango85/spec-kit-worktree-parallel) | `worktrees` | Default-on worktree isolation for parallel agents — sibling or nested layout | `worktree`, `git`, `parallel`, `isolation`, `agents` | No | + + +To submit your own extension, see the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md). diff --git a/src/specify_cli/__init__.py b/src/specify_cli/__init__.py index 2bdda84ecf..c669989c74 100644 --- a/src/specify_cli/__init__.py +++ b/src/specify_cli/__init__.py @@ -3985,7 +3985,7 @@ def extension_search( tag: Optional[str] = typer.Option(None, "--tag", help="Filter by tag"), author: Optional[str] = typer.Option(None, "--author", help="Filter by author"), verified: bool = typer.Option(False, "--verified", help="Show only verified extensions"), - markdown: bool = typer.Option(False, "--markdown", help="Output results as a markdown table"), + markdown: bool = typer.Option(False, "--markdown", help="Output the full community catalog as a markdown table (ignores query/tag/author/verified filters)"), ): """Search for available extensions in catalog.""" if markdown: diff --git a/src/specify_cli/community_catalog_docs.py b/src/specify_cli/community_catalog_docs.py index 5ac70e08e1..d505d8d8f1 100644 --- a/src/specify_cli/community_catalog_docs.py +++ b/src/specify_cli/community_catalog_docs.py @@ -18,24 +18,25 @@ def _render_cell(value: str) -> str: def _format_tags(tags: Any) -> str: if not isinstance(tags, list) or not tags: return "—" - # Strip | from tag values so they don't break table syntax inside backtick spans - cleaned = [f"`{str(tag).replace('|', '').strip()}`" for tag in tags if str(tag).strip()] + # Clean first, then filter: a tag of " | " would pass str(tag).strip() but produce + # an empty backtick span after pipe removal, so filter on the cleaned value. + cleaned = [f"`{c}`" for tag in tags if (c := str(tag).replace("|", "").strip())] return ", ".join(cleaned) if cleaned else "—" -def list_community_extensions() -> list[dict[str, Any]]: +def list_community_extensions(path: Path = COMMUNITY_CATALOG_PATH) -> list[dict[str, Any]]: """Return community extensions sorted alphabetically by name then ID.""" - if not COMMUNITY_CATALOG_PATH.exists(): + if not path.exists(): raise FileNotFoundError( - f"Community catalog not found: {COMMUNITY_CATALOG_PATH}. " + f"Community catalog not found: {path}. " "The --markdown flag requires a spec-kit source checkout." ) - data = json.loads(COMMUNITY_CATALOG_PATH.read_text(encoding="utf-8")) + data = json.loads(path.read_text(encoding="utf-8")) if not isinstance(data, dict): - raise ValueError(f"Expected {COMMUNITY_CATALOG_PATH} to contain a JSON object") + raise ValueError(f"Expected {path} to contain a JSON object") extensions = data.get("extensions") if not isinstance(extensions, dict): - raise ValueError(f"Expected {COMMUNITY_CATALOG_PATH} to contain an 'extensions' object") + raise ValueError(f"Expected {path} to contain an 'extensions' object") rows: list[dict[str, Any]] = [] for ext_id, ext in extensions.items(): @@ -55,24 +56,27 @@ def list_community_extensions() -> list[dict[str, Any]]: return sorted(rows, key=lambda row: (row["name"].casefold(), row["id"].casefold())) -def render_community_extensions_table() -> str: +def render_community_extensions_table(path: Path = COMMUNITY_CATALOG_PATH) -> str: """Render the community extensions table from catalog.community.json.""" - rows = list_community_extensions() + rows = list_community_extensions(path=path) if not rows: raise ValueError("Community catalog has no extensions") table_rows: list[list[str]] = [] for row in rows: - name = ( - f"[{row['name']}]({row['repository']})" + # Escape raw field values *before* composing Markdown syntax so that + # a pipe inside a name or description doesn't break a link target. + safe_name = _render_cell(row["name"]) + link = ( + f"[{safe_name}]({row['repository']})" if row["repository"] - else row["name"] + else safe_name ) table_rows.append( [ - name, + link, f"`{row['id']}`", - row["description"], + _render_cell(row["description"]), _format_tags(row["tags"]), row["verified"], ] @@ -81,9 +85,10 @@ def render_community_extensions_table() -> str: headers = ("Extension", "ID", "Description", "Tags", "Verified") def render_row(values: list[str]) -> str: - return "| " + " | ".join(_render_cell(value) for value in values) + " |" + # Values are already escaped; do not re-apply _render_cell here. + return "| " + " | ".join(values) + " |" separator = "| " + " | ".join("---" for _ in headers) + " |" lines = [render_row(list(headers)), separator] lines.extend(render_row(row) for row in table_rows) - return "\n".join(lines) + return "\n".join(lines) + "\n" diff --git a/tests/test_community_catalog_docs.py b/tests/test_community_catalog_docs.py index f0cf2e443b..15d9c7be69 100644 --- a/tests/test_community_catalog_docs.py +++ b/tests/test_community_catalog_docs.py @@ -2,7 +2,6 @@ import json from pathlib import Path -from unittest.mock import patch import pytest @@ -39,74 +38,70 @@ def test_community_extensions_are_sorted_by_name() -> None: # --------------------------------------------------------------------------- def test_missing_catalog_file(tmp_path: Path) -> None: - nonexistent = tmp_path / "missing.json" - with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", nonexistent): - with pytest.raises(FileNotFoundError, match="spec-kit source checkout"): - list_community_extensions() + with pytest.raises(FileNotFoundError, match="spec-kit source checkout"): + list_community_extensions(path=tmp_path / "missing.json") def test_malformed_json(tmp_path: Path) -> None: bad = tmp_path / "bad.json" bad.write_text("not valid json", encoding="utf-8") - with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", bad): - with pytest.raises(Exception): - list_community_extensions() + with pytest.raises(json.JSONDecodeError): + list_community_extensions(path=bad) def test_non_dict_root(tmp_path: Path) -> None: f = tmp_path / "catalog.json" f.write_text(json.dumps([{"id": "foo"}]), encoding="utf-8") - with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): - with pytest.raises(ValueError, match="JSON object"): - list_community_extensions() + with pytest.raises(ValueError, match="JSON object"): + list_community_extensions(path=f) def test_missing_extensions_key(tmp_path: Path) -> None: f = tmp_path / "catalog.json" f.write_text(json.dumps({"other": {}}), encoding="utf-8") - with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): - with pytest.raises(ValueError, match="'extensions' object"): - list_community_extensions() + with pytest.raises(ValueError, match="'extensions' object"): + list_community_extensions(path=f) def test_non_dict_extension_value(tmp_path: Path) -> None: f = _write_catalog(tmp_path, {"foo": "not-a-dict"}) - with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): - with pytest.raises(ValueError, match="must be a mapping"): - list_community_extensions() + with pytest.raises(ValueError, match="must be a mapping"): + list_community_extensions(path=f) def test_empty_catalog_raises(tmp_path: Path) -> None: f = _write_catalog(tmp_path, {}) - with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): - with pytest.raises(ValueError, match="no extensions"): - render_community_extensions_table() + with pytest.raises(ValueError, match="no extensions"): + render_community_extensions_table(path=f) def test_extension_without_repository(tmp_path: Path) -> None: f = _write_catalog(tmp_path, { "foo": {"name": "Foo", "id": "foo", "description": "A foo tool", "tags": [], "verified": False, "repository": ""}, }) - with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): - table = render_community_extensions_table() + table = render_community_extensions_table(path=f) assert "Foo" in table assert "[Foo](" not in table # plain name, no link def test_tags_containing_pipe_do_not_break_table(tmp_path: Path) -> None: f = _write_catalog(tmp_path, { + # No "id" field — exercises ext_id fallback; tag has pipe — exercises stripping "foo": {"name": "Foo", "description": "", "tags": ["foo|bar"], "verified": False, "repository": ""}, }) - with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): - table = render_community_extensions_table() - # pipe stripped from tag — table should render cleanly + table = render_community_extensions_table(path=f) + # pipe stripped from tag value assert "`foobar`" in table + # id falls back to the dict key when "id" field is absent + assert "`foo`" in table + # row is well-formed: 5-column table has exactly 6 pipe separators per row + foo_row = next(line for line in table.split("\n") if line.startswith("| ") and "Foo" in line) + assert foo_row.count("|") == 6 def test_non_list_tags_renders_em_dash(tmp_path: Path) -> None: f = _write_catalog(tmp_path, { "foo": {"name": "Foo", "description": "", "tags": "not-a-list", "verified": False, "repository": ""}, }) - with patch("specify_cli.community_catalog_docs.COMMUNITY_CATALOG_PATH", f): - table = render_community_extensions_table() + table = render_community_extensions_table(path=f) assert "—" in table