Control OpenCode directly via the Agent Client Protocol (ACP). Start sessions, send prompts, resume conversations, and manage OpenCode updates.
数据来源:ClawHub。 在 ClawSkills 查看
选择你使用的 Agent
方法一:命令行安装(推荐)
推荐(无需提前安装 clawhub)
npx clawhub@latest --dir ~/.claude/skills install opencode-acp-control-2或使用 clawhub CLI(需提前安装)
clawhub --dir ~/.claude/skills install opencode-acp-control-2⚠️ 需要 Node.js 18+,没有 Node?请使用下方方法二直接下载 ZIP。 安装 Node.js →
方法二:手动下载安装(无需 Node)
下载 ZIP,解压后将文件夹放到以下路径,重启 Agent 即可:
安装路径
~/.claude/skills/opencode-acp-control-2/💡解压后将文件夹放到上方路径,重启 Agent 即可生效
--- name: opencode-acp-control description: Control OpenCode directly via the Agent Client Protocol (ACP). Start sessions, send prompts, resume conversations, and manage OpenCode updates. metadata: {"version": "1.0.2", "author": "Benjamin Jesuiter
Control OpenCode directly via the Agent Client Protocol (ACP).
| Action | How | |--------|-----| | Start OpenCode | bash(command: "opencode acp --cwd /path/to/project", background: true) | | Send message | process.write(sessionId, data: " | | Read response | process.poll(sessionId) - repeat every 2 seconds | | Stop OpenCode | process.kill(sessionId) | | List sessions | bash(command: "opencode session list", workdir: "...") | | Resume session | List sessions → ask user → session/load | | Check version | bash(command: "opencode --version") |
bash(
command: "opencode acp --cwd /path/to/your/project",
background: true,
workdir: "/path/to/your/project"
)
Save the returned sessionId - you'll need it for all subsequent commands.
\n)Send immediately after starting OpenCode:
{"jsonrpc":"2.0","id":0,"method":"initialize","params":{"protocolVersion":1,"clientCapabilities":{"fs":{"readTextFile":true,"writeTextFile":true},"terminal":true},"clientInfo":{"name":"clawdbot","title":"Clawdbot","version":"1.0.0"}}}
Poll for response. Expect result.protocolVersion: 1.
{"jsonrpc":"2.0","id":1,"method":"session/new","params":{"cwd":"/path/to/project","mcpServers":[]}}
Poll for response. Save result.sessionId (e.g., "sess_abc123").
{"jsonrpc":"2.0","id":2,"method":"session/prompt","params":{"sessionId":"sess_abc123","prompt":[{"type":"text","text":"Your question here"}]}}
Poll every 2 seconds. You'll receive:
session/update notifications (streaming content)result.stopReasonEach poll may return multiple lines. Parse each line as JSON:
method: "session/update" - collect these for the responseid matching your request - stop polling when stopReason appears{"jsonrpc":"2.0","method":"session/cancel","params":{"sessionId":"sess_abc123"}}
No response expected - this is a notification.
Per OpenCode instance, track:
processSessionId - from bash tool (clawdbot's process ID)opencodeSessionId - from session/new response (OpenCode's session ID) messageId - increment for each request you sendstopReason| stopReason | Meaning | |------------|---------| | end_turn | Agent finished responding | | cancelled | You cancelled the prompt | | max_tokens | Token limit reached |
| Issue | Solution | |-------|----------| | Empty poll response | Keep polling - agent is thinking | | Parse error | Skip malformed line, continue | | Process exited | Restart OpenCode | | No response after 5min | Kill process, start fresh |
1. bash(command: "opencode acp --cwd /home/user/myproject", background: true, workdir: "/home/user/myproject")
-> processSessionId: "bg_42"
2. process.write(sessionId: "bg_42", data: '{"jsonrpc":"2.0","id":0,"method":"initialize",...}\n')
process.poll(sessionId: "bg_42") -> initialize response
3. process.write(sessionId: "bg_42", data: '{"jsonrpc":"2.0","id":1,"method":"session/new","params":{"cwd":"/home/user/myproject","mcpServers":[]}}\n')
process.poll(sessionId: "bg_42") -> opencodeSessionId: "sess_xyz789"
4. process.write(sessionId: "bg_42", data: '{"jsonrpc":"2.0","id":2,"method":"session/prompt","params":{"sessionId":"sess_xyz789","prompt":[{"type":"text","text":"List all TypeScript files"}]}}\n')
5. process.poll(sessionId: "bg_42") every 2 sec until stopReason
-> Collect all session/update content
-> Final response: stopReason: "end_turn"
6. When done: process.kill(sessionId: "bg_42")
---
Resume a previous OpenCode session by letting the user choose from available sessions.
bash(command: "opencode session list", workdir: "/path/to/project")
Example output:
ID Updated Messages
ses_451cd8ae0ffegNQsh59nuM3VVy 2026-01-11 15:30 12
ses_451a89e63ffea2TQIpnDGtJBkS 2026-01-10 09:15 5
ses_4518e90d0ffeJIpOFI3t3Jd23Q 2026-01-09 14:22 8
Present the list to the user and ask which session to resume:
"Which session would you like to resume?
1. ses_451cd8ae... (12 messages, updated 2026-01-11)
2. ses_451a89e6... (5 messages, updated 2026-01-10)
3. ses_4518e90d... (8 messages, updated 2026-01-09)
Enter session number or ID:"
Once user responds (e.g., "1", "the first one", or "ses_451cd8ae..."):
``` bash(command: "opencode acp --cwd /path/to/project", background: true, workdir: "/path/to/project") ```
```json {"jsonrpc":"2.0","id":0,"method":"initialize","params":{...}} ```
```json {"jsonrpc":"2.0","id":1,"method":"session/load","params":{"sessionId":"ses_451cd8ae0ffegNQsh59nuM3VVy","cwd":"/path/to/project","mcpServers":[]}} ```
Note: session/load requires cwd and mcpServers parameters.
On load, OpenCode streams the full conversation history back to you.
function resumeSession(workdir):
# List available sessions
output = bash("opencode session list", workdir: workdir)
sessions = parseSessionList(output)
if sessions.empty:
notify("No previous sessions found. Starting fresh.")
return createNewSession(workdir)
# Ask user to choose
choice = askUser("Which session to resume?", sessions)
selectedId = matchUserChoice(choice, sessions)
# Start OpenCode and load session
process = bash("opencode acp --cwd " + workdir, background: true, workdir: workdir)
initialize(process)
session_load(process, selectedId, workdir, mcpServers: [])
notify("Session resumed. Conversation history loaded.")
return process
---
OpenCode auto-updates when restarted. Use this workflow to check and trigger updates.
bash(command: "opencode --version")
Returns something like: opencode version 1.1.13
Extract the version number (e.g., 1.1.13).
webfetch(url: "https://github.com/anomalyco/opencode/releases/latest", format: "text")
The redirect URL contains the latest version tag:
https://github.com/anomalyco/opencode/releases/tag/v1.2.01.2.0)If latest version > current version:
``` process.list() # Find all "opencode acp" processes process.kill(sessionId) # For each running instance ```
``` bash(command: "opencode acp --cwd /path/to/project", background: true, workdir: "/path/to/project") ```
bash(command: "opencode --version")
If version still doesn't match latest:
curl -fsSL https://opencode.dev/install | bashfunction updateOpenCode():
current = bash("opencode --version") # e.g., "1.1.13"
latestPage = webfetch("https://github.com/anomalyco/opencode/releases/latest")
latest = extractVersionFromRedirectUrl(latestPage) # e.g., "1.2.0"
if semverCompare(latest, current) > 0:
# Stop all instances
for process in process.list():
if process.command.includes("opencode"):
process.kill(process.sessionId)
# Wait briefly for processes to terminate
sleep(2 seconds)
# Restart triggers auto-update
bash("opencode acp", background: true)
# Verify
newVersion = bash("opencode --version")
if newVersion != latest:
notify("Auto-update may have failed. Manual update recommended.")
else:
notify("OpenCode is up to date: " + current)
opencodeSessionId survives restarts — use session/load to recover安装 Opencode Acp Control 后,可以对 AI 说这些话来触发它
Send a Slack message to the #engineering channel about the deployment
Formats and sends the message with relevant context, tagging the right people
Summarize all unread messages in my inbox from today
Reads messages across connected channels and returns a prioritized summary
Draft a reply to this customer complaint and send it for review
Writes an empathetic, professional response and routes it to the approval queue
将技能文件夹放到 ~/.claude/skills/opencode-acp-control-2/ 目录(个人级,所有项目可用),或 .claude/skills/opencode-acp-control-2/(项目级)。重启 AI 客户端后,用 /opencode-acp-control-2 主动调用,或让 AI 根据上下文自动发现并使用。
Opencode Acp Control 支持 Claude、Cursor、OpenClaw,可与这些 AI 平台无缝集成,扩展其能力。
Opencode Acp Control 可免费安装使用。请查阅仓库了解许可证信息。
Control OpenCode directly via the Agent Client Protocol (ACP). Start sessions, send prompts, resume conversations, and manage OpenCode updates.
Opencode Acp Control 属于「Communication」分类,该分类的技能帮助 AI 智能体在此领域执行专业任务。