Skip to content

Commit b8e7851

Browse files
ericnoamCopilot
andauthored
feat: add Forgecode agent support (#2034)
* feat: add Forgecode (forge) agent support - Add 'forgecode' to AGENT_CONFIGS in agents.py with .forge/commands directory, markdown format, and {{parameters}} argument placeholder - Add 'forgecode' to AGENT_CONFIG in __init__.py with .forge/ folder, install URL, and requires_cli=True - Add forgecode binary check in check_tool() mapping agent key 'forgecode' to the actual 'forge' CLI binary - Add forgecode case to build_variant() in create-release-packages.sh generating commands into .forge/commands/ with {{parameters}} - Add forgecode to ALL_AGENTS in create-release-packages.sh * fix: strip handoffs frontmatter and replace $ARGUMENTS for forgecode The forgecode agent hangs when listing commands because the 'handoffs' frontmatter field (a Claude Code-specific feature) contains 'send: true' entries that forge tries to act on when indexing .forge/commands/ files. Additionally, $ARGUMENTS in command bodies was never replaced with {{parameters}}, so user input was not passed through to commands. Python path (agents.py): - Add strip_frontmatter_keys: [handoffs] to the forgecode AGENT_CONFIG entry so register_commands drops the key before rendering Bash path (create-release-packages.sh): - Add extra_strip_key parameter to generate_commands; pass 'handoffs' for the forgecode case in build_variant - Use regex prefix match (~ "^"extra_key":") instead of exact equality to handle trailing whitespace after the YAML key - Add sed replacement of $ARGUMENTS -> $arg_format in the body pipeline so {{parameters}} is substituted in forgecode command files * feat: add name field injection for forgecode agent Forgecode requires both 'name' and 'description' fields in command frontmatter. This commit adds automatic injection of the 'name' field during command generation for forgecode. Changes: - Python (agents.py): Add inject_name: True to forgecode config and implement name injection logic in register_commands - Bash (create-release-packages.sh): Add post-processing step to inject name field into frontmatter after command generation This complements the existing handoffs stripping fix (d83be82) to fully support forgecode command requirements. * test: update test_argument_token_format for forgecode special case Forgecode uses {{parameters}} instead of the standard $ARGUMENTS placeholder. Updated test to check for the correct placeholder format for forgecode agent. - Added special case handling for forgecode in test_argument_token_format - Updated docstring to document forgecode's {{parameters}} format - Test now passes for all 26 agents including forgecode * docs: add forgecode to README documentation Added forgecode agent to all relevant sections: - Added to Supported AI Agents table - Added to --ai option description - Added to specify check command examples - Added initialization example - Added to CLI tools check list in detailed walkthrough Forgecode is now fully documented alongside other supported agents. * fix: show 'forge' binary name in user-facing messages for forgecode Addresses Copilot PR feedback: Users should see the actual executable name 'forge' in status and error messages, not the agent key 'forgecode'. Changes: - Added 'cli_binary' field to forgecode AGENT_CONFIG (set to 'forge') - Updated check_tool() to accept optional display_key parameter - Updated check_tool() to use cli_binary from AGENT_CONFIG when available - Updated check() command to display cli_binary in StepTracker - Updated init() error message to show cli_binary instead of agent key UX improvements: - 'specify check' now shows: '● forge (available/not found)' - 'specify init --ai forgecode' error shows: 'forge not found' (instead of confusing 'forgecode not found') This makes it clear to users that they need to install the 'forge' binary, even though they selected the 'forgecode' agent. * refactor: rename forgecode agent key to forge Aligns with AGENTS.md design principle: "Use the actual CLI tool name as the key, not a shortened version" (AGENTS.md:61-83). The actual CLI executable is 'forge', so the AGENT_CONFIG key should be 'forge' (not 'forgecode'). This follows the same pattern as other agents like cursor-agent and kiro-cli. Changes: - Renamed AGENT_CONFIG key: "forgecode" → "forge" - Removed cli_binary field (no longer needed) - Simplified check_tool() - removed cli_binary lookup logic - Simplified init() and check() - removed display_key mapping - Updated all tests: test_forge_name_field_in_frontmatter - Updated documentation: README.md Code simplification: - Removed 6 lines of workaround code - Removed 1 function parameter (display_key) - Eliminated all special-case logic for forge Note: No backward compatibility needed - forge is a new agent being introduced in this PR. * fix: ensure forge alias commands have correct name in frontmatter When inject_name is enabled (for forge), alias command files must have their own name field in frontmatter, not reuse the primary command's name. This is critical for Forge's command discovery and dispatch system. Changes: - For agents with inject_name, create a deepcopy of frontmatter for each alias and set the name to the alias name - Re-render the command content with the alias-specific frontmatter - Ensures each alias file has the correct name field matching its filename This fixes command discovery issues where forge would try to invoke aliases using the primary command's name. * feat: add forge to PowerShell script and fix test whitespace 1. PowerShell script (create-release-packages.ps1): - Added forge agent support for Windows users - Enables `specify init --ai forge --offline` on Windows - Enhanced Generate-Commands with ExtraStripKey parameter - Added frontmatter stripping for handoffs key - Added $ARGUMENTS replacement for {{parameters}} - Implemented forge case with name field injection - Complete parity with bash script 2. Test file (test_core_pack_scaffold.py): - Removed trailing whitespace from blank lines - Cleaner diffs and no linter warnings Addresses Copilot PR feedback on both issues. * fix: use .NET Regex.Replace for count-limited replacement in PowerShell Addresses Copilot feedback: PowerShell's -replace operator does not support a third argument for replacement count. Using it causes an error or mis-parsing that would break forge package generation on Windows. Changed from: $content -replace '(?m)^---$', "---`nname: $cmdName", 1 To: $regex = [regex]'(?m)^---$' $content = $regex.Replace($content, "---`nname: $cmdName", 1) The .NET Regex.Replace() method properly supports the count parameter, ensuring the name field is injected only after the first frontmatter delimiter (not the closing one). This fix is critical for Windows users running: specify init --ai forge --offline * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * feat: migrate Forge agent to Python integration system - Create ForgeIntegration class with custom processing for {{parameters}}, handoffs stripping, and name injection - Add update-context scripts (bash and PowerShell) for Forge - Register Forge in integration registry - Update AGENTS.md with Forge documentation and special processing requirements section - Add comprehensive test suite (11 tests, all passing) Closes migration from release packaging to Python-based scaffolding for Forge agent. * fix: replace $ARGUMENTS with {{parameters}} in Forge templates - Add replacement of $ARGUMENTS to {{parameters}} after template processing - Use arg_placeholder from config (Copilot's cleaner approach) - Remove unused 'import re' from _apply_forge_transformations() - Enhance tests to verify $ARGUMENTS replacement works correctly - All 11 tests pass Fixes template processing to ensure Forge receives user-supplied parameters correctly. * refactor: make ForgeIntegration extend MarkdownIntegration - Change base class from IntegrationBase to MarkdownIntegration - Eliminates ~30 lines of duplicated validation/setup boilerplate - Aligns with the pattern used by 20+ other markdown agents (Bob, Claude, Windsurf, etc.) - Update AGENTS.md to reflect new inheritance hierarchy - All Forge-specific processing retained ({{parameters}}, handoffs stripping, name injection) - All 535 integration tests pass This addresses reviewer feedback about using the MarkdownIntegration convenience base class. * style: remove trailing whitespace from test file - Strip trailing spaces from blank lines in test_integration_forge.py - Fixes W291 linting warnings - No functional changes * style: remove trailing whitespace from Forge integration - Strip trailing spaces from blank lines in __init__.py - Fixes whitespace on lines 20, 86, 90, 93, 139, 143 - Verified other files in forge/ directory have no trailing whitespace - No functional changes, all tests pass * test: derive expected commands from templates dynamically - Remove hard-coded command count (9) and command set from test_directory_structure - Use forge.list_command_templates() to derive expected commands - Test now auto-syncs when core command templates are added/removed - Prevents test breakage when template set changes - All 11 tests pass * fix: make Forge update-context scripts handle AGENTS.md directly - Add fallback logic to update/create AGENTS.md when shared script doesn't support forge yet - Check if shared dispatcher knows about 'forge' before delegating - If shared script doesn't support forge, handle AGENTS.md updates directly: - Add Forge section to existing AGENTS.md if not present - Create new AGENTS.md with Forge section if file doesn't exist - Both bash and PowerShell scripts implement same logic - Prevents 'Unknown agent type' errors until shared scripts add forge support - Future-compatible: automatically delegates when shared script supports forge Addresses reviewer feedback about update-context scripts failing without forge support. * feat: add Forge support to shared update-agent-context scripts - Add forge case to bash and PowerShell update-agent-context scripts - Add FORGE_FILE variable mapping to AGENTS.md (like opencode/codex/pi) - Add forge to all usage/help text and ValidateSet parameters - Include forge in update_all_existing_agents functions Wrapper script improvements: - Simplify Forge wrapper scripts to unconditionally delegate to shared script - Remove complex fallback logic that created stub AGENTS.md files - Add clear error messages if shared script is missing/not executable - Align with pattern used by other integrations (opencode, bob, etc.) Benefits: - Plan command's {AGENT_SCRIPT} now works for Forge users - No more incomplete/stub context files masking missing support - Cleaner, more maintainable code (-39 lines in wrappers) - Consistent architecture across all integrations Update AGENTS.md to document that Forge integration ensures shared scripts include forge support for context updates. Addresses reviewer feedback about Forge support being incomplete for workflow steps that run {AGENT_SCRIPT}. * fix: resolve unbound variable and duplicate file update issues - Fix undefined FORGE_FILE variable in bash update-agent-context.sh - Add missing FORGE_FILE definition pointing to AGENTS.md - Update comment to include Forge in list of agents sharing AGENTS.md - Prevents crash with 'set -u' when running without explicit agent type - Add deduplication logic to PowerShell update-agent-context.ps1 - Implement Update-IfNew helper to track processed files by real path - Prevents AGENTS.md from being rewritten multiple times - Matches existing deduplication behavior in bash script - Prevent duplicate YAML keys in Forge frontmatter injection - Check for existing 'name:' field before injection in both scripts - PowerShell: Parse frontmatter to detect existing name field - Bash: Enhanced awk script to check frontmatter state - Future-proofs against template changes that add name fields All scripts now have consistent behavior and proper error handling. * fix: import timezone from datetime for rate limit header parsing The _parse_rate_limit_headers() function uses timezone.utc on line 82 but timezone was never imported from datetime. This would raise a NameError the first time GitHub API rate-limit headers are parsed. Import timezone alongside datetime to fix the missing import. * fix: correct variable scope in PowerShell deduplication and update docs - Fix Update-IfNew in PowerShell update-agent-context.ps1 - Changed from $script: scope to Set-Variable -Scope 1 - Properly mutates parent function's local variables - Fixes deduplication tracking for shared AGENTS.md file - Prevents incorrect default Claude file creation - Update create-release-packages.sh documentation - Add missing 'forge' to AGENTS list in header comment - Documentation now matches actual ALL_AGENTS array Without this fix, AGENTS.md would be updated multiple times (once for each agent sharing it: opencode, codex, amp, kiro, bob, pi, forge) and the script would always create a default Claude file even when agent files exist. * fix: resolve missing scaffold_from_core_pack import in tests The test_core_pack_scaffold.py imports scaffold_from_core_pack from specify_cli, but that symbol does not exist in the current codebase. This causes an ImportError when the test module is loaded. Implement a resilient resolver that: - Tries scaffold_from_core_pack first (expected name) - Falls back to alternative names (scaffold_from_release_pack, etc.) - Gracefully skips tests if no compatible entrypoint exists This prevents import-time failures and makes the test future-proof for when the actual scaffolding function is added or restored. * fix: prevent duplicate path prefixes and consolidate shared file updates PowerShell release script: - Add deduplication pass to Rewrite-Paths function - Prevents .specify.specify/ double prefixes in generated commands - Matches bash script behavior with regex '(?:\.specify/){2,}' -> '.specify/' Bash update-agent-context script: - Consolidate AGENTS.md updates to single call - Remove redundant calls for $AMP_FILE, $KIRO_FILE, $BOB_FILE, $FORGE_FILE - Update label to 'Codex/opencode/Amp/Kiro/Bob/Pi/Forge' to reflect all agents - Prevents always-deduped $FORGE_FILE call that never executed Both fixes improve efficiency and correctness while maintaining parity between bash and PowerShell implementations. * refactor: remove unused rate-limit helpers and improve PowerShell scripts - Remove unused _parse_rate_limit_headers() and _format_rate_limit_error() from src/specify_cli/__init__.py (56 lines of dead code) - Add GENRELEASES_DIR override support to PowerShell release script with comprehensive safety checks (parity with bash script) - Remove redundant shared-file update calls from PowerShell agent context script (AMP_FILE, KIRO_FILE, BOB_FILE, FORGE_FILE all resolve to AGENTS.md) - Update test docstring to accurately reflect Forge's {{parameters}} token Changes align PowerShell scripts with bash equivalents and reduce maintenance burden by removing dead code. * fix: add missing 'forge' to PowerShell usage text and fix agent order - Add 'forge' to usage message in Print-Summary (was missing from list) - Reorder ValidateSet to match bash script order (vibe before qodercli) This ensures PowerShell script documentation matches bash script and includes all supported agents consistently. * refactor: remove old architecture files deleted in b1832c9 Remove files that were deleted in b1832c9 (Stage 6 migration) but remained on this branch due to merge conflicts: - Remove .github/workflows/scripts/create-release-packages.{sh,ps1} (replaced by inline release.yml + uv tool install) - Remove tests/test_core_pack_scaffold.py (scaffold system removed, tests no longer relevant) These files existed on the feature branch because they were modified before b1832c9 landed. The merge kept our versions, but they should be deleted to align with the new integration-only architecture. This PR now focuses purely on adding NEW Forge integration support, not restoring old architecture. * refactor: remove unused timezone import from __init__.py Remove unused timezone import that was added in 4a57f79 for rate-limit header parsing but became obsolete when rate-limit helper functions were removed in 59c4212 (and also removed in upstream b1832c9). No functional changes - purely cleanup of unused import. * docs: clarify that handoffs is a Claude Code feature, not Forge's Update docstrings to accurately explain that the 'handoffs' frontmatter key is from Claude Code (for multi-agent collaboration) and is stripped because it causes Forge to hang, not because it's a Forge-specific feature. Changes: - Module docstring: 'Forge-specific collaboration feature' → 'Claude Code feature that causes Forge to hang' - Class docstring: Add '(incompatible with Forge)' clarification - Method docstring: Add '(from Claude Code templates; incompatible with Forge)' context This avoids implying that handoffs belongs to Forge when it actually comes from spec-kit templates designed for Claude Code compatibility. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
1 parent 08f69e3 commit b8e7851

