> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anyreach.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Built-in tools

> Platform-provided tools you can enable: web search, webpage retrieval, time, and continue-on-phone.

Built-in tools are capabilities Anyreach hosts for you. Unlike config tools (which you define and point at your own webhooks), you turn these on by adding the matching key under `built_in_tools` in an agent version, and the platform supplies the implementation. The model decides when to call them during a conversation.

Each built-in tool is independent: include the key to enable it, omit it to disable it. The keys live under `agent.built_in_tools`:

| Key                 | Tool exposed to the model | What it does                                                                                                                 |
| ------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
| `time_tool`         | `get_current_time`        | Returns the current date and time in a timezone.                                                                             |
| `web_search`        | `web_search`              | Searches the web (Google, via Serper).                                                                                       |
| `retrieve_webpage`  | `retrieve_webpage`        | Fetches a webpage and returns it as markdown (via Firecrawl).                                                                |
| `continue_on_phone` | `continue_on_phone`       | Starts an outbound call to move a web chat onto the phone. WebRTC only.                                                      |
| `widgets`           | `show_*_widget`           | Renders interactive chat widgets. WebRTC only. See [/agents/web-chat-widgets-and-forms](/agents/web-chat-widgets-and-forms). |
| `forms`             | `show_form_*`             | Renders structured input forms. WebRTC only. See [/agents/web-chat-widgets-and-forms](/agents/web-chat-widgets-and-forms).   |

This page covers `time_tool`, `web_search`, `retrieve_webpage`, and `continue_on_phone`. Widgets and forms are documented on the [web chat widgets and forms](/agents/web-chat-widgets-and-forms) page.

<Note>
  Built-in tools are exposed to the model alongside your config tools. For how config tools work, see [/agents/tools](/agents/tools).
</Note>

## Time

Enable `time_tool` to give the agent the `get_current_time` tool. The model can ask for the current date and time, optionally in a specific timezone.

| Field              | Type               | Default | Description                                                                      |
| ------------------ | ------------------ | ------- | -------------------------------------------------------------------------------- |
| `default_timezone` | string (IANA name) | `UTC`   | Timezone used when the model does not pass one (for example `America/New_York`). |

The tool accepts an optional `timezone` argument (an IANA name such as `Europe/London` or `Asia/Tokyo`); when omitted, the agent's `default_timezone` is used. `time_tool` works on every channel and direction.

## Web search

Enable `web_search` to give the agent the `web_search` tool, which queries Google through Serper.

The tool takes:

| Argument | Type   | Required | Description                                                                          |
| -------- | ------ | -------- | ------------------------------------------------------------------------------------ |
| `query`  | string | Yes      | The search query. Supports Google operators like `site:` and `in:`.                  |
| `type`   | enum   | Yes      | One of `search`, `images`, `news`, `shopping`. Invalid values fall back to `search`. |

`web_search` has no configuration fields; add `web_search: {}` to enable it.

<Note>
  Web search requires a `SERPER_API_KEY` to be configured on the platform. If it is not set, the tool returns `web_search is not configured` instead of results.
</Note>

## Retrieve webpage

Enable `retrieve_webpage` to give the agent the `retrieve_webpage` tool. It fetches a single URL and returns the page as markdown, scraped through Firecrawl. Use it to read articles, product pages, or documentation when the agent needs a page's full content.

| Argument | Type   | Required | Description                                                        |
| -------- | ------ | -------- | ------------------------------------------------------------------ |
| `url`    | string | Yes      | The full URL to retrieve (for example `https://example.com/page`). |

`retrieve_webpage` has no configuration fields; add `retrieve_webpage: {}` to enable it.

<Note>
  Webpage retrieval requires a `FIRECRAWL_API_KEY` to be configured on the platform. If it is not set, the tool returns `retrieve_webpage is not configured`.
</Note>

## Continue on phone

Enable `continue_on_phone` to let a web chat agent move the conversation onto a phone call. When the user wants to switch from chat to a call, the model calls `continue_on_phone` with the user's phone number and the platform initiates an outbound call.

<Warning>
  `continue_on_phone` is only available on the WebRTC (web chat) channel. Enabling it has no effect on telephone or other channels.
</Warning>

The tool takes one argument from the model:

| Argument       | Type           | Required | Description                                                  |
| -------------- | -------------- | -------- | ------------------------------------------------------------ |
| `phone_number` | string (E.164) | Yes      | The user's phone number to call, for example `+14155551234`. |

You control which agent and number place the call with the configuration fields below. All are optional.

| Field          | Type           | Default                 | Description                                                                             |
| -------------- | -------------- | ----------------------- | --------------------------------------------------------------------------------------- |
| `agent_id`     | string         | Current agent           | Agent to use for the phone call. Falls back to the current agent if not set.            |
| `version`      | integer        | Latest published        | Specific agent version number. Only used together with `agent_id`.                      |
| `agent_number` | string (E.164) | Agent's assigned number | The number to call **from**. Falls back to the number assigned to the agent if not set. |

## WebRTC thinking hints

On the WebRTC channel only, `web_search` and `retrieve_webpage` gain an extra required argument so the agent can tell the user what it is doing while a slow call runs:

| Argument        | Type   | Description                                                                                                  |
| --------------- | ------ | ------------------------------------------------------------------------------------------------------------ |
| `thinking_hint` | string | A brief, contextual hint shown to the user while the tool runs (for example `Looking up laptop reviews...`). |

On the same channel, a standalone `set_thinking_hint` tool is also added so the agent can surface a processing hint at any time. It takes a single required `hint` string.

<Note>
  The `thinking_hint` argument and the `set_thinking_hint` tool appear only on WebRTC. On other channels, `web_search` and `retrieve_webpage` keep their base argument set and no `set_thinking_hint` tool is added.
</Note>

## Per-channel availability

A single function, `compute_runtime_tool_specs`, decides which tools the runtime exposes for a given agent config, channel, and direction. The same `built_in_tools` config behaves differently depending on where the conversation runs:

| Tool                | Telephone | WebRTC | Notes                                                                                      |
| ------------------- | --------- | ------ | ------------------------------------------------------------------------------------------ |
| `get_current_time`  | Yes       | Yes    | Channel-independent.                                                                       |
| `web_search`        | Yes       | Yes    | Gains `thinking_hint` on WebRTC.                                                           |
| `retrieve_webpage`  | Yes       | Yes    | Gains `thinking_hint` on WebRTC.                                                           |
| `set_thinking_hint` | No        | Yes    | Added whenever widgets are configured on WebRTC.                                           |
| `continue_on_phone` | No        | Yes    | WebRTC only.                                                                               |
| `show_*_widget`     | No        | Yes    | WebRTC only. See [/agents/web-chat-widgets-and-forms](/agents/web-chat-widgets-and-forms). |
| `show_form_*`       | No        | Yes    | WebRTC only. See [/agents/web-chat-widgets-and-forms](/agents/web-chat-widgets-and-forms). |

Config-declared tools are always added first, then `time_tool`, then channel-specific built-ins, so the order the model sees is consistent across runs.

<Info>
  Direction matters for some tools beyond the built-ins (for example voicemail detection is added only for outbound telephone calls), but the built-in tools above depend only on whether they are configured and on the channel.
</Info>

## Related

<CardGroup cols={2}>
  <Card title="Web chat widgets and forms" icon="window" href="/agents/web-chat-widgets-and-forms">
    Configure interactive widgets and structured forms for WebRTC chat.
  </Card>

  <Card title="Tools" icon="wrench" href="/agents/tools">
    Define your own config tools that call external webhooks.
  </Card>
</CardGroup>
