.polpo/agents.json stores an array of wrappers containing an agent config and its teamName:
name is required by AgentConfig; role and model are optional. A model identifier uses provider/model. Available identifiers depend on the configured LLM gateway, so query the model catalog instead of assuming an identifier is enabled.
Common fields
Media and provider-specific selection can be configured with
image_model, video_model, vision_model, transcribe_model, tts_model, and search_provider.
See Tools, Identity, and Skills for their complete behavior.
Prompt assembly
For each run, Polpo builds the system context from:- the base agent prompt, including
nameandrole; - identity, responsibilities, communication style, and
reportsTo; systemPrompt;- shared and private memory;
- assigned skill context (progressive skill tools in Cloud, full assigned bodies in the OSS prompt builder);
- runtime context such as workspace, caller instructions, task, or loop context.
systemPrompt extends the base prompt; it does not replace it.
Complete example
Agentic Loops
Loop definitions are project resources under.polpo/loops/; agents only store loop names in assignedLoops. A chat request can select an assigned loop with its loop field. Legacy inline loops and pipeline fields are accepted for compatibility but should not be used for new configurations.
See the Loops API for the current graph, permissions, policies, hooks, and execution contracts.
API shape
The local file uses the wrapper shown above. The Agent API uses a flat agent object:POST /v1/agents?team=engineering accepts AgentConfig, while GET /v1/agents returns agent configurations. Do not send the local { agent, teamName } wrapper to the REST endpoint.
For a field-by-field reference, see Agents reference.