File tree

11 files changed

+569
-69
lines changed

11 files changed

+569
-69
lines changed

AGENTS.md

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ Specify supports multiple AI agents by generating agent-specific command files a
4848
| **Kimi Code** | `.kimi/skills/` | Markdown | `kimi` | Kimi Code CLI (Moonshot AI) |
4949
| **Pi Coding Agent** | `.pi/prompts/` | Markdown | `pi` | Pi terminal coding agent |
5050
| **iFlow CLI** | `.iflow/commands/` | Markdown | `iflow` | iFlow CLI (iflow-ai) |
51+
| **Forge** | `.forge/commands/` | Markdown | `forge` | Forge CLI (forgecode.dev) |
5152
| **IBM Bob** | `.bob/commands/` | Markdown | N/A (IDE-based) | IBM Bob IDE |
5253
| **Trae** | `.trae/rules/` | Markdown | N/A (IDE-based) | Trae IDE |
5354
| **Antigravity** | `.agent/commands/` | Markdown | N/A (IDE-based) | Antigravity IDE (`--ai agy --ai-skills`) |
@@ -333,6 +334,7 @@ Require a command-line tool to be installed:
333334
- **Mistral Vibe**: `vibe` CLI
334335
- **Pi Coding Agent**: `pi` CLI
335336
- **iFlow CLI**: `iflow` CLI
337+
- **Forge**: `forge` CLI
336338

