Thank you for considering a contribution! This guide explains how to contribute effectively.
- New prompts — high-quality, reusable slash commands for common developer workflows
- New skills — specialized behaviors that activate in the right context
- New agents — expert agents for specific review or analysis tasks
- Hook improvements — better safety checks, context injection, quality gates
- Bug fixes — any issue discovered in install.sh, validate.sh, or the CI pipeline
- Documentation — clearer explanations, better examples
All contributions must:
- Follow the existing file format — read 2-3 existing files before writing a new one
- Include proper frontmatter — agents, prompts, and skills all have required fields
- Pass CI —
bash validate.shmust pass on all 3 platforms - Have a clear description in the frontmatter
description:field - Be named correctly — skill
name:frontmatter must match the directory name
---
name: my-skill # MUST match parent directory name exactly
description: 'What this skill does and when to use it'
user-invocable: true # true = user can invoke manually, false = auto-only
------
description: 'What this prompt does (shown in / picker)'
mode: agent # agent | ask | edit — usually agent
tools: # list tools the prompt needs
- read_file
argument-hint: '[argument]' # shown next to the prompt name
------
description: 'What this agent does'
tools:
- read_file
model: ['Claude Opus 4 (copilot)']
---JSON format (VS Code PascalCase events):
{
"hooks": {
"SessionStart": [
{ "type": "command", "command": "bash .github/hooks/scripts/my-hook.sh" }
]
}
}Hook scripts must:
- Use
set -uo pipefail - Exit code 2 to block tool use
- Print reason to stderr when blocking
- Fork and create a branch:
feat/my-featureorfix/my-bug - Make changes — read existing files first, match conventions
- Run
bash validate.sh— all checks must pass - Run
shellcheckon any.shfiles you added or modified - Test install in a temp project (see Development Workflow above)
- Open a PR using the PR template — include a clear description of what changed and why
- Shell scripts:
set -uo pipefail; quote all variables; use[[ ]]not[ ] - Markdown: ATX headings (
#), no trailing spaces, one blank line between sections - YAML frontmatter: always use single quotes for values with colons
- JSON hooks: 2-space indent, no trailing commas, camelCase event names (VS Code standard)
All shell scripts must run on:
- macOS (zsh default, bash available)
- Linux (bash, POSIX sh)
- Windows (Git Bash)
Portability rules:
- Use
#!/usr/bin/env bash(never#!/bin/bash— not present at that path on macOS) - No GNU-specific flags (e.g.,
sed -i ''on macOS vssed -ion Linux) - Use
command -v toolnotwhich toolfor binary detection - Test on at least macOS and Linux before submitting
The CI runs 5 checks on Ubuntu, macOS, and Windows:
| Check | Command | What it verifies |
|---|---|---|
| Validation | bash validate.sh |
All files present, no broken placeholders |
| ShellCheck | shellcheck install.sh validate.sh |
Shell script quality |
| Portability | bash -n on all scripts |
Syntax valid on bash |
| Cross-platform | macOS + Ubuntu + Windows matrix | Scripts run on all 3 platforms |
| Install smoke | Install to temp project | Full install cycle works end-to-end |
# Clone the repo
git clone https://github.com/brain-bootstrap/copilot-brain-bootstrap.git
cd copilot-brain-bootstrap
# Validate your changes
bash validate.sh
# Test install in a temp project
mkdir /tmp/test-project && git init /tmp/test-project
bash install.sh /tmp/test-project- Update
CHANGELOG.md— add version entry following Keep a Changelog format - Run full validation on macOS and Linux
- Tag the release:
git tag vX.Y.Z -m "Release vX.Y.Z" - Push tag — CI creates the GitHub release automatically
Be kind. We're all here to make developer tooling better.