Skip to content

Commit 3462666

Browse files
committed
Merge remote-tracking branch 'upstream/main' into feat/3222-fanout-max-concurrency
# Conflicts: # tests/test_workflows.py
2 parents b385796 + ada293e commit 3462666

142 files changed

Lines changed: 1992 additions & 2721 deletions

File tree

Some content is hidden

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

.devcontainer/post-create.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ run_command "npm install -g @jetbrains/junie-cli@latest"
5656
echo "✅ Done"
5757

5858
echo -e "\n🤖 Installing Pi Coding Agent..."
59-
run_command "npm install -g @mariozechner/pi-coding-agent@latest"
59+
run_command "npm install -g @earendil-works/pi-coding-agent@latest"
6060
echo "✅ Done"
6161

6262
echo -e "\n🤖 Installing Kiro CLI..."

.github/ISSUE_TEMPLATE/agent_request.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ body:
88
value: |
99
Thanks for requesting a new agent! Before submitting, please check if the agent is already supported.
1010
11-
**Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Hermes Agent, IBM Bob, iFlow CLI, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, Roo Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, Windsurf, ZCode, Zed
11+
**Currently supported agents**: Amp, Antigravity, Auggie CLI, Claude Code, Cline, CodeBuddy, Codex CLI, Cursor, Devin for Terminal, Firebender, Forge, Gemini CLI, GitHub Copilot, Goose, Hermes Agent, IBM Bob, Junie, Kilo Code, Kimi Code, Kiro CLI, Lingma, Mistral Vibe, Oh My Pi, opencode, Pi Coding Agent, Qoder CLI, Qwen Code, Roo Code, RovoDev ACLI, SHAI, Tabnine CLI, Trae, Windsurf, ZCode, Zed
1212
1313
- type: input
1414
id: agent-name

.github/ISSUE_TEMPLATE/bug_report.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,6 @@ body:
7878
- Goose
7979
- Hermes Agent
8080
- IBM Bob
81-
- iFlow CLI
8281
- Junie
8382
- Kilo Code
8483
- Kimi Code

.github/ISSUE_TEMPLATE/feature_request.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,6 @@ body:
7272
- Goose
7373
- Hermes Agent
7474
- IBM Bob
75-
- iFlow CLI
7675
- Junie
7776
- Kilo Code
7877
- Kimi Code

.github/workflows/test.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ jobs:
2121
- name: Set up Python
2222
uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
2323
with:
24-
python-version: "3.13"
24+
python-version: "3.14"
2525

2626
- name: Run ruff check
2727
run: uvx ruff check src/
@@ -30,8 +30,8 @@ jobs:
3030
runs-on: ${{ matrix.os }}
3131
strategy:
3232
matrix:
33-
os: [ubuntu-latest, windows-latest]
34-
python-version: ["3.11", "3.12", "3.13"]
33+
os: [ubuntu-latest, windows-latest, macos-latest]
34+
python-version: ["3.13", "3.14"]
3535
steps:
3636
- name: Checkout
3737
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0

AGENTS.md

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ class WindsurfIntegration(MarkdownIntegration):
7575
"args": "$ARGUMENTS",
7676
"extension": ".md",
7777
}
78-
context_file = ".windsurf/rules/specify-rules.md"
7978
```
8079

8180
**TOML agent (Gemini):**
@@ -101,7 +100,6 @@ class GeminiIntegration(TomlIntegration):
101100
"args": "{{args}}",
102101
"extension": ".toml",
103102
}
104-
context_file = "GEMINI.md"
105103
```
106104

107105
**Skills agent (Codex):**
@@ -129,7 +127,6 @@ class CodexIntegration(SkillsIntegration):
129127
"args": "$ARGUMENTS",
130128
"extension": "/SKILL.md",
131129
}
132-
context_file = "AGENTS.md"
133130

