Thanks for your interest in contributing! claude-prism is a lightweight cross-provider AI orchestration toolkit for Claude Code, and we welcome contributions that align with this mission.
- Code of Conduct
- Getting Started
- Development Workflow
- Code Standards
- Testing
- Submitting Changes
- Reporting Issues
- What We Look For
- What We Don't Accept
This project follows the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code.
| Tool | Required | Notes |
|---|---|---|
| Bash 3.2+ | Yes | macOS ships with 3.2 — all scripts must be compatible |
| ShellCheck | For linting | brew install shellcheck or apt install shellcheck |
| Claude Code | For testing | The orchestrator that runs our commands |
| Antigravity CLI (agy) | Optional | For testing Gemini-provider commands |
| Codex CLI | Optional | For testing Codex-related commands |
# Fork and clone
git clone https://github.com/<your-username>/claude-prism.git
cd claude-prism
# Install locally
./install.sh
# Run smoke tests to verify
./tests/smoke-test.sh-
Create a branch from
main:git checkout -b feat/your-feature
-
Make your changes — edit scripts in
scripts/, commands incommands/, or tests intests/. -
Test locally:
# Run smoke tests ./tests/smoke-test.sh # Run ShellCheck on all scripts shellcheck scripts/*.sh tests/*.sh install.sh uninstall.sh
-
Install and verify — run
./install.shto deploy your changes to~/.claude/, then test the commands in Claude Code. -
Commit using conventional commits.
-
Open a PR against
main.
All shell scripts must work on macOS's built-in Bash 3.2. This means:
| Avoid (Bash 4+) | Use Instead |
|---|---|
${var,,} (lowercase) |
printf '%s' "$var" | tr '[:upper:]' '[:lower:]' |
Associative arrays (declare -A) |
Indexed arrays or separate variables |
readarray / mapfile |
while IFS= read -r loops |
| ` | &` (pipe stderr) |
All scripts must pass ShellCheck with zero warnings. CI enforces this automatically.
shellcheck scripts/*.sh tests/*.sh install.sh uninstall.sh- Use
set -euo pipefailat the top of every script - Quote all variable expansions:
"$var", not$var - Use
#!/usr/bin/env bashas the shebang - Log to stderr (
>&2), output results to stdout - Prefer
printfoverechofor portability
- Command definitions live in
commands/pi-*.md - Prompts are written in English; output language follows the user's Claude Code settings
- Include graceful degradation instructions for provider failures
- Reference the Confidence Scoring Framework where applicable
We use Conventional Commits:
feat: add new provider support
fix: handle timeout in call-gemini.sh
docs: update CLI compatibility table
refactor: simplify error classification logic
chore: update checksums
test: add smoke test for pi-research
- Commit messages in English
- Keep the subject line under 72 characters
- Use imperative mood ("add", not "added" or "adds")
The primary test suite is tests/smoke-test.sh. It validates:
- Script syntax and ShellCheck compliance
- Binary detection logic
--dry-runmode for all wrapper scripts- Domain detection (
detect-domain.sh) - Install/uninstall script behavior
./tests/smoke-test.shAll tests must pass before submitting a PR. CI runs these automatically.
For changes to command prompts or provider interactions, manually test in Claude Code:
# Install your changes
./install.sh
# Test in Claude Code
# /pi-code-review --dry-run
# /pi-ask-gemini --dry-run "test prompt"Use --dry-run to validate the request path without consuming API tokens.
- One PR, one concern — don't bundle unrelated changes
- Describe what and why — the diff shows what changed; the PR description should explain why
- Update checksums if you modified files tracked by
checksums.sha256:shasum -a 256 scripts/*.sh commands/*.md install.sh uninstall.sh > checksums.sha256
- Update both READMEs if your change affects user-facing behavior (both
README.mdandREADME.zh-TW.md) - Keep CI green — ShellCheck and smoke tests must pass
- PRs are reviewed by the maintainer
- Expect feedback on Bash compatibility, error handling, and prompt quality
- For significant changes, we may run the modified commands through
/pi-multi-reviewbefore merging
Please include:
- What happened vs. what you expected
- Steps to reproduce (the exact command you ran)
- Environment: OS, Bash version (
bash --version), CLI versions - Logs: relevant lines from
~/.claude/logs/multi-ai.log(timestamps and byte lengths only, no sensitive content)
We welcome ideas! Before opening an issue:
- Check if it aligns with the project's scope (cross-provider orchestration for Claude Code)
- Explain the use case, not just the feature — why do you need this?
- Bug fixes with clear reproduction steps
- New provider integrations (following existing
call-*.shpatterns) - Improvements to command prompts (better accuracy, fewer false positives)
- Test coverage improvements
- Documentation fixes and translations
- Breaking Bash 3.2 compatibility — macOS users are first-class citizens
- Adding compile-time dependencies — claude-prism is zero-compile-dependency by design
- Hosted services or relay servers — we are local-first, no intermediary
- Telemetry or analytics — no phone-home, no tracking
postinstallscripts in npm — see Supply Chain Security
Thank you for helping make cross-provider AI review better for everyone!