specky-sdd 3.10.2 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/.apm/agents/specky-design-architect.agent.md +1 -1
  2. package/.apm/agents/specky-implementer.agent.md +2 -2
  3. package/.apm/agents/specky-onboarding.agent.md +2 -2
  4. package/.apm/agents/specky-orchestrator.agent.md +2 -2
  5. package/.apm/agents/specky-quality-reviewer.agent.md +1 -1
  6. package/.apm/agents/specky-release-engineer.agent.md +6 -5
  7. package/.apm/agents/specky-requirements-engineer.agent.md +1 -1
  8. package/.apm/agents/specky-research-analyst.agent.md +1 -1
  9. package/.apm/agents/specky-sdd-clarify.agent.md +1 -1
  10. package/.apm/agents/specky-sdd-init.agent.md +2 -2
  11. package/.apm/agents/specky-spec-engineer.agent.md +1 -1
  12. package/.apm/agents/specky-task-planner.agent.md +1 -1
  13. package/.apm/agents/specky-test-verifier.agent.md +7 -6
  14. package/CHANGELOG.md +15 -0
  15. package/README.md +5 -5
  16. package/SECURITY.md +5 -1
  17. package/apm-policy.yml +2 -0
  18. package/apm.lock.yaml +16 -16
  19. package/apm.yml +3 -3
  20. package/config.yml +4 -1
  21. package/dist/cli/commands/doctor.d.ts.map +1 -1
  22. package/dist/cli/commands/doctor.js +49 -19
  23. package/dist/cli/commands/doctor.js.map +1 -1
  24. package/dist/cli/commands/init.d.ts +2 -0
  25. package/dist/cli/commands/init.d.ts.map +1 -1
  26. package/dist/cli/commands/init.js +93 -5
  27. package/dist/cli/commands/init.js.map +1 -1
  28. package/dist/cli/index.js +7 -0
  29. package/dist/cli/index.js.map +1 -1
  30. package/dist/cli/lib/apm/policy.d.ts +1 -0
  31. package/dist/cli/lib/apm/policy.d.ts.map +1 -1
  32. package/dist/cli/lib/apm/policy.js +15 -0
  33. package/dist/cli/lib/apm/policy.js.map +1 -1
  34. package/dist/cli/lib/asset-copier.d.ts +1 -0
  35. package/dist/cli/lib/asset-copier.d.ts.map +1 -1
  36. package/dist/cli/lib/asset-copier.js +4 -4
  37. package/dist/cli/lib/asset-copier.js.map +1 -1
  38. package/dist/cli/lib/harness/compilers/claude.js +3 -3
  39. package/dist/cli/lib/harness/compilers/claude.js.map +1 -1
  40. package/dist/cli/lib/harness/compilers/common.d.ts +10 -1
  41. package/dist/cli/lib/harness/compilers/common.d.ts.map +1 -1
  42. package/dist/cli/lib/harness/compilers/common.js +71 -8
  43. package/dist/cli/lib/harness/compilers/common.js.map +1 -1
  44. package/dist/cli/lib/harness/compilers/copilot.js +3 -3
  45. package/dist/cli/lib/harness/compilers/copilot.js.map +1 -1
  46. package/dist/cli/lib/harness/compilers/cursor.js +3 -3
  47. package/dist/cli/lib/harness/compilers/cursor.js.map +1 -1
  48. package/dist/cli/lib/harness/compilers/opencode.js +3 -3
  49. package/dist/cli/lib/harness/compilers/opencode.js.map +1 -1
  50. package/dist/cli/lib/harness/tool-map.d.ts +8 -1
  51. package/dist/cli/lib/harness/tool-map.d.ts.map +1 -1
  52. package/dist/cli/lib/harness/tool-map.js +74 -0
  53. package/dist/cli/lib/harness/tool-map.js.map +1 -1
  54. package/dist/cli/lib/harness/types.d.ts +11 -1
  55. package/dist/cli/lib/harness/types.d.ts.map +1 -1
  56. package/dist/cli/lib/mcp-writer.d.ts +2 -1
  57. package/dist/cli/lib/mcp-writer.d.ts.map +1 -1
  58. package/dist/cli/lib/mcp-writer.js +13 -5
  59. package/dist/cli/lib/mcp-writer.js.map +1 -1
  60. package/dist/cli/lib/settings-merger.d.ts +15 -0
  61. package/dist/cli/lib/settings-merger.d.ts.map +1 -1
  62. package/dist/cli/lib/settings-merger.js +66 -1
  63. package/dist/cli/lib/settings-merger.js.map +1 -1
  64. package/dist/config.d.ts +9 -0
  65. package/dist/config.d.ts.map +1 -1
  66. package/dist/config.js +12 -4
  67. package/dist/config.js.map +1 -1
  68. package/package.json +10 -1
@@ -3,7 +3,7 @@ name: specky-design-architect
3
3
  description: Phase 4 agent that writes DESIGN.md with system architecture, API contracts, data models, and Mermaid diagrams. All design decisions trace to specification requirements.
4
4
 
5
5
  color: blue
