pub struct AcpDecl {
pub args: Vec<String>,
pub env: BTreeMap<String, String>,
pub remove_env: Vec<String>,
pub fs: bool,
pub fence_on_permissions: bool,
pub modes: BTreeMap<String, String>,
pub read_only_mode: Option<String>,
pub model_option: Option<String>,
pub extensions: Vec<String>,
pub questions_in_text: bool,
pub subagent_tools: Vec<String>,
pub tools: BTreeMap<String, String>,
}Expand description
How an ACP agent is driven (ACP v1: JSON-RPC 2.0, one message a line on its input and output).
Fields§
§args: Vec<String>Its arguments (["acp"]).
env: BTreeMap<String, String>Variables of its own (never a secret: a manifest is read by all).
remove_env: Vec<String>Variables of the app’s environment it must not get.
fs: boolIt reads and writes files through the client (fs/read_text_file, fs/write_text_file): the fence of
private projects is then held there. False: it reads and writes by itself, and no private project is open to it.
fence_on_permissions: boolWith fs false, the fence of a private project held on its permissions alone, as Cursor CLI’s in the core was
(ESC-140): a permission that names a path of the fence is refused at once; what it reads and writes by itself
is not seen, which its modes’ meanings say. Only a plugin Escouade gives is believed (fenceByClient).
modes: BTreeMap<String, String>The ACP mode (session/set_mode) of each mode of Escouade; a mode left out sets none.
read_only_mode: Option<String>Its ACP mode that changes nothing (ask): with it, it holds a read-only launch (a discussion of the Docs tab).
model_option: Option<String>The id of the configuration option that picks the model (session/set_config_option); left out, the model
goes by session/set_model.
extensions: Vec<String>The extensions of the protocol it speaks beside ACP (cursor: cursor/ask_question, cursor/create_plan,
cursor/update_todos, its subagents).
questions_in_text: boolIt has no tool to ask the user: its first message tells it to end its turn on a block
<escouade_question>, shown as a question’s card, the answers sent as the next message (as for Gemini CLI).
subagent_tools: Vec<String>The names of its tools that run a subagent (by their title or rawInput.tool): shown as Claude Code’s Task,
a row of the plan.
tools: BTreeMap<String, String>Its tools of the kind other under the name Claude Code gives them ({ "shell": "Bash", "write": "Write" }),
by their own name: _meta.<agent>.toolCall.toolName, else their title before « · ».