Internal Capabilities¶
Internal capabilities (type: "internal") are the built-in tools that ship with the platform — memory, web search, the canvas, document search, sub-chats, tasks, and more. Unlike API, MCP, Computer Use, and Sandbox capabilities (which are built from an options blob), an internal capability is selected by its code and resolved through a central tool registry. There's no options JSON to fill in — you just attach the capability to an agent.
This page is the catalog: which internal capabilities exist, what tools each one provides, and when each is active. For the broader picture of how capabilities fit together, see Capabilities.
How they work¶
- Each internal capability has a code (e.g.
base,web_search,tasks). A single capability row's code may even be a comma-separated list, activating several tool groups at once. - When a chat starts, the platform collects the active codes from the agent's linked internal capabilities and resolves them into the de-duplicated set of tools registered under those codes.
- Tool names are de-duplicated across all sources — if two capabilities provide a tool with the same name, the first one wins.
For developers
Internal tools are registered in code (and can be contributed by external plugins via Python entry-points). See Tool Plugins for how to register your own tools under a capability code.
Example agent recipes¶
Internal capabilities are most useful in combination. A few realistic mixes — attach these codes together on an agent to get the described behavior:
| Agent | Capabilities to enable | What it can do |
|---|---|---|
| Research / briefing | base, web_search, rag, documents, memory | Search the web, search uploaded documents and past chats, save findings as documents, and remember preferences across sessions. |
| Customer support | base, rag, documents, chat_db_edit, memo, tasks | Answer from a knowledge base, track structured tickets in the chat DB, keep session notes, and hand off work via tasks. |
| Data ops | base, sandbox, documents, generic_api_requests | Fetch data over HTTP, crunch and convert files in an ephemeral shell, and save the results as documents. |
| Live App builder | base, canvas_toolkit, documents | Build and iteratively edit an interactive HTML/React page on the canvas. (Canvas tools only activate on a Live Page.) |
| Media analyst | base, video_analysis, video_transcription, audio_diarization | Summarize and transcribe video, pull keyframes, and produce speaker-labelled transcripts. |
base is the sensible default on almost every agent — it carries notifications, URL reading, image/voice generation, and agent-to-agent calls.
Context-gated behavior¶
Some internal capabilities are conditionally enabled — or remapped — based on the chat context. This is why a capability attached to an agent may not always produce a tool:
| Capability | Condition |
|---|---|
base_dev | Auto-added alongside base only in development environments. |
base | Provides speak only on a message sent in Voice Mode; the tool is absent otherwise. |
canvas_toolkit | Dropped unless the chat's page type is html or react (i.e. a Live Page). |
subchats | Remapped to subchats_parent (top-level chat) or subchats_child (chat with a parent) based on the chat hierarchy. |
rag | Adds rag_documents only when the chat has documents & collections enabled. |
scheduled_prompts | Dropped unless the chat has scheduled tasks enabled (scheduled_jobs_enabled). |
memory | Built per-request; skipped on temporary chats or when global memory is off. |
web_search_google_serper | Built per-request; requires SERPER_API_KEY in settings (otherwise a warning is logged and no tool is added). |
generic_api_requests | Built per-request (a fresh instance each call). |
Capability reference¶
base — Base Tools¶
Core tools available to all agents (notifications, generation, agent-to-agent communication).
| Tool | Description |
|---|---|
set_chat_title_name | Rename/retitle the chat; auto-derives a title from history if none given. |
notify_user | Updates the "thinking" status message to tell the user what's happening. |
send_push_notification_to_user | Creates a notification for a user and pushes it (optionally with an email body). |
read_content_of_url | Fetches a public http(s) URL — reads web-page content as text, returns text/data files as-is, or saves the result into the chat when both a destination folder and filename are given. |
hide_message_tool | Hides an agent message that needs no response or is directed to someone else. |
query_agent | Calls another agent in the chat; returns its reply marked as "Response from the [name] Agent". |
call_chat | Calls a specific chat on another agent via the chat's mention name. |
execute_task | Executes a named task on another agent in the chat. |
available_mentions | Lists mentionable entities (users, agents, chats, tasks) available to the user, permission-filtered. |
generate_image | Generates images from text with style/size/reference-image options. |
generate_voice | Text-to-speech; supports single-speaker narration and multi-speaker dialogue. |
speak | Available only on a message sent in Voice Mode. Sends a short spoken script to the client to read aloud alongside the written reply — plain text only, capped at about forty seconds of speech. |
base_dev — Base Dev Tools (development only)¶
| Tool | Description |
|---|---|
wait_seconds | Waits for a specified timeout before the next action (testing/debugging). |
canvas_toolkit — Canvas (Live Pages only)¶
Interactive canvas for collaboratively creating/editing documents. Only active on html/react pages.
| Tool | Description |
|---|---|
set_html_canvas_safe | Replaces canvas HTML with safety checks, payload validation, and auto-escaping. |
set_canvas_chunked | Updates canvas HTML in chunks to avoid truncation with large content. |
edit_html_canvas_enhanced | Edits parts of canvas HTML (replace, insert, delete, append, replace_script, upsert_script). |
get_canvas_diagnostics | Returns diagnostics about current canvas content (size metrics, validation). |
get_canvas_content | Retrieves canvas HTML with optional filtering (line/char range, CSS selector). |
chat_db_edit — Chat DB (Edit)¶
Read/write access to the chat database for structured entities.
| Tool | Description |
|---|---|
chatdb_init | Initializes the chat DB (schema/tables) for storing structured entities. |
chatdb_list | Lists/searches entities with filtering operators and pagination. |
chatdb_get | Retrieves a single entity by ID. |
chatdb_add | Creates one or more entities (single or batch). |
chatdb_edit | Updates one or more entities (merge + optimistic locking). |
chatdb_delete | Deletes one or more entities. |
chat_db_read_only — Chat DB (Read Only)¶
Query-only access to the chat database.
| Tool | Description |
|---|---|
chatdb_list | Lists/searches entities (read-only). |
chatdb_get | Retrieves a single entity by ID (read-only). |
web_search — Web Search (unified)¶
| Tool | Description |
|---|---|
web_search | Searches the web via the configured provider (Auto, Tavily, Perplexity, Serper, or Internal). |
Web search on OpenRouter models¶
When the agent's model is an OpenRouter route and no external search key applies, the capability is served by OpenRouter's own web plugin. Two settings tune it:
| Setting | Default | Description |
|---|---|---|
WEB_SEARCH_MAX_RESULTS | 5 | Number of results OpenRouter attaches. Values below 1 are raised to 1. |
WEB_SEARCH_ENGINE | OpenRouter's own choice | One of native, exa, firecrawl, parallel, perplexity. An unset or unrecognized value is ignored, leaving OpenRouter to route the search itself. |
The plugin searches on every turn
Unlike a tool the model decides to call, OpenRouter searches before the model sees the turn and prepends the results — so an OpenRouter agent with this capability pays for a search on every message, including ones that need none. Three things bound that: the plugin is only attached to an agent that actually has the web_search capability, a configured external provider key (Tavily, Perplexity, or Serper) takes precedence over it, and WEB_SEARCH_MAX_RESULTS caps each search. Leave the capability off agents that do not need to search.
web_search_perplexity — Web Search (Perplexity)¶
| Tool | Description |
|---|---|
perplexity_web_search | Perplexity search with workflows for news, entity research, and general inquiries; supports location-based search and authority filtering. |
web_search_gemini_deep_research — Web Search (Gemini Deep Research)¶
| Tool | Description |
|---|---|
gemini_deep_research | Runs a background Gemini research job, polls to completion, returns the final report + metadata. |
subchats_parent — Subchats (Parent)¶
Active when the chat is top-level.
| Tool | Description |
|---|---|
create_subchats | Creates subchats in the current chat with optional initial prompts and goals. |
subchats_child — Subchats (Child)¶
Active when the chat has a parent.
| Tool | Description |
|---|---|
report_information_to_parent_chat | Sends text to the parent chat, optionally analyzing it with the LLM. |
memo — Memo¶
| Tool | Description |
|---|---|
chat_memo | Sets or appends to the chat memo (info scoped to the chat/session only). |
goal — Goal¶
| Tool | Description |
|---|---|
set_chat_goal | Replaces the chat goal text when the user explicitly asks to set/change it. |
rag_messages — RAG Messages¶
| Tool | Description |
|---|---|
rag_search_messages | Semantic search over chat message history. |
rag_documents — RAG Documents¶
Added by the rag capability when documents are enabled.
| Tool | Description |
|---|---|
rag_search_documents_and_collections | Semantic search across documents and collections. |
documents — Documents¶
| Tool | Description |
|---|---|
list_collection_documents | Lists documents in a collection (with custom-name metadata). |
list_directories_and_documents | Lists directories and documents at a path in the chat's document tree. |
wait_until_document_text_extraction_is_finished | Waits until a document is "Ready" or until timeout. |
get_document_text | Retrieves the full text (or a portion) of a document by ID. |
view_image | Lets the agent actually see an image document from the chat, rather than read its (usually empty) extracted text. Takes the document ID; the document must be linked to the current chat or its workspace and must be an image. A viewed image is also pinned — see below. Pass unpin: true to remove a previously pinned image from later turns. Anything that cannot be shown (not in this chat, not an image, bytes unreadable) comes back as a plain explanation instead of failing the turn. |
save_document | Saves content as a document (TXT, DOCX, MD, HTML, PDF, CSV, XLSX, CUSTOM), optionally into a destination folder. The filename must be a plain basename; a path-shaped name is rejected with a retry message rather than being split. |
document_status | Returns a document's processing/availability status. |
attach_documents_to_response | Attaches documents that already exist in the chat to the assistant's own reply, so the user gets them as message attachments. Documents are named by path (for example /reports/q3.md) or by numeric ID, must belong to the current chat, and are limited to 10 per call. Re-attaching a document that is already attached does nothing. |
Seeing images from earlier in the chat¶
An image only reaches the model as a picture while its message is still inside the recent-history window. Once it scrolls out, the model is blind to it — and asking for its text gets little or nothing back, because a photo or screenshot has no useful extracted text.
view_image closes that gap, and what it shows stays shown:
- A successfully viewed image is pinned to the conversation and re-attached on every later turn, so the agent can keep referring to it instead of viewing it again.
- Pins are capped at five per chat. Adding a sixth evicts the oldest pin. Call
view_imagewithunpin: trueto release one deliberately. - Images are downscaled before being sent, and an image already present in the turn is not sent twice, so pinning has a bounded cost.
Behaviour is the same whichever model provider the agent runs on; the platform adapts how the image is delivered to what each provider accepts.
How many images reach the model at once¶
Images attached to recent messages are sent to the model as real images, not just filenames — but within a budget per conversation. By default at most six images and 15 MB of image data are attached, newest first.
Beyond that budget, an image is not an error and does not disappear: it degrades to its metadata, so the model still knows a file of that name is attached but can no longer see it. An image whose stored file cannot be read degrades the same way, with a note saying so.
This matters for anything that attaches images repeatedly — a Live App that re-attaches photographs at each stage of a flow, for instance. Past the budget the oldest images stop being visible while appearing to still be attached. Where a specific image needs to be seen, have the agent open it deliberately with view_image, which also pins it, rather than relying on it still being inside the history budget.
Tell the agent the image is there
The agent discovers image documents from the chat's document list and from the attachment notes on earlier messages. If a user refers to "the screenshot I sent yesterday", the agent needs the documents capability to look it up and view it.
genui — Gen UI¶
Lets the assistant answer with interactive widgets instead of plain text. Each tool appends a rendered component to the message it is replying with, so the chat bubble updates live.
| Tool | Description |
|---|---|
render_text | Markdown text block, with an optional heading level. |
render_chart | A pie, bar, line, scatter, histogram, or heatmap chart, with colors, number formatting, legend, and grid options. |
render_status_card | An info, success, warning, or error status card. |
render_choice | Single- or multi-select choice cards, optionally allowing a typed-in answer. |
render_form | A form built from text, multiline, number, select, radio, checkbox, and date fields, with validation rules and fields that appear conditionally. |
render_confirmation | A confirm/cancel gate that shows what the consequence would be. |
render_rating | A star, thumbs, or numeric rating, optionally with a comment. |
render_schedule_picker | A picker for choosing from offered times. |
render_comparison_matrix | A side-by-side comparison table. |
render_card_carousel | A swipeable set of cards. |
settings — Settings¶
| Tool | Description |
|---|---|
edit_user_setting | Creates/updates a user setting (name + value) scoped to the user's current group. |
tasks — Tasks¶
| Tool | Description |
|---|---|
get_capabilities | Gets the list of capabilities for the default virtual assistant. |
create_task | Creates a task with scheduling, memory, search, and customization options. |
scheduled_prompts — Scheduled Prompts¶
Requires scheduled tasks to be enabled on the chat (the chat's scheduled_jobs_enabled flag).
| Tool | Description |
|---|---|
add_scheduled_job | Adds a scheduled job that runs a given prompt on a schedule. |
Note
The underlying toolkit also defines tools to list, update, and delete scheduled jobs, but only add_scheduled_job is registered under this capability.
video_analysis — Video Analysis¶
| Tool | Description |
|---|---|
analyze_video_tool | Analyzes video to summarize, extract info, and identify key points/timelines. |
extract_video_keyframes | Extracts scene-change keyframes and saves each as an image document. |
video_transcription — Video Transcription¶
| Tool | Description |
|---|---|
transcribe_video_tool | Verbatim transcript from a video's audio track (or an audio file), no summarization. |
audio_diarization — Audio Diarization¶
| Tool | Description |
|---|---|
diarize_audio_tool | Transcribes audio with speaker diarization; returns [MM:SS] timestamps + Speaker labels. |
sandbox — Sandbox (internal toolkit)¶
An ephemeral per-turn Daytona shell for code/skill execution.
| Tool | Description |
|---|---|
sandbox_exec | Runs a shell command in an ephemeral per-turn sandbox; state is reused across calls within the same turn. |
Not the same as a type: "sandbox" capability
This internal sandbox capability provides the general-purpose sandbox_exec tool — see Sandbox Execution. It's distinct from a Sandbox capability (type: "sandbox"), which packages a whole automation behind a nested loop.
computer_use — Computer Use (internal toolkit)¶
Direct desktop control where the agent's own model does the looking and clicking.
| Tool | Description |
|---|---|
computer_use | Performs one mouse/keyboard action (click, type, scroll, etc.) on a per-turn desktop sandbox. |
computer_screenshot | Captures the desktop screen, with optional region zoom for small text. |
Not the same as a type: "computer_use" capability
This internal computer_use capability exposes low-level actions the agent's own model drives directly. It's distinct from a Computer Use capability (type: "computer_use"), which runs a nested Claude loop behind a single named tool.
Special-cased capabilities (built per-request)¶
These can't be pre-registered because they need per-user or per-request state, so the platform builds them at runtime:
memory — Memory¶
Skipped on temporary chats and when global memory is off. Scoped to the user and group (and per-agent for constitution memories).
| Tool | Description |
|---|---|
search_memory | Semantic vector lookup of saved memories; returns id, type, priority, timestamp, text. |
update_memory | Adds, updates, or deletes a memory (action + text + memory_type + priority and/or memory_id). |
web_search_google_serper — Web Search (Google Serper)¶
| Tool | Description |
|---|---|
google_serper_results_json | Google search results. Requires SERPER_API_KEY in user/group settings; if missing, the tool is omitted and a warning is logged. |
generic_api_requests — Generic API Requests¶
| Tool | Description |
|---|---|
requests_get | Performs HTTP GET requests and returns the response. Instantiated fresh per request (not registry-cached). |
Codes handled elsewhere¶
A few capability codes exist but don't map to discrete tools on this page — they're handled by other subsystems (the agent prompt, plugins, or platform features) rather than the tool registry:
multimodalityprocess_documentsobviously_manageweb_search_internal
Quick reference: code → tools¶
| Code | Display name | Tools |
|---|---|---|
base | Base Tools | 12 tools (title, notify, push, read URL, hide, query/call/execute, mentions, image, voice, speak) |
base_dev | Base Dev Tools | wait_seconds |
canvas_toolkit | Canvas | 5 canvas tools |
chat_db_edit | Chat DB (Edit) | 6 chatdb tools |
chat_db_read_only | Chat DB (Read Only) | chatdb_list, chatdb_get |
web_search | Web Search | web_search |
web_search_perplexity | Web Search (Perplexity) | perplexity_web_search |
web_search_gemini_deep_research | Web Search (Gemini Deep Research) | gemini_deep_research |
web_search_google_serper | Web Search (Serper) | google_serper_results_json (special) |
subchats_parent / subchats_child | Subchats | create_subchats / report_information_to_parent_chat |
memo | Memo | chat_memo |
goal | Goal | set_chat_goal |
rag_messages | RAG Messages | rag_search_messages |
rag_documents | RAG Documents | rag_search_documents_and_collections |
documents | Documents | 8 document tools |
genui | Gen UI | 10 render_* widget tools |
settings | Settings | edit_user_setting |
tasks | Tasks | get_capabilities, create_task |
scheduled_prompts | Scheduled Prompts | add_scheduled_job |
video_analysis | Video Analysis | analyze_video_tool, extract_video_keyframes |
video_transcription | Video Transcription | transcribe_video_tool |
audio_diarization | Audio Diarization | diarize_audio_tool |
sandbox | Sandbox | sandbox_exec |
computer_use | Computer Use | computer_use, computer_screenshot |
memory | Memory | search_memory, update_memory (special) |
generic_api_requests | Generic API Requests | requests_get (special) |
Related Topics¶
- Capabilities — what capabilities are and how they're used
- Tool Plugins — for developers registering custom internal tools
- Sandbox Execution — the
sandbox_execgeneral-purpose tool - Working with AI Agents — assigning capabilities to an agent