Agent Services/Agent Blueprints
Agent Blueprints Schema
Agent Schemas define the inputs and outputs of an agent’s tools.
They live inside the agent’s ai-tools.json file, under the capabilities.tools section.
Think of:
- Metadata = the envelope (identity, endpoints, compliance, security).
- Schema = the contract (how tools are invoked, validated, and composed).
Where Schema Lives
Each tool in ai-tools.json includes at minimum:
name— tool identifier (e.g.,invoices.list)description— what the tool doesinputSchema— JSON Schema defining valid input payloadsoutputSchema(optional but encouraged) — JSON Schema describing returned data
Example:
{
"capabilities": {
"tools": [
{
"name": "invoices.list",
"description": "List invoices by status or date",
"inputSchema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": ["pending", "paid", "overdue"]
},
"fromDate": { "type": "string", "format": "date" },
"toDate": { "type": "string", "format": "date" },
"limit": { "type": "number", "minimum": 1, "maximum": 100 }
},
"required": ["status"]
}
}
]
}
}Schema Conventions
Required vs Optional
- Use required for fields the tool cannot function without.
- Omit fields from required if defaults can be applied.
Constrained Inputs
- Use enum for controlled vocabularies (e.g., status).
- Use format for validation (date, date-time, email, uri).
- Use numeric ranges for paging/limits.
Output Schema (Optional)
Encourage downstream composition by describing responses:
{
"name": "invoices.get",
"inputSchema": {
"type": "object",
"properties": { "invoiceId": { "type": "string" } },
"required": ["invoiceId"]
},
"outputSchema": {
"type": "object",
"properties": {
"invoiceId": { "type": "string" },
"amount": { "type": "number" },
"status": { "type": "string", "enum": ["pending", "paid", "overdue"] },
"dueDate": { "type": "string", "format": "date" }
},
"required": ["invoiceId", "amount", "status"]
}
}Reuse with $defs
Schemas can define reusable shapes in $defs:
{
"$defs": {
"Invoice": {
"type": "object",
"properties": {
"invoiceId": { "type": "string" },
"amount": { "type": "number" },
"status": { "type": "string", "enum": ["pending", "paid", "overdue"] }
},
"required": ["invoiceId", "amount", "status"]
}
},
"properties": {
"invoices": {
"type": "array",
"items": { "$ref": "#/$defs/Invoice" }
}
}
}Best Practices
- Always include name, description, and inputSchema.
- Add outputSchema where structured responses are expected.
- Use title and description inside schemas for clearer errors and UI hints.
- Validate schemas at build/CI time using a JSON Schema validator.
- Version the agent (version in metadata) when schemas change in a breaking way.
- Keep schemas minimal but expressive: enough to enforce correctness, not enough to block evolution.
How Schema Connects to Orbit Flow
When an agent tool’s output matches its outputSchema, Orbit Flow can render UI components automatically (chart, table, metric, markdown).
See Declarative Schema for details.
Related Pages
- Agent Metadata — overall structure of
ai-tools.json - Agent Registry — where agents are registered
- Declarative Schema — how outputs become UI
Last updated on