AcpAgent 類別
AcpAgent 類別會將 Agent Client Protocol(ACP)相容的 Coding Agent 包裝為 Mastra subagent。當上層 Mastra Agent 應委派 repository 檢查與程式碼編輯工作時,可使用此類別。它也可以將其他由 ACP 支援的工作委派給 subagent。
若要改由上層 Agent 將 ACP Agent 當作 Tool 呼叫,請使用 createACPTool()。
使用範例「使用範例」的直接連結
在上層 Agent 的 agents map 中註冊 ACP 相容的 Coding Agent:
import { AcpAgent } from '@mastra/acp'
import { Agent } from '@mastra/core/agent'
const codeAgent = new AcpAgent({
id: 'code-agent',
name: 'Code Agent',
description: 'An ACP-compatible coding agent that can inspect and edit files',
command: 'acp-agent',
args: ['--stdio'],
cwd: process.cwd(),
})
export const codeSupervisor = new Agent({
id: 'code-supervisor',
name: 'Code Supervisor',
instructions: 'Delegate code editing tasks to the code-agent subagent.',
model: 'openai/gpt-5.6-sol',
agents: {
codeAgent,
},
})
若使用 Claude Code,ACP 支援由 @agentclientprotocol/claude-agent-acp bridge 套件提供。請將 ACP Agent 指令設為執行此 bridge,然後在建立 session 後選取 Claude 模型:
import { AcpAgent } from '@mastra/acp'
export const claudeCodeAgent = new AcpAgent({
id: 'claude-code-agent',
name: 'Claude Code Agent',
description: 'Use Claude Code through ACP.',
command: 'npx',
args: ['@agentclientprotocol/claude-agent-acp'],
cwd: process.cwd(),
model: 'claude-sonnet-4-6',
})
建構函式參數「建構函式參數」的直接連結
id:
name?:
id。description:
command:
args?:
env?:
cwd?:
session?:
cwd 或 process.cwd(),並使用空的 MCP 伺服器清單。initialize?:
authMethodId?:
persistSession?:
false 可在每個 prompt 完成後停止處理程序。onPermissionRequest?:
createClient?:
workspace?:
cwd 或 process.cwd() 路徑上的 LocalFilesystem 支援的 Workspace。model?:
session/set_model 方法選取的模型 ID。屬性「屬性」的直接連結
id:
name:
description:
connection:
方法「方法」的直接連結
生成「生成」的直接連結
generate(messages, options?)「generatemessages-options」的直接連結
將 prompt 傳送給 ACP Agent、緩衝 ACP 回應中的文字 chunk,並傳回 Mastra subagent generate 結果。
const result = await codeAgent.generate('Inspect the repository and summarize the test setup')
console.log(result.text)
stream(messages, options?)「streammessages-options」的直接連結
將 prompt 傳送給 ACP Agent,並傳回 Mastra subagent stream 結果。ACP agent_message_chunk 更新會以 Mastra text-delta chunk 發出。
const result = await codeAgent.stream('Refactor the selected module and explain each change')
for await (const chunk of result.fullStream) {
if (chunk.type === 'text-delta') {
process.stdout.write(chunk.payload.text)
}
}
不支援 resumeGenerate() 與 resumeStream();呼叫時會擲回錯誤。
模型管理「模型管理」的直接連結
getAvailableModels()「getavailablemodels」的直接連結
必要時啟動 ACP 處理程序,並傳回 ACP session 公告的模型清單。
const models = await codeAgent.getAvailableModels()
// [{ modelId: 'claude-sonnet-4-6', name: 'Claude Sonnet' }, ...]
setModel(modelId)「setmodelmodelid」的直接連結
為作用中的 ACP session 選取模型。如果 ACP Agent 有公告可用模型,模型 ID 必須符合其中一個模型。
await codeAgent.setModel('claude-sonnet-4-6')
Session 生命週期「Session 生命週期」的直接連結
AcpAgent 會在首次使用時啟動設定的 command 並初始化 ACP 使用者端,接著建立 ACP session。persistSession 預設為 true,因此在呼叫 generate()、stream()、getAvailableModels() 與 setModel() 之間,處理程序與 session 都會繼續執行。
若每個 prompt 都應在新的 ACP 處理程序中執行,請設定 persistSession: false:
import { AcpAgent } from '@mastra/acp'
export const codeAgent = new AcpAgent({
id: 'code-agent',
description: 'Run one isolated ACP coding task',
command: 'acp-agent',
args: ['--stdio'],
cwd: process.cwd(),
persistSession: false,
})
設定 persistSession: false 後,@mastra/acp 會在每個 prompt 完成時停止 ACP 處理程序。
Workspace 整合「Workspace 整合」的直接連結
ACP 檔案操作會經過 Mastra 的 Workspace 抽象層。如果沒有傳入 workspace,@mastra/acp 會建立由 LocalFilesystem 支援的 Workspace,並以 cwd 或 process.cwd() 作為檔案系統基底路徑。
當 ACP Agent 應透過特定檔案系統實作讀寫時,請傳入自訂 Workspace:
import { AcpAgent } from '@mastra/acp'
import { LocalFilesystem, Workspace } from '@mastra/core/workspace'
const workspace = new Workspace({
filesystem: new LocalFilesystem({
basePath: process.cwd(),
}),
})
export const codeAgent = new AcpAgent({
id: 'code-agent',
description: 'Run coding tasks in a controlled workspace',
command: 'acp-agent',
args: ['--stdio'],
workspace,
})
若 ACP 處理程序應從某個目錄啟動,但檔案操作應使用明確設定的 Workspace 根目錄,請同時使用 cwd 與 workspace。
權限處理「權限處理」的直接連結
ACP Agent 可能會要求使用者端先選擇權限選項,才繼續執行。AcpAgent 預設會選取 ACP Agent 傳回的第一個選項;沒有可用選項時則取消。
傳入 onPermissionRequest 可檢查要求並傳回自己的權限回應:
import { AcpAgent } from '@mastra/acp'
export const codeAgent = new AcpAgent({
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 強制執行本機 policy,或檢查權限標題,也可以將決策導向自己的核准流程。