Skip to content

Features by SDK

View as Markdown

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.

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, checked as a run checks them Yes Partly Partly Partly

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.

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
Comparing an agent version: a helper that reads the comparison Yes Yes No No
Verifying a webhook, reading its event, signing a test one Yes Yes No No
Checking a signed export Yes Yes No No
  • HTTP tools without code: in a Java or Scala pack, write a tool whose handler makes the request (When to write a handler instead).
  • A test context with env values and secrets: in Python, ToolContext.for_test(env=…, secrets=…) sets them. In Java and Scala, build the context with new ToolContext(…), which takes them. In those three, nothing fills in the defaults a tool declares for its env values or checks them, as TypeScript's invokeToolForTest does.
  • The comparison helper: an eval run's result(), from client.evalRuns().get(runId), is a map; for a comparison, read it as the client's JudgedComparisonResult: KindgiJson.read(KindgiJson.write(run.result()), JudgedComparisonResult.class). Check first that the run is a comparison (kind judged) and has ended.
  • Webhooks: Kindgi's deliveries are Standard Webhooks, so a Standard Webhooks library verifies them with the same secret. client.webhookEndpoints().generateSecret() gives a new secret.
  • Signed exports: check one with the CLI, ./kindgiw exports verify <file> --from-runtime. <file> is the export's path. --from-runtime trusts the keys your runtime signs exports with.

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.