Skip to content

Commit a3fbe08

Browse files
Merge branch 'main' into main
2 parents 5347a8b + 4df6d96 commit a3fbe08

File tree

130 files changed

+6227
-215
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+6227
-215
lines changed

.github/ISSUE_TEMPLATE/extension_submission.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ body:
1212
- Review the [Extension Publishing Guide](https://github.com/github/spec-kit/blob/main/extensions/EXTENSION-PUBLISHING-GUIDE.md)
1313
- Ensure your extension has a valid `extension.yml` manifest
1414
- Create a GitHub release with a version tag (e.g., v1.0.0)
15-
- Test installation: `specify extension add --from <your-release-url>`
15+
- Test installation: `specify extension add <extension-name> --from <your-release-url>`
1616
1717
- type: input
1818
id: extension-id
@@ -229,7 +229,7 @@ body:
229229
placeholder: |
230230
```bash
231231
# Install extension
232-
specify extension add --from https://github.com/your-org/spec-kit-your-extension/archive/refs/tags/v1.0.0.zip
232+
specify extension add <extension-name> --from https://github.com/your-org/spec-kit-your-extension/archive/refs/tags/v1.0.0.zip
233233
234234
# Use a command
235235
/speckit.your-extension.command-name arg1 arg2

.github/workflows/docs.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,5 +64,5 @@ jobs:
6464
steps:
6565
- name: Deploy to GitHub Pages
6666
id: deployment
67-
uses: actions/deploy-pages@v4
67+
uses: actions/deploy-pages@v5
6868

.github/workflows/lint.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
uses: actions/checkout@v6
1616

1717
- name: Run markdownlint-cli2
18-
uses: DavidAnson/markdownlint-cli2-action@v19
18+
uses: DavidAnson/markdownlint-cli2-action@ce4853d43830c74c1753b39f3cf40f71c2031eb9 # v23
1919
with:
2020
globs: |
2121
'**/*.md'

.github/workflows/release-trigger.yml

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -139,23 +139,40 @@ jobs:
139139
git push origin "${{ steps.version.outputs.tag }}"
140140
echo "Branch ${{ env.branch }} and tag ${{ steps.version.outputs.tag }} pushed"
141141
142+
- name: Bump to dev version
143+
id: dev_version
144+
run: |
145+
IFS='.' read -r MAJOR MINOR PATCH <<< "${{ steps.version.outputs.version }}"
146+
NEXT_DEV="$MAJOR.$MINOR.$((PATCH + 1)).dev0"
147+
echo "dev_version=$NEXT_DEV" >> $GITHUB_OUTPUT
148+
sed -i "s/version = \".*\"/version = \"$NEXT_DEV\"/" pyproject.toml
149+
git add pyproject.toml
150+
if git diff --cached --quiet; then
151+
echo "No dev version changes to commit"
152+
else
153+
git commit -m "chore: begin $NEXT_DEV development"
154+
git push origin "${{ env.branch }}"
155+
echo "Bumped to dev version $NEXT_DEV"
156+
fi
157+
142158
- name: Open pull request
143159
env:
144160
GITHUB_TOKEN: ${{ secrets.RELEASE_PAT }}
145161
run: |
146162
gh pr create \
147163
--base main \
148164
--head "${{ env.branch }}" \
149-
--title "chore: bump version to ${{ steps.version.outputs.version }}" \
150-
--body "Automated version bump to ${{ steps.version.outputs.version }}.
165+
--title "chore: release ${{ steps.version.outputs.version }}, begin ${{ steps.dev_version.outputs.dev_version }} development" \
166+
--body "Automated release of ${{ steps.version.outputs.version }}.
151167
152168
This PR was created by the Release Trigger workflow. The git tag \`${{ steps.version.outputs.tag }}\` has already been pushed and the release artifacts are being built.
153169
154-
Merge this PR to record the version bump and changelog update on \`main\`."
170+
Merging this PR will set \`main\` to \`${{ steps.dev_version.outputs.dev_version }}\` so that development installs are clearly marked as pre-release."
155171
156172
- name: Summary
157173
run: |
158174
echo "✅ Version bumped to ${{ steps.version.outputs.version }}"
159175
echo "✅ Tag ${{ steps.version.outputs.tag }} created and pushed"
176+
echo "✅ Dev version set to ${{ steps.dev_version.outputs.dev_version }}"
160177
echo "✅ PR opened to merge version bump into main"
161178
echo "🚀 Release workflow is building artifacts from the tag"

.github/workflows/scripts/create-release-packages.ps1

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -497,13 +497,13 @@ $AllAgents = @('claude', 'gemini', 'copilot', 'cursor-agent', 'qwen', 'opencode'
497497
$AllScripts = @('sh', 'ps')
498498

499499
function Normalize-List {
500-
param([string]$Input)
500+
param([string]$Value)
501501

502-
if ([string]::IsNullOrEmpty($Input)) {
502+
if ([string]::IsNullOrEmpty($Value)) {
503503
return @()
504504
}
505505

506-
$items = $Input -split '[,\s]+' | Where-Object { $_ } | Select-Object -Unique
506+
$items = $Value -split '[,\s]+' | Where-Object { $_ } | Select-Object -Unique
507507
return $items
508508
}
509509

@@ -526,7 +526,7 @@ function Validate-Subset {
526526

527527
# Determine agent list
528528
if (-not [string]::IsNullOrEmpty($Agents)) {
529-
$AgentList = Normalize-List -Input $Agents
529+
$AgentList = Normalize-List -Value $Agents
530530
if (-not (Validate-Subset -Type 'agent' -Allowed $AllAgents -Items $AgentList)) {
531531
exit 1
532532
}
@@ -536,7 +536,7 @@ if (-not [string]::IsNullOrEmpty($Agents)) {
536536

537537
# Determine script list
538538
if (-not [string]::IsNullOrEmpty($Scripts)) {
539-
$ScriptList = Normalize-List -Input $Scripts
539+
$ScriptList = Normalize-List -Value $Scripts
540540
if (-not (Validate-Subset -Type 'script' -Allowed $AllScripts -Items $ScriptList)) {
541541
exit 1
542542
}

.github/workflows/test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
uses: actions/checkout@v4
1717

1818
- name: Install uv
19-
uses: astral-sh/setup-uv@v7
19+
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
2020

2121
- name: Set up Python
2222
uses: actions/setup-python@v6
@@ -36,7 +36,7 @@ jobs:
3636
uses: actions/checkout@v4
3737

3838
- name: Install uv
39-
uses: astral-sh/setup-uv@v7
39+
uses: astral-sh/setup-uv@37802adc94f370d6bfd71619e3f0bf239e1f3b78 # v7
4040

4141
- name: Set up Python ${{ matrix.python-version }}
4242
uses: actions/setup-python@v6

AGENTS.md

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ Specify supports multiple AI agents by generating agent-specific command files a
3030
| **Claude Code** | `.claude/commands/` | Markdown | `claude` | Anthropic's Claude Code CLI |
3131
| **Gemini CLI** | `.gemini/commands/` | TOML | `gemini` | Google's Gemini CLI |
3232
| **GitHub Copilot** | `.github/agents/` | Markdown | N/A (IDE-based) | GitHub Copilot in VS Code |
33-
| **Cursor** | `.cursor/commands/` | Markdown | `cursor-agent` | Cursor CLI |
33+
| **Cursor** | `.cursor/commands/` | Markdown | N/A (IDE-based) | Cursor IDE (`--ai cursor-agent`) |
3434
| **Qwen Code** | `.qwen/commands/` | Markdown | `qwen` | Alibaba's Qwen Code CLI |
3535
| **opencode** | `.opencode/command/` | Markdown | `opencode` | opencode CLI |
36-
| **Codex CLI** | `.agents/skills/` | Markdown | `codex` | Codex CLI (skills) |
36+
| **Codex CLI** | `.agents/skills/` | Markdown | `codex` | Codex CLI (`--ai codex --ai-skills`) |
3737
| **Windsurf** | `.windsurf/workflows/` | Markdown | N/A (IDE-based) | Windsurf IDE workflows |
3838
| **Junie** | `.junie/commands/` | Markdown | `junie` | Junie by JetBrains |
3939
| **Kilo Code** | `.kilocode/workflows/` | Markdown | N/A (IDE-based) | Kilo Code IDE |
@@ -50,6 +50,8 @@ Specify supports multiple AI agents by generating agent-specific command files a
5050
| **iFlow CLI** | `.iflow/commands/` | Markdown | `iflow` | iFlow CLI (iflow-ai) |
5151
| **IBM Bob** | `.bob/commands/` | Markdown | N/A (IDE-based) | IBM Bob IDE |
5252
| **Trae** | `.trae/rules/` | Markdown | N/A (IDE-based) | Trae IDE |
53+
| **Antigravity** | `.agent/commands/` | Markdown | N/A (IDE-based) | Antigravity IDE (`--ai agy --ai-skills`) |
54+
| **Mistral Vibe** | `.vibe/prompts/` | Markdown | `vibe` | Mistral Vibe CLI |
5355
| **Generic** | User-specified via `--ai-commands-dir` | Markdown | N/A | Bring your own agent |
5456

5557
### Step-by-Step Integration Guide
@@ -316,32 +318,40 @@ Require a command-line tool to be installed:
316318

317319
- **Claude Code**: `claude` CLI
318320
- **Gemini CLI**: `gemini` CLI
319-
- **Cursor**: `cursor-agent` CLI
320321
- **Qwen Code**: `qwen` CLI
321322
- **opencode**: `opencode` CLI
323+
- **Codex CLI**: `codex` CLI (requires `--ai-skills`)
322324
- **Junie**: `junie` CLI
323-
- **Kiro CLI**: `kiro-cli` CLI
325+
- **Auggie CLI**: `auggie` CLI
324326
- **CodeBuddy CLI**: `codebuddy` CLI
325327
- **Qoder CLI**: `qodercli` CLI
328+
- **Kiro CLI**: `kiro-cli` CLI
326329
- **Amp**: `amp` CLI
327330
- **SHAI**: `shai` CLI
328331
- **Tabnine CLI**: `tabnine` CLI
329332
- **Kimi Code**: `kimi` CLI
333+
- **Mistral Vibe**: `vibe` CLI
330334
- **Pi Coding Agent**: `pi` CLI
335+
- **iFlow CLI**: `iflow` CLI
331336

332337
### IDE-Based Agents
333338

334339
Work within integrated development environments:
335340

336341
- **GitHub Copilot**: Built into VS Code/compatible editors
342+
- **Cursor**: Built into Cursor IDE (`--ai cursor-agent`)
337343
- **Windsurf**: Built into Windsurf IDE
344+
- **Kilo Code**: Built into Kilo Code IDE
345+
- **Roo Code**: Built into Roo Code IDE
338346
- **IBM Bob**: Built into IBM Bob IDE
347+
- **Trae**: Built into Trae IDE
348+
- **Antigravity**: Built into Antigravity IDE (`--ai agy --ai-skills`)
339349

340350
## Command File Formats
341351

342352
### Markdown Format
343353

344-
Used by: Claude, Cursor, opencode, Windsurf, Junie, Kiro CLI, Amp, SHAI, IBM Bob, Kimi Code, Qwen, Pi
354+
Used by: Claude, Cursor, GitHub Copilot, opencode, Windsurf, Junie, Kiro CLI, Amp, SHAI, IBM Bob, Kimi Code, Qwen, Pi, Codex, Auggie, CodeBuddy, Qoder, Roo Code, Kilo Code, Trae, Antigravity, Mistral Vibe, iFlow
345355

346356
**Standard format:**
347357

@@ -379,15 +389,29 @@ Command content with {SCRIPT} and {{args}} placeholders.
379389
## Directory Conventions
380390

381391
- **CLI agents**: Usually `.<agent-name>/commands/`
392+
- **Singular command exception**:
393+
- opencode: `.opencode/command/` (singular `command`, not `commands`)
394+
- **Nested path exception**:
395+
- Tabnine: `.tabnine/agent/commands/` (extra `agent/` segment)
396+
- **Shared `.agents/` folder**:
397+
- Amp: `.agents/commands/` (shared folder, not `.amp/`)
398+
- Codex: `.agents/skills/` (shared folder; requires `--ai-skills`; invoked as `$speckit-<command>`)
382399
- **Skills-based exceptions**:
383-
- Codex: `.agents/skills/` (skills, invoked as `$speckit-<command>`)
400+
- Kimi Code: `.kimi/skills/` (skills, invoked as `/skill:speckit-<command>`)
384401
- **Prompt-based exceptions**:
385402
- Kiro CLI: `.kiro/prompts/`
386403
- Pi: `.pi/prompts/`
404+
- Mistral Vibe: `.vibe/prompts/`
405+
- **Rules-based exceptions**:
406+
- Trae: `.trae/rules/`
387407
- **IDE agents**: Follow IDE-specific patterns:
388408
- Copilot: `.github/agents/`
389409
- Cursor: `.cursor/commands/`
390410
- Windsurf: `.windsurf/workflows/`
411+
- Kilo Code: `.kilocode/workflows/`
412+
- Roo Code: `.roo/commands/`
413+
- IBM Bob: `.bob/commands/`
414+
- Antigravity: `.agent/skills/` (`--ai-skills` required; `.agent/commands/` is deprecated)
391415

392416
## Argument Patterns
393417

CHANGELOG.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,39 @@
22

33
<!-- insert new changelog below this comment -->
44

5+
## [0.4.4] - 2026-04-01
6+
7+
### Changed
8+
9+
- Stage 2: Copilot integration — proof of concept with shared template primitives (#2035)
10+
- docs: sync AGENTS.md with AGENT_CONFIG for missing agents (#2025)
11+
- docs: ensure manual tests use local specify (#2020)
12+
- Stage 1: Integration foundation — base classes, manifest system, and registry (#1925)
13+
- fix: harden GitHub Actions workflows (#2021)
14+
- chore: use PEP 440 .dev0 versions on main after releases (#2032)
15+
- feat: add superpowers bridge extension to community catalog (#2023)
16+
- feat: add product-forge extension to community catalog (#2012)
17+
- feat(scripts): add --allow-existing-branch flag to create-new-feature (#1999)
18+
- fix(scripts): add correct path for copilot-instructions.md (#1997)
19+
- Update README.md (#1995)
20+
- fix: prevent extension command shadowing (#1994)
21+
- Fix Claude Code CLI detection for npm-local installs (#1978)
22+
- fix(scripts): honor PowerShell agent and script filters (#1969)
23+
- feat: add MAQA extension suite (7 extensions) to community catalog (#1981)
24+
- feat: add spec-kit-onboard extension to community catalog (#1991)
25+
- Add plan-review-gate to community catalog (#1993)
26+
- chore(deps): bump actions/deploy-pages from 4 to 5 (#1990)
27+
- chore(deps): bump DavidAnson/markdownlint-cli2-action from 19 to 23 (#1989)
28+
- chore: bump version to 0.4.3 (#1986)
29+
30+
## [0.4.3] - 2026-03-26
31+
32+
### Changed
33+
34+
- Unify Kimi/Codex skill naming and migrate legacy dotted Kimi dirs (#1971)
35+
- fix(ps1): replace null-conditional operator for PowerShell 5.1 compatibility (#1975)
36+
- chore: bump version to 0.4.2 (#1973)
37+
538
## [0.4.2] - 2026-03-25
639

740
### Changed

CONTRIBUTING.md

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,14 +36,17 @@ On [GitHub Codespaces](https://github.com/features/codespaces) it's even simpler
3636
> If your pull request introduces a large change that materially impacts the work of the CLI or the rest of the repository (e.g., you're introducing new templates, arguments, or otherwise major changes), make sure that it was **discussed and agreed upon** by the project maintainers. Pull requests with large changes that did not have a prior conversation and agreement will be closed.
3737
3838
1. Fork and clone the repository
39-
1. Configure and install the dependencies: `uv sync`
39+
1. Configure and install the dependencies: `uv sync --extra test`
4040
1. Make sure the CLI works on your machine: `uv run specify --help`
4141
1. Create a new branch: `git checkout -b my-branch-name`
4242
1. Make your change, add tests, and make sure everything still works
4343
1. Test the CLI functionality with a sample project if relevant
4444
1. Push to your fork and submit a pull request
4545
1. Wait for your pull request to be reviewed and merged.
4646

47+
For the detailed test workflow, command-selection prompt, and PR reporting template, see [`TESTING.md`](./TESTING.md).
48+
Activate the project virtual environment (see the Setup block in [`TESTING.md`](./TESTING.md)), then install the CLI from your working tree (`uv pip install -e .` after `uv sync --extra test`) or otherwise ensure the shell uses the local `specify` binary before running the manual slash-command tests described below.
49+
4750
Here are a few things you can do that will increase the likelihood of your pull request being accepted:
4851

4952
- Follow the project's coding conventions.
@@ -62,6 +65,14 @@ When working on spec-kit:
6265
3. Test script functionality in the `scripts/` directory
6366
4. Ensure memory files (`memory/constitution.md`) are updated if major process changes are made
6467

68+
### Recommended validation flow
69+
70+
For the smoothest review experience, validate changes in this order:
71+
72+
1. **Run focused automated checks first** — use the quick verification commands in [`TESTING.md`](./TESTING.md) to catch packaging, scaffolding, and configuration regressions early.
73+
2. **Run manual workflow tests second** — if your change affects slash commands or the developer workflow, follow [`TESTING.md`](./TESTING.md) to choose the right commands, run them in an agent, and capture results for your PR.
74+
3. **Use local release packages when debugging packaged output** — if you need to inspect the exact files CI-style packaging produces, generate local release packages as described below.
75+
6576
### Testing template and command changes locally
6677

6778
Running `uv run specify init` pulls released packages, which won’t include your local changes.
@@ -85,6 +96,8 @@ To test your templates, commands, and other changes locally, follow these steps:
8596

8697
Navigate to your test project folder and open the agent to verify your implementation.
8798

99+
If you only need to validate generated file structure and content before doing manual agent testing, start with the focused automated checks in [`TESTING.md`](./TESTING.md). Keep this section for the cases where you need to inspect the exact packaged output locally.
100+
88101
## AI contributions in Spec Kit
89102

90103
> [!IMPORTANT]

0 commit comments

Comments
 (0)