Agents reference#

Reference for agent-related functions, views, and types. For guide-style documentation, see Agents reference .

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 :ref:``aidb.output_type()` <#aidboutput_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 agents structured output schema for this call. Default: NULL (use the agents 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.