337339
### IDE-Based Agents
338340

@@ -351,7 +353,7 @@ Work within integrated development environments:
351353

352354
### Markdown Format
353355

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
356+
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, Forge
355357

356358
**Standard format:**
357359

@@ -419,9 +421,49 @@ Different agents use different argument placeholders:
419421

420422
- **Markdown/prompt-based**: `$ARGUMENTS`
421423
- **TOML-based**: `{{args}}`
424+
- **Forge-specific**: `{{parameters}}` (uses custom parameter syntax)
422425
- **Script placeholders**: `{SCRIPT}` (replaced with actual script path)
423426
- **Agent placeholders**: `__AGENT__` (replaced with agent name)
424427

428+
## Special Processing Requirements
429+
430+
Some agents require custom processing beyond the standard template transformations:
431+
432+
### Copilot Integration
433+
434+
GitHub Copilot has unique requirements:
435+
- Commands use `.agent.md` extension (not `.md`)
436+
- Each command gets a companion `.prompt.md` file in `.github/prompts/`
437+
- Installs `.vscode/settings.json` with prompt file recommendations
438+
- Context file lives at `.github/copilot-instructions.md`
439+
440+
Implementation: Extends `IntegrationBase` with custom `setup()` method that:
441+
1. Processes templates with `process_template()`
442+
2. Generates companion `.prompt.md` files
443+
3. Merges VS Code settings
444+
445+
### Forge Integration
446+
447+
Forge has special frontmatter and argument requirements:
448+
- Uses `{{parameters}}` instead of `$ARGUMENTS`
449+
- Strips `handoffs` frontmatter key (Forge-specific collaboration feature)
450+
- Injects `name` field into frontmatter when missing
451+
452+
Implementation: Extends `MarkdownIntegration` with custom `setup()` method that:
453+
1. Inherits standard template processing from `MarkdownIntegration`
454+
2. Adds extra `$ARGUMENTS``{{parameters}}` replacement after template processing
455+
3. Applies Forge-specific transformations via `_apply_forge_transformations()`
456+
4. Strips `handoffs` frontmatter key
457+
5. Injects missing `name` fields
458+
6. Ensures the shared `update-agent-context.*` scripts include a `forge` case that maps context updates to `AGENTS.md` (similar to `opencode`/`codex`/`pi`) and lists `forge` in their usage/help text
459+
460+
### Standard Markdown Agents
461+
462+
Most agents (Bob, Claude, Windsurf, etc.) use `MarkdownIntegration`:
463+
- Simple subclass with just `key`, `config`, `registrar_config` set
464+
- Inherits standard processing from `MarkdownIntegration.setup()`
465+
- No custom processing needed
466+
425467
## Testing New Agent Integration
426468

