ClawKit Logo
ClawKitReliability Toolkit
Back to Registry
Official Verified

opencode-acp-control

Control OpenCode directly via the Agent Client Protocol (ACP). Start sessions, send prompts, resume conversations, and manage OpenCode updates.

skill-install — Terminal

Install via CLI (Recommended)

clawhub install openclaw/skills/skills/bjesuiter/opencode-acp-control
Or

OpenCode ACP Skill

Control OpenCode directly via the Agent Client Protocol (ACP).

Metadata

Quick Reference

ActionHow
Start OpenCodebash(command: "opencode acp", background: true)
Send messageprocess.write(sessionId, data: "<json-rpc>\n")
Read responseprocess.poll(sessionId) - repeat every 2 seconds
Stop OpenCodeprocess.kill(sessionId)
List sessionsbash(command: "opencode session list", workdir: "...")
Resume sessionList sessions → ask user → session/load
Check versionbash(command: "opencode --version")

Starting OpenCode

bash(
  command: "opencode acp",
  background: true,
  workdir: "/path/to/your/project"
)

Save the returned sessionId - you'll need it for all subsequent commands.

Protocol Basics

  • All messages are JSON-RPC 2.0 format
  • Messages are newline-delimited (end each with \n)
  • Maintain a message ID counter starting at 0

Step-by-Step Workflow

Step 1: Initialize Connection

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.

Step 2: Create Session

{"jsonrpc":"2.0","id":1,"method":"session/new","params":{"cwd":"/path/to/project","mcpServers":[]}}

Poll for response. Save result.sessionId (e.g., "sess_abc123").

Step 3: Send Prompts

{"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)
  • Final response with result.stopReason

Step 4: Read Responses

Each poll may return multiple lines. Parse each line as JSON:

  • Notifications: method: "session/update" - collect these for the response
  • Response: Has id matching your request - stop polling when stopReason appears

Step 5: Cancel (if needed)

{"jsonrpc":"2.0","method":"session/cancel","params":{"sessionId":"sess_abc123"}}

No response expected - this is a notification.

State to Track

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 send

Polling Strategy

Metadata

Author@bjesuiter
Stars4473
Views1
Updated2026-05-01
View Author Profile
AI Skill Finder

Not sure this is the right skill?

Describe what you want to build — we'll match you to the best skill from 16,000+ options.

Find the right skill
Add to Configuration

Paste this into your clawhub.json to enable this plugin.

{
  "plugins": {
    "official-bjesuiter-opencode-acp-control": {
      "enabled": true,
      "auto_update": true
    }
  }
}
Safety NoteClawKit audits metadata but not runtime behavior. Use with caution.