Files
zeekay f1f8e33b60 kai: the key goes to the configured API alone
The kai tool took kai_url from the call and sent HANZO_API_KEY to it,
with the repository's file names, branches and commit subjects. A
model, or text it read, could name any host. The URL is now
HANZO_API_BASE (or api.hanzo.ai) plus /v1, in the Rust tool and the
TypeScript one alike, and kai_url is gone from the schema.
2026-10-14 17:06:21 -07:00

61 lines
3.5 KiB
JSON

{
"name": "kai",
"description": "Kai Actions: run a request as a saved, typed, verified action. A chore that recurs (find where a name is used, run the suite and count, commit named paths and push, wait for a rollout to finish, create a worktree, rebuild a pinned copy from a commit, compare two arms of a results file, add a line to a section of a document) runs with no model call: the request is matched to an action or workflow by trigger, its inputs are bound from the request and from values read out of the repository (Kai is asked only when several remain, and may abstain; it never writes a command), the preconditions are read again just before it runs, and the action's own verifier says whether it worked. action=run does it and returns the ledger: outcome done, failed or declined, and one record per step with its source (rule or kai), revision, preconditions, authorization, cache use, steps, timing and verdict. A declined request (nothing fits, an input is missing or ambiguous, a precondition fails, the action is unproven here, approval is missing) is yours to do the usual way. An action that writes outside the workspace, reaches a remote or stops a process runs only with approve=true: ask the user first, then call again. action=plan binds without running; list shows the catalog; triggers shows which actions a request fires. Reports and files named in the request (\"write ... to answer.txt\") are written for you.",
"inputSchema": {
"type": "object",
"properties": {
"action": {
"type": "string",
"enum": [
"run",
"plan",
"list",
"triggers"
],
"default": "run",
"description": "run: execute the request as an action or workflow; plan: bind it and say what would run; list: the catalog; triggers: the actions and workflows whose triggers fit the request"
},
"request": {
"type": "string",
"description": "The chore in the user's words, as you would give it to an agent (required for run, plan and triggers)"
},
"cwd": {
"type": "string",
"description": "The directory the request is made in (default: the server's working directory)"
},
"approve": {
"type": "boolean",
"description": "Grant the approval a consequential action needs (a push or fetch, a write outside the workspace, stopping a process). Default false: such a request is declined with its reason."
},
"ask": {
"type": "boolean",
"description": "Ask Kai when several actions or values remain (default true). false declines them instead."
},
"model": {
"type": "string",
"description": "Decision model (default kai)"
},
"cache": {
"type": "string",
"description": "A directory for the cache: proofs that an action has worked here, and results it can reuse while what they read is unchanged"
},
"prove": {
"type": "boolean",
"description": "Record a proof for each action whose verifier passes, and do not require one (a proving workspace)"
},
"min_margin": {
"type": "number",
"description": "The least lead of Kai's pick over the next option, among the real options (default 0.1)"
},
"min_p": {
"type": "number",
"description": "The least probability of Kai's pick among the real options (default 0)"
},
"max_abstain": {
"type": "number",
"description": "The most probability Kai may give to abstaining (default 0.6)"
}
}
}
}