427469
1. **Build test**: Run package creation script locally

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ Community projects that extend, visualize, or build on Spec Kit:
285285
| [CodeBuddy CLI](https://www.codebuddy.ai/cli) || |
286286
| [Codex CLI](https://github.com/openai/codex) || Requires `--ai-skills`. Codex recommends [skills](https://developers.openai.com/codex/skills) and treats [custom prompts](https://developers.openai.com/codex/custom-prompts) as deprecated. Spec-kit installs Codex skills into `.agents/skills` and invokes them as `$speckit-<command>`. |
287287
| [Cursor](https://cursor.sh/) || |
288+
| [Forge](https://forgecode.dev/) || CLI tool: `forge` |
288289
| [Gemini CLI](https://github.com/google-gemini/gemini-cli) || |
289290
| [GitHub Copilot](https://code.visualstudio.com/) || |
290291
| [IBM Bob](https://www.ibm.com/products/bob) || IDE-based agent with slash command support |
@@ -314,14 +315,14 @@ The `specify` command supports the following options:
314315
| Command | Description |
315316
| ------- |------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
316317
| `init` | Initialize a new Specify project from the latest template |
317-
| `check` | Check for installed tools: `git` plus all CLI-based agents configured in `AGENT_CONFIG` (for example: `claude`, `gemini`, `code`/`code-insiders`, `cursor-agent`, `windsurf`, `junie`, `qwen`, `opencode`, `codex`, `kiro-cli`, `shai`, `qodercli`, `vibe`, `kimi`, `iflow`, `pi`, etc.) |
318+
| `check` | Check for installed tools: `git` plus all CLI-based agents configured in `AGENT_CONFIG` (for example: `claude`, `gemini`, `code`/`code-insiders`, `cursor-agent`, `windsurf`, `junie`, `qwen`, `opencode`, `codex`, `kiro-cli`, `shai`, `qodercli`, `vibe`, `kimi`, `iflow`, `pi`, `forge`, etc.) |
318319

319320
### `specify init` Arguments & Options
320321

321322
| Argument/Option | Type | Description |
322323
| ---------------------- | -------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
323324
| `<project-name>` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) |
324-
| `--ai` | Option | AI assistant to use (see `AGENT_CONFIG` for the full, up-to-date list). Common options include: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `junie`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `kiro-cli` (`kiro` alias), `agy`, `bob`, `qodercli`, `vibe`, `kimi`, `iflow`, `pi`, or `generic` (requires `--ai-commands-dir`) |
325+
| `--ai` | Option | AI assistant to use (see `AGENT_CONFIG` for the full, up-to-date list). Common options include: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `junie`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `kiro-cli` (`kiro` alias), `agy`, `bob`, `qodercli`, `vibe`, `kimi`, `iflow`, `pi`, `forge`, or `generic` (requires `--ai-commands-dir`) |
325326
| `--ai-commands-dir` | Option | Directory for agent command files (required with `--ai generic`, e.g. `.myagent/commands/`) |
326327
| `--script` | Option | Script variant to use: `sh` (bash/zsh) or `ps` (PowerShell) |
327328
| `--ignore-agent-tools` | Flag | Skip checks for AI agent tools like Claude Code |
@@ -376,6 +377,9 @@ specify init my-project --ai codex --ai-skills
376377
# Initialize with Antigravity support
377378
specify init my-project --ai agy --ai-skills
378379

380+
# Initialize with Forge support
381+
specify init my-project --ai forge
382+
379383
# Initialize with an unsupported agent (generic / bring your own agent)
380384
specify init my-project --ai generic --ai-commands-dir .myagent/commands/
381385

@@ -621,7 +625,7 @@ specify init . --force --ai claude
621625
specify init --here --force --ai claude
622626
```
623627

624-
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, or Mistral Vibe 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:
628+
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, Forge, or Mistral Vibe 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:
625629

626630
```bash
627631
specify init <project_name> --ai claude --ignore-agent-tools

scripts/bash/update-agent-context.sh

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@
3030
#
3131
# 5. Multi-Agent Support
3232
# - Handles agent-specific file paths and naming conventions
33-
# - Supports: Claude, Gemini, Copilot, Cursor, Qwen, opencode, Codex, Windsurf, Junie, Kilo Code, Auggie CLI, Roo Code, CodeBuddy CLI, Qoder CLI, Amp, SHAI, Tabnine CLI, Kiro CLI, Mistral Vibe, Kimi Code, Pi Coding Agent, iFlow CLI, Antigravity or Generic
33+
# - Supports: Claude, Gemini, Copilot, Cursor, Qwen, opencode, Codex, Windsurf, Junie, Kilo Code, Auggie CLI, Roo Code, CodeBuddy CLI, Qoder CLI, Amp, SHAI, Tabnine CLI, Kiro CLI, Mistral Vibe, Kimi Code, Pi Coding Agent, iFlow CLI, Forge, Antigravity or Generic
3434
# - Can update single agents or all existing agent files
3535
# - Creates default Claude file if no agent files exist
3636
#
3737
# Usage: ./update-agent-context.sh [agent_type]
38-
# Agent types: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|junie|kilocode|auggie|roo|codebuddy|amp|shai|tabnine|kiro-cli|agy|bob|vibe|qodercli|kimi|trae|pi|iflow|generic
38+
# Agent types: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|junie|kilocode|auggie|roo|codebuddy|amp|shai|tabnine|kiro-cli|agy|bob|vibe|qodercli|kimi|trae|pi|iflow|forge|generic
3939
# Leave empty to update all existing agent files
4040

4141
set -e
@@ -74,7 +74,7 @@ AUGGIE_FILE="$REPO_ROOT/.augment/rules/specify-rules.md"
7474
ROO_FILE="$REPO_ROOT/.roo/rules/specify-rules.md"
7575
CODEBUDDY_FILE="$REPO_ROOT/CODEBUDDY.md"
7676
QODER_FILE="$REPO_ROOT/QODER.md"
77-
# Amp, Kiro CLI, IBM Bob, and Pi all share AGENTS.md — use AGENTS_FILE to avoid
77+
# Amp, Kiro CLI, IBM Bob, Pi, and Forge all share AGENTS.md — use AGENTS_FILE to avoid
7878
# updating the same file multiple times.
7979
AMP_FILE="$AGENTS_FILE"
8080
SHAI_FILE="$REPO_ROOT/SHAI.md"
@@ -86,6 +86,7 @@ VIBE_FILE="$REPO_ROOT/.vibe/agents/specify-agents.md"
8686
KIMI_FILE="$REPO_ROOT/KIMI.md"
8787
TRAE_FILE="$REPO_ROOT/.trae/rules/AGENTS.md"
8888
IFLOW_FILE="$REPO_ROOT/IFLOW.md"
89+
FORGE_FILE="$AGENTS_FILE"
8990

9091
# Template file
9192
TEMPLATE_FILE="$REPO_ROOT/.specify/templates/agent-file-template.md"
@@ -690,12 +691,15 @@ update_specific_agent() {
690691
iflow)
691692
update_agent_file "$IFLOW_FILE" "iFlow CLI" || return 1
692693
;;
694+
forge)
695+
update_agent_file "$AGENTS_FILE" "Forge" || return 1
696+
;;
693697
generic)
694698
log_info "Generic agent: no predefined context file. Use the agent-specific update script for your agent."
695699
;;
696700
*)
697701
log_error "Unknown agent type '$agent_type'"
698-
log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|junie|kilocode|auggie|roo|codebuddy|amp|shai|tabnine|kiro-cli|agy|bob|vibe|qodercli|kimi|trae|pi|iflow|generic"
702+
log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|junie|kilocode|auggie|roo|codebuddy|amp|shai|tabnine|kiro-cli|agy|bob|vibe|qodercli|kimi|trae|pi|iflow|forge|generic"
699703
exit 1
700704
;;
701705
esac
@@ -739,10 +743,7 @@ update_all_existing_agents() {
739743
_update_if_new "$COPILOT_FILE" "GitHub Copilot" || _all_ok=false
740744
_update_if_new "$CURSOR_FILE" "Cursor IDE" || _all_ok=false
741745
_update_if_new "$QWEN_FILE" "Qwen Code" || _all_ok=false
742-
_update_if_new "$AGENTS_FILE" "Codex/opencode" || _all_ok=false
743-
_update_if_new "$AMP_FILE" "Amp" || _all_ok=false
744-
_update_if_new "$KIRO_FILE" "Kiro CLI" || _all_ok=false
745-
_update_if_new "$BOB_FILE" "IBM Bob" || _all_ok=false
746+
_update_if_new "$AGENTS_FILE" "Codex/opencode/Amp/Kiro/Bob/Pi/Forge" || _all_ok=false
746747
_update_if_new "$WINDSURF_FILE" "Windsurf" || _all_ok=false
747748
_update_if_new "$JUNIE_FILE" "Junie" || _all_ok=false
748749
_update_if_new "$KILOCODE_FILE" "Kilo Code" || _all_ok=false
@@ -783,7 +784,7 @@ print_summary() {
783784
fi
784785

785786
echo
786-
log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|junie|kilocode|auggie|roo|codebuddy|amp|shai|tabnine|kiro-cli|agy|bob|vibe|qodercli|kimi|trae|pi|iflow|generic]"
787+
log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|junie|kilocode|auggie|roo|codebuddy|amp|shai|tabnine|kiro-cli|agy|bob|vibe|qodercli|kimi|trae|pi|iflow|forge|generic]"
787788
}
788789

789790
#==============================================================================

0 commit comments

Comments
 (0)