Thanks for the interest. case-sdk is small and prefers small, focused changes.
git clone https://github.com/daemonlabshq/case-sdk
cd case-sdk
python3.11 -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,mcp]"
pytest -xYou need:
- macOS (most automation code is macOS-only)
- Python 3.11 or newer
- Accessibility permission granted to your shell / IDE if you run live procedures (not required for the unit-test suite, which mocks the harness)
- Bug reports: include
case-sdk --version, what you ran, what you expected, what happened, and (where possible) a minimal procedure JSON that reproduces. - Feature requests: describe the use case before the proposed API. We're conservative about adding new primitives to the harness.
- Branch off
main. Small, focused PRs land faster than large ones. - Run
pytest -xlocally before opening the PR. Add tests for any observable behaviour change. - Match the surrounding style — type hints on public functions, short docstrings on the public API surface, no comments restating what the code already says.
- Update
CHANGELOG.mdunder## [Unreleased]if your change is user-visible. - One PR per topic. Don't bundle a refactor with a bug fix.
If you want to add a procedure pack (DaVinci, another app, etc.):
- Prefer JSON step lists over Python generators when possible.
- Place under
case_sdk/builtin_procedures/<pack>/<name>.json. - Include a
descriptionfield — it shows in thecase-sdk procedurescatalog. - If the procedure needs a manual setup step, declare
requires_user_actionanduser_action_prompt. - Validate against
docs/schemas/procedure.schema.json.
case-sdk is licensed under the Elastic License 2.0 (see LICENSE).
By opening a pull request you confirm that:
- You wrote the contribution yourself or have permission to submit it.
- You agree to license your contribution under the same Elastic License 2.0 as the rest of the project.
If you cannot agree to those terms, please don't submit a PR.
For maintainers cutting a release:
- Bump
versioninpyproject.tomland__version__incase_sdk/__init__.py. - Add a
## [x.y.z]block inCHANGELOG.md. - Merge to
main, tagvx.y.z, push the tag todaemonlabs. - The
publish.ymlworkflow handles TestPyPI + PyPI uploads via OIDC trusted publisher.