The Kindo connection
Sift reaches your Kindo tenant with one API key, and makes its own model calls with one model you choose. Both live under the gear icon (Administration) › Kindo connection, which only an admin can open. This page is the reference for that screen: the connection card, each check, rotating the key, changing the model, and what Sift calls on Kindo. For a first connection walked through step by step, see Connect Kindo.
Sift has no connectors of its own. Every source a filter reads, every agent it sends to and every model call it makes goes through this key, so whoever is an admin on Sift has that reach into Kindo too. Treat the admin role and this key accordingly.
The key is write-only
Section titled “The key is write-only”You paste the key once. Sift encrypts it before storing it, and no endpoint returns it,
including to the console: afterwards the screen shows only its last four characters
(Key …abcd). The encryption key is derived from
SIFT_SECRET_KEY, so changing that setting makes the stored Kindo key unreadable and
you paste it again. See Security and data handling.
Connect: the wizard
Section titled “Connect: the wizard”With no connection, the screen shows the Connect to Kindo wizard. Its steps are Key, Connect, Model and Checks; a replacement adds Confirm.
| Step | What you do | What Sift does |
|---|---|---|
| Key | Enter a Label (how the connection is named in the console and the audit log, up to 100 characters), the API key (8 to 500 characters) and the Base URL (https://api.kindo.ai unless your Kindo has its own; must be an http or https URL). Select Connect. | Nothing yet. |
| Connect | Wait about a second. | Tries the key with the header form set in SIFT_KINDO_AUTH_HEADER (default Authorization, sent as Authorization: Bearer), then the other form Sift knows (api-key), and reads the key’s model catalog. If Kindo refuses the key, nothing is stored and Kindo’s reason is shown with the key still in the field. If it works, the key is staged beside any live one. |
| Model | Choose a model from the key’s own catalog and select Confirm model. Or Use a different key. | Starts the checks. |
| Checks | Wait, or leave the page. | Runs the checks below in the background. A first connection goes live by itself as soon as they pass, even if you closed the tab. |
| Confirm (replacement only) | Read what changes and select Replace connection. | Swaps the staged key in. See Replace the key. |
Cancel at any step deletes the staged key and its checks, and leaves any live connection exactly as it was.
A staged key is kept for one hour. After that it is deleted, and the wizard says “The key you staged expired.” Connect again to carry on.
The checks
Section titled “The checks”Each check is a short list of tasks, each Waiting, Running, Passed, Warning or Failed. The tenant task runs first; if it fails, the others are not run (Not run), because they would only be the same refused key failing again.
| Task | What it checks | Runs on |
|---|---|---|
| Tenant | The key authenticates (the header form is probed and recorded), and one page of your agents can be read with it. Records the Verified time, or the error. | Connect, replace, Verify |
| Model | The model answers a JSON instruction in a form Sift can read, and makes a tool call. Each call waits up to 30 seconds. A model that fails cannot be chosen for this key: on a staged key for as long as the key is staged, on the live key for one hour. | Connect, replace, Change model, Verify |
| Paired agents | Every agent a filter sends to can be read with this key. An agent that is missing (Kindo has no agent with this id for this key.) or forbidden (This key is not allowed to read this agent.) is a Warning, not a failure: a new key may be for a different tenant on purpose. | Replace, Verify |
Only one check runs per key at a time. A check that has not finished 10 minutes after it started is marked failed: “Did not finish: the worker running this check stopped, or none picked it up in 10 minutes. Run it again.”
The model catalog lists what the key may ask for, not what works, which is why the chosen model is tested. The picker groups models into Suggested (the families Sift has been tested with) and Other models, always shows each model’s id beside its name, and marks a model that failed its test with the reason, disabled.
The connection card
Section titled “The connection card”Once a key is live, the screen shows a card in place of the wizard.
| Field | Meaning |
|---|---|
| Label and badge | Verified, Verification failed, or Not verified (never probed). |
| Model | The model Sift’s own calls use. None chosen means Sift is using SIFT_COPILOT_MODEL (default claude-sonnet-5) until you choose one. |
| Base URL | Where Sift calls Kindo. |
| Auth header | The header form that authenticated. |
| Key | The last four characters. |
| Created, Verified | When the key was stored, and when it last passed the tenant task (Never if not). |
If the last verification failed, the card shows Last verification failed with Kindo’s reason. Below the card, four buttons:
| Button | What it does |
|---|---|
| Verify | Runs Tenant, Model (on the stored model) and Paired agents on the live key. With no model chosen, the Model task tests nothing and shows a Warning. Use it after Kindo-side changes, or when the dashboard says Kindo is failing. If the stored model is no longer in the key’s catalog, the Model task fails with “{model} is no longer offered to this key”. |
| Change model | Opens the model picker on the live key’s catalog. Confirm model tests the model, and Sift switches to it only if it passes; if it fails, nothing changes. |
| Replace key | Rotates the key. See below. |
| Disconnect | Removes the key after a confirmation. Sift then has no Kindo connection: sources are not read and escalations do not reach agents until a key is added again. Cannot be undone; the key would have to be pasted again. |
Which model, and what it is for
Section titled “Which model, and what it is for”Sift’s model, the one you choose here, runs Sift’s own calls: Sift’s assistant that drafts a filter, the analyzer’s classification of an agent’s past runs, and gold set builds. It is not the model your agents use; each Kindo agent keeps its own. It is also not the decision model, which is separate and not part of Kindo.
Replace the key
Section titled “Replace the key”Use Replace key to rotate, never Disconnect followed by a new connection: a replacement leaves no gap.
- Select Replace key.
- Enter the new key’s label, key and base URL, and select Connect.
- Choose the model and select Confirm model.
- Wait for the checks, which include Paired agents.
- On Confirm the replacement, read the old and new key and model side by side, and the label and base URL if they changed.
- Select Replace connection.
The old key stays the connection until step 6. If the checks found filters whose agents the new key cannot read, step 5 lists them under “These filters would stop reaching their agents with the new key:”. Cancel and check the key, or, if the new tenant is intended, pair those filters with agents the new key can reach.
The confirmation is accepted only while the passing check is less than an hour old (“Its passing check is more than an hour old; run the checks again.”). Replacing removes the old key from Sift; it still works in Kindo until you revoke it there.
Recent calls
Section titled “Recent calls”Below the card, Recent calls counts the calls Sift has made to Kindo over the last 24 hours: Calls, Failed, Rejected (Kindo answered and refused, for example an agent id that is not an agent; shown apart because it is not an outage), and Waiting on rate limits. It makes no call of its own. It is the same reading as the Kindo light on the dashboard.
Check what Sift can reach
Section titled “Check what Sift can reach”Under What Sift can reach, Check reachability reads your agents (the first 25) and the key’s models back through the stored key, so you can see the key reaches the tenant you expect. An empty list from a successful call means the tenant has none, not a failure.
Warnings about the connection
Section titled “Warnings about the connection”These appear above every page for everyone, with a Go to Kindo connection link for admins.
| Code | Severity | Message | Fix |
|---|---|---|---|
no_kindo_credential | warning | No Kindo API credential is configured, so nothing can reach the platform. | Connect a key. |
kindo_credential_unverified | warning | The stored Kindo credential has not been verified against the API. The correct auth header form is only known once a probe succeeds. | Run Verify. |
kindo_model_unselected | warning | No model is selected for this connection; Sift is using {model} from SIFT_COPILOT_MODEL. | Choose one with Change model. |
kindo_model_unavailable | critical | {model} is no longer offered to this Kindo key, and every call Sift makes names it. | Choose another model with Change model. |
When escalations stop reaching agents (escalations_undelivered,
escalations_failing), the console also points here; see
Troubleshooting.
Rate limit and timeouts
Section titled “Rate limit and timeouts”These are environment settings, not console fields. See the configuration reference.
| Setting | Default | Meaning |
|---|---|---|
SIFT_KINDO_MAX_REQUESTS_PER_SECOND | 5.0 | Requests per second to Kindo, for the whole deployment. Retries count against it too. |
SIFT_KINDO_REQUEST_TIMEOUT_S | 30.0 | Timeout for ordinary calls (agents, runs, tool calls). |
SIFT_KINDO_INFERENCE_TIMEOUT_S | 180.0 | Timeout for model calls, which take longer. |
SIFT_COPILOT_MODEL | claude-sonnet-5 | Model used while none is chosen on this screen. |
Sift retries a failed call a few times before it counts it as failed.
What Sift calls on Kindo
Section titled “What Sift calls on Kindo”| Kindo endpoint | Why Sift calls it |
|---|---|
GET /v1/models | The key’s model catalog: the model picker, the connect probe. |
GET /v1/agents/list | The tenant check, reachability, choosing an agent to analyze or pair. |
GET /v1/agents/{id} | Reading an agent’s definition and recent runs: pairing, the paired-agents task, agent analysis. |
POST /v1/agents/create | Creating the paired agent for a filter, when you ask Sift to. |
POST /v1/agents/runs | Escalating an event: starting the agent’s run. |
GET /v1/runs/{id} | Reading a run’s outcome and the agent’s verdict. |
GET /v1/runs/{id}/evals, GET /v1/conversations/{id}/items | Reading an existing agent’s past runs when you start from an existing agent. |
POST /v1/mcp | Calling an integration’s tool: reading a filter’s source, and the samples Sift’s assistant takes. |
GET /v1/integrations/connections | Listing your integrations when you create a filter. |
POST /v1/chat/completions | Sift’s own model calls: Sift’s assistant, agent analysis, gold set builds, the model test. |
Related pages
Section titled “Related pages”- Connect Kindo: the first connection, step by step.
- The audit log: every key staged, replaced, verified or removed, with who did it.
- Monitor Sift