a generic SQL toolsqai.tools()
the model writesa generic SQL toola raw SQL stringsqai.tools()one typed plan — kind "query" or "computation", version "1", zod-validated
a malformed calla generic SQL toolthrows, retries, or silently no-opssqai.tools()returns needs_clarification with choices — the tools never throw
the same question twicea generic SQL tooldifferent SQL, different answerssqai.tools()the same plan, the same hash — replayable
the write patha generic SQL toolwhatever the connection allowssqai.tools()none by construction — 4,574 read-only capabilities, no model-reachable escape hatch
proofa generic SQL toolnone — a plausible numbersqai.tools()plan_hash and computation_hash on every answer