session/update notifications, which Clients use to show progress and results to users.
Agents run tool calls themselves. They may use Client capabilities such as permission requests or file system access.
Creating
When the language model requests a tool invocation, the Agent SHOULD report it to the Client:The programmatic name of the invoked tool, such as
read_file. This
identifies which tool is being used. title describes this invocation for
users, while kind provides a coarse presentation category. If omitted or
null on the initial tool call, no name is provided. Names are opaque,
informational metadata and do not advertise a capability or grant
authorization. Agents SHOULD include the name when available and SHOULD
NOT change it later except to correct metadata.The category of tool being invoked.Tool kinds help Clients choose appropriate icons and optimize how they display tool execution progress.
The current execution status (defaults to
pending)Content produced by the tool call
File locations affected by this tool call
The raw input sent to the tool. Any JSON value is accepted, including objects,
arrays, strings, numbers, booleans, and
null.The raw output returned by the tool. Any JSON value is accepted, including
objects, arrays, strings, numbers, booleans, and
null.null are equivalent for rawInput and rawOutput.
On an initial tool call, both mean no value is provided. On a tool call
update, both leave the previously reported value unchanged.
Updating
As tools execute, Agents send updates to report progress and results. Updates use thesession/update notification with tool_call_update:
toolCallId are optional in updates. Only the fields being changed need to be included.
For name, a string sets or replaces the tool name. Omission and null both
leave the existing name unchanged, so ACP v1 cannot clear a previously reported
name.
Requesting permission
The Agent MAY request permission from the user before executing a tool call by calling thesession/request_permission method:
Available permission options for the user to choose
from
"cancelled" outcome:
The user’s decision, either: -
cancelled - The prompt turn was
cancelled - selected with an
optionId - The ID of the selected permission optionPermission options
Each permission option provided to the Client contains:A hint to help Clients choose appropriate icons and UI treatment for each option.
allow_once- Allow this operation only this timeallow_always- Allow this operation and remember the choicereject_once- Reject this operation only this timereject_always- Reject this operation and remember the choice
allow_always or
reject_always option, the Agent stores the decision, decides its scope (for
example a tool, a command, or a directory) and how long it lasts, and applies
it by not asking again. kind is only a UI hint. The option name describes
the scope.
Security
- Clients SHOULD describe the operation from the tool call’s
kind,locations, and content, presenttitleas Agent-authored text, and show commands and paths in full. - Agents SHOULD NOT give an option a
namethat contradicts itskind, and SHOULD act on a selected option according to its knownkind. - Automatic approval SHOULD NOT rely only on
titleor optionname. - Agents SHOULD NOT treat an outcome they don’t recognize as approval.
- Agents SHOULD perform only the operation the approved request described, and SHOULD request again if the command or resolved target changes.
- Agents SHOULD state the scope of a remembered decision (
allow_always,reject_always) in the optionnameand SHOULD NOT apply it beyond that scope. - Agents SHOULD NOT switch to a mode or configuration that reduces user oversight without user action.
Status
Tool calls progress through different statuses during their lifecycle:Content
Tool calls can produce different types of content:Regular content
Standard content blocks like text, images, or resources:Diffs
File modifications shown as diffs:Terminals
Live terminal output from command execution:Learn more about Terminals
Following the Agent
Tool calls can report the file locations they’re working with. Clients can use this to follow along, showing which files the Agent is reading or modifying as it works.Optional 1-based line number within the file, represented as an unsigned
32-bit integer. Omission and
null are equivalent and mean no specific line
was provided.