agent() in a program’s main.py, and the name it is given
is the whole of its identity.
programs/splox/main.py
"Assistant", because a run stores an address and nothing else: the
program it belongs to, and the agent inside it.
Asked, not stored
The prompt, the model, the provider, the tools and the iteration cap are not configuration the platform keeps. They are a question it asksmain.py, and the
answer is whatever the file says at the moment it is asked. Nothing is parsed at
publish, frozen into the run, or migrated afterwards.
A chat message is a run, so a line edited between two messages is read by the
second one, with nothing published in between.
Inside one run the question is asked once, at its start, and that is deliberate: a
loop whose prompt and tools changed under its own turns would be two runs. What a
turn can take back are the points of the loop — context.build rebuilds what
the model is given on every turn, model.choose names the model on every turn.
See Hooks.
The fields
An agent names exactly one of
provider and text_llm_endpoint_id, and neither
is optional. Naming both is refused rather than resolved: an agent that names a
provider while running on somebody else’s credential lies to whoever reads it, and
there is no reading of it that bills the right account. Both are checked when the
run starts — which is the first moment anybody can ask the program what it says —
so agent() itself accepts the line and the run is where it fails. See
Models.
Generation settings — reasoning, max_output_tokens, temperature,
cache_control, modalities and the rest — are written flat on the same call. A
name the platform does not know is refused where it is written, rather than
traveling to the server as a key nobody reads. Agents has all of
them.
The prompt is a file the program reads
system_prompt= takes text, or something to call. A callable is called at the
moment the spec is asked for, which is what makes an edit to
prompts/assistant.md land on the next message rather than the next time
somebody imports main.py. A plain string is read once, when the declaration
runs.
That distinction is system_prompt= alone. prompts/ is data: the platform never
opens it, the program does, so its format is the program’s business.
An agent as another agent’s tool
agents=[executor] names the declarations, and what travels is their names. The
calling model sees the name sanitized into an identifier — the Executor next door
is executor — and description is the only thing it knows before it decides.
Write that description as an instruction to the caller rather than a summary of
the callee:
Naming
Two agents of one program may not share a name: the loop asks for one by name, and the first declaration matching it answers. Renaming an agent leaves every run that named the old one asking for an agent the program no longer declares.Agents, in full
Every field, the generation keys,
context_memory, and what each edit changes.Sub-agents
Handing work out: workspaces, schemas, parallel calls, what comes back.

