Skip to content

Tool calls

When an agent runs a command, fetches a page or calls a tool, the transcript shows a tool card. Collapsed, it’s a single line. Expanded, it shows what the agent asked for and what came back, laid out for that kind of tool instead of as raw JSON.

macOS

An expanded exec card with the command, working directory and timeout chips, an exit 0 badge and the output, above a failed exec card with a red border, a Failed badge and exit 1.
macOS, built-in demo. Open Check the MCP servers and set Thinking Steps to All. Each header shows how long the call took. Open image for full size.

iOS

The expanded exec card with its output on iPhone, above the collapsed failed exec card and the other tool calls. Each header shows its duration.
iOS, built-in demo. The collapsed cards below the open one show the failed exec in red and each call's duration. Open image for full size.

Tap or click a card’s header to expand it, and again to collapse it; the chevron at the right shows which way it’s open. The header shows:

  • an icon and the tool’s name. For an MCP tool it reads server · tool.
  • a one-line summary: the command, path, URL or query, cut short in the middle so both ends stay visible.
  • how long the call took, for example 1.2 s, at the right before the chevron. It appears once the call has finished, and only when the gateway reported a time. It’s the first thing dropped when the header is tight, so the name and summary stay readable.
  • a spinner while the tool is running, and a red Failed badge when the call failed. A failed card gets an outlined red ✕ icon and a red border, so it stands out in a long chat. Every kind of card shows the badge, including the plain one for tools Pincer has no special layout for.

Pincer only works out the details when you expand a card, so long chats stay quick.

A command such as exec appears in a terminal-style block, monospaced, with a $ prompt and the command exactly as the agent wrote it, without JSON escapes. Copy copies the command without the $.

Chips under the block show the settings that came with the call: the working directory and timeout, and flags such as background, PTY or elevated when they’re set. If the gateway reports where the command actually ran, that directory is shown.

The output section is titled Output, or Error in red when the call failed. Its badges show:

  • the exit code, green for exit 0 and red for anything else.
  • how long the call took, for example 1.2s.
  • the number of lines.

Pincer shows the text the tool returned, not the gateway’s result envelope. Line breaks are real line breaks, terminal colour codes are removed, and text the gateway repeats in its result details appears once. The output isn’t wrapped into a card-width column of JSON, so tables and logs line up. If the result has images, a caption such as “2 images” says so, and the images appear in the message.

Long output is cut to its first 12 lines. Choose Show all N lines to see the rest, and Show fewer lines to cut it short again. Once expanded, the whole result shows in the card, which grows to fit, so there is no scrolling inside the card; the chat scrolls as usual. Copy next to the badges copies the whole output. Everything in a card is selectable.

While a tool is running and hasn’t produced output yet, the card says Running….

Edits, writes and patches show as diffs instead. See File edit diffs. A file read shows the path (and offset or limit, if given) and its output like any other tool.

A fetch shows the URL, and a search shows the query, each in a chip with an icon. Extra chips show settings like the extract mode or the number of results. A fetch’s output badge shows the HTTP status, and how long it took, when the gateway reports them.

A web_search result appears as a list of links instead of JSON. Each result shows its linked title, site and a snippet preview of up to two lines; the complete displayed snippet remains available to Find. The section is titled Results, and its badges show the search provider (for example brave), the number of results, how long the search took, and cached when the gateway served a saved answer.

Each result is a title link, a dimmed line with the site, host and publish date when the provider gives them, and the snippet. The titles are ordinary links inside the card’s selectable text, so click or tap one to open the page, and use the VoiceOver links rotor to move between them. On macOS, hovering a title shows the full URL. Copy copies one title and url pair per result.

Some providers answer the question instead of listing pages. Then the section is titled Answer, the card shows the answer text, and a Sources list of links follows. If the search failed, the card shows the provider’s own error message, with its documentation link when it sent one, like any other tool.

When a provider or OpenClaw shortens or omits part of the search output to fit its limits, the card shows Search output was truncated. This can refer to shortened text or omitted results or sources.

macOS

A web_search card listing five results as blue links with site, date and snippet, above an expanded web_fetch card.
macOS, built-in demo. The brave, 5 results and 640 ms badges sit in the title row. Open image for full size.

iOS

A web_search card on iPhone listing five results as links with site, date and snippet.
iOS, built-in demo. Tap a title to open the page. Open image for full size.

Only http and https links are shown. If the gateway’s result is in a shape Pincer doesn’t recognize, or the chat was cached by an earlier version of Pincer without the result details, the card shows the output as plain text. Show raw JSON in the section’s title row always shows the full result. To get the links for an old cached chat, clear the cache under Settings → General → Storage (see Local cache).

When the agent uses the browser tool to open, navigate, screenshot or otherwise work with a web page, the chat shows a page card for it, as the OpenClaw Control UI does. The card’s footer shows the site’s icon (or a globe), the page title and its address. Click or tap the card to show that page in the browser panel, when your connection has Full Management and the gateway offers the live browser; otherwise the page opens in your web browser. Right-click it on Mac, or touch and hold it on iPhone, for Open in Browser, which always uses your web browser, and Copy Link.

  • The card sits right after the turn’s tool calls and before the reply. It stays in the same place while the agent is working, after the turn finishes, and whether the tool calls are collapsed or expanded.
  • Each turn shows one card per browser tab, for the last page the agent visited in that tab, and at most three cards.
  • While the browser panel shows that page live, the card’s thumbnail updates from the live picture.
  • Only http and https pages get a card. Failed browser calls don’t.
  • The title and address come from the tool result itself, so the card also works offline and from the local cache, and it needs no admin access. Chats cached by an earlier version of Pincer don’t have the page details; to get cards for them, clear the cache under Settings → General → Storage (see Local cache).

