attek API
This platform builds conversational agents from a small set of pieces, and almost every request is met by composing those pieces, not by writing code.
An agent is a graph of nodes. Each node holds instructions and the tools the model may call while it is there. Everything the model can do is a tool, and the model sees every tool the same way, whatever it is underneath.
A tool does one thing: query a collection, write a record, send an email, call one endpoint of the client's own system. A tool never carries a credential. Authorization is a connection, made once per provider and pointed at by any number of tools. A tool never carries a business fact. Opening hours, prices and policies are records in a collection (custom data), read by the tool that needs them.
When a job needs more than one tool, or a branch, it is a flow: a deterministic graph of steps, where each step is a tool and each edge is a condition on what earlier steps returned. A flow is itself a tool, so an agent calls it by one name. When the job must happen with no conversation at all, on a schedule, when a record changes, when an interaction ends, or when the client's system calls us, it is an automation: a trigger plus a flow.
A custom tool is code, written for one account, that reshapes data: it is handed arguments and answers a value. It cannot reach the network or any system. It exists for the one calculation or format nothing else provides, and its input is what other tools answered, so it sits in a flow as one step among the others: the flow hands it the price that was looked up or the list that was fetched, exactly. An agent that reads a value with one tool and types it into the next is the shape a flow replaces.
So, faced with a requirement: put what the agent should say in its node instructions; put the facts in custom data; put the credentials in a connection; give each action its own tool; combine and branch with a flow; schedule with an automation; write a custom tool only for a transform no piece provides. Never write one tool that does the whole job.
Read /docs/how-it-fits before the reference: it says which few operations a job needs, and in which order.
How an agent is written
An agent is a graph of nodes because one prompt that covers several situations, or more than a handful of tools, drifts: the model answers the wrong situation with the right words. One situation per node. A node holds only the tools that situation needs, so the model chooses among three, not thirty. A conversation that is one situation is one node; a conversation that greets, then books, then confirms is three.
A node's instructions are short and sectioned, in this order: what this step is for, in one line; what the agent says or asks here, one question per turn; where its facts come from; which tools it calls and when, by the tool's exact name; how it leaves. Then one or two example exchanges, two lines each. Nothing else. A node that needs more than this is two situations and should be two nodes.
A business fact is never written into a node. Opening hours, prices, addresses, policies and names of products live in a collection or a document and are read by a tool, so the text says "look up today's hours" and never the hours themselves. A fact written into a prompt is right on the day it is written and wrong thereafter, with nobody told; a fact in a collection is edited once, where it lives, and every node reads the new value.
Instructions say what to do, not what to avoid. "Answer in one sentence" works; a list of twelve things never to say puts those twelve things in front of the model on every turn. When something must be refused, name the refusal and what to offer instead: "If asked for legal advice, say that a lawyer will answer that, and offer to book the consultation."
On a voice line the agent speaks in one or two sentences, asks one thing at a time, says numbers, dates and phone numbers the way a person says them aloud, and repeats back only the detail that matters before acting on it: a name, an address, an amount, anything sent on the caller's behalf. Before a tool that may take a while it says one line so the line is not silent. This is one fixed block written the same way into every node of a voice agent, not something to compose per agent.
Every agent has a node for when it cannot help: after the caller has not been understood twice, or a tool has failed twice, or the caller asks for a person, the agent hands over or takes a message, and says which. An agent without this node keeps a caller in a loop, which is the one thing worse than an agent that says it cannot help.
Edges leave a node under a condition written the way the model reads the conversation: "the caller wants to book" and "the caller is asking about prices" are two edges; "next" is not an edge. Two edges out of the same node never describe the same case.
When one node changes, the greeting, the edges into it and out of it, and the nodes beside it are read again against the change, so the agent does not promise in its greeting what a node no longer does.
The same account, read against the pieces, is at /docs/how-to-write-an-agent.