Entity Hierarchy
Task
A Task is the top-level container, analogous to a Git repository. It groups related prompts and provides version control boundaries.- One task per AI feature (customer support, search, etc.)
- One task per team or domain
- One task per environment (if you prefer separate staging/production)
Prompt
A Prompt (or PromptTemplate) is a template for a single LLM invocation. It combines messages, an input schema, and optional tool definitions.Completion Config
Each prompt can specify default model settings:Tools
Prompts can have tools for function calling or structured output:Message
A Message is a reusable content block with a specific role. Messages can be shared across multiple prompts.Message Roles
| Role | Description |
|---|---|
system | Instructions for the LLM (converted to system param for Anthropic/Google) |
user | User input or context |
assistant | Assistant responses (for few-shot examples or prefilling) |
Content Blocks
Messages contain blocks in a 2D array structure:Property
A Property is a type definition that describes a variable. Properties define the shape of data that flows into prompts. Properties are composed into schemas and linked to variables in messages by name. Property definition (JSON Schema):- Primitives:
string,number,integer,boolean - Complex:
object,array - Formats:
date,date-time,email,uri,uuid
Schema
A Schema is a compiled JSON Schema definition, either:- Input schema: Auto-generated from variables in a prompt’s messages
- Tool schema: Manually created for function calling or structured output
Input Schema Auto-Sync
When you add variables to messages, the input schema updates automatically: This keeps your schema in sync with your actual prompt content.Schema Definitions
Access full schema definitions via the task:Relationships
Pass-by-Reference
Messages are referenced, not copied, across prompts: This means:- Updating a shared message updates all prompts using it
- Each prompt still gets its own copy at fetch time (SDK doesn’t maintain live references)
- Reuse is tracked in the web app for easier management
Anchor IDs
Every entity has a stable anchor ID that never changes:- Referencing prompts in code without worrying about versions
- Tracking the same entity across branches
- Stable foreign key relationships