When your gateway supports link previews (controlUi.linkPreview), Pincer asks it for the page’s site icon and preview image (its og:image) once the turn finishes. When the gateway sends an image, the card shows it above the footer. The gateway fetches the page itself, without your cookies, and you can turn this off on the gateway with gateway.controlUi.automaticallyFetchFavicons: false. Pincer doesn’t ask for previews of pages at local hostnames (such as localhost or .local names) or bare IP addresses. Without a preview, the card shows just the footer.

The gateway never sends the agent’s own page screenshots to chat clients, so the preview image is the site’s chosen image rather than a live capture of the page.

Pincer keeps a small number of recent previews in memory and decodes them in the background, so scrolling past cards never stalls.

Tools that come from an MCP server show the server and the tool separately, github · search_issues, so you can see which server handled the call. The server is also a chip in the expanded card, followed by the tool’s arguments. Choose Open MCP Server in the expanded card to jump to that server in MCP Servers. If the server isn’t in your config, for example one a plugin declares, the control reads Show MCP Servers and opens the list. Right-click a tool row on Mac, or touch and hold it on iPhone, to open the same server action or copy the raw tool name, such as github__search_issues.

Arguments appear as a list of keys and values instead of a block of JSON. Keys are dimmed, and values are monospaced. Text values keep their line breaks. A nested object or list is shown on one line, in compact form.

Choose Raw JSON in the section’s title row to see the arguments as the agent sent them, pretty-printed, and Formatted to go back. Arguments already shown as the command or as a chip aren’t repeated in the list.

Any tool Pincer has no special layout for uses this list, with its output as plain text.

Output that is JSON, and JSON values in a call’s arguments, is lightly coloured: keys, strings, numbers, and true, false and null each get their own colour. A file read is coloured by its file extension (Swift, JavaScript and TypeScript, Python, shell, Ruby, Go, Rust, C-family, JSON and YAML) with strings, numbers, comments and a few keywords. Markdown and unknown types stay plain. The colours follow light and dark mode and adapt to the card’s actual background, including a custom code background. When Increase Contrast is on, Pincer targets 7:1 where the background allows it; on mid-tone surfaces it chooses the strongest readable endpoint. The text itself never changes, so copying and Find work as before. Highlighting is worked out only when you expand a card.

macOS

An expanded read card showing a Swift file with keywords, comments and numbers in different colours.
macOS, built-in demo. A read of a Swift file, with keywords, comments, numbers and literals coloured. Open image for full size.

To look for something inside one card’s output, choose the magnifier button next to Copy in the output’s title row. It’s there on search results too. A search field opens in the card. As you type, every match in the card’s output and arguments is highlighted and the field shows where you are, for example “3 of 12”, with previous, next and close buttons.

  • Return goes to the next match, and Shift-Return to the previous one. The card and chat scroll to show it.
  • On macOS, ⌘G and ⇧⌘G also move between matches, and ⌘F with the cursor inside a card’s output opens that card’s search (and puts the cursor back in its field if it’s already open). Anywhere else ⌘F still opens Find in Chat.
  • Esc, or the magnifier again, closes the search and clears the highlights.

Searching shows all of the card’s lines, so a match is never hidden behind Show all. Only that card is redrawn as you type; the rest of the chat isn’t touched.

macOS

An exec card with a search field under the Output title showing Era, four highlighted matches and 1 of 4.
macOS, built-in demo. Searching for Era in one card's output. Open image for full size.

iOS

The same search on iPhone, with the matches highlighted and 1 of 4 in the field.
iOS, built-in demo. Open image for full size.

On iPhone and iPad the field works the same, with the on-screen keyboard or a hardware keyboard (Return, Shift-Return, Esc, ⌘G and ⇧⌘G).

With Include Tool Output turned on in Find in Chat, Find searches what the card shows: the command or headline, the argument list and the output. While a card has matches, its whole output is shown, so a match is never hidden behind Show all. With Raw JSON on, the card shows the raw arguments, and Find still searches the formatted text.

  • The header is a button. VoiceOver reads the tool, its summary, whether it failed and whether it’s expanded, for example “exec, df -h, failed, expanded”. Durations are spoken in words, so a long call reads as “2 minutes 5 seconds”.
  • Chips and badges are labelled: “Working directory”, “Exit code 1”, “Took 1.2 seconds”.
  • Text follows your text size (Dynamic Type on iOS and iPadOS) and works in light and dark mode. The exit code badge is always spelled out, so colour is never the only signal.

See Accessibility for more.

Tool cards follow the app’s light or dark appearance.

macOS

The exec and failed exec cards in dark mode.
macOS, dark mode. Open image for full size.

iOS

The expanded exec card in dark mode on iPhone.
iOS, dark mode. Open image for full size.

macOS

A web_search link list and a web_fetch card in dark mode.
macOS, dark mode. Open image for full size.

iOS

A web_search link list in dark mode on iPhone.
iOS, dark mode. Open image for full size.

In the demo, open the Check the MCP servers chat. It has a command with multi-line output, a failed command, a file edit, an MCP tool call, a web fetch, a web search with a list of results, and a read of a Swift file with syntax colours, all simulated.

If a diff line number reaches the largest supported integer, that line keeps its number and following lines are shown without an unrepresentable line number.