Reference for agent-related functions, views, and types. For guide-style documentation, see Agents.
Catalog views
aidb.agents
Agent configuration. There's no dedicated "list agents" function — query this table directly.
| Column | Type | Description |
|---|---|---|
id | uuid | Internal identifier. |
name | text | Unique agent name. |
instructions | text | The agent's instructions. |
model | text | The model backing the agent. |
role | text | Postgres role the agent's tool calls execute as, if configured. |
delegates | text[] | Names of agents this agent may delegate to. |
tools | text[] | Names of tools this agent may call. |
output_type | jsonb | Structured output schema, built with aidb.output_type(). |
input_token_budget | integer | Input token budget per call. |
output_token_budget | integer | Output token budget per call. |
max_iterations | integer | Maximum reasoning iterations per call. |
timeout_seconds | integer | Maximum wall-clock time per call. |
budget_strategy | aidb.budget_strategy | Behavior when a budget is exceeded. See Types below. |
preset | text | Stored, but not currently resolved to any behavior. |
created_at | timestamptz | Creation time. |
updated_at | timestamptz | Last update time. |
aidb.agent_tasks
One row per agent_converse call (a "task"), including its lifecycle status.
| Column | Type | Description |
|---|---|---|
task_id | uuid | Internal task identifier. |
agent_id | uuid | The agent that ran this task (aidb.agents.id). |
conversation_id | uuid | The conversation this task belongs to. |
request_message_id | uuid | The triggering message's id in aidb.conversation_log. |
response_message_id | uuid | The resulting answer's id in aidb.conversation_log, once complete. |
caller_role | text | Postgres role that invoked agent_converse. |
status | aidb.task_status | Current lifecycle status. See Types below. |
blocking | boolean | Always true today — every task runs synchronously. |
error | text | Error message, if the task failed. |
created_at | timestamptz | When the task started. |
completed_at | timestamptz | When the task finished, if it has. |
aidb.conversation_log
Every user prompt and agent answer, across every conversation — the same rows aidb.get_conversation() returns, unfiltered by conversation_id. Tool calls, model requests, and other internal activity aren't included; query aidb_internal.action_log directly for the full activity history.
| Column | Type | Description |
|---|---|---|
id | uuid | Message id. |
conversation_id | uuid | The conversation this message belongs to. |
agent_id | uuid | The agent involved. |
task_id | uuid | The task this message was part of. |
action_type | aidb.action_type | user_prompt or answer. |
payload | jsonb | The message's raw payload (a user_message or llm_response struct). |
created_at | timestamptz | When the message was created. |
completed_at | timestamptz | When it was completed. |
aidb.conversations
One row per conversation, aggregated from aidb.conversation_log.
| Column | Type | Description |
|---|---|---|
conversation_id | uuid | The conversation's id. |
agent_id | uuid | The agent involved. |
parent_conversation_id | uuid | Always NULL — conversation forking isn't implemented. |
forked_from_message_id | uuid | Always NULL — conversation forking isn't implemented. |
status | aidb.task_status | Status of the most recent task in this conversation. |
message_count | bigint | Number of messages in the conversation. |
last_message_id | uuid | Id of the most recent message. |
created_at | timestamptz | When the conversation started. |
updated_at | timestamptz | When the conversation was last updated. |
Agent management functions
aidb.create_agent
Registers a new agent.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
name | TEXT | Required | Unique name for the agent. |
instructions | TEXT | Required | Instructions that define the agent's behavior. |
model | TEXT | Required | Name of the model backing the agent. See Choosing a model. |
tools | TEXT[] | NULL | Names of tools (from aidb.tools) the agent may call. |
delegates | TEXT[] | NULL | Names of other agents this agent may delegate to. |
role | TEXT | NULL | Postgres role the agent's tool calls execute as. Caller must be a member of this role. |
output_type | JSONB | NULL | Structured output schema, built with aidb.output_type(). |
input_token_budget | INTEGER | NULL (no limit) | Input token budget per agent_converse call. |
output_token_budget | INTEGER | NULL (no limit) | Output token budget per call. |
max_iterations | INTEGER | NULL | Maximum reasoning iterations per call. A hard ceiling of 25 always applies regardless. |
timeout | INTEGER | NULL (300 applied at runtime) | Maximum wall-clock seconds per call. |
budget_strategy | TEXT | 'attempt_complete' | One of 'ignore', 'error', 'summarize', 'attempt_complete'. See Budgets and limits. |
preset | TEXT | NULL | Stored, but not currently resolved to any behavior. |
Returns
TABLE(error TEXT) — no rows on success; a single row with error set on failure (never raises for a validation/name-collision failure).
Example
SELECT aidb.create_agent( name => 'db_helper', instructions => 'You are a helpful assistant that answers questions about this database.', model => 'my_gpt', tools => ARRAY['run_sql_query'], -- optional; tool names from aidb.tools. Default: NULL (no tools) delegates => NULL, -- optional; names of other agents to delegate to. Default: NULL (no delegation) role => NULL, -- optional; Postgres role tool calls run as. Default: NULL (run as the calling role) output_type => NULL, -- optional; structured output schema from aidb.output_type(). Default: NULL (plain-text answer) input_token_budget => NULL, -- optional; input token cap per agent_converse call. Default: NULL (no limit) output_token_budget => NULL, -- optional; output token cap per agent_converse call. Default: NULL (no limit) max_iterations => NULL, -- optional; reasoning-round cap per call. Default: NULL (a hard ceiling of 25 always applies) timeout => NULL, -- optional; wall-clock seconds cap per call. Default: NULL (300 seconds applied at runtime) budget_strategy => 'attempt_complete', -- optional; behavior when a budget is exceeded. Default: 'attempt_complete' preset => NULL -- optional; reserved for future use, has no effect today. Default: NULL );
aidb.update_agent
Updates an existing agent. Every parameter except name is optional and defaults to NULL, meaning "leave unchanged" — including budget_strategy, whose default here is NULL, not 'attempt_complete'.
Parameters
Same parameters as create_agent, all optional (defaulting to NULL) except name.
Returns
TABLE(error TEXT) — no rows on success; a single row with error set on failure (agent not found, invalid field value).
Example
SELECT aidb.update_agent('db_helper', model => 'my_new_gpt', max_iterations => 15);
aidb.delete_agent
Deletes an agent by name.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
name | TEXT | Required | Name of the agent to delete. |
force | BOOLEAN | NULL (false) | If true, also deletes the agent's internal task/action-queue records so deletion can proceed even if it has conversation history. The conversation transcript itself (aidb.conversation_log) is preserved either way. |
Returns
TABLE(error TEXT) — no rows on success; a single row with error set on failure, including when the agent has conversation history and force wasn't passed.
Example
SELECT aidb.delete_agent('db_helper', force => true);
Conversation functions
aidb.agent_converse
Runs an agent's reasoning loop against a prompt and returns its answer.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
agent_name | TEXT | Required | Name of the agent to converse with. |
prompt | TEXT | Required | The prompt to send. |
conversation_id | TEXT | NULL | Continue an existing conversation. Omit to start a new one (an id is generated automatically). |
read_only | BOOLEAN | NULL | Force read-only mode on or off. Auto-enabled on a read replica when omitted. |
output_type | JSONB | NULL | Overrides the agent's configured structured output schema for this call only. |
debug | BOOLEAN | NULL | If true, also emit every action as a NOTICE. See Debug mode. |
Returns
TABLE(message TEXT, conversation_id TEXT, error TEXT) — one row. Never raises for an agent-logic failure; error is populated instead, and message/conversation_id are NULL. conversation_id is also NULL for any read-only run, since nothing is persisted to attach an id to.
Example
SELECT * FROM aidb.agent_converse( agent_name => 'db_helper', prompt => 'How many rows are in the orders table?', conversation_id => NULL, -- optional; continue an existing conversation by id. Default: NULL (starts a new conversation) read_only => NULL, -- optional; force read-only mode on/off. Default: NULL (auto: on for a read replica, off otherwise) output_type => NULL, -- optional; override the agent's structured output schema for this call. Default: NULL (use the agent's own configuration) debug => NULL -- optional; also emit every action as a NOTICE. Default: NULL (false) );
aidb.start_agent_session
Mints a fresh conversation id for a named agent, ahead of the first agent_converse call that will use it.
Parameters
| Parameter | Type | Description |
|---|---|---|
agent_name | TEXT | Name of the agent to converse with. |
Returns
TABLE(conversation_id TEXT). Unlike agent_converse, this function raises (rather than returning an error column) if agent_name is empty or unknown.
Example
SELECT * FROM aidb.start_agent_session('db_helper');
aidb.get_conversation
Retrieves a conversation's messages — every user prompt and final answer, in chronological order. Excludes tool calls and other internal activity; see aidb_internal.action_log for the full activity history.
Parameters
| Parameter | Type | Description |
|---|---|---|
conversation_id | TEXT | The conversation's id. |
Returns
TABLE(message_id TEXT, task_id TEXT, action_type TEXT, role TEXT, sender_id TEXT, contents TEXT) — one row per message. role is "user" or "agent"; sender_id is the specific sender (the prompt's own user field, or the agent's id). Raises (rather than returning an error column) if conversation_id is empty.
Example
SELECT * FROM aidb.get_conversation('8f14e45f-ceea-467e-9575-a3d1a2c1a123');
aidb.get_message
Retrieves one message's plain-text contents by id.
Parameters
| Parameter | Type | Description |
|---|---|---|
message_id | TEXT | The message's id. |
Returns
TABLE(message TEXT, error TEXT) — one row. error (not message) is populated when no such message exists; doesn't raise.
Example
SELECT * FROM aidb.get_message('3fa85f64-5717-4562-b3fc-2c963f66afa6');
Structured output helpers
aidb.output_field
Builds one field of an agent's structured output schema.
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
name | TEXT | Required | The field's name. |
field_type | TEXT | Required | The field's type (for example, 'TEXT', 'FLOAT', 'BOOLEAN'). |
description | TEXT | NULL | Description shown to the model. |
Returns
JSONB — pass one or more of these to aidb.output_type().
aidb.output_type
Builds a complete structured output schema from one or more fields.
Parameters
| Parameter | Type | Description |
|---|---|---|
fields | VARIADIC JSONB[] | One or more aidb.output_field() results. |
Returns
JSONB — pass to create_agent/update_agent's output_type parameter, or agent_converse's.
Example
SELECT aidb.create_agent( name => 'sentiment_tagger', instructions => 'Classify the sentiment of the given text.', model => 'my_gpt', output_type => aidb.output_type( aidb.output_field('sentiment', 'TEXT', 'One of: positive, negative, neutral'), aidb.output_field('confidence', 'FLOAT') ) );
Types
aidb.budget_strategy
CREATE TYPE aidb.budget_strategy AS ENUM ( 'ignore', 'error', 'summarize', 'attempt_complete' );
See Budgets and limits for what each value does.
aidb.task_status
CREATE TYPE aidb.task_status AS ENUM ( 'PENDING', 'IN_PROGRESS', 'RECOVERY', 'AWAIT_APPROVAL', 'DENIED', 'ERROR', 'TIMEOUT', 'CANCELED', 'SUCCESS', 'EVALUATING', 'COMPLETE' );
Surfaced through aidb.agent_tasks.status and aidb.conversations.status. Since every task today runs synchronously to completion within one agent_converse call, a task's terminal status is normally SUCCESS or ERROR; the remaining values are reserved for asynchronous/approval workflows that aren't implemented yet.