Features by SDK
This page shows which features each SDK has, and what to do where your language's SDK lacks one.
Kindgi has an SDK for TypeScript, Python, Java and Scala. Each one does two jobs:
- In a pack: your tools, guardrails, agents and flows.
- In your app: calling Kindgi's API to start runs, follow them, decide approvals, and so on.
| TypeScript | Python | Java | Scala | |
|---|---|---|---|---|
| Package | @kindgi/sdk |
kindgi |
com.kindgi:kindgi-pack, com.kindgi:kindgi-client |
"com.kindgi" %% "kindgi-pack-scala", with the Java client |
| A pack's config | kindgi.config.ts |
pyproject.toml ([tool.kindgi]) |
kindgi.config.json |
kindgi.config.json |
| The CLI, in a pack | pnpm exec kindgi |
uv run kindgi |
./kindgiw |
./kindgiw |
Every SDK's version is the Kindgi release's. Scala apps call the API with the Java client.
In a pack
Section titled “In a pack”| Feature | TypeScript | Python | Java | Scala |
|---|---|---|---|---|
| Tools, with typed input and output | Yes | Yes | Yes | Yes |
| A handler that answers later (async) | Yes | Yes | Yes | Yes |
| Read-only tools | Yes | Yes | Yes | Yes |
| Logging from a tool | Yes | Yes | Yes | Yes |
| A side effect done once (the idempotency key) | Yes | Yes | Yes | Yes |
| Cancellation | Yes | Yes | Yes | Yes |
| A tool's secrets and per-project values | Yes | Yes | Yes | Yes |
| Settings blocks a tool reads | Yes | Yes | Yes | Yes |
| HTTP tools without code | Yes | Yes | No | No |
| Guardrails with your own check | Yes | Yes | Yes | Yes |
| Agents, with typed answers, memory and budgets | Yes | Yes | Yes | Yes |
| Flows: branches, loops, parallel steps, retries, approvals | Yes | Yes | Yes | Yes |
| Unit-testing a tool | Yes | Yes | Yes | Yes |
| A test context with env values and secrets, its env values decided as a run decides them | Yes | Yes | Yes | Yes |
In Java and Scala, an agent's or a flow's fields beyond the builder's own go
in as data, as the API names them: set("budget", …), node(Map.of(…)),
edge(Map.of(…)). So every agent and flow feature is there.
In your app
Section titled “In your app”| Feature | TypeScript | Python | Java | Scala |
|---|---|---|---|---|
| Every API operation | Yes | Yes | Yes | Yes |
| Start a run, and wait for it or not | Yes | Yes | Yes | Yes |
| Follow a run's events, reconnecting until it ends | Yes | Yes | Yes | Yes |
| Typed errors, and retries a call can take | Yes | Yes | Yes | Yes |
| Trying an agent version on the test cases: a helper that reads the result | Yes | Yes | Yes | Yes |
| Verifying a webhook, reading its event, signing a test one | Yes | Yes | Yes | Yes |
| Checking a signed export | Yes | Yes | Yes | Yes |
Where an SDK lacks a feature
Section titled “Where an SDK lacks a feature”- HTTP tools without code: in a Java or Scala pack, write a tool whose handler makes the request (When to write a handler instead).
The guides show each language in its own tab. Where a guide has no tab for your language, the In a pack and In your app tables say whether its SDK has the feature. Where an SDK lacks a feature says what to do instead.