134131
@classmethod
135132
def options(cls) -> list[IntegrationOption]:
@@ -150,7 +147,6 @@ class CodexIntegration(SkillsIntegration):
150147
| `key` | Class attribute | Unique identifier; for CLI-based integrations (`requires_cli: True`), must match the CLI executable name |
151148
| `config` | Class attribute (dict) | Agent metadata: `name`, `folder`, `commands_subdir`, `install_url`, `requires_cli` |
152149
| `registrar_config` | Class attribute (dict) | Command output config: `dir`, `format`, `args` placeholder, file `extension` |
153-
| `context_file` | Class attribute (str or None) | Path to agent context/instructions file (e.g., `"CLAUDE.md"`, `".github/copilot-instructions.md"`) |
154150

155151
**Key design rule:** For CLI-based integrations (`requires_cli: True`), `key` must be the actual executable name (e.g., `"cursor-agent"` not `"cursor"`). This ensures `shutil.which(key)` works for CLI-tool checks without special-case mappings. IDE-based integrations (`requires_cli: False`) should use their canonical identifier (e.g., `"windsurf"`, `"copilot"`).
156152

@@ -175,9 +171,11 @@ def _register_builtins() -> None:
175171

176172
### 4. Context file behavior
177173

178-
Set `context_file` on the integration class. The base integration setup creates or updates the managed Spec Kit section in that file, and uninstall removes the managed section when appropriate.
174+
The Specify CLI carries **no agent-context state whatsoever**. Integration classes do **not** declare a `context_file`, and the CLI never creates, updates, removes, resolves, or migrates a context/instruction file (`CLAUDE.md`, `AGENTS.md`, `.github/copilot-instructions.md`, …). New integrations add nothing for context handling.
179175

180-
The managed section is owned by the bundled `agent-context` extension (`extensions/agent-context/`). All configuration flows through the extension's own config file at `.specify/extensions/agent-context/agent-context-config.yml`:
176+
Managing the "Spec Kit" section in the context file is fully owned by the bundled `agent-context` extension (`extensions/agent-context/`), which is a **full opt-in**: `specify init` does not install it. A user adds/enables it through the standard extension verbs, after which the extension's own bundled scripts maintain the context section. When the extension is absent or disabled, nothing in Spec Kit touches the context file.
177+
178+
The extension reads its own config file at `.specify/extensions/agent-context/agent-context-config.yml`:
181179

182180
```yaml
183181
# Path to the coding agent context file managed by this extension
@@ -189,10 +187,10 @@ context_markers:
189187
end: "<!-- SPECKIT END -->"
190188
```
191189
192-
- `context_file` is written automatically from the integration's class attribute when `specify init` or `specify integration use` is run.
193-
- `context_markers.{start,end}` defaults to `IntegrationBase.CONTEXT_MARKER_START` / `CONTEXT_MARKER_END`. Users who want custom markers edit `agent-context-config.yml` directly — both the Python layer (`upsert_context_section()` / `remove_context_section()`) and the bundled scripts (`extensions/agent-context/scripts/bash/update-agent-context.sh` and `.ps1`) read from this single source of truth.
190+
- The Specify CLI does **not** write this config. When `context_file` is empty, the extension's bundled scripts self-seed it by looking up the active integration's key in the extension's own `agent-context-defaults.json` map (`extensions/agent-context/scripts/bash/update-agent-context.sh` and `.ps1`). The CLI registry is never consulted — all agent→context-file knowledge lives inside the extension.
191+
- `context_markers.{start,end}` are read solely by the extension's scripts; they default to the Spec Kit markers shown above and can be customized by editing `agent-context-config.yml` directly.
194192

195-
Users can opt out entirely with `specify extension disable agent-context`; while disabled, Spec Kit skips context-file creation, updates, and removal (the gates are inside `upsert_context_section()` and `remove_context_section()`).
193+
Existing projects created by older Spec Kit versions keep working: any previously written managed section or extension config is left intact and is only ever updated by the extension when run.
196194

197195
Only add custom setup logic when the agent needs non-standard behavior. Integrations no longer require per-agent thin wrapper scripts or shared context-update dispatcher scripts — the `agent-context` extension is fully generic.
198196

