Skip to content

Commit ceba130

Browse files
committed
Add support for Auggie
1 parent 494cded commit ceba130

File tree

9 files changed

+82
-11
lines changed

9 files changed

+82
-11
lines changed

.github/workflows/scripts/create-github-release.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,5 +34,7 @@ gh release create "$VERSION" \
3434
.genreleases/spec-kit-template-codex-ps-"$VERSION".zip \
3535
.genreleases/spec-kit-template-kilocode-sh-"$VERSION".zip \
3636
.genreleases/spec-kit-template-kilocode-ps-"$VERSION".zip \
37+
.genreleases/spec-kit-template-auggie-sh-"$VERSION".zip \
38+
.genreleases/spec-kit-template-auggie-ps-"$VERSION".zip \
3739
--title "Spec Kit Templates - $VERSION_NO_V" \
3840
--notes-file release_notes.md

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,13 +166,16 @@ build_variant() {
166166
kilocode)
167167
mkdir -p "$base_dir/.kilocode/workflows"
168168
generate_commands kilocode md "\$ARGUMENTS" "$base_dir/.kilocode/workflows" "$script" ;;
169+
auggie)
170+
mkdir -p "$base_dir/.augment/commands"
171+
generate_commands auggie md "\$ARGUMENTS" "$base_dir/.augment/commands" "$script" ;;
169172
esac
170173
( cd "$base_dir" && zip -r "../spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip" . )
171174
echo "Created $GENRELEASES_DIR/spec-kit-template-${agent}-${script}-${NEW_VERSION}.zip"
172175
}
173176

174177
# Determine agent list
175-
ALL_AGENTS=(claude gemini copilot cursor qwen opencode windsurf codex kilocode)
178+
ALL_AGENTS=(claude gemini copilot cursor qwen opencode windsurf codex kilocode auggie)
176179
ALL_SCRIPTS=(sh ps)
177180

178181

AGENTS.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,23 @@ AI_CHOICES = {
5959
}
6060
```
6161

62+
Also update the `agent_folder_map` in the same file to include the new agent's folder for the security notice:
63+
64+
```python
65+
agent_folder_map = {
66+
"claude": ".claude/",
67+
"gemini": ".gemini/",
68+
"cursor": ".cursor/",
69+
"qwen": ".qwen/",
70+
"opencode": ".opencode/",
71+
"codex": ".codex/",
72+
"windsurf": ".windsurf/", # Add new agent folder here
73+
"kilocode": ".kilocode/",
74+
"auggie": ".auggie/",
75+
"copilot": ".github/"
76+
}
77+
```
78+
6279
#### 2. Update CLI Help Text
6380

6481
Update all help text and examples to include the new agent:

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1010
### Added
1111

1212
- Support for Kilo Code. Thank you [@shahrukhkhan489](https://github.com/shahrukhkhan489) with [#394](https://github.com/github/spec-kit/pull/394).
13+
- Support for Auggie CLI. Thank you [@hungthai1401](https://github.com/hungthai1401) with [#137](https://github.com/github/spec-kit/pull/137)
14+
- Agent folder security notice displayed after project provisioning completion, warning users that some agents may store credentials or auth tokens in their agent folders and recommending adding relevant folders to `.gitignore` to prevent accidental credential leakage.
1315

1416
### Changed
1517

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ Want to see Spec Kit in action? Watch our [video overview](https://www.youtube.c
105105
| [opencode](https://opencode.ai/) || |
106106
| [Windsurf](https://windsurf.com/) || |
107107
| [Kilo Code](https://github.com/Kilo-Org/kilocode) || |
108+
| [Auggie CLI](https://docs.augmentcode.com/cli/overview) || |
108109
| [Codex CLI](https://github.com/openai/codex) | ⚠️ | Codex [does not support](https://github.com/openai/codex/issues/2890) custom arguments for slash commands. |
109110

110111
## 🔧 Specify CLI Reference
@@ -123,7 +124,7 @@ The `specify` command supports the following options:
123124
| Argument/Option | Type | Description |
124125
|------------------------|----------|------------------------------------------------------------------------------|
125126
| `<project-name>` | Argument | Name for your new project directory (optional if using `--here`) |
126-
| `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor`, `qwen`, `opencode`, `codex`, or `windsurf` |
127+
| `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, or `auggie` |
127128
| `--script` | Option | Script variant to use: `sh` (bash/zsh) or `ps` (PowerShell) |
128129
| `--ignore-agent-tools` | Flag | Skip checks for AI agent tools like Claude Code |
129130
| `--no-git` | Flag | Skip git repository initialization |

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "specify-cli"
3-
version = "0.0.13"
3+
version = "0.0.14"
44
description = "Specify CLI, part of GitHub Spec Kit. A tool to bootstrap your projects for Spec-Driven Development (SDD)."
55
requires-python = ">=3.11"
66
dependencies = [

scripts/bash/update-agent-context.sh

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ QWEN_FILE="$REPO_ROOT/QWEN.md"
6767
AGENTS_FILE="$REPO_ROOT/AGENTS.md"
6868
WINDSURF_FILE="$REPO_ROOT/.windsurf/rules/specify-rules.md"
6969
KILOCODE_FILE="$REPO_ROOT/.kilocode/rules/specify-rules.md"
70+
AUGGIE_FILE="$REPO_ROOT/.augment/rules/specify-rules.md"
7071

7172
# Template file
7273
TEMPLATE_FILE="$REPO_ROOT/.specify/templates/agent-file-template.md"
@@ -572,9 +573,12 @@ update_specific_agent() {
572573
kilocode)
573574
update_agent_file "$KILOCODE_FILE" "Kilo Code"
574575
;;
576+
auggie)
577+
update_agent_file "$AUGGIE_FILE" "Auggie CLI"
578+
;;
575579
*)
576580
log_error "Unknown agent type '$agent_type'"
577-
log_error "Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode"
581+
log_error "Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode|auggie"
578582
exit 1
579583
;;
580584
esac
@@ -623,6 +627,11 @@ update_all_existing_agents() {
623627
update_agent_file "$KILOCODE_FILE" "Kilo Code"
624628
found_agent=true
625629
fi
630+
631+
if [[ -f "$AUGGIE_FILE" ]]; then
632+
update_agent_file "$AUGGIE_FILE" "Auggie CLI"
633+
found_agent=true
634+
fi
626635

627636
# If no agent files exist, create a default Claude file
628637
if [[ "$found_agent" == false ]]; then
@@ -647,7 +656,7 @@ print_summary() {
647656
fi
648657

649658
echo
650-
log_info "Usage: $0 [claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode]"
659+
log_info "Usage: $0 [claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode|auggie]"
651660
}
652661

653662
#==============================================================================

scripts/powershell/update-agent-context.ps1

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Relies on common helper functions in common.ps1
2525
#>
2626
param(
2727
[Parameter(Position=0)]
28-
[ValidateSet('claude','gemini','copilot','cursor','qwen','opencode','codex','windsurf','kilocode')]
28+
[ValidateSet('claude','gemini','copilot','cursor','qwen','opencode','codex','windsurf','kilocode','auggie')]
2929
[string]$AgentType
3030
)
3131

@@ -52,6 +52,7 @@ $QWEN_FILE = Join-Path $REPO_ROOT 'QWEN.md'
5252
$AGENTS_FILE = Join-Path $REPO_ROOT 'AGENTS.md'
5353
$WINDSURF_FILE = Join-Path $REPO_ROOT '.windsurf/rules/specify-rules.md'
5454
$KILOCODE_FILE = Join-Path $REPO_ROOT '.kilocode/rules/specify-rules.md'
55+
$AUGGIE_FILE = Join-Path $REPO_ROOT '.augment/rules/specify-rules.md'
5556

5657
$TEMPLATE_FILE = Join-Path $REPO_ROOT '.specify/templates/agent-file-template.md'
5758

@@ -372,7 +373,8 @@ function Update-SpecificAgent {
372373
'codex' { Update-AgentFile -TargetFile $AGENTS_FILE -AgentName 'Codex CLI' }
373374
'windsurf' { Update-AgentFile -TargetFile $WINDSURF_FILE -AgentName 'Windsurf' }
374375
'kilocode' { Update-AgentFile -TargetFile $KILOCODE_FILE -AgentName 'Kilo Code' }
375-
default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode'; return $false }
376+
'auggie' { Update-AgentFile -TargetFile $AUGGIE_FILE -AgentName 'Auggie CLI' }
377+
default { Write-Err "Unknown agent type '$Type'"; Write-Err 'Expected: claude|gemini|copilot|cursor|qwen|opencode|codex|windsurf|kilocode|auggie'; return $false }
376378
}
377379
}
378380

@@ -387,6 +389,7 @@ function Update-AllExistingAgents {
387389
if (Test-Path $AGENTS_FILE) { if (-not (Update-AgentFile -TargetFile $AGENTS_FILE -AgentName 'Codex/opencode')) { $ok = $false }; $found = $true }
388390
if (Test-Path $WINDSURF_FILE) { if (-not (Update-AgentFile -TargetFile $WINDSURF_FILE -AgentName 'Windsurf')) { $ok = $false }; $found = $true }
389391
if (Test-Path $KILOCODE_FILE) { if (-not (Update-AgentFile -TargetFile $KILOCODE_FILE -AgentName 'Kilo Code')) { $ok = $false }; $found = $true }
392+
if (Test-Path $AUGGIE_FILE) { if (-not (Update-AgentFile -TargetFile $AUGGIE_FILE -AgentName 'Auggie CLI')) { $ok = $false }; $found = $true }
390393
if (-not $found) {
391394
Write-Info 'No existing agent files found, creating default Claude file...'
392395
if (-not (Update-AgentFile -TargetFile $CLAUDE_FILE -AgentName 'Claude Code')) { $ok = $false }

src/specify_cli/__init__.py

Lines changed: 38 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ def _github_auth_headers(cli_token: str | None = None) -> dict:
7373
"codex": "Codex CLI",
7474
"windsurf": "Windsurf",
7575
"kilocode": "Kilo Code",
76+
"auggie": "Auggie CLI",
7677
}
7778
# Add script type choices
7879
SCRIPT_TYPE_CHOICES = {"sh": "POSIX Shell (bash/zsh)", "ps": "PowerShell"}
@@ -748,7 +749,7 @@ def ensure_executable_scripts(project_path: Path, tracker: StepTracker | None =
748749
@app.command()
749750
def init(
750751
project_name: str = typer.Argument(None, help="Name for your new project directory (optional if using --here)"),
751-
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor, qwen, opencode, codex, windsurf, or kilocode"),
752+
ai_assistant: str = typer.Option(None, "--ai", help="AI assistant to use: claude, gemini, copilot, cursor, qwen, opencode, codex, windsurf, kilocode, or auggie"),
752753
script_type: str = typer.Option(None, "--script", help="Script type to use: sh or ps"),
753754
ignore_agent_tools: bool = typer.Option(False, "--ignore-agent-tools", help="Skip checks for AI agent tools like Claude Code"),
754755
no_git: bool = typer.Option(False, "--no-git", help="Skip git repository initialization"),
@@ -762,7 +763,7 @@ def init(
762763
763764
This command will:
764765
1. Check that required tools are installed (git is optional)
765-
2. Let you choose your AI assistant (Claude Code, Gemini CLI, GitHub Copilot, Cursor, Qwen Code, opencode, Codex CLI, Windsurf, or Kilo Code)
766+
2. Let you choose your AI assistant (Claude Code, Gemini CLI, GitHub Copilot, Cursor, Qwen Code, opencode, Codex CLI, Windsurf, Kilo Code, or Auggie CLI)
766767
3. Download the appropriate template from GitHub
767768
4. Extract the template to a new project directory or current directory
768769
5. Initialize a fresh git repository (if not --no-git and no existing repo)
@@ -778,6 +779,7 @@ def init(
778779
specify init my-project --ai opencode
779780
specify init my-project --ai codex
780781
specify init my-project --ai windsurf
782+
specify init my-project --ai auggie
781783
specify init --ignore-agent-tools my-project
782784
specify init --here --ai claude
783785
specify init --here --ai codex
@@ -879,6 +881,10 @@ def init(
879881
if not check_tool("codex", "Install from: https://github.com/openai/codex"):
880882
console.print("[red]Error:[/red] Codex CLI is required for Codex projects")
881883
agent_tool_missing = True
884+
elif selected_ai == "auggie":
885+
if not check_tool("auggie", "Install from: https://docs.augmentcode.com/cli/setup-auggie/install-auggie-cli"):
886+
console.print("[red]Error:[/red] Auggie CLI is required for Auggie CLI projects")
887+
agent_tool_missing = True
882888
# GitHub Copilot and Cursor checks are not needed as they're typically available in supported IDEs
883889

884890
if agent_tool_missing:
@@ -982,6 +988,32 @@ def init(
982988
console.print(tracker.render())
983989
console.print("\n[bold green]Project ready.[/bold green]")
984990

991+
# Agent folder security notice
992+
agent_folder_map = {
993+
"claude": ".claude/",
994+
"gemini": ".gemini/",
995+
"cursor": ".cursor/",
996+
"qwen": ".qwen/",
997+
"opencode": ".opencode/",
998+
"codex": ".codex/",
999+
"windsurf": ".windsurf/",
1000+
"kilocode": ".kilocode/",
1001+
"auggie": ".auggie/",
1002+
"copilot": ".github/"
1003+
}
1004+
1005+
if selected_ai in agent_folder_map:
1006+
agent_folder = agent_folder_map[selected_ai]
1007+
security_notice = Panel(
1008+
f"Some agents may store credentials, auth tokens, or other identifying and private artifacts in the agent folder within your project.\n"
1009+
f"Consider adding [cyan]{agent_folder}[/cyan] (or parts of it) to [cyan].gitignore[/cyan] to prevent accidental credential leakage.",
1010+
title="[yellow]Agent Folder Security[/yellow]",
1011+
border_style="yellow",
1012+
padding=(1, 2)
1013+
)
1014+
console.print()
1015+
console.print(security_notice)
1016+
9851017
# Boxed "Next steps" section
9861018
steps_lines = []
9871019
if not here:
@@ -1010,7 +1042,7 @@ def init(
10101042
steps_lines.append(" 2.4 [cyan]/tasks[/] - Generate actionable tasks")
10111043
steps_lines.append(" 2.5 [cyan]/implement[/] - Execute implementation")
10121044

1013-
steps_panel = Panel("\n".join(steps_lines), title="Next steps", border_style="cyan", padding=(1,2))
1045+
steps_panel = Panel("\n".join(steps_lines), title="Next Steps", border_style="cyan", padding=(1,2))
10141046
console.print()
10151047
console.print(steps_panel)
10161048

@@ -1044,6 +1076,7 @@ def check():
10441076
tracker.add("kilocode", "Kilo Code IDE (optional)")
10451077
tracker.add("opencode", "opencode")
10461078
tracker.add("codex", "Codex CLI")
1079+
tracker.add("auggie", "Auggie CLI (optional)")
10471080

10481081
git_ok = check_tool_for_tracker("git", "https://git-scm.com/downloads", tracker)
10491082
claude_ok = check_tool_for_tracker("claude", "https://docs.anthropic.com/en/docs/claude-code/setup", tracker)
@@ -1056,14 +1089,15 @@ def check():
10561089
kilocode_ok = check_tool_for_tracker("kilocode", "https://kilocode.com/", tracker)
10571090
opencode_ok = check_tool_for_tracker("opencode", "https://opencode.ai/", tracker)
10581091
codex_ok = check_tool_for_tracker("codex", "https://github.com/openai/codex", tracker)
1092+
auggie_ok = check_tool_for_tracker("auggie", "https://auggie.io/", tracker)
10591093

10601094
console.print(tracker.render())
10611095

10621096
console.print("\n[bold green]Specify CLI is ready to use![/bold green]")
10631097

10641098
if not git_ok:
10651099
console.print("[dim]Tip: Install git for repository management[/dim]")
1066-
if not (claude_ok or gemini_ok or cursor_ok or qwen_ok or windsurf_ok or kilocode_ok or opencode_ok or codex_ok):
1100+
if not (claude_ok or gemini_ok or cursor_ok or qwen_ok or windsurf_ok or kilocode_ok or opencode_ok or codex_ok or auggie_ok):
10671101
console.print("[dim]Tip: Install an AI assistant for the best experience[/dim]")
10681102

10691103

0 commit comments

Comments
 (0)