6
- tools: ["search", "specky/sdd_write_design", "specky/sdd_generate_all_diagrams", "specky/sdd_generate_diagram"]
6
+ capabilities: ["workspace.read", "mcp.specky.sdd_write_design", "mcp.specky.sdd_generate_all_diagrams", "mcp.specky.sdd_generate_diagram"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -3,7 +3,7 @@ name: specky-implementer
3
3
  description: Use this agent to generate implementation plans, quality checklists, test stubs, and infrastructure scaffolding from specifications.
4
4
 
5
5
  color: blue
6
- tools: ["search", "specky/sdd_implement", "specky/sdd_checklist", "specky/sdd_generate_tests", "specky/sdd_generate_pbt", "specky/sdd_generate_iac", "specky/sdd_generate_dockerfile", "specky/sdd_generate_devcontainer", "specky/sdd_setup_local_env", "specky/sdd_setup_codespaces"]
6
+ capabilities: ["workspace.read", "workspace.command.git", "mcp.specky.sdd_implement", "mcp.specky.sdd_checklist", "mcp.specky.sdd_generate_tests", "mcp.specky.sdd_generate_pbt", "mcp.specky.sdd_generate_iac", "mcp.specky.sdd_generate_dockerfile", "mcp.specky.sdd_generate_devcontainer", "mcp.specky.sdd_setup_local_env", "mcp.specky.sdd_setup_codespaces", "mcp.github.create_or_update_file"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -30,7 +30,7 @@ You are a senior implementation engineer. You bridge the gap between specificati
30
30
 
31
31
  **Workflow:**
32
32
  1. Read the `specky-implementer` SKILL.md for implementation patterns and tool reference
33
- 2. Verify you are on the correct `spec/NNN-*` branch (not develop/stage/main)
33
+ 2. Use Git to verify you are on the correct `spec/NNN-*` branch (not develop/stage/main)
34
34
  3. Verify TASKS.md and DESIGN.md exist for the feature
35
35
  4. Call sdd_implement — ordered plan (Foundation → Core → Integration → Polish)
36
36
  5. Call sdd_checklist for security + testing + relevant NFR domains
@@ -3,7 +3,7 @@ name: specky-onboarding
3
3
  description: Default entry point and interactive wizard for Specky SDD. Detects project context, explains the plugin, guides through project type selection, work mode, and branch setup. Triggered when user says "specky" without specifics.
4
4
 
5
5
  color: green
6
- tools: ["search", "specky/sdd_get_status", "specky/sdd_scan_codebase", "specky/sdd_check_ecosystem", "specky/sdd_context_status", "specky/sdd_auto_pipeline", "specky/sdd_batch_import", "specky/sdd_create_branch", "specky/sdd_discover", "specky/sdd_figma_to_spec", "specky/sdd_import_document", "specky/sdd_import_transcript"]
6
+ capabilities: ["workspace.read", "workspace.command.git", "mcp.specky.sdd_get_status", "mcp.specky.sdd_scan_codebase", "mcp.specky.sdd_check_ecosystem", "mcp.specky.sdd_context_status", "mcp.specky.sdd_auto_pipeline", "mcp.specky.sdd_batch_import", "mcp.specky.sdd_create_branch", "mcp.specky.sdd_discover", "mcp.specky.sdd_figma_to_spec", "mcp.specky.sdd_import_document", "mcp.specky.sdd_import_transcript"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -55,7 +55,7 @@ You are the Specky SDD onboarding wizard. You are the **default entry point** wh
55
55
  - **Direct MCP tools** → Show tool reference by category, user calls directly
56
56
 
57
57
  **Step 5 — Branch Setup:**
58
- - Auto-create `spec/NNN-feature` from develop → call sdd_create_branch
58
+ - Auto-create `spec/NNN-feature` from develop → call sdd_create_branch, then execute its returned Git command after user confirmation
59
59
  - Manual → show git commands
60
60
  - Skip → proceed without branching
61
61
 
@@ -3,7 +3,7 @@ name: specky-orchestrator
3
3
  description: Master agent that coordinates the full SDD 10-phase pipeline end-to-end, routing to phase agents, validating artifacts between phases, and enforcing hooks and LGTM gates.
4
4
 
5
5
  color: purple
6
- tools: ["search", "agent", "specky/sdd_get_status", "specky/sdd_checkpoint", "specky/sdd_advance_phase", "specky/sdd_validate_ears", "specky/sdd_model_routing", "specky/sdd_context_status"]
6
+ capabilities: ["workspace.read", "workspace.command.git", "agent.delegate", "mcp.specky.sdd_get_status", "mcp.specky.sdd_checkpoint", "mcp.specky.sdd_advance_phase", "mcp.specky.sdd_validate_ears", "mcp.specky.sdd_model_routing", "mcp.specky.sdd_context_status"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -30,7 +30,7 @@ You are the Specky SDD pipeline orchestrator. You coordinate the full 10-phase p
30
30
 
31
31
  **Workflow:**
32
32
  1. Call sdd_get_status → determine current phase and feature
33
- 2. Validate branch matches phase expectations:
33
+ 2. Use Git to validate that the branch matches phase expectations:
34
34
  - Phases 0-7: must be on `spec/NNN-*` branch
35
35
  - Phase 8: must be on `develop` branch
36
36
  - Phase 9: must be on `stage` branch
@@ -3,7 +3,7 @@ name: specky-quality-reviewer
3
3
  description: Phase 6 agent that runs completeness audit, cross-analysis, and compliance checks. Produces ANALYSIS.md with gate decision (APPROVE/CONDITIONAL/REJECT) and COMPLIANCE.md.
4
4
 
5
5
  color: red
6
- tools: ["search", "specky/sdd_run_analysis", "specky/sdd_cross_analyze", "specky/sdd_compliance_check", "specky/sdd_check_sync", "specky/sdd_metrics"]
6
+ capabilities: ["workspace.read", "mcp.specky.sdd_run_analysis", "mcp.specky.sdd_cross_analyze", "mcp.specky.sdd_compliance_check", "mcp.specky.sdd_check_sync", "mcp.specky.sdd_metrics"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -3,7 +3,7 @@ name: specky-release-engineer
3
3
  description: Use this agent to prepare features for release — run blocking gates, generate documentation, create PR, and export work items.
4
4
 
5
5
  color: green
6
- tools: ["search", "specky/sdd_create_pr", "specky/sdd_generate_all_docs", "specky/sdd_generate_docs", "specky/sdd_generate_api_docs", "specky/sdd_generate_runbook", "specky/sdd_generate_onboarding", "specky/sdd_export_work_items"]
6
+ capabilities: ["workspace.read", "workspace.command.git", "workspace.command.release-gates", "mcp.specky.sdd_create_pr", "mcp.specky.sdd_generate_all_docs", "mcp.specky.sdd_generate_docs", "mcp.specky.sdd_generate_api_docs", "mcp.specky.sdd_generate_runbook", "mcp.specky.sdd_generate_onboarding", "mcp.specky.sdd_export_work_items", "mcp.github.create_pull_request", "mcp.github.create_issue"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -28,7 +28,7 @@ You are a senior release engineer. You prepare features for delivery.
28
28
 
29
29
  **Workflow:**
30
30
  1. Read the `specky-release-engineer` SKILL.md for gate criteria and PR templates
31
- 2. Verify work is on the correct branch for the merge target:
31
+ 2. Use Git to verify work is on the correct branch for the merge target:
32
32
  - `spec/NNN-*` → PR targets `develop`
33
33
  - `develop` → PR targets `stage`
34
34
  - `stage` → PR targets `main`
@@ -38,9 +38,10 @@ You are a senior release engineer. You prepare features for delivery.
38
38
  - specky-release-gate.sh (BLOCKING: exit 2 = cannot release)
39
39
  5. If either fails: explain what failed, suggest fix. Do NOT proceed.
40
40
  6. Call sdd_generate_all_docs — parallel documentation generation
41
- 7. Call sdd_create_pr — PR payload with spec summary and correct target branch
42
- 8. Optionally call sdd_export_work_items update external trackers
43
- 9. Deliver release summary with branch, target, and merge instructions
41
+ 7. Call sdd_create_pr — generate the PR payload with spec summary and correct target branch
42
+ 8. Call GitHub MCP `create_pull_request` with the generated payload. If GitHub MCP is not configured or authenticated, present the payload and stop before claiming a PR was created.
43
+ 9. Optionally call sdd_export_work_items, then call GitHub MCP `create_issue` for each exported GitHub work item. Do not route to unconfigured external trackers.
44
+ 10. Deliver release summary with branch, target, and merge instructions
44
45
 
45
46
  **Branching rules:**
46
47
  - `spec/NNN-feature-name` → `develop` (after Phase 8 verification passes)
@@ -3,7 +3,7 @@ name: specky-requirements-engineer
3
3
  description: Use this agent to analyze raw input and produce validated FRD and NFRD documents ready for sdd_init.
4
4
 
5
5
  color: magenta
6
- tools: ["search", "edit", "specky/sdd_init", "specky/sdd_discover", "specky/sdd_import_document", "specky/sdd_import_transcript", "specky/sdd_batch_import", "specky/sdd_validate_ears"]
6
+ capabilities: ["workspace.read", "workspace.edit", "mcp.specky.sdd_init", "mcp.specky.sdd_discover", "mcp.specky.sdd_import_document", "mcp.specky.sdd_import_transcript", "mcp.specky.sdd_batch_import", "mcp.specky.sdd_validate_ears"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -3,7 +3,7 @@ name: specky-research-analyst
3
3
  description: Use this agent to gather technical context before specification. Scans codebases, imports documents, and produces RESEARCH.md.
4
4
 
5
5
  color: cyan
6
- tools: ["search", "fetch", "specky/sdd_scan_codebase", "specky/sdd_discover", "specky/sdd_research", "specky/sdd_import_document", "specky/sdd_import_transcript", "specky/sdd_check_ecosystem"]
6
+ capabilities: ["workspace.read", "web.fetch", "mcp.specky.sdd_scan_codebase", "mcp.specky.sdd_discover", "mcp.specky.sdd_research", "mcp.specky.sdd_import_document", "mcp.specky.sdd_import_transcript", "mcp.specky.sdd_check_ecosystem"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -3,7 +3,7 @@ name: specky-sdd-clarify
3
3
  description: Use this agent to find and resolve ambiguities in requirements, validate EARS patterns, and produce a clarification log.
4
4
 
5
5
  color: yellow
6
- tools: ["search", "specky/sdd_clarify", "specky/sdd_validate_ears", "specky/sdd_turnkey_spec"]
6
+ capabilities: ["workspace.read", "mcp.specky.sdd_clarify", "mcp.specky.sdd_validate_ears", "mcp.specky.sdd_turnkey_spec"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -3,7 +3,7 @@ name: specky-sdd-init
3
3
  description: Use this agent to initialize the SDD pipeline for a new feature. Creates the .specs/ directory structure and CONSTITUTION.md.
4
4
 
5
5
  color: green
6
- tools: ["search", "specky/sdd_init", "specky/sdd_scan_codebase", "specky/sdd_create_branch"]
6
+ capabilities: ["workspace.read", "workspace.command.git", "mcp.specky.sdd_init", "mcp.specky.sdd_scan_codebase", "mcp.specky.sdd_create_branch"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -31,7 +31,7 @@ You are the SDD pipeline initializer. Your only job is to scaffold the spec pipe
31
31
  2. Gather feature name, project type (greenfield/brownfield/migration/API), and constraints
32
32
  3. Read existing FRD/NFRD from `docs/requirements/` if they exist
33
33
  4. Call `sdd_init` to create `.specs/NNN-feature/` with CONSTITUTION.md and .sdd-state.json
34
- 5. Call `sdd_create_branch` to create `spec/NNN-feature-name` from `develop` for all pipeline work
34
+ 5. Call `sdd_create_branch`, then execute its returned Git command to create `spec/NNN-feature-name` from `develop` for all pipeline work
35
35
  6. For brownfield projects, call `sdd_scan_codebase` to detect the tech stack
36
36
  7. Present CONSTITUTION.md to the developer for review
37
37
  8. Suggest handoff to `@specky-research-analyst`
@@ -3,7 +3,7 @@ name: specky-spec-engineer
3
3
  description: Phase 2 agent that writes SPECIFICATION.md using EARS notation. Every requirement gets a unique REQ-ID, one of the 6 EARS patterns, and measurable acceptance criteria.
4
4
 
5
5
  color: magenta
6
- tools: ["search", "specky/sdd_write_spec", "specky/sdd_turnkey_spec", "specky/sdd_validate_ears", "specky/sdd_figma_to_spec"]
6
+ capabilities: ["workspace.read", "mcp.specky.sdd_write_spec", "mcp.specky.sdd_turnkey_spec", "mcp.specky.sdd_validate_ears", "mcp.specky.sdd_figma_to_spec"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -3,7 +3,7 @@ name: specky-task-planner
3
3
  description: Phase 5 agent that writes TASKS.md with dependency-resolved task sequences, REQ-ID traceability, complexity estimates, and parallel markers. Also generates CHECKLIST.md.
4
4
 
5
5
  color: orange
6
- tools: ["search", "specky/sdd_write_tasks", "specky/sdd_checklist"]
6
+ capabilities: ["workspace.read", "mcp.specky.sdd_write_tasks", "mcp.specky.sdd_checklist"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -3,7 +3,7 @@ name: specky-test-verifier
3
3
  description: Use this agent to verify test coverage, detect phantom completions, and check spec-code drift.
4
4
 
5
5
  color: yellow
6
- tools: ["search", "specky/sdd_verify_tests", "specky/sdd_verify_tasks", "specky/sdd_check_sync", "specky/sdd_validate_ears", "specky/sdd_get_status"]
6
+ capabilities: ["workspace.read", "workspace.command.test", "mcp.specky.sdd_verify_tests", "mcp.specky.sdd_verify_tasks", "mcp.specky.sdd_check_sync", "mcp.specky.sdd_validate_ears", "mcp.specky.sdd_get_status"]
7
7
  ---
8
8
 
9
9
  <example>
@@ -28,11 +28,12 @@ You are a test verification specialist. You verify that implementation satisfies
28
28
 
29
29
  **Workflow:**
30
30
  1. Read the `specky-test-verifier` SKILL.md for verification criteria and gate thresholds
31
- 2. Call sdd_verify_tests parse results, map to REQ-IDs, build coverage report
32
- 3. Call sdd_verify_tasksdetect phantom completions
33
- 4. Call sdd_check_sync — detect spec-code drift
34
- 5. Call sdd_validate_earsre-validate EARS integrity
35
- 6. Present VERIFICATION.md with gate decision
31
+ 2. Run the detected test command and collect its machine-readable results
32
+ 3. Call sdd_verify_testsparse results, map to REQ-IDs, build coverage report
33
+ 4. Call sdd_verify_tasks — detect phantom completions and write VERIFICATION.md
34
+ 5. Call sdd_check_syncdetect spec-code drift
35
+ 6. Call sdd_validate_ears re-validate EARS integrity
36
+ 7. Present VERIFICATION.md with gate decision
36
37
 
37
38
  **Gate criteria (ALL must pass):**
38
39
  - Test pass rate ≥90%
package/CHANGELOG.md CHANGED
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [3.11.0] - 2026-07-13
11
+
12
+ ### Added
13
+
14
+ - Canonical agent `capabilities:` declarations compiled into target-native tool identifiers for Copilot, Claude Code, Cursor, and OpenCode.
15
+ - `--permission-profile=scoped|prompt` installation modes. The scoped Claude profile derives narrow native, command, and MCP allow rules from installed agent capabilities.
16
+ - Optional GitHub MCP registration with `--integration=github`, including target-aware diagnostics in `specky doctor`.
17
+ - [Target Capabilities](docs/TARGET-CAPABILITIES.md) reference for target rendering, approval boundaries, and GitHub MCP routing.
18
+
19
+ ### Changed
20
+
21
+ - Initializer, orchestrator, verifier, implementer, and release workflows now declare the Git/test/release capabilities their instructions require.
22
+ - Release workflows distinguish Specky payload generation from authenticated GitHub MCP mutations.
23
+ - APM runtime references are pinned to the package release version rather than `@latest`.
24
+
10
25
  ## [3.10.2] - 2026-07-13
11
26
 
12
27
  Patch release: Specky logo in VS Code and Cursor MCP / Agent Plugins UI.
package/README.md CHANGED
@@ -101,7 +101,7 @@ specky install --target=copilot # VS Code + GitHub Copilot (recommended)
101
101
  specky install --target=claude # Claude Code
102
102
  specky install --target=cursor # Cursor
103
103
  specky install --target=opencode # OpenCode
104
- specky install --target=agent-skills # Shared .agents/skills bundle
104
+ specky install --target=agent-skills # Skills-only shared .agents/skills bundle
105
105
  ```
106
106
 
107
107
  > **Important:** Prefer `--target=...`. The legacy `--ide` flag still works for `copilot`, `claude`, `both`, and `auto`, but it is deprecated in favor of APM-style targets. If Copilot is installed in a workspace, Specky strips Claude hooks from `.claude/settings.json` to prevent Copilot cross-read blocks. See [docs/INSTALL.md](docs/INSTALL.md) for details.
@@ -114,9 +114,9 @@ npm install --save-dev specky-sdd@latest
114
114
  npx specky install --target=copilot
115
115
  ```
116
116
 
117
- The CLI installs 13 agents, 22 prompts, 14 skills, 16 hooks, the target MCP server registration (pinned to the installed version), and pre-authorizes or scopes tools according to the selected harness. It does **not** pre-authorize arbitrary shell, `rm`, or network access; those still prompt. Run `specky doctor` anytime to validate integrity and config.
117
+ The CLI installs 13 agents, 22 prompts, 14 skills, 16 hooks, and target-local MCP registration pinned to the installed version. Canonical agent capabilities compile to the selected harness's native tools; they are not inferred from workflow prose. Use `--permission-profile=scoped` (default) for narrow Claude pre-authorization, or `--permission-profile=prompt` to leave every approval with the host. Specky does **not** pre-authorize arbitrary shell, `rm`, network access, or credentials. Add `--integration=github` only when GitHub MCP routing is required. Run `specky doctor` anytime to validate integrity and configuration.
118
118
 
119
- Generated assets are platform-native. `specky install --target=copilot` writes GitHub Copilot agents/prompts with VS Code tool names such as `search`, `agent`, and `specky/sdd_get_status`, plus prompt `agent: agent` frontmatter. `specky install --target=claude` writes Claude Code agents/commands with `Read`, `Glob`, `Grep`, `Task`, and `mcp__specky__sdd_get_status`, with Copilot-only prompt metadata removed. Wave 1 APM targets also include Cursor, OpenCode, and the neutral `agent-skills` target.
119
+ Generated assets are platform-native. `specky install --target=copilot` writes GitHub Copilot agents/prompts with VS Code tool names such as `search`, `agent`, and `specky/sdd_get_status`, plus prompt `agent: agent` frontmatter. `specky install --target=claude` writes Claude Code agents/commands with `Read`, `Glob`, `Grep`, `Task`, and `mcp__specky__sdd_get_status`, with Copilot-only prompt metadata removed. Cursor and OpenCode receive their own native vocabulary. `agent-skills` is intentionally skills-only. See [Target Capabilities](docs/TARGET-CAPABILITIES.md) for the full capability matrix, GitHub MCP opt-in, and host approval boundaries.
120
120
 
121
121
  Specky also has an APM governance layer for enterprise package control. `apm.yml` declares the package primitives, targets, and MCP runtime; `apm.lock.yaml` pins primitive hashes; `apm-policy.yml` enforces MCP and tool-name policy. Maintainers and CI can run `specky apm validate`, `specky apm policy`, `specky apm verify-lock`, and `specky apm sbom` before publishing or installing. See [Uso do APM pelo Specky](docs/APM-USAGE.md) for the detailed model, including why APM is not a runtime proxy and why users do not need to install the Microsoft APM CLI.
122
122
 
@@ -1253,9 +1253,9 @@ npm run dev
1253
1253
  echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | node dist/index.js 2>/dev/null
1254
1254
 
1255
1255
  # Run the published image from GHCR (multi-arch: linux/amd64 + linux/arm64)
1256
- docker pull ghcr.io/paulasilvatech/specky:latest # or pin a release: :3.10.2
1256
+ docker pull ghcr.io/paulasilvatech/specky:latest # or pin a release: :3.11.0
1257
1257
  docker run --rm -p 3200:3200 ghcr.io/paulasilvatech/specky:latest
1258
- curl http://localhost:3200/health # -> {"status":"ok","version":"3.10.2"}
1258
+ curl http://localhost:3200/health # -> {"status":"ok","version":"3.11.0"}
1259
1259
 
1260
1260
  # Or build and run locally from source
1261
1261
  docker build -t specky-sdd:dev .
package/SECURITY.md CHANGED
@@ -46,6 +46,10 @@ AI Client → JSON-RPC → Zod .strict() validation → Service layer
46
46
 
47
47
  Specky does **not** use `eval()`, `Function()`, `vm.runInNewContext()`, or any dynamic code execution. Template rendering uses string replacement only — no template engines that execute code.
48
48
 
49
+ ### Agent Capability Boundaries
50
+
51
+ The Specky MCP server does not execute arbitrary shell commands or persist GitHub credentials. Generated agents may declare narrowly scoped Git, test, or release-gate capabilities, but the selected host runtime executes and approves those native tools. The optional GitHub MCP integration is registered only with `specky install --integration=github`; GitHub authentication and repository authorization remain with the signed-in host identity. See [Target Capabilities](docs/TARGET-CAPABILITIES.md).
52
+
49
53
  ### Network Calls
50
54
 
51
55
  The **MCP server makes zero outbound network calls**. All data stays on the user's machine. It communicates only via stdio (JSON-RPC over stdin/stdout) or optional HTTP transport on localhost, and this holds unconditionally — `specky serve` never performs the update check described below.
@@ -127,7 +131,7 @@ The audit trail's plain hash chain detects corruption but not deliberate rewriti
127
131
  - Zero `any` types in source code — enforced by CI
128
132
  - All schemas use `.strict()` — rejects unknown fields
129
133
  - `FileManager` is the sole I/O boundary — no direct `fs` calls in tools or other services
130
- - No shell command execution branch names and PR payloads are data only, not executed
134
+ - The Specky MCP server does not execute shell commands; target runtimes may execute only the explicitly declared, host-approved agent capabilities
131
135
 
132
136
  ## Security Best Practices for Users
133
137
 
package/apm-policy.yml CHANGED
@@ -16,6 +16,8 @@ mcp:
16
16
  allowTransitive: false
17
17
  allowedServers:
18
18
  - specky
19
+ optionalCapabilityServers:
20
+ - github
19
21
 
20
22
  # Hook governance. Hook manifests may only register these event types.
21
23
  hooks:
package/apm.lock.yaml CHANGED
@@ -2,21 +2,21 @@
2
2
  schemaVersion: 1
3
3
  package:
4
4
  name: specky-sdd
5
- version: 3.10.2
5
+ version: 3.11.0
6
6
  primitives:
7
- .apm/agents/specky-design-architect.agent.md: sha256:a9411a98bd2fe4c4aa1e6eab66e84eaf9a010897d408e1737a279fe58f7023b2
8
- .apm/agents/specky-implementer.agent.md: sha256:76c546fe70fe3f5399ba25f0e6de3d9b280880fe7c12d88f093cee55c0b02ece
9
- .apm/agents/specky-onboarding.agent.md: sha256:755a51c27eb1fe044ce4940fe6dda3a8eb0ff983c04d1c00e1d59be59723aa9d
10
- .apm/agents/specky-orchestrator.agent.md: sha256:aae379a2dd8833fc9861ee9302f244032856a739b3fb31f568713f866a16f0c8
11
- .apm/agents/specky-quality-reviewer.agent.md: sha256:cdcbe7bee2a4c669b52b8a67d5f31bc01ea0b518ca6daabf57a4603af2312c83
12
- .apm/agents/specky-release-engineer.agent.md: sha256:b33e0f64b6fe23fb427c9368945d76e780aff1d8d848ab67bbcb2fa1a03f50e9
13
- .apm/agents/specky-requirements-engineer.agent.md: sha256:69f84bf9a9f7d76475f7a21e9067c906b73c2a867db9fefe50abee2a4942b762
14
- .apm/agents/specky-research-analyst.agent.md: sha256:4bc469d91b8c573cde9097efdbf1ba9fc0bc9580b4e0148e679bb689fbf744b0
15
- .apm/agents/specky-sdd-clarify.agent.md: sha256:6dcd4879b2fff198a1fa80d61003eec852d4b1a82b7da1bf46c037a00bd463b6
16
- .apm/agents/specky-sdd-init.agent.md: sha256:dff5a301375885781085f0421524cd58ef2305c43084c71e09625c2255182e8a
17
- .apm/agents/specky-spec-engineer.agent.md: sha256:1a119fb44d1e48189726d61a1fbe11b2291535defed71316a8dba01f43401efd
18
- .apm/agents/specky-task-planner.agent.md: sha256:5be3951932c925d09ff7c0a6066ccad2e25bc9fcc3950088b6966cefe6b98fde
19
- .apm/agents/specky-test-verifier.agent.md: sha256:26291f7940f909649da55f8755f0b4a03bbaeae15e2fd61c18f00e7488d44220
7
+ .apm/agents/specky-design-architect.agent.md: sha256:206bb609b3f1547ede880a61f9e4b3a3a9c1df22dc33310fd5af1452dbeaff0f
8
+ .apm/agents/specky-implementer.agent.md: sha256:4768d48f96d6826a06a1a7ead47c0f74a3caa3afc7d0f93e03faa3b6c5ad49df
9
+ .apm/agents/specky-onboarding.agent.md: sha256:eb3e04effaedfece9b74233f0f1e59ceceafe78db2ec940c97d785b318b2e8d2
10
+ .apm/agents/specky-orchestrator.agent.md: sha256:fea1cc4d8498fa762eba4409f44f624a7b256de49d0215bce1c5a4013032f4cb
11
+ .apm/agents/specky-quality-reviewer.agent.md: sha256:bb81e074e4fa8887745e3da341cf11eb8c10978cc4989cd3a2c221798fad2ce0
12
+ .apm/agents/specky-release-engineer.agent.md: sha256:679125e0fe1b2da40ca0142848eecdd0e518eb279a927acdbf006bf7de638df5
13
+ .apm/agents/specky-requirements-engineer.agent.md: sha256:9393480399ced54dd8b201e6821103c9ed9e27fdbdf7426745e0da9535f60ddb
14
+ .apm/agents/specky-research-analyst.agent.md: sha256:92cd4041e0b021efa310e2cf12abb3c45e8f08e490e4b9bb275a81f4c4845cd9
15
+ .apm/agents/specky-sdd-clarify.agent.md: sha256:0dac1b774dc616eecddd5937e6ee520de32cdb12482fe3c25181a9e199d82302
16
+ .apm/agents/specky-sdd-init.agent.md: sha256:7dbba26d70b4fa9aada59e9a1efb8fa811cbe94fbf4c7429940ce7941393f3f2
17
+ .apm/agents/specky-spec-engineer.agent.md: sha256:dc639dde08405d06199b0257363d8ae70e5e14f3dcf991b43e5529e56d241ae8
18
+ .apm/agents/specky-task-planner.agent.md: sha256:124ebb0dde85dded8d7dd57ef728fa9838a78884bbd9de0f89f74879ae6d0e85
19
+ .apm/agents/specky-test-verifier.agent.md: sha256:e1386f81ae1fe9694c34d5b518e408804f2709237e137ce28bab48819e82f924
20
20
  .apm/hooks/scripts/specky-artifact-validator.sh: sha256:2c255e3221cca919ace520ce319c66cc4904aa9c917ce08a52547fe63f8d9770
21
21
  .apm/hooks/scripts/specky-auto-checkpoint.sh: sha256:46d5a336b20c844469574b2281b5cae24ee5116547a262bb160135aaef38d62e
22
22
  .apm/hooks/scripts/specky-branch-validator.sh: sha256:73256941bdc4aaac518935214c6f0029f32b1529307088243142fe7423594cf6
@@ -77,5 +77,5 @@ primitives:
77
77
  .apm/skills/specky-spec-engineer/SKILL.md: sha256:b5722dacc513a69b54a2d474e1dfa4a25029c5f6f2a930fae3b0ed8f3c9eb49e
78
78
  .apm/skills/specky-task-planner/SKILL.md: sha256:bf391eaa0541ae507f99eacd18a8747b597bcde4ff84d9a389fdc4aad5e76ed7
79
79
  .apm/skills/specky-test-verifier/SKILL.md: sha256:7e663a68f597f409a7209e07830b90b467052583bde8557eed389848baaa8609
80
- apm-policy.yml: sha256:421910c17b1a7431f1336d8374538c111245c0c1de58adc6d8eddc185010a639
81
- apm.yml: sha256:faaad94df10783caf1226b684caac659685a418e70e3f4172610bdbfc89cdb5e
80
+ apm-policy.yml: sha256:560cfde2c8efe36bdc2cbb095f259506d51312249d3b4cee67640e244e972530
81
+ apm.yml: sha256:ac0a62e81a271f1a2de440018d3463991a8c1ee8dd376e4024eea27d1b1c5b3f
package/apm.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  name: specky-sdd
2
- version: 3.10.2
2
+ version: 3.11.0
3
3
  description: "Agentic Spec-Driven Development — 10-phase pipeline with 58 MCP tools, 13 agents, 22 prompts, 14 skills, 16 hooks, EARS notation, model routing, and enterprise security"
4
4
  author: Paula Silva
5
5
  license: MIT
@@ -32,7 +32,7 @@ mcp:
32
32
  registry: false
33
33
  transport: stdio
34
34
  command: npx
35
- args: ["-y", "specky-sdd@latest", "serve"]
35
+ args: ["-y", "specky-sdd@3.11.0", "serve"]
36
36
  tools: ["sdd_*"]
37
37
 
38
38
  dependencies:
@@ -41,7 +41,7 @@ dependencies:
41
41
  registry: false
42
42
  transport: stdio
43
43
  command: npx
44
- args: ["-y", "specky-sdd@latest"]
44
+ args: ["-y", "specky-sdd@3.11.0"]
45
45
  tools: ["*"]
46
46
 
47
47
  scripts:
package/config.yml CHANGED
@@ -1,5 +1,8 @@
1
1
  audit_enabled: true
2
- version: "3.10.2"
2
+ version: "3.11.0"
3
+ installation:
4
+ permission_profile: scoped
5
+ integrations: []
3
6
  pipeline:
4
7
  phases: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
5
8
  phase_names:
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwdD,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAkEpE"}
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/doctor.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwgBD,wBAAsB,SAAS,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAuEpE"}
@@ -13,7 +13,7 @@ import { VERSION } from "../../constants.js";
13
13
  import { hashFile } from "../lib/asset-copier.js";
14
14
  import { detectIde } from "../lib/ide-detect.js";
15
15
  import { targetPaths } from "../lib/paths.js";
16
- import { SPECKY_REQUIRED_ALLOWS } from "../lib/settings-merger.js";
16
+ import { requiredClaudeAllows, SPECKY_REQUIRED_ALLOWS, } from "../lib/settings-merger.js";
17
17
  import { SPECKY_VSCODE_SETTINGS } from "../lib/vscode-settings-writer.js";
18
18
  function verifyIntegrity(lock, speckyRoot) {
19
19
  const missing = [];
@@ -50,7 +50,7 @@ function readJsonSafe(path) {
50
50
  return null;
51
51
  }
52
52
  }
53
- function checkClaudePermissions(targets) {
53
+ function checkClaudePermissions(targets, workspace, installMeta) {
54
54
  const settings = readJsonSafe(targets.claude.settingsJson);
55
55
  if (!settings) {
56
56
  return {
@@ -59,8 +59,23 @@ function checkClaudePermissions(targets) {
59
59
  detail: "settings.json missing or unreadable",
60
60
  };
61
61
  }
62
+ const profile = installMeta?.permission_profile ?? "scoped";
63
+ if (profile === "prompt") {
64
+ return {
65
+ name: "Claude permissions",
66
+ pass: true,
67
+ detail: "prompt profile: Claude Code manages confirmation for every action",
68
+ };
69
+ }
70
+ const requiredAllows = installMeta?.capabilities
71
+ ? requiredClaudeAllows(installMeta.capabilities, {
72
+ profile,
73
+ workspace,
74
+ integrations: installMeta.integrations,
75
+ })
76
+ : SPECKY_REQUIRED_ALLOWS;
62
77
  const allow = new Set(settings.permissions?.allow ?? []);
63
- const missing = SPECKY_REQUIRED_ALLOWS.filter((a) => !allow.has(a));
78
+ const missing = requiredAllows.filter((a) => !allow.has(a));
64
79
  return {
65
80
  name: "Claude permissions",
66
81
  pass: missing.length === 0,
@@ -88,19 +103,30 @@ function checkVscodeSettings(workspace) {
88
103
  : `missing keys: ${missing.join(", ")}`,
89
104
  };
90
105
  }
91
- function checkMcpRegistration(path, label) {
106
+ function checkMcpRegistration(path, label, serverName = "specky") {
92
107
  const cfg = readJsonSafe(path);
93
108
  if (!cfg)
94
109
  return { name: label, pass: false, detail: "file missing" };
95
- const hasServer = Boolean(cfg.mcpServers?.["specky"]) ||
96
- Boolean(cfg.servers?.["specky"]) ||
97
- Boolean(cfg.mcp?.["specky"]);
110
+ const hasServer = Boolean(cfg.mcpServers?.[serverName]) ||
111
+ Boolean(cfg.servers?.[serverName]) ||
112
+ Boolean(cfg.mcp?.[serverName]);
113
+ let detail = `${serverName} entry missing`;
114
+ if (hasServer) {
115
+ detail = serverName === "github"
116
+ ? "GitHub MCP registered; authentication is managed by the target runtime"
117
+ : "specky server registered";
118
+ }
98
119
  return {
99
120
  name: label,
100
121
  pass: hasServer,
101
- detail: hasServer ? "specky server registered" : "specky entry missing",
122
+ detail,
102
123
  };
103
124
  }
125
+ function githubIntegrationCheck(path, installMeta, label) {
126
+ return installMeta?.integrations?.includes("github")
127
+ ? [checkMcpRegistration(path, label, "github")]
128
+ : [];
129
+ }
104
130
  function checkFileExists(path, label) {
105
131
  return {
106
132
  name: label,
@@ -259,9 +285,10 @@ function checkCursorHooksManifest(targets) {
259
285
  detail: manifest.version === 1 && hasMcpHooks ? "version 1 with MCP hooks" : "missing version 1 or MCP hooks",
260
286
  };
261
287
  }
262
- function checkCursorInstall(targets, workspace) {
288
+ function checkCursorInstall(targets, workspace, installMeta) {
263
289
  return [
264
290
  checkMcpRegistration(targets.cursor.mcp, ".cursor/mcp.json"),
291
+ ...githubIntegrationCheck(targets.cursor.mcp, installMeta, "Cursor GitHub MCP"),
265
292
  checkFileCount(targets.cursor.agents, 13, "Cursor agents", (name) => name.startsWith("specky-") && name.endsWith(".md")),
266
293
  checkFileCount(targets.cursor.commands, 22, "Cursor commands", (name) => name.startsWith("specky-") && name.endsWith(".md")),
267
294
  checkFileCount(targets.shared.agentSkills, 14, "Cursor skills", (name, path) => name.startsWith("specky-") && statSync(path).isDirectory()),
@@ -272,9 +299,10 @@ function checkCursorInstall(targets, workspace) {
272
299
  checkFileExists(targets.cursor.hooksRunner, "Cursor hook runner"),
273
300
  ];
274
301
  }
275
- function checkCopilotInstall(targets, workspace) {
302
+ function checkCopilotInstall(targets, workspace, installMeta) {
276
303
  return [
277
304
  checkMcpRegistration(targets.shared.vscodeMcp, ".vscode/mcp.json"),
305
+ ...githubIntegrationCheck(targets.shared.vscodeMcp, installMeta, "Copilot GitHub MCP"),
278
306
  checkVscodeSettings(workspace),
279
307
  checkFileCount(targets.copilot.agents, 13, "Copilot agents", (name) => name.startsWith("specky-") && name.endsWith(".md")),
280
308
  checkFileCount(targets.copilot.prompts, 22, "Copilot prompts", (name) => name.startsWith("specky-") && name.endsWith(".md")),
@@ -284,10 +312,11 @@ function checkCopilotInstall(targets, workspace) {
284
312
  checkCopilotHooksManifest(targets),
285
313
  ];
286
314
  }
287
- function checkClaudeInstall(targets, workspace, installTargets) {
315
+ function checkClaudeInstall(targets, workspace, installTargets, installMeta) {
288
316
  return [
289
317
  checkMcpRegistration(targets.shared.claudeMcp, ".mcp.json"),
290
- checkClaudePermissions(targets),
318
+ ...githubIntegrationCheck(targets.shared.claudeMcp, installMeta, "Claude GitHub MCP"),
319
+ checkClaudePermissions(targets, workspace, installMeta),
291
320
  checkFileCount(targets.claude.agents, 13, "Claude agents", (name) => name.startsWith("specky-") && name.endsWith(".md")),
292
321
  checkFileCount(targets.claude.commands, 22, "Claude commands", (name) => name.startsWith("specky-") && name.endsWith(".md")),
293
322
  checkFileCount(targets.claude.skills, 14, "Claude skills", (name, path) => name.startsWith("specky-") && statSync(path).isDirectory()),
@@ -297,9 +326,10 @@ function checkClaudeInstall(targets, workspace, installTargets) {
297
326
  checkClaudeHooksInSettings(targets, installTargets),
298
327
  ];
299
328
  }
300
- function checkOpenCodeInstall(targets, workspace) {
329
+ function checkOpenCodeInstall(targets, workspace, installMeta) {
301
330
  return [
302
331
  checkMcpRegistration(targets.opencode.mcp, "opencode.json"),
332
+ ...githubIntegrationCheck(targets.opencode.mcp, installMeta, "OpenCode GitHub MCP"),
303
333
  checkFileCount(targets.opencode.agents, 13, "OpenCode agents", (name) => name.startsWith("specky-") && name.endsWith(".md")),
304
334
  checkFileCount(targets.opencode.commands, 22, "OpenCode commands", (name) => name.startsWith("specky-") && name.endsWith(".md")),
305
335
  checkFileCount(targets.shared.agentSkills, 14, "OpenCode skills", (name, path) => name.startsWith("specky-") && statSync(path).isDirectory()),
@@ -347,19 +377,19 @@ function resolveInstalledTargets(installMeta, workspace) {
347
377
  detail: "no install metadata or IDE signals found; run specky install --target=<harness>",
348
378
  };
349
379
  }
350
- function runConfigChecks(targets, workspace, installTargets) {
380
+ function runConfigChecks(targets, workspace, installTargets, installMeta) {
351
381
  const checks = [];
352
382
  if (installTargets.includes("claude")) {
353
- checks.push(...checkClaudeInstall(targets, workspace, installTargets));
383
+ checks.push(...checkClaudeInstall(targets, workspace, installTargets, installMeta));
354
384
  }
355
385
  if (installTargets.includes("copilot")) {
356
- checks.push(...checkCopilotInstall(targets, workspace));
386
+ checks.push(...checkCopilotInstall(targets, workspace, installMeta));
357
387
  }
358
388
  if (installTargets.includes("cursor")) {
359
- checks.push(...checkCursorInstall(targets, workspace));
389
+ checks.push(...checkCursorInstall(targets, workspace, installMeta));
360
390
  }
361
391
  if (installTargets.includes("opencode")) {
362
- checks.push(...checkOpenCodeInstall(targets, workspace));
392
+ checks.push(...checkOpenCodeInstall(targets, workspace, installMeta));
363
393
  }
364
394
  if (installTargets.includes("agent-skills")) {
365
395
  checks.push(checkFileCount(targets.shared.agentSkills, 14, "Agent skills bundle", (name, path) => name.startsWith("specky-") && statSync(path).isDirectory()));
@@ -418,7 +448,7 @@ export async function runDoctor(opts) {
418
448
  }
419
449
  const integrity = verifyIntegrity(lock, targets.shared.specky);
420
450
  printIntegrity(integrity, opts.verbose);
421
- const checks = runConfigChecks(targets, workspace, resolvedTargets.targets);
451
+ const checks = runConfigChecks(targets, workspace, resolvedTargets.targets, installMeta);
422
452
  printChecks(checks);
423
453
  const integrityOk = integrity.missing.length === 0 && integrity.modified.length === 0;
424
454
  const configOk = checks.every((c) => c.pass);