Thanks for helping build Caspian's open core.
New here? Good places to start:
- Good first issues - browse the
good first issuelabel. - Examples - add or improve a runnable agent in
examples/; small, self-contained, well-documented. - Docs fixes - typos, unclear steps, missing prerequisites. Small doc PRs are very welcome.
- New language SDKs - port the client to Go, Ruby, Rust, etc. (see
sdks/for the Python and TypeScript references). - Channel adapters - add support for a new platform (see "Adding a new channel adapter" below).
You don't have push access to this repo, so contribute through a fork:
- Fork this repo (top-right on GitHub), then clone your fork:
git clone https://github.com/<your-username>/caspian-sdk.git cd caspian-sdk git remote add upstream https://github.com/TryCaspian/caspian-sdk.git
- Create a branch:
git checkout -b my-change. - Make your change and keep tests + lint green (see below).
- Push to your fork and open a pull request against
TryCaspian/caspian-sdk:main.
This is a small monorepo: a Python side (uv) and a TypeScript SDK (bun).
Python (SDK, adapters, CLI):
uv sync
uv run pytest # everything should be green before you start
uv run ruff check .TypeScript SDK (packages/typescript):
cd packages/typescript
bun install
bun run ci # tsc + eslint + dependency-cruiser + bun testserver/src/comm_gateway/providers— channel adapters. Each adapter implements the small provider interface inproviders/base.py:provision/send/reply/parse_webhook(+ optionaltyping, OAuth hooks), acapabilitiesset, and webhook signature verification.sdks/python/python/— the Python client (rewrite lives underpython/when present).packages/typescript— the TypeScript client (bun).src/coremust stay free of I/O.apps/cli— thecaspianCLI. It ships as a separate packagecaspian-cli(pip install caspian-cli, or run without installing viauvx caspian-cli), whilecaspian-sdkis the library.commis a legacy alias only.
- Implement the provider interface in a new module under
server/src/comm_gateway/providers/. - Register it in
registry.py(or ship it as your own package via thecaspian.providersentry-point group — no fork needed). - Add an in-memory fake that consumes the platform's real inbound payload shape, so integrations can be tested offline.
- Add tests: payload normalization, webhook signature verification (accept + reject), and any routing rules.
- Use only the platform's official API. Adapters that automate private/unofficial protocols, evade platform enforcement, or enable bulk unsolicited messaging will not be accepted.
- Python:
uv run pytestanduv run ruff check .must pass. - TypeScript: in
packages/typescript,bun run cimust pass. - No secrets in code, tests, or fixtures — use obviously-fake placeholder values.
- Webhook verification is not optional: if the platform signs its webhooks, the adapter must verify the signature and reject mismatches.
- Commit messages: concise imperative subject ("add reminder example", not "added"/"adds"), no emojis, and reference the issue number when there is one (e.g.
fix email triage classifier (#42)).
- Open a thread in GitHub Discussions for questions, ideas, or help.
- Join the Discord community to chat with maintainers and other contributors.
See SECURITY.md — please don't open public issues for vulnerabilities.