Most AI workflows have a problem: every action runs through the model. Need to update a CRM record? The model decides if, when, and how. Need to send a Slack message? Same thing. This works when you need judgment, but it’s wasteful and unreliable when you already know exactly what to do. Deterministic tool calls let you call integration tools directly from your workflow code. No model reasoning, no token spend, no chance the LLM decides to skip the step or call the wrong tool. The backend still handles credentials and OAuth. You just skip the AI middleman.Documentation Index
Fetch the complete documentation index at: https://docs.useterse.ai/llms.txt
Use this file to discover all available pages before exploring further.
When to use each approach
| Deterministic | Agentic | |
|---|---|---|
| How it works | Your code calls a specific tool with exact parameters | The model chooses which tools to call based on a prompt |
| API surface | toolbox.* | generateText({ prompt, skills }) |
| When to use | You know the tool, parameters, and order in advance | You need the model to reason, summarize, or decide |
| Predictability | Always runs the same way | Output varies across runs |
| Token cost | Zero LLM tokens | Tokens consumed per run |
agent.tools.*
The generated SDK attaches typed wrappers under agent.tools.* for every integration declared in the agent’s skills. Use them when you want a deterministic call inside an agentic handler.
agent.tools.* is generated by terse generate based on your connected integrations. The wrappers are fully typed, so your editor autocompletes tool names, parameter shapes, and return types. Note: agent.tools.* is scoped to integrations declared in the agent’s skills. If you need unfiltered access from code, use toolbox instead.
toolbox.*
Code generation exports a toolbox object alongside agent.tools.*. It exposes the same typed integration methods, but you do not need a TerseAgent, and it is not filtered by skills. Use it when you only want deterministic tool calls.
Mixing deterministic and agentic calls
The real power is combining both in a single workflow. Use deterministic calls for predictable operations and hand off to the model when you need reasoning.Available deterministic tools
Every integration you connect generates deterministic wrappers. Runterse generate to see what’s available in your project. Common examples:
| Integration | Example tools |
|---|---|
| Attio | queryRecords, upsertRecord, listObjects |
| Slack | sendMessage, listChannels, listUsers, readConversation |
| GitHub | searchCode, grepCode, readFile, listPullRequests, listCommits |
| Linear | createTicket, updateTicket, searchTicket, addComment |
| Snowflake | executeQuery |
| Gmail | sendEmail, createDraft |
Where to go next
Context as Code
How
terse generate creates typed helpers from your workspace.TypeScript SDK reference
Full reference for
toolbox.*, agent.tools.*, and more.