@@ -401,7 +399,6 @@ Implementation: Extends `YamlIntegration` (parallel to `TomlIntegration`):
401399
2. Extracts title and description from frontmatter
402400
3. Renders output as Goose recipe YAML (version, title, description, author, extensions, activities, prompt)
403401
4. Uses `yaml.safe_dump()` for header fields to ensure proper escaping
404-
5. Sets `context_file = "AGENTS.md"` so the base setup manages the Spec Kit context section there
405402

406403
## Branch Naming Convention
407404

@@ -466,7 +463,7 @@ Disclosure is **continuous**, not a one-time event. A single AI-disclosure parag
466463
## Common Pitfalls
467464
468465
1. **Using shorthand keys for CLI-based integrations**: For CLI-based integrations (`requires_cli: True`), the `key` must match the executable name (e.g., `"cursor-agent"` not `"cursor"`). `shutil.which(key)` is used for CLI tool checks — mismatches require special-case mappings. IDE-based integrations (`requires_cli: False`) are not subject to this constraint.
469-
2. **Forgetting context configuration**: The bundled `agent-context` extension reads from `.specify/extensions/agent-context/agent-context-config.yml`. New integrations only need to set `context_file` on the class — markers and dispatcher scripts are managed centrally.
466+
2. **Reintroducing context handling into the CLI**: The opt-in `agent-context` extension owns everything about context files — including the per-agent default mapping in `agent-context-defaults.json`. Integration classes must **not** declare a `context_file`, and no CLI code should read, write, resolve, or migrate context files. All context-file logic lives in `.specify/extensions/agent-context/` and its bundled scripts.
470467
3. **Incorrect `requires_cli` value**: Set to `True` only for agents that have a CLI tool; set to `False` for IDE-based agents.
471468
4. **Wrong argument format**: Use `$ARGUMENTS` for Markdown agents, `{{args}}` for TOML agents.
472469
5. **Skipping registration**: The import and `_register()` call in `_register_builtins()` must both be added.

CHANGELOG.md

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

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

