Thank you for your interest in contributing to Sidekick! This document provides guidelines and information for contributors.
- Fork the repository and clone your fork
- Install Go 1.23 or later
- Run the project locally:
cd sidekick go mod download go run main.go processes.go notifications.go
- Go 1.23 or later
- Git
- macOS (for testing audio notifications)
cd sidekick
go build -o sidekick main.go processes.go notifications.gocd sidekick
go test -v ./...We use several tools to maintain code quality:
# Format code
go fmt ./...
# Vet code
go vet ./...
# Run linter (requires golangci-lint)
golangci-lint run- Follow standard Go conventions and idioms
- Use
gofmtfor consistent formatting - Write clear, self-documenting code
- Add comments for exported functions and complex logic
- Keep functions focused and reasonably sized
We follow Conventional Commits:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Types:
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringtest: Adding or updating testschore: Maintenance tasks
Examples:
feat: add process delay functionality
fix: prevent memory leak in ring buffer
docs: update README with new examples
- Create a feature branch from
main - Make your changes following the guidelines above
- Add tests for new functionality
- Update documentation if needed
- Ensure CI passes (formatting, linting, tests)
- Submit a pull request with a clear description
## Summary
Brief description of changes
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update
## Testing
- [ ] Tests pass locally
- [ ] Added new tests for functionality
- [ ] Manual testing completed
## Checklist
- [ ] Code follows style guidelines
- [ ] Self-review completed
- [ ] Documentation updated
- [ ] No breaking changes (or clearly documented)Write unit tests for new functionality:
cd sidekick
go test -v ./...Test with real MCP clients:
- Build the binary
- Configure with Claude Code
- Test tool functionality
- Verify cross-platform compatibility
- Process spawning works on target platforms
- Audio notifications work on macOS
- Ring buffer management handles large outputs
- Error handling works correctly
- Memory usage remains stable
When reporting bugs, please include:
- Environment: OS, Go version, Claude Code version
- Steps to reproduce the issue
- Expected behavior vs actual behavior
- Error messages or logs
- Configuration (if relevant)
For new features:
- Check existing issues to avoid duplicates
- Describe the use case and problem being solved
- Propose a solution or approach
- Consider backwards compatibility
.
├── sidekick/ # Main Go module
│ ├── main.go # MCP server setup and tool registration
│ ├── processes.go # Process management functionality
│ ├── notifications.go # Audio notification functionality (macOS)
│ ├── go.mod # Go module definition
│ └── go.sum # Dependency checksums
├── .github/ # GitHub workflows and templates
├── README.md # Project documentation
└── install.sh # Installation script
- MCP Server: Uses
mark3labs/mcp-gofor protocol implementation - Process Manager: Thread-safe process tracking with ring buffers
- Notification System: macOS-specific audio and TTS integration
- Ring Buffers: Memory-efficient output storage for long-running processes
- Model Context Protocol Specification
- mark3labs/mcp-go Documentation
- Go Documentation
- Claude Code Documentation
We are committed to providing a welcoming and inclusive experience for everyone. Please be respectful and professional in all interactions.
- Documentation: Check the README and this contributing guide
- Issues: Search existing issues or create a new one
- Discussions: Use GitHub Discussions for questions and ideas
Thank you for contributing to Sidekick! 🎉