Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/python
{
"name": "SpecKitDevContainer",
// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile
"image": "mcr.microsoft.com/devcontainers/python:1-3.12-bullseye",
"features": {
"ghcr.io/devcontainers/features/common-utils:2": {
"installZsh": true,
"installOhMyZsh": true,
"installOhMyZshConfig": true,
"upgradePackages": true,
"username": "devcontainer",
"userUid": "automatic",
"userGid": "automatic"
},
"ghcr.io/devcontainers/features/dotnet:2": {
"version": "lts"
},
"ghcr.io/devcontainers/features/git:1": {
"ppa": true,
"version": "latest"
}
},

// Use 'forwardPorts' to make a list of ports inside the container available locally.
"forwardPorts": [
8080 // for Spec-Kit documentation site
],
"containerUser": "devcontainer",
"updateRemoteUserUID": true,
"postCreateCommand": "chmod +x ./.devcontainer/post-create.sh && ./.devcontainer/post-create.sh",
"postStartCommand": "git config --global --add safe.directory ${containerWorkspaceFolder}",
"customizations": {
"vscode": {
"extensions": [
"mhutchie.git-graph",
"eamodio.gitlens",
"anweber.reveal-button",
"chrisdias.promptboost",
// Github Copilot
"GitHub.copilot",
"GitHub.copilot-chat",
// Codex
"openai.chatgpt",
// Kilo Code
"kilocode.Kilo-Code",
// Roo Code
"RooVeterinaryInc.roo-cline"
],
"settings": {
"debug.javascript.autoAttachFilter": "disabled" // fix running commands in integrated terminal
}
}
}
}
71 changes: 71 additions & 0 deletions .devcontainer/post-create.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#!/bin/bash

set -e
set -o pipefail

# Function to run a command and show logs only on error
run_command() {
output=$(eval "$*" 2>&1)
exit_code=$?
if [ $exit_code -ne 0 ]; then
echo "[ERROR] Command failed: $*"
echo "$output"
exit $exit_code
fi
}

# Note: We use Bun (instead of npm) as our package manager for its speed and overall efficiency
# It is a drop-in replacement for Node.js, so we can install npm packages through it without issues
echo "📦 Installing Bun Package Manager..."
run_command "curl -fsSL https://bun.sh/install | bash"
source ~/.bashrc

export BUN_INSTALL="$HOME/.bun"
export PATH="$BUN_INSTALL/bin:$PATH"

# Installing CLI-based AI Agents

echo "🤖 Installing Copilot CLI..."
run_command "bun add --global @github/copilot@latest"
echo "✅ Done"

echo "🤖 Installing Claude CLI..."
run_command "bun add --global @anthropic-ai/claude-code@latest"
echo "✅ Done"

echo "🤖 Installing Codex CLI..."
run_command "bun add --global @openai/codex@latest"
echo "✅ Done"

echo "🤖 Installing Gemini CLI..."
run_command "bun add --global @google/gemini-cli@latest"
echo "✅ Done"

echo "🤖 Installing Augie CLI..."
run_command "bun add --global @augmentcode/auggie@latest"
echo "✅ Done"

echo "🤖 Installing Qwen Code CLI..."
run_command "bun add --global @qwen-code/qwen-code@latest"
echo "✅ Done"

echo "🤖 Installing OpenCode CLI..."
run_command "bun add --global opencode-ai@latest"
echo "✅ Done"

# Installing DocFx (for documentation site)
echo "📚 Installing DocFx..."
run_command "dotnet tool update -g docfx"
echo "✅ Done"

# Installing UV (Python package manager)
echo "🐍 Installing UV - Python Package Manager..."
run_command "pip install uv"
echo "✅ Done"

echo "🧹 Cleaning cache..."
run_command "sudo apt-get autoclean"
run_command "sudo apt-get clean"


echo "✅ Setup completed. Happy coding! 🚀"
45 changes: 45 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,6 +188,51 @@ elif selected_ai == "windsurf":

**Note**: Skip CLI checks for IDE-based agents (Copilot, Windsurf).

#### 7. Update Devcontainer files (Optional)

For agents that have VS Code extensions or require CLI installation, update the devcontainer configuration files:

##### VS Code Extension-based Agents

For agents available as VS Code extensions, add them to `.devcontainer/devcontainer.json`:

```json
{
"customizations": {
"vscode": {
"extensions": [
"GitHub.copilot",
"GitHub.copilot-chat",
// [New Agent Name]
"[Agent Extension ID]"
]
}
}
}
```

##### CLI-based Agents

For agents that require CLI tools, add installation commands to `.devcontainer/post-create.sh`:

```bash
#!/bin/bash

# Existing installations...

echo "🤖 Installing [New Agent Name] CLI..."
# bun add --global [agent-cli-package]@latest # Example for node-based CLI
# or other installation command...

```

**Quick Tips:**

- **Extension-based agents**: Add to the `extensions` array in `devcontainer.json`
- **CLI-based agents**: Add installation scripts to `post-create.sh`
- **Hybrid agents**: May require both extension and CLI installation
- **Test thoroughly**: Ensure installations work in the devcontainer environment

## Agent Categories

### CLI-Based Agents
Expand Down
17 changes: 17 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,23 @@ These are one time installations required to be able to test your changes locall
1. Install [Git](https://git-scm.com/downloads)
1. Have an [AI coding agent available](README.md#-supported-ai-agents)

<details>
<summary><b>💡 Hint if you are using <code>VSCode</code> or <code>Github Codespaces</code> as your IDE</b></summary>

<br>

Provided you have [Docker](https://docker.com) installed on your machine, you can leverage [Dev Containers](https://containers.dev) through this [VSCode extension](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers), to easily setup your development environment, with aforementioned tools already installed and configured, thanks to the `.devcontainer/devcontainer.json` file (located at the root of the project).

To do so, simply:

- Checkout the repo
- Open it with VSCode
- Open the [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) and select "Dev Containers: Open Folder in Container..."

On [Github Codespaces](https://github.com/features/codespaces) it's even simpler, as it leverages the `.devcontainer/devcontainer.json` automatically upon opening the codespace.

</details>

## Submitting a pull request

>[!NOTE]
Expand Down