5+
## [0.12.1] - 2026-06-30
6+
7+
### Changed
8+
9+
- chore: align CI Python matrix with devguide lifecycle + fix bash 3.2 portability (#3244)
10+
- fix: stop check-prerequisites --paths-only from writing feature.json (#3025) (#3190)
11+
- docs: document integration catalog subcommands (#3206)
12+
- fix(scripts): use ASCII [OK] marker in initialize-repo.sh (parity with PowerShell twin) (#3231)
13+
- docs: document integration `search`/`info`/`scaffold` subcommands (#3174) (#3194)
14+
- docs: remove Cursor from `specify check` agent list (#3178) (#3193)
15+
- fix(goose): repoint install_url and docs to goose-docs.ai (#3171) (#3215)
16+
- fix(scripts): route 'Plan template not found' per --json in setup-plan.ps1 (parity with bash) (#3241)
17+
- fix(bundle): send command errors to stderr so --json stdout stays parseable (#3235)
18+
- chore: release 0.12.0, begin 0.12.1.dev0 development (#3243)
19+
20+
## [0.12.0] - 2026-06-29
21+
22+
### Changed
23+
24+
- feat: make agent-context extension a full opt-in (#3097)
25+
- docs(workflows): add the built-in 'init' step type to the Step Types table (#3234)
26+
- fix(workflows): gate validate() must not crash on non-string options (#3233)
27+
- fix(workflows): make pipe-filter detection quote-aware in expressions (#3232)
28+
- fix(workflows): reject a fan-in wait_for that names an unknown step at validation (#3225)
29+
- fix(scripts): warn when spec template is missing in create-new-feature.ps1 (parity with bash) (#3230)
30+
- fix(scripts): count subdirectory-only dirs as non-empty in PowerShell (parity with bash) (#3137)
31+
- fix(scripts): drop HAS_GIT from PowerShell git-extension output (parity with bash) (#3195)
32+
- Update Product Spec Extension to v1.0.1 (#3226)
33+
- chore: release 0.11.10, begin 0.11.11.dev0 development (#3240)
34+
35+
## [0.11.10] - 2026-06-29
36+
37+
### Changed
38+
39+
- fix(extensions): apply GHES auth and resolve release assets for `extension add --from` (#3217)
40+
- fix(pi): repoint install_url to @earendil-works/pi-coding-agent (#3169) (#3214)
41+
- fix(catalogs): reject host-less catalog URLs in base and preset validators (#3210)
42+
- fix: update CodeBuddy install docs URL (#3187)
43+
- fix(workflows): reject infinite number-input default instead of raising OverflowError (#3199)
44+
- fix(scripts): emit 'Copied plan template' status in setup-plan.ps1 (parity with bash) (#3198)
45+
- fix(workflows): make expression operator/literal parsing quote-aware (#3197)
46+
- fix(scripts): honor explicit -Number 0 in PowerShell create-new-feature (parity with bash) (#3196)
47+
- Add community bundle submission path (#3162)
48+
- Docs: Document /speckit.converge command (#3181)
49+
- chore: release 0.11.9, begin 0.11.10.dev0 development (#3189)
50+
551
## [0.11.9] - 2026-06-26
652

753
### Changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ specify init . --force --integration copilot
406406
specify init --here --force --integration copilot
407407
```
408408

409-
The CLI will check if you have Claude Code, Gemini CLI, Cursor CLI, Qwen CLI, opencode, Codex CLI, Qoder CLI, Tabnine CLI, Kiro CLI, Pi, Oh My Pi, Forge, Goose, Mistral Vibe, or ZCode installed. If you do not, or you prefer to get the templates without checking for the right tools, use `--ignore-agent-tools` with your command:
409+
The CLI will check that your selected agent's CLI tool is installed (for integrations that require a CLI), such as Claude Code, Gemini CLI, Qwen Code, opencode, Codex CLI, Qoder CLI, Tabnine CLI, Kiro CLI, Pi Coding Agent, Oh My Pi, Forge, Goose, Mistral Vibe, or ZCode. If you don't have the required tool installed, or you prefer to get the templates without checking for the right tools, use `--ignore-agent-tools` with your command:
410410

411411
```bash
412412
specify init <project_name> --integration copilot --ignore-agent-tools

docs/community/extensions.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ The following community-contributed extensions are available in [`catalog.commun
9898
| Reconcile Extension | Reconcile implementation drift by surgically updating feature artifacts. | `docs` | Read+Write | [spec-kit-reconcile](https://github.com/stn1slv/spec-kit-reconcile) |
9999
| 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) |
100100
| Research Harness | State-externalizing research harness: budgeted exploration, evidence curation, and claim verification for spec-driven development | `process` | Read+Write | [spec-kit-harness](https://github.com/formin/spec-kit-harness) |
101+
| Repository Governance | Generate project-governance projections from Spec Kit metadata | `process` | Read+Write | [spec-kit-agent-governance](https://github.com/bigsmartben/spec-kit-agent-governance) |
101102
| 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) |
102103
| 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) |
103104
| 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) |

docs/installation.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
## Prerequisites
44

55
- **Linux/macOS** (or Windows; PowerShell scripts now supported without WSL)
6-
- AI coding agent: [Claude Code](https://www.anthropic.com/claude-code), [GitHub Copilot](https://code.visualstudio.com/), [Codebuddy CLI](https://www.codebuddy.ai/cli), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Pi Coding Agent](https://pi.dev), or [Oh My Pi](https://www.npmjs.com/package/@oh-my-pi/pi-coding-agent)
6+
- AI coding agent: [Claude Code](https://www.anthropic.com/claude-code), [GitHub Copilot](https://code.visualstudio.com/), [CodeBuddy CLI](https://www.codebuddy.cn/docs/cli/installation), [Gemini CLI](https://github.com/google-gemini/gemini-cli), [Pi Coding Agent](https://pi.dev), or [Oh My Pi](https://www.npmjs.com/package/@oh-my-pi/pi-coding-agent)
77
- [uv](https://docs.astral.sh/uv/) for package management (recommended) or [pipx](https://pipx.pypa.io/) for persistent installation
88
- [Python 3.11+](https://www.python.org/downloads/)
99
- [Git](https://git-scm.com/downloads) _(optional — required only when the git extension is enabled)_

0 commit comments

Comments
 (0)