Skip to content
Built-in Tools

Built-in Tools

TeamWeb AI ships with a comprehensive set of built-in tools organized into categories. These tools are available to all assistants by default and can be toggled on or off per assistant from the assistant’s Tools tab.

Content & Canvas

ToolDescription
showDisplay a visual card on the canvas with a title, markdown body, and optional image. For presenting finished content only — not for choices.
save_contentSave a deliverable (blog post, report, file, etc.) with a shareable URL. Optionally submit for human review.
get_deliverableRetrieve the full content of an existing deliverable
list_deliverablesList deliverables filtered by status or content type
search_deliverablesSearch deliverable titles and bodies

Communication

ToolDescription
ask_humanPause the conversation and ask the human a question. Supports rich multimedia options with images, descriptions, and selectable choices. The agent loop pauses until the human responds.
send_emailSend an email to the current user.

Knowledge & Research

ToolDescription
search_knowledgeSearch the project’s knowledge base and datasets using semantic search. Returns knowledge articles, facts, documents, code, and dataset records in a unified result set. Dataset records are formatted with display fields. Accepts an optional dataset parameter to filter by dataset name.
query_datasetRun a SQL SELECT query against a structured dataset for precise filtering, sorting, and aggregation
describe_datasetGet the full schema, field types, sample values, and record count for a structured dataset. Helps the assistant understand data structure before querying.
get_recordFetch a single complete record from a structured dataset by its key value. Use after search_knowledge to get full details.
read_code_fileRead the full source code of an indexed repository file
add_knowledgeAdd a new fact or URL to the knowledge base

Notes

ToolDescription
save_noteSave a persistent note for future reference. Set about_user to save a personal memory about the person you’re speaking with.
get_notesRetrieve previously saved notes, optionally filtered by query or tags. Set about_user to retrieve only memories about the current person.
update_noteUpdate an existing note’s title, content, or tags
delete_noteDelete a note

User Memories

Notes support an optional per-user scoping mode. When an assistant calls save_note or get_notes with about_user: true, the note is tied to the specific person the assistant is currently speaking with — whether that’s a registered user or an external contact.

This lets assistants build up personal memory about individuals across conversations. For example, an assistant might remember a customer’s preferred communication style, project context, or previous requests.

How it works:

  • Savingsave_note with about_user: true creates a note scoped to the current person. If a note with the same title already exists for that person, the content is updated instead of creating a duplicate.
  • Retrievingget_notes with about_user: true returns only notes about the current person. Without the flag (or about_user: false), only general assistant notes are returned.
  • Auto-injection — The 5 most recently updated user memories are automatically included in the assistant’s system prompt at the start of each conversation turn, so the assistant doesn’t need to explicitly retrieve them.
  • Promotion — When a contact is promoted to a registered user, their memories are automatically transferred to the new user account.

User memories can be viewed and managed from the Notes tab on the assistant detail page (admin), the staff chat memories view, or the contact detail page.

Todos

ToolDescription
create_todoCreate a new todo item on the assistant’s todo list. Supports title, description, priority, due date, tags, and optional source linking (to an inbox item or conversation).
list_todosList the assistant’s todos, with optional status and priority filters. By default shows pending and in-progress items.
update_todoUpdate a todo’s title, description, status, priority, due date, or tags. Marking a todo as completed automatically records the completion time.
delete_todoRemove a todo from the assistant’s list.

Inbox

ToolDescription
list_inboxList the assistant’s inbox items. By default shows open and in-progress items. Supports status filtering and a configurable limit.
get_inbox_itemRead the full message thread of an inbox item, including all inbound messages, assistant replies, internal notes, and attachment links.
reply_to_inboxReply to an inbox item. The response is sent as an email to the sender via the assistant’s configured email channel. Supports file attachments via deliverable IDs.
close_inbox_itemClose an inbox item when the matter is resolved. Optionally add a resolution note.
update_inbox_itemUpdate an inbox item’s status, priority, or tags.
snooze_inbox_itemSnooze an inbox item until a specified future date. The item’s status is set to “snoozed” and it will reappear when the snooze period ends.

Child Runs

ToolDescription
spawn_child_runsSpawn one or more managed background runs on other assistants in parallel. Each task becomes an independent child run with its own conversation, journal, tools, and lifecycle. Returns the child run IDs.
wait_for_child_runsWait for one or more child runs to reach a terminal status (completed, failed, cancelled). Returns per-run status and result text. Omit child_run_ids to wait for all currently active child runs.
list_child_runsList managed child runs spawned from this conversation, optionally filtered by status.
get_child_runGet status, result, and run-journal details for a specific child run.
steer_child_runSend additional steering instructions to an active child run. The child assistant receives the message at the next safe turn boundary.
cancel_child_runRequest cancellation of an active child run. The child assistant stops at the next safe turn boundary.
Technical Details — Child Runs

How child runs work — The spawn_child_runs tool takes an array of tasks and queues each as an independent background run via Celery. Every child run gets its own conversation, agent loop, run journal, and tool access, and runs in parallel with the others. The parent assistant continues immediately with the child run IDs; it can then carry on with non-overlapping work, or call wait_for_child_runs to block on results.

Lifecycle — Each child run has a status: queuedrunningcompleted, failed, or cancelled. The child cannot see the parent’s conversation history; all context must be provided in the task description.

Steering and cancellation — While a child run is active, the parent can queue additional steering messages (steer_child_run) or request cancellation (cancel_child_run). The child assistant checks for both at safe turn boundaries and honours them without losing its current turn’s work.

Safety guardrails — The delegation chain is depth-limited (default 3). Self-delegation is allowed within that cap — an assistant can spawn child runs of itself to fan out parallel research, and those children can spawn one more level. Only assistants in the same project can be spawned. Stale queued or running child runs are reaped by a periodic reconcile_child_runs task.

Project Management

ToolDescription
get_project_stateRead shared key-value state for the project
update_project_stateUpdate shared project state

Tasks & Scheduling

ToolDescription
create_taskCreate a reusable task definition
list_tasksList task definitions
update_taskUpdate a task definition
cancel_taskDeactivate a task
list_schedulesList task schedules
create_scheduleCreate a cron schedule for a task
update_scheduleUpdate a schedule

Conversations

ToolDescription
list_conversationsList past conversations in the project
get_conversation_summaryGet a summary of a past conversation

Code Execution

ToolDescription
execute_codeRun code in a sandboxed Docker container. Supports Python, JavaScript, Java, C++, Go, and R. Optional library installation for Python.
save_generated_toolSave a Python custom tool as a reusable BaseTool subclass. The code is validated and always runs sandboxed; use execute_code first to test it.

Browser

ToolDescription
browser_actionControl a managed browser session from the conversation. Supports start, navigate, click, click_text, type, wait_for, extract, screenshot, scroll, find_text, accept_cookies, and close. Use start first, then operate on the same session_key across tool calls.

browser_action

The browser_action tool gives an assistant access to a real managed browser session. Unlike simple HTTP fetching, this lets the assistant interact with dynamic pages that require JavaScript, form input, navigation, and DOM-based waiting.

Supported actions:

  • start — Start a browser session for the current conversation. Call this once.
  • navigate — Go to an http:// or https:// URL. Cookie/consent banners are auto-dismissed by default; pass auto_dismiss: false to keep the banner if you need to interact with it.
  • click — Click an element using a CSS selector.
  • click_text — Click the first visible element matching a label. Optional role (e.g. "button", "link", "tab") disambiguates when the same label exists on multiple element types. Prefer this over building speculative CSS selectors.
  • type — Clear a field and type text into it using a CSS selector.
  • wait_for — Wait for either a selector to appear or the URL to contain a given substring.
  • extract — Extract data from the current page or an optional selector scope. See Extract modes below.
  • screenshot — Capture a PNG screenshot of the current page or a specific element. Last-resort orientation tool — prefer extract mode='page_model'.
  • scroll — Scroll the page (viewport, page, a pixel count) or scroll a specific selector into view. Useful for lazy-loaded list pages.
  • find_text — Find visible elements matching a text label and return their selectors. Use when you need a selector for a follow-up extract or wait_for; for clicking, prefer click_text.
  • accept_cookies — Best-effort dismissal of a cookie/consent banner. Rarely needed manually since navigate runs this automatically.
  • close — Close the session and release browser resources.

Extract modes:

  • text — Plain visible text from the page or a selector.
  • html — Inner HTML, or outerHTML when a selector is given (use this for self-closing elements like <img>/<input> to read attributes such as src, value, alt).
  • links — Array of {href, text} for every <a> in scope. Capped at 50 entries with per-item href/text trimming, so a busy page can’t dump tens of KB into context.
  • form_fields — Array of {name, type, value, placeholder} for every form field in scope.
  • page_model — Compact JSON skeleton of the current page: visible headings, landmarks (main, nav, etc.), interactive elements (each with role, name, selector), forms with field labels, and detected list groups (≥3 sibling elements with the same shape). Output is bounded to fit comfortably under 8 KB. This is the cheap default for orienting on a new page.
  • structured — Schema-driven scraping for lists/grids/cards. Pass a repeat_selector matched once per item and a schema of {name, selector, attr?} field specs. Returns a list of dicts. Reads innerText by default, or the named attribute when attr is set. Caps at max_items (default 50).

Key behaviors:

  • Conversation-scoped sessions — Browser sessions belong to the current conversation. They can be reused across multiple tool calls in that conversation by using the same session_key.
  • Explicit lifecycle — The assistant must start a session before it can navigate or interact with pages. If the browser runtime expires, the session must be started again.
  • Managed profile state — Login cookies and local browser storage persist while the managed browser profile remains active. TeamWeb AI does not replay old browser actions to reconstruct expired sessions.
  • Auto-dismiss on navigate — Each navigate call attempts a best-effort cookie/consent banner dismissal once the page is loaded. Failures are swallowed so they cannot fail the navigation. Disable per-call with auto_dismiss: false.
  • Inline screenshot results — Screenshots are stored through the media system and returned in the tool result as both a URL and a ready-to-use markdown image snippet. This is intended for normal conversation output, not the canvas or deliverables system.
  • Channel-friendly delivery — When a reply containing a local screenshot is sent through email, Telegram, Slack, or other attachment-capable channels, TeamWeb AI promotes that referenced media into a real outbound attachment instead of relying on the raw markdown image URL.

Best practices for the assistant:

  • Don’t guess URLs. Use site navigation. If the right URL isn’t already known, run web_search first or navigate to the site root and use extract mode='page_model' to follow real links. Pattern-matching paths from product or destination names ("/cruises/port/copenhagen", “/products/foo”) fails fast with 404s and burns turns.
  • Orient with page_model, not screenshot. A page_model extract is much cheaper and gives the assistant a click-ready map. Reach for screenshot only when visual layout is genuinely needed.
  • Click by label. click_text removes the find-then-click dance; reserve CSS selectors for cases where labels are ambiguous.
  • Scrape lists with structured mode. Define a repeat_selector and a schema rather than dumping mode='text' and parsing prose.
  • Use the run journal. For non-trivial multi-page research, write objective, current state, verified findings, and the next action via update_run_journal / append_run_journal_entry early and often. The journal is reloaded on every continuation, including after iteration-limit halts — see Run Journal.

The bundled browser-research skill packages these guidelines plus worked patterns (form-filling, embedded SPA app-state extraction, lazy-loaded results, recovery from CAPTCHAs and dead-ends) into a single activatable instruction set.

Current limits:

  • CSS selectors only in v1
  • No multi-tab support
  • No video recording
  • No automatic recovery of expired sessions
Browser automation is intentionally restricted. Navigation to file://, localhost, private-network IPs, and internal-only hostnames is blocked by default unless the deployment explicitly allows it.

Planning

ToolDescription
manage_planCreate hierarchical task plans, track progress, and manage steps. Plans are scoped to the conversation and visible in the workspace sidebar.
thinkStructured self-reflection tool. The agent records its reasoning, which is stored as a hidden message for debugging.
Assistants no longer need a summarize_history tool — the agent loop now performs auto-compaction in the background when the conversation approaches the model’s context window. See Agent Loop for details.

manage_plan

The manage_plan tool lets an assistant create, inspect, and update a structured task plan within the current conversation. Plans support hierarchical (nested) steps, so a top-level step can contain sub-steps for finer-grained tracking.

Actions:

  • create — Create a new plan with a title and a list of steps. Steps can be nested to form a hierarchy.
  • get — Retrieve the current plan and its step statuses.
  • update_step — Mark a step as completed, in-progress, skipped, or failed.
  • add_steps — Append new steps to an existing plan.
  • remove_steps — Remove steps from the plan by ID.

Plans appear in the workspace sidebar during the conversation, giving you a live view of what the assistant is working on and how far along it is.

Configuration options (set per assistant):

OptionTypeDefaultDescription
auto_planbooleanWhen enabled, the assistant automatically creates a plan for complex tasks.
max_stepsinteger20Maximum number of top-level steps allowed in a plan.

think

The think tool gives the assistant a structured space for self-reflection. When called, the agent writes down its reasoning about the current task — what it knows, what’s uncertain, and what approach it should take. The reasoning is stored as a hidden message (not shown to the user) but is available in API Logs for debugging.

Research on LLM tool-use shows a 21% average improvement in task quality when agents use structured reflection before acting. The tool is especially valuable for multi-step or ambiguous tasks.

Workspace

ToolDescription
write_fileCreate or overwrite a text file in the conversation workspace.
read_fileRead a file’s content from the workspace.
list_filesList all files in the workspace with sizes and modification times.
delete_fileRemove a file from the workspace.
get_run_journalRead the current run journal for this conversation. The journal is durable session memory for verified findings, decisions, blockers, artifacts, and handoff notes.
update_run_journalCreate or replace the run journal for this conversation. Use after meaningful milestones to capture concise session memory.
append_run_journal_entryAppend a concise timestamped entry to a run journal section without rewriting the whole journal.

Workspace files give assistants a scratch-pad for producing and iterating on deliverables — drafts, data files, generated code, and so on. Files persist across turns within the same conversation and are visible in the workspace sidebar.

Key behaviors:

  • Scoped to the conversation — Each conversation has its own isolated workspace. Files are not shared between conversations.
  • Upsert semanticswrite_file overwrites the file if one with the same filename already exists.
  • Automatic cleanup — Workspace files are removed after a configurable time-to-live once the conversation ends. The TTL is controlled by the WORKSPACE_TTL_DAYS environment variable (default: 7 days).

Workflow

These tools are automatically available during workflow execution. They do not need to be enabled per assistant – the workflow engine injects them when a workflow run is active.

ToolDescription
record_dataRecord a key-value pair of gathered information. Accepts a key, value, and optional source (user_stated, tool_result, or inferred). Data persists across states and is used by guards and downstream operations. If a reducer is configured for the key, the value is merged according to the reducer strategy.
signal_completionSignal that the current workflow state’s work is done. Accepts a summary of what was accomplished. Triggers guard evaluation and fires the next transition if guards pass. If required fields are unmet, returns the list of missing requirements instead of advancing.
retry_stateRetry the current workflow state when an action fails. Accepts a reason for the retry. The engine checks the state’s retry policy and returns the attempt count, or an error if the retry budget is exhausted.
switch_workflowSwitch the conversation to a different workflow. Accepts a workflow_id and reason. The current run is marked as abandoned, a new run is created with the target workflow, and previously gathered data is preserved. Only available when the assistant has multiple workflows attached.

Skills

ToolDescription
activate_skillActivate a skill for the current conversation
read_skill_resourceRead a file from an activated skill