createACPTool()
createACPTool() 函數會建立 Mastra Tool,將 task 字串傳送給兼容 Agent Client Protocol (ACP) 的編程助手,並以 output 傳回最終 ACP 回應。當父 Agent 應自行決定何時以 Tool 形式呼叫 ACP Agent 時,可使用此函數。
如希望改為將 ACP Agent 註冊成 Mastra subagent,請使用 AcpAgent 類別。
使用範例使用範例 的直接連結
建立程式碼編輯 Tool,並在父 Agent 中註冊:
import { createACPTool } from '@mastra/acp'
import { Agent } from '@mastra/core/agent'
const codeAgentTool = createACPTool({
id: 'code-agent',
description: 'Use an ACP-compatible coding agent to inspect and edit code',
command: 'acp-agent',
args: ['--stdio'],
cwd: process.cwd(),
})
export const codeSupervisor = new Agent({
id: 'code-supervisor',
name: 'Code Supervisor',
instructions: 'Use the code-agent tool when a task requires repository inspection or code edits.',
model: 'openai/gpt-5.6-sol',
tools: {
codeAgentTool,
},
})
參數參數 的直接連結
id:
description:
command:
args?:
env?:
cwd?:
session?:
cwd 或 process.cwd(),並採用空的 MCP 伺服器清單。initialize?:
authMethodId?:
persistSession?:
false 可在每個 prompt 完成後停止程序。onPermissionRequest?:
createClient?:
extMethod 和 extNotification handler。workspace?:
createACPTool() 會將其傳入;否則 ACP connection 會改用本機檔案系統 workspace。如需提供明確的 workspace instance,請使用 AcpAgent。model?:
session/set_model 方法選擇的模型 ID。輸入 schema輸入 schema 的直接連結
task:
輸出 schema輸出 schema 的直接連結
output:
暫停及繼續 schema暫停及繼續 schema 的直接連結
createACPTool() 為權限要求 payload 定義暫停及繼續 schema。權限決定會透過 onPermissionRequest 傳回;@mastra/acp 預設會選擇 ACP Agent 傳回的第一個選項,如沒有可用選項則取消要求。
暫停 payload暫停 payload 的直接連結
permissionRequest:
繼續 payload繼續 payload 的直接連結
optionId?:
outcome: "selected" 繼續時要選擇的權限選項 ID。outcome?:
Session 生命週期Session 生命週期 的直接連結
每次執行 Tool 都會建立 ACP connection,並啟動已設定的 command。它會先初始化 ACP client 和建立 ACP session,然後使用 ACP session/prompt 傳送 task。
為執行 Tool 而建立的 ACP connection,其 persistSession 預設為 true。如 ACP 程序應在該 prompt 完成後立即停止,請設定 persistSession: false。
如需可重用的 ACP subagent instance,並在多次呼叫之間明確控制 session 生命週期,請使用 AcpAgent。
權限處理權限處理 的直接連結
ACP Agent 在繼續操作前,可能會要求 client 選擇權限選項。@mastra/acp 預設會選擇 ACP Agent 傳回的第一個選項;如沒有可用選項,則取消要求。
傳入 onPermissionRequest 可檢查要求,並傳回自己的權限回應:
import { createACPTool } from '@mastra/acp'
export const codeAgentTool = createACPTool({
id: 'code-agent',
description: 'Use an ACP-compatible coding agent',
command: 'acp-agent',
args: ['--stdio'],
async onPermissionRequest(request) {
const allowOption = request.options.find(option => option.name === 'Allow')
if (!allowOption) {
return { outcome: { outcome: 'cancelled' } }
}
return {
outcome: {
outcome: 'selected',
optionId: allowOption.optionId,
},
}
},
})
使用此 callback 可強制執行本機政策或檢查權限要求的標題,亦可把決定轉交至你自己的核准流程。
擴充方法擴充方法 的直接連結
部分 ACP Agent 會在標準 ACP 要求集合以外,呼叫 client 上的自訂擴充方法。預設 client 會以「找不到方法」錯誤拒絕未知方法,這可能會中止 Agent 的回合。
傳入 createClient 可擴充或取代預設 client。callback 會接收預設 client,並傳回供 connection 使用的 client:
import { createACPTool } from '@mastra/acp'
export const codeAgentTool = createACPTool({
id: 'code-agent',
description: 'Use an ACP-compatible coding agent',
command: 'acp-agent',
args: ['--stdio'],
createClient: defaultClient =>
Object.assign(defaultClient, {
async extMethod(method: string, params: Record<string, unknown>) {
return {}
},
async extNotification(method: string, params: Record<string, unknown>) {},
}),
})
如亦需變更標準 handler,請傳回完整自訂的 Client 實作。Client type 會從 @mastra/acp 重新匯出。