Thank you for your interest in contributing! 🎉
git clone https://github.com/UnicoLab/agentomatic.git
cd agentomatic
# Install all dependencies + pre-commit hooks
make devWe enforce strict code quality via pre-commit hooks and CI:
make lint # Ruff linter
make format # Auto-format
make typecheck # Mypy type checking
make test # Run all tests
make test-cov # Tests with coverage
make check-all # All checks at onceWe use Conventional Commits enforced by pre-commit:
feat: add new storage backend
fix: resolve thread ID collision
docs: update storage guide
chore: update dependencies
test: add middleware tests
ci: fix release workflow
refactor: simplify router factory
perf: optimize registry lookup
When creating commits via a HEREDOC, use /bin/cat (not bare cat). Many
developer shells alias cat to bat, which injects ANSI colors and line numbers
into the message and breaks Python Semantic Release / GitHub CI titles. Example:
git commit -m "$(/bin/cat <<'EOF'
ci: fix lint and typing
EOF
)"A commit-msg pre-commit hook (scripts/strip_commit_msg_ansi.py) also strips
ANSI/line-number garbage if it slips through — install hooks with
pre-commit install --hook-type commit-msg.
- Fork the repository
- Branch from
main(feat/my-featureorfix/my-fix) - Write tests for any new functionality
- Ensure
make check-allpasses locally - Submit a PR with a clear description
src/agentomatic/
├── core/ # Platform, Registry, Router, Manifest
├── cli/ # CLI commands + templates
├── config/ # Settings and configuration
├── middleware/ # Auth, rate limit, metrics, logging
├── observability/ # Circuit breaker, metrics
├── providers/ # LLM and embedding providers
├── protocols/ # API decorators and response models
├── storage/ # BaseStore ABC + implementations
└── ui/ # Chainlit debug UI
- Subclass
BaseStorefromagentomatic.storage.base - Implement all abstract methods
- Add tests in
tests/test_storage_<name>.py - Update docs in
docs/guide/storage.md
- Add template functions in
src/agentomatic/cli/templates.py - Register in the
TEMPLATESdict - Add the template case in
get_template_files() - Add tests in
tests/test_cli.py
Releases are automated via python-semantic-release:
- Merge PR to
main - Semantic release analyzes commit messages
- If releasable commits found → bumps version, creates tag, publishes to PyPI
- Docs are auto-deployed via mike
By contributing, you agree that your contributions will be licensed under the MIT License.