Skip to content

Commit f7dd438

Browse files
committed
feat: add Aider CLI support and update related documentation
1 parent 56deda7 commit f7dd438

File tree

12 files changed

+134
-85
lines changed

12 files changed

+134
-85
lines changed

.devcontainer/devcontainer.json

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,23 @@
3838
"vscode": {
3939
"extensions": [
4040
"mhutchie.git-graph",
41-
"eamodio.gitlens",
42-
"anweber.reveal-button",
43-
"chrisdias.promptboost",
44-
// Github Copilot
45-
"GitHub.copilot",
46-
"GitHub.copilot-chat",
47-
// Codex
48-
"openai.chatgpt",
49-
// Kilo Code
50-
"kilocode.Kilo-Code",
51-
// Roo Code
52-
"RooVeterinaryInc.roo-cline",
53-
// Amazon Developer Q
54-
"AmazonWebServices.amazon-q-vscode",
55-
// Claude Code
56-
"anthropic.claude-code"
41+
// "eamodio.gitlens",
42+
// "anweber.reveal-button",
43+
// "chrisdias.promptboost",
44+
// // Github Copilot
45+
// "GitHub.copilot",
46+
// "GitHub.copilot-chat",
47+
// // Codex
48+
// "openai.chatgpt",
49+
// // Kilo Code
50+
// "kilocode.Kilo-Code",
51+
// // Roo Code
52+
// "RooVeterinaryInc.roo-cline",
53+
// // Amazon Developer Q
54+
// "AmazonWebServices.amazon-q-vscode",
55+
// // Claude Code
56+
// "anthropic.claude-code",
57+
"lee2py.aider-composer"
5758
],
5859
"settings": {
5960
"debug.javascript.autoAttachFilter": "disabled", // fix running commands in integrated terminal

.devcontainer/post-create.sh

Lines changed: 54 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -23,65 +23,69 @@ run_command() {
2323

2424
# Installing CLI-based AI Agents
2525

26-
echo -e "\n🤖 Installing Copilot CLI..."
27-
run_command "npm install -g @github/copilot@latest"
28-
echo "✅ Done"
26+
# echo -e "\n🤖 Installing Copilot CLI..."
27+
# run_command "npm install -g @github/copilot@latest"
28+
# echo "✅ Done"
2929

30-
echo -e "\n🤖 Installing Claude CLI..."
31-
run_command "npm install -g @anthropic-ai/claude-code@latest"
32-
echo "✅ Done"
30+
# echo -e "\n🤖 Installing Claude CLI..."
31+
# run_command "npm install -g @anthropic-ai/claude-code@latest"
32+
# echo "✅ Done"
3333

34-
echo -e "\n🤖 Installing Codex CLI..."
35-
run_command "npm install -g @openai/codex@latest"
36-
echo "✅ Done"
34+
# echo -e "\n🤖 Installing Codex CLI..."
35+
# run_command "npm install -g @openai/codex@latest"
36+
# echo "✅ Done"
3737

38-
echo -e "\n🤖 Installing Gemini CLI..."
39-
run_command "npm install -g @google/gemini-cli@latest"
40-
echo "✅ Done"
38+
# echo -e "\n🤖 Installing Gemini CLI..."
39+
# run_command "npm install -g @google/gemini-cli@latest"
40+
# echo "✅ Done"
4141

42-
echo -e "\n🤖 Installing Augie CLI..."
43-
run_command "npm install -g @augmentcode/auggie@latest"
44-
echo "✅ Done"
42+
# echo -e "\n🤖 Installing Augie CLI..."
43+
# run_command "npm install -g @augmentcode/auggie@latest"
44+
# echo "✅ Done"
4545

46-
echo -e "\n🤖 Installing Qwen Code CLI..."
47-
run_command "npm install -g @qwen-code/qwen-code@latest"
48-
echo "✅ Done"
46+
# echo -e "\n🤖 Installing Qwen Code CLI..."
47+
# run_command "npm install -g @qwen-code/qwen-code@latest"
48+
# echo "✅ Done"
4949

50-
echo -e "\n🤖 Installing OpenCode CLI..."
51-
run_command "npm install -g opencode-ai@latest"
52-
echo "✅ Done"
50+
# echo -e "\n🤖 Installing OpenCode CLI..."
51+
# run_command "npm install -g opencode-ai@latest"
52+
# echo "✅ Done"
5353

54-
echo -e "\n🤖 Installing Amazon Q CLI..."
55-
# 👉🏾 https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-verify-download.html
56-
57-
run_command "curl --proto '=https' --tlsv1.2 -sSf 'https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip' -o 'q.zip'"
58-
run_command "curl --proto '=https' --tlsv1.2 -sSf 'https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip.sig' -o 'q.zip.sig'"
59-
cat > amazonq-public-key.asc << 'EOF'
60-
-----BEGIN PGP PUBLIC KEY BLOCK-----
61-
62-
mDMEZig60RYJKwYBBAHaRw8BAQdAy/+G05U5/EOA72WlcD4WkYn5SInri8pc4Z6D
63-
BKNNGOm0JEFtYXpvbiBRIENMSSBUZWFtIDxxLWNsaUBhbWF6b24uY29tPoiZBBMW
64-
CgBBFiEEmvYEF+gnQskUPgPsUNx6jcJMVmcFAmYoOtECGwMFCQPCZwAFCwkIBwIC
65-
IgIGFQoJCAsCBBYCAwECHgcCF4AACgkQUNx6jcJMVmef5QD/QWWEGG/cOnbDnp68
66-
SJXuFkwiNwlH2rPw9ZRIQMnfAS0A/0V6ZsGB4kOylBfc7CNfzRFGtovdBBgHqA6P
67-
zQ/PNscGuDgEZig60RIKKwYBBAGXVQEFAQEHQC4qleONMBCq3+wJwbZSr0vbuRba
68-
D1xr4wUPn4Avn4AnAwEIB4h+BBgWCgAmFiEEmvYEF+gnQskUPgPsUNx6jcJMVmcF
69-
AmYoOtECGwwFCQPCZwAACgkQUNx6jcJMVmchMgEA6l3RveCM0YHAGQaSFMkguoAo
70-
vK6FgOkDawgP0NPIP2oA/jIAO4gsAntuQgMOsPunEdDeji2t+AhV02+DQIsXZpoB
71-
=f8yY
72-
-----END PGP PUBLIC KEY BLOCK-----
73-
EOF
74-
run_command "gpg --batch --import amazonq-public-key.asc"
75-
run_command "gpg --verify q.zip.sig q.zip"
76-
run_command "unzip -q q.zip"
77-
run_command "chmod +x ./q/install.sh"
78-
run_command "./q/install.sh --no-confirm"
79-
run_command "rm -rf ./q q.zip q.zip.sig amazonq-public-key.asc"
54+
echo -e "\n🤖 Installing Aider CLI..."
55+
run_command "pipx install aider-chat"
8056
echo "✅ Done"
8157

82-
echo -e "\n🤖 Installing CodeBuddy CLI..."
83-
run_command "npm install -g @tencent-ai/codebuddy-code@latest"
84-
echo "✅ Done"
58+
# echo -e "\n🤖 Installing Amazon Q CLI..."
59+
# # 👉🏾 https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-verify-download.html
60+
61+
# run_command "curl --proto '=https' --tlsv1.2 -sSf 'https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip' -o 'q.zip'"
62+
# run_command "curl --proto '=https' --tlsv1.2 -sSf 'https://desktop-release.q.us-east-1.amazonaws.com/latest/q-x86_64-linux.zip.sig' -o 'q.zip.sig'"
63+
# cat > amazonq-public-key.asc << 'EOF'
64+
# -----BEGIN PGP PUBLIC KEY BLOCK-----
65+
66+
# mDMEZig60RYJKwYBBAHaRw8BAQdAy/+G05U5/EOA72WlcD4WkYn5SInri8pc4Z6D
67+
# BKNNGOm0JEFtYXpvbiBRIENMSSBUZWFtIDxxLWNsaUBhbWF6b24uY29tPoiZBBMW
68+
# CgBBFiEEmvYEF+gnQskUPgPsUNx6jcJMVmcFAmYoOtECGwMFCQPCZwAFCwkIBwIC
69+
# IgIGFQoJCAsCBBYCAwECHgcCF4AACgkQUNx6jcJMVmef5QD/QWWEGG/cOnbDnp68
70+
# SJXuFkwiNwlH2rPw9ZRIQMnfAS0A/0V6ZsGB4kOylBfc7CNfzRFGtovdBBgHqA6P
71+
# zQ/PNscGuDgEZig60RIKKwYBBAGXVQEFAQEHQC4qleONMBCq3+wJwbZSr0vbuRba
72+
# D1xr4wUPn4Avn4AnAwEIB4h+BBgWCgAmFiEEmvYEF+gnQskUPgPsUNx6jcJMVmcF
73+
# AmYoOtECGwwFCQPCZwAACgkQUNx6jcJMVmchMgEA6l3RveCM0YHAGQaSFMkguoAo
74+
# vK6FgOkDawgP0NPIP2oA/jIAO4gsAntuQgMOsPunEdDeji2t+AhV02+DQIsXZpoB
75+
# =f8yY
76+
# -----END PGP PUBLIC KEY BLOCK-----
77+
# EOF
78+
# run_command "gpg --batch --import amazonq-public-key.asc"
79+
# run_command "gpg --verify q.zip.sig q.zip"
80+
# run_command "unzip -q q.zip"
81+
# run_command "chmod +x ./q/install.sh"
82+
# run_command "./q/install.sh --no-confirm"
83+
# run_command "rm -rf ./q q.zip q.zip.sig amazonq-public-key.asc"
84+
# echo "✅ Done"
85+
86+
# echo -e "\n🤖 Installing CodeBuddy CLI..."
87+
# run_command "npm install -g @tencent-ai/codebuddy-code@latest"
88+
# echo "✅ Done"
8589

8690
# Installing UV (Python package manager)
8791
echo -e "\n🐍 Installing UV - Python Package Manager..."

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ gh release create "$VERSION" \
5252
.genreleases/spec-kit-template-agy-ps-"$VERSION".zip \
5353
.genreleases/spec-kit-template-bob-sh-"$VERSION".zip \
5454
.genreleases/spec-kit-template-bob-ps-"$VERSION".zip \
55+
.genreleases/spec-kit-template-aider-sh-"$VERSION".zip \
56+
.genreleases/spec-kit-template-aider-ps-"$VERSION".zip \
5557
.genreleases/spec-kit-template-generic-sh-"$VERSION".zip \
5658
.genreleases/spec-kit-template-generic-ps-"$VERSION".zip \
5759
--title "Spec Kit Templates - $VERSION_NO_V" \

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
1515
.PARAMETER Agents
1616
Comma or space separated subset of agents to build (default: all)
17-
Valid agents: claude, gemini, copilot, cursor-agent, qwen, opencode, windsurf, codex, kilocode, auggie, roo, codebuddy, amp, q, bob, qodercli, shai, agy, generic
17+
Valid agents: claude, gemini, copilot, cursor-agent, qwen, opencode, windsurf, codex, kilocode, auggie, roo, codebuddy, amp, q, bob, qodercli, shai, agy, aider, generic
1818
1919
.PARAMETER Scripts
2020
Comma or space separated subset of script types to build (default: both)
@@ -347,6 +347,10 @@ function Build-Variant {
347347
$cmdDir = Join-Path $baseDir ".qoder/commands"
348348
Generate-Commands -Agent 'qodercli' -Extension 'md' -ArgFormat '$ARGUMENTS' -OutputDir $cmdDir -ScriptVariant $Script
349349
}
350+
'aider' {
351+
$cmdDir = Join-Path $baseDir ".aider/commands"
352+
Generate-Commands -Agent 'aider' -Extension 'md' -ArgFormat '$ARGUMENTS' -OutputDir $cmdDir -ScriptVariant $Script
353+
}
350354
'generic' {
351355
$cmdDir = Join-Path $baseDir ".speckit/commands"
352356
Generate-Commands -Agent 'generic' -Extension 'md' -ArgFormat '$ARGUMENTS' -OutputDir $cmdDir -ScriptVariant $Script
@@ -360,7 +364,7 @@ function Build-Variant {
360364
}
361365

362366
# Define all agents and scripts
363-
$AllAgents = @('claude', 'gemini', 'copilot', 'cursor-agent', 'qwen', 'opencode', 'windsurf', 'codex', 'kilocode', 'auggie', 'roo', 'codebuddy', 'amp', 'q', 'bob', 'qodercli', 'shai', 'agy', 'generic')
367+
$AllAgents = @('claude', 'gemini', 'copilot', 'cursor-agent', 'qwen', 'opencode', 'windsurf', 'codex', 'kilocode', 'auggie', 'roo', 'codebuddy', 'amp', 'q', 'bob', 'qodercli', 'shai', 'agy', 'aider', 'generic')
364368
$AllScripts = @('sh', 'ps')
365369

366370
function Normalize-List {

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ build_variant() {
221221
bob)
222222
mkdir -p "$base_dir/.bob/commands"
223223
generate_commands bob md "\$ARGUMENTS" "$base_dir/.bob/commands" "$script" ;;
224+
aider)
225+
mkdir -p "$base_dir/.aider/commands"
226+
generate_commands aider md "\$ARGUMENTS" "$base_dir/.aider/commands" "$script" ;;
224227
generic)
225228
mkdir -p "$base_dir/.speckit/commands"
226229
generate_commands generic md "\$ARGUMENTS" "$base_dir/.speckit/commands" "$script" ;;
@@ -230,7 +233,7 @@ build_variant() {
230233
}
231234

232235
# Determine agent list
233-
ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex kilocode auggie roo codebuddy amp shai q agy bob qodercli generic)
236+
ALL_AGENTS=(claude gemini copilot cursor-agent qwen opencode windsurf codex kilocode auggie roo codebuddy amp shai q agy bob qodercli aider generic)
234237
ALL_SCRIPTS=(sh ps)
235238

236239
norm_list() {

.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,11 @@ docs/dev
5050
.specify/extensions/.cache/
5151
.specify/extensions/.backup/
5252
.specify/extensions/*/local-config.yml
53+
54+
# Custom
55+
.python-version
56+
.aider.*
57+
58+
.mypy_cache/
59+
.pytest_cache/
60+
.coverage

AGENTS.md

Lines changed: 2 additions & 0 deletions
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
| **Amp** | `.agents/commands/` | Markdown | `amp` | Amp CLI |
4949
| **SHAI** | `.shai/commands/` | Markdown | `shai` | SHAI CLI |
5050
| **IBM Bob** | `.bob/commands/` | Markdown | N/A (IDE-based) | IBM Bob IDE |
51+
| **Aider** | `.aider/commands/` | Markdown | `aider` | Aider CLI |
5152
| **Generic** | User-specified via `--ai-commands-dir` | Markdown | N/A | Bring your own agent |
5253

5354
### Step-by-Step Integration Guide
@@ -322,6 +323,7 @@ Require a command-line tool to be installed:
322323
- **Qoder CLI**: `qodercli` CLI
323324
- **Amp**: `amp` CLI
324325
- **SHAI**: `shai` CLI
326+
- **Aider CLI**: `aider` CLI
325327

326328
### IDE-Based Agents
327329

README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,7 @@ Want to see Spec Kit in action? Watch our [video overview](https://www.youtube.c
144144
| Agent | Support | Notes |
145145
| ------------------------------------------------------------------------------------ | ------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
146146
| [Qoder CLI](https://qoder.com/cli) || |
147+
| [Aider CLI](https://aider.chat/) || |
147148
| [Amazon Q Developer CLI](https://aws.amazon.com/developer/learning/q-developer-cli/) | ⚠️ | Amazon Q Developer CLI [does not support](https://github.com/aws/amazon-q-developer-cli/issues/3064) custom arguments for slash commands. |
148149
| [Amp](https://ampcode.com/) || |
149150
| [Auggie CLI](https://docs.augmentcode.com/cli/overview) || |
@@ -173,14 +174,14 @@ The `specify` command supports the following options:
173174
| Command | Description |
174175
| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
175176
| `init` | Initialize a new Specify project from the latest template |
176-
| `check` | Check for installed tools (`git`, `claude`, `gemini`, `code`/`code-insiders`, `cursor-agent`, `windsurf`, `qwen`, `opencode`, `codex`, `shai`, `qodercli`) |
177+
| `check` | Check for installed tools (`git`, `claude`, `gemini`, `code`/`code-insiders`, `cursor-agent`, `windsurf`, `qwen`, `opencode`, `codex`, `shai`, `qodercli`, `aider`) |
177178

178179
### `specify init` Arguments & Options
179180

180181
| Argument/Option | Type | Description |
181182
| ---------------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
182183
| `<project-name>` | Argument | Name for your new project directory (optional if using `--here`, or use `.` for current directory) |
183-
| `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `agy`, `bob`, `qodercli`, or `generic` (requires `--ai-commands-dir`) |
184+
| `--ai` | Option | AI assistant to use: `claude`, `gemini`, `copilot`, `cursor-agent`, `qwen`, `opencode`, `codex`, `windsurf`, `kilocode`, `auggie`, `roo`, `codebuddy`, `amp`, `shai`, `q`, `agy`, `bob`, `qodercli`, `aider`, or `generic` (requires `--ai-commands-dir`) |
184185
| `--ai-commands-dir` | Option | Directory for agent command files (required with `--ai generic`, e.g. `.myagent/commands/`) |
185186
| `--script` | Option | Script variant to use: `sh` (bash/zsh) or `ps` (PowerShell) |
186187
| `--ignore-agent-tools` | Flag | Skip checks for AI agent tools like Claude Code |
@@ -219,6 +220,9 @@ specify init my-project --ai shai
219220
# Initialize with IBM Bob support
220221
specify init my-project --ai bob
221222

223+
# Initialize with Aider support
224+
specify init my-project --ai aider
225+
222226
# Initialize with an unsupported agent (generic / bring your own agent)
223227
specify init my-project --ai generic --ai-commands-dir .myagent/commands/
224228

@@ -393,7 +397,7 @@ specify init . --force --ai claude
393397
specify init --here --force --ai claude
394398
```
395399

396-
The CLI will check if you have Claude Code, Gemini CLI, Cursor CLI, Qwen CLI, opencode, Codex CLI, Qoder CLI, or Amazon Q Developer CLI 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:
400+
The CLI will check if you have Claude Code, Gemini CLI, Cursor CLI, Qwen CLI, opencode, Codex CLI, Qoder CLI, Aider CLI, or Amazon Q Developer CLI 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:
397401

398402
```bash
399403
specify init <project_name> --ai claude --ignore-agent-tools

scripts/bash/update-agent-context.sh

Lines changed: 13 additions & 4 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, Kilo Code, Auggie CLI, Roo Code, CodeBuddy CLI, Qoder CLI, Amp, SHAI, Amazon Q Developer CLI, or Antigravity
33+
# - Supports: Claude, Gemini, Copilot, Cursor, Qwen, opencode, Codex, Windsurf, Kilo Code, Auggie CLI, Roo Code, CodeBuddy CLI, Qoder CLI, Amp, SHAI, Aider CLI, Amazon Q Developer CLI, or Antigravity
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|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qodercli
38+
# Agent types: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qoder|aidercli
3939
# Leave empty to update all existing agent files
4040

4141
set -e
@@ -76,6 +76,7 @@ SHAI_FILE="$REPO_ROOT/SHAI.md"
7676
Q_FILE="$REPO_ROOT/AGENTS.md"
7777
AGY_FILE="$REPO_ROOT/.agent/rules/specify-rules.md"
7878
BOB_FILE="$REPO_ROOT/AGENTS.md"
79+
AIDER_FILE="$REPO_ROOT/.aider/rules/specify-rules.md"
7980

8081
# Template file
8182
TEMPLATE_FILE="$REPO_ROOT/.specify/templates/agent-file-template.md"
@@ -637,12 +638,15 @@ update_specific_agent() {
637638
bob)
638639
update_agent_file "$BOB_FILE" "IBM Bob"
639640
;;
641+
aider)
642+
update_agent_file "$AIDER_FILE" "Aider CLI"
643+
;;
640644
generic)
641645
log_info "Generic agent: no predefined context file. Use the agent-specific update script for your agent."
642646
;;
643647
*)
644648
log_error "Unknown agent type '$agent_type'"
645-
log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qodercli|generic"
649+
log_error "Expected: claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qodercli|aider|generic"
646650
exit 1
647651
;;
648652
esac
@@ -730,6 +734,11 @@ update_all_existing_agents() {
730734
update_agent_file "$BOB_FILE" "IBM Bob"
731735
found_agent=true
732736
fi
737+
738+
if [[ -f "$AIDER_FILE" ]]; then
739+
update_agent_file "$AIDER_FILE" "Aider CLI"
740+
found_agent=true
741+
fi
733742

734743
# If no agent files exist, create a default Claude file
735744
if [[ "$found_agent" == false ]]; then
@@ -755,7 +764,7 @@ print_summary() {
755764

756765
echo
757766

758-
log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qodercli]"
767+
log_info "Usage: $0 [claude|gemini|copilot|cursor-agent|qwen|opencode|codex|windsurf|kilocode|auggie|roo|codebuddy|amp|shai|q|agy|bob|qodercli|aider]"
759768
}
760769

761770
#==============================================================================

0 commit comments

Comments
 (0)