Welcome to supercli! We're excited that you're interested in contributing. This guide will help you understand how to contribute effectively.
supercli is a universal capability router that bridges humans and AI agents to multiple CLI tools, APIs, MCP servers, and workflows. We welcome contributions in many forms:
- Code improvements - Bug fixes, new features, performance improvements
- Documentation - Improving guides, examples, and API references
- Plugin development - Creating new harnesses for CLI tools
- Issue reporting - Helping us identify and reproduce problems
- Community support - Answering questions and helping others
Before contributing, ensure you have:
- Node.js (LTS version recommended)
- npm or pnpm
- Git for version control
- bun (optional, only needed for description enhancement pipeline scripts)
- Any CLI tools you want to create plugins for
# Fork the repository on GitHub
# Clone your fork
git clone https://github.com/YOUR_USERNAME/supercli.git
cd supercli
# Install dependencies
npm install
# Copy environment configuration
cp .env.example .env
# Run tests to verify setup
npm test
# Run linter to check code style
npm run lint
# Run type checking (if applicable)
npm run typecheck| Task | Command |
|---|---|
| Run all tests | npm test |
| Run specific test file | npx jest path/to/test.js |
| Run linter | npm run lint |
| Fix lint issues | npm run lint -- --fix |
| Build Zig binary | cd supercli-zig-cli && zig build |
| Generate plugin catalog | node scripts/generate-catalog.js |
- Check the Issues for bugs and feature requests
- Look for issues tagged with
good first issuefor beginner-friendly contributions - Review the Project Board for planned work
- Propose new features by opening a discussion
When reporting bugs, include:
- Clear title describing the issue
- Steps to reproduce - Be specific and detailed
- Expected vs actual behavior - What you expected vs what happened
- Environment details - OS, Node.js version, supercli version
- Relevant logs - Error messages, stack traces
- Minimal reproduction - If possible, a small code snippet that reproduces the issue
For new features:
- Describe the feature - What should happen and why it's useful
- Use cases - Who benefits and how they'll use it
- Alternatives considered - What other approaches did you consider?
- Implementation suggestions - If you have ideas, share them
## Description
[A clear description of the issue or feature request]
## Steps to Reproduce (for bugs)
1. Run '...'
2. Execute '...'
3. See error
## Expected Behavior
[What you expected to happen]
## Actual Behavior
[What actually happened]
## Environment
- OS: [e.g., macOS 14.0]
- Node.js: [e.g., v20.10.0]
- supercli: [e.g., v1.2.3]
## Additional Context
[Any other relevant information, logs, or screenshots]master- Stable release branchfeature/*- New featuresfix/*- Bug fixesdocs/*- Documentation improvements
# Create a feature branch
git checkout -b feature/my-new-feature
# Make your changes
# Write tests for new functionality
# Run tests before committing
npm test
# Commit with clear messages
git commit -m "feat: add support for new CLI tool X"
# Push and create PR
git push origin feature/my-new-featureWe follow Conventional Commits:
<type>(<scope>): <description>
[optional body]
[optional footer]
Types:
feat- New featurefix- Bug fixdocs- Documentation changesstyle- Code style (formatting, no logic change)refactor- Code refactoringtest- Adding or updating testschore- Maintenance tasks
Examples:
feat(plugins): add support for new CLI wrapper
fix(docker): resolve container listing timeout
docs(readme): update installation instructions
- Ensure tests pass - Run
npm testlocally - Update documentation - If adding features, update relevant docs
- Follow code style - Use existing patterns in the codebase
- Write meaningful PR description - Explain what and why
- Respond to feedback - Be responsive to review comments
For reviewers:
- Review code for correctness, not style (let linters handle formatting)
- Test the changes locally when possible
- Provide constructive, actionable feedback
- Focus on the code, not the person
- Aim to review PRs within 2 business days
For contributors:
- Keep PRs focused and reasonably sized (under 500 lines preferred)
- Respond to feedback promptly
- Ask for clarification if feedback is unclear
- Mark conversations as resolved once addressed
- Re-request review after making changes
- All new features must include tests
- Bug fixes must include a regression test
- Run
npm testlocally before pushing - CI must pass before merging
- Maintain or improve code coverage
/docs/- Main documentation directory/docs/plugins-how-to.md- Plugin development guide/docs/skills-catalog.md- Skill document catalog and provider management/README.md- Project overview and quick start- Plugin-specific docs in
/plugins/*/README.md
- Use clear, concise language
- Include practical examples
- Keep code snippets up to date
- Use consistent formatting
When creating or updating plugins:
- Add a
README.mdin the plugin directory - Include installation instructions
- Document available commands
- Provide usage examples
- Reference the upstream CLI documentation
New bundled plugins use an isolated file convention — create files ONLY inside plugins/<name>/. Never edit plugins/plugins.json or cli/plugin-install-guidance.js for new plugins.
plugins/my-plugin/
├── plugin.json # Required: manifest with commands
├── meta.json # Required: description, tags, has_learn
├── install-guidance.json # Optional: install steps
├── skills/quickstart/SKILL.md # Optional: agent guide
└── README.md # Optional: human docs
See our detailed Plugin Harness Development Guide for:
- Isolated plugin structure (
plugin.json+meta.json) - Command wrapping vs passthrough patterns
- Argument mapping configuration
- Testing and debugging tips
Before submitting a plugin for inclusion:
- Plugin has a valid
plugin.jsonmanifest - Plugin has a
meta.jsonwith description, tags, and optional has_learn - Binary dependency checks are configured
- Commands have clear descriptions
- JSON output is supported where applicable
- Plugin README includes installation and usage instructions
- Tests pass (if applicable)
- No hardcoded credentials or secrets
- No edits to
plugins/plugins.jsonorcli/plugin-install-guidance.js
Follow these standards for plugin metadata (see PLUGIN_STANDARDS.md):
Description requirements:
- Length: 30-150 characters
- Format:
[Tool Name] — [one sentence purpose/key feature] - Must start with the exact tool name
Tag requirements:
- Minimum: 3 tags, Maximum: 8 tags
- Use controlled vocabulary from TAG_VOCABULARY.md
- Include language tag if applicable (e.g.,
rust,python) - Include domain tag if applicable (e.g.,
devops,security)
Source URL requirements:
- Must be specific GitHub repository:
https://github.com/[owner]/[repo] - URL must be accessible and canonical
Example metadata:
{
"description": "ripgrep-all — search documents with ripgrep backend",
"tags": ["search", "rust", "cli", "file-search"],
"source": "https://github.com/phiresky/ripgrep-all"
}Once your plugin is ready:
# Install locally for testing
supercli plugins install ./plugins/my-plugin
# Test functionality
supercli my-plugin --help
# Publish to community registry
supercli plugins publish ./my-pluginWe are committed to providing a welcoming, inclusive environment. By participating, you agree to:
- Be respectful and inclusive
- Welcome newcomers and help others learn
- Accept constructive criticism professionally
- Focus on what's best for the community
- Discussions - Use GitHub Discussions for questions
- Issues - For bugs and feature requests
- Documentation - Check docs/ before asking
- Answer questions in discussions
- Help newcomers get started
- Share your experience and knowledge
If you discover a security vulnerability in supercli, please report it responsibly:
Do NOT open a public GitHub issue for security vulnerabilities.
- Email: Send a detailed report to the maintainers (see GitHub profile for contact).
- Include:
- Description of the vulnerability
- Steps to reproduce
- Potential impact
- Any suggested fix (if applicable)
- Response time: Expect acknowledgment within 48 hours.
- Maintainers will work with you to understand and address the issue
- A fix will be developed and released before public disclosure
- Credit will be given to reporters (unless anonymity is preferred)
Security issues include but are not limited to:
- Command injection via plugin manifests
- Unsafe path traversal in ZIP extraction
- Sandbox escape in custom adapters (vm2)
- Credential exposure in logs or output
- Server-side request forgery (SSRF) via HTTP adapters
By contributing to supercli, you agree that your contributions will be licensed under the MIT License.
Thank you for contributing to supercli! Your help makes this project better for everyone.