Welcome, AI agent! This file helps you understand how to contribute to this repo.
# Clone and setup
git clone https://github.com/Olafs-World/my-tool.git
cd my-tool
uv sync
# Run tests
uv run pytest
# Run linter
uv run ruff check .- Formatter: ruff (configured in pyproject.toml)
- Type hints: Preferred but not required
- Docstrings: Google style
- Tests: pytest, aim for >80% coverage
For Olafs-World repos, set Aaron as author and add bot co-author:
git config user.name "Aaron Levin"
git config user.email "awlevin@comcast.net"Commit message format:
Short summary (50 chars or less)
Longer description if needed. Wrap at 72 characters.
Co-authored-by: olaf-s-app[bot] <259723076+olaf-s-app[bot]@users.noreply.github.com>
-
Bump version in
pyproject.toml:version = "X.Y.Z"
-
Update CHANGELOG.md:
## [X.Y.Z] - YYYY-MM-DD ### Added - New feature description ### Fixed - Bug fix description
-
Commit changes:
git add -A git commit -m "Bump version to X.Y.Z" -
Tag and push:
git tag vX.Y.Z git push && git push --tags -
CI auto-publishes to PyPI when the tag is pushed.
Manual uv publish or twine upload causes:
- GitHub releases and PyPI versions to get out of sync
- Missing release notes on GitHub
- Confusion about what's actually deployed
The tag-based workflow ensures everything stays synchronized.
├── my_tool/
│ ├── __init__.py # Version and package info
│ ├── cli.py # Click-based CLI entry point
│ └── core.py # Business logic (keep CLI thin)
├── tests/
│ ├── test_cli.py # CLI tests (invoke runner)
│ └── test_core.py # Unit tests for core logic
├── AGENTS.md # This file
├── SKILL.md # ClawHub skill definition
├── CHANGELOG.md # Release history
└── pyproject.toml # Package config
# Run all tests
uv run pytest
# Run with coverage
uv run pytest --cov=my_tool
# Skip integration tests (if any)
uv run pytest -m "not integration"Mark slow/external tests:
@pytest.mark.integration
def test_external_api():
...After PyPI release, update ClawHub:
clawhub publish .Or if the skill is in a subdirectory:
clawhub publish skills/my-tool/Check existing code patterns in the repo. When in doubt, keep it simple.