OpenClaw: benign
VirusTotal: suspicious
StaticScan: unknown
OpenClaw: benign
The skill's instructions match its stated purpose (controlling a local OpenCode instance via ACP), but there are a few minor inconsistencies you should be aware of before installing (notably undeclare... [内容已截断]
VirusTotal: suspicious VT 报告
静态扫描: unknown
README 未提供
无文件信息
{
"latestVersion": {
"_creationTime": 1771530814706,
"_id": "k978wsyve09t36kb1fxz2k93gx81edjz",
"changelog": "OpenCode ACP Skill\nControl OpenCode directly via the Agent Client Protocol (ACP).\n\nMetadata\nFor ACP Protocol Docs (for Agents\/LLMs): https:\/\/agentclientprotocol.com\/llms.txt\nGitHub Repo: https:\/\/github.com\/bjesuiter\/opencode-acp-skill\nIf you have issues with this skill, please open an issue ticket here: https:\/\/github.com\/berriosb\/Opencode-Acp-Control\nQuick Reference\nAction\tHow\nStart OpenCode\tbash(command: \"opencode acp --cwd \/path\/to\/project\", background: true)\nSend message\tprocess.write(sessionId, data: \"\\n\")\nRead response\tprocess.poll(sessionId) - repeat every 2 seconds\nStop OpenCode\tprocess.kill(sessionId)\nList sessions\tbash(command: \"opencode session list\", workdir: \"...\")\nResume session\tList sessions → ask user → session\/load\nCheck version\tbash(command: \"opencode --version\")\nStarting OpenCode\nbash(\n command: \"opencode acp --cwd \/path\/to\/your\/project\",\n background: true,\n workdir: \"\/path\/to\/your\/project\"\n)\nSave the returned sessionId - you'll need it for all subsequent commands.\n\nProtocol Basics\nAll messages are JSON-RPC 2.0 format\nMessages are newline-delimited (end each with \\n)\nMaintain a message ID counter starting at 0\nStep-by-Step Workflow\nStep 1: Initialize Connection\nSend immediately after starting OpenCode:\n\n{\"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\"}}}\nPoll for response. Expect result.protocolVersion: 1.\n\nStep 2: Create Session\n{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"session\/new\",\"params\":{\"cwd\":\"\/path\/to\/project\",\"mcpServers\":[]}}\nPoll for response. Save result.sessionId (e.g., \"sess_abc123\").\n\nStep 3: Send Prompts\n{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"session\/prompt\",\"params\":{\"sessionId\":\"sess_abc123\",\"prompt\":[{\"type\":\"text\",\"text\":\"Your question here\"}]}}\nPoll every 2 seconds. You'll receive:\n\nsession\/update notifications (streaming content)\nFinal response with result.stopReason\nStep 4: Read Responses\nEach poll may return multiple lines. Parse each line as JSON:\n\nNotifications: method: \"session\/update\" - collect these for the response\nResponse: Has id matching your request - stop polling when stopReason appears\nStep 5: Cancel (if needed)\n{\"jsonrpc\":\"2.0\",\"method\":\"session\/cancel\",\"params\":{\"sessionId\":\"sess_abc123\"}}\nNo response expected - this is a notification.\n\nState to Track\nPer OpenCode instance, track:\n\nprocessSessionId - from bash tool (clawdbot's process ID)\nopencodeSessionId - from session\/new response (OpenCode's session ID)\nmessageId - increment for each request you send\nPolling Strategy\nPoll every 2 seconds\nContinue until you receive a response with stopReason\nMax wait: 5 minutes (150 polls)\nIf no response, consider the operation timed out\nCommon Stop Reasons\nstopReason\tMeaning\nend_turn\tAgent finished responding\ncancelled\tYou cancelled the prompt\nmax_tokens\tToken limit reached\nError Handling\nIssue\tSolution\nEmpty poll response\tKeep polling - agent is thinking\nParse error\tSkip malformed line, continue\nProcess exited\tRestart OpenCode\nNo response after 5min\tKill process, start fresh\nExample: Complete Interaction\n1. bash(command: \"opencode acp --cwd \/home\/user\/myproject\", background: true, workdir: \"\/home\/user\/myproject\")\n -> processSessionId: \"bg_42\"\n\n2. process.write(sessionId: \"bg_42\", data: '{\"jsonrpc\":\"2.0\",\"id\":0,\"method\":\"initialize\",...}\\n')\n process.poll(sessionId: \"bg_42\") -> initialize response\n\n3. process.write(sessionId: \"bg_42\", data: '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"session\/new\",\"params\":{\"cwd\":\"\/home\/user\/myproject\",\"mcpServers\":[]}}\\n')\n process.poll(sessionId: \"bg_42\") -> opencodeSessionId: \"sess_xyz789\"\n\n4. 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')\n \n5. process.poll(sessionId: \"bg_42\") every 2 sec until stopReason\n -> Collect all session\/update content\n -> Final response: stopReason: \"end_turn\"\n\n6. When done: process.kill(sessionId: \"bg_42\")\nResume Session\nResume a previous OpenCode session by letting the user choose from available sessions.\n\nStep 1: List Available Sessions\nbash(command: \"opencode session list\", workdir: \"\/path\/to\/project\")\nExample output:\n\nID Updated Messages\nses_451cd8ae0ffegNQsh59nuM3VVy 2026-01-11 15:30 12\nses_451a89e63ffea2TQIpnDGtJBkS 2026-01-10 09:15 5\nses_4518e90d0ffeJIpOFI3t3Jd23Q 2026-01-09 14:22 8\nStep 2: Ask User to Choose\nPresent the list to the user and ask which session to resume:\n\n\"Which session would you like to resume?\n \n1. ses_451cd8ae... (12 messages, updated 2026-01-11)\n2. ses_451a89e6... (5 messages, updated 2026-01-10)\n3. ses_4518e90d... (8 messages, updated 2026-01-09)\n\nEnter session number or ID:\"\nStep 3: Load Selected Session\nOnce user responds (e.g., \"1\", \"the first one\", or \"ses_451cd8ae...\"):\n\nStart OpenCode ACP:\n\nbash(command: \"opencode acp --cwd \/path\/to\/project\", background: true, workdir: \"\/path\/to\/project\")\nInitialize:\n\n{\"jsonrpc\":\"2.0\",\"id\":0,\"method\":\"initialize\",\"params\":{...}}\nLoad the session:\n\n{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"session\/load\",\"params\":{\"sessionId\":\"ses_451cd8ae0ffegNQsh59nuM3VVy\",\"cwd\":\"\/path\/to\/project\",\"mcpServers\":[]}}\nNote: session\/load requires cwd and mcpServers parameters.\n\nOn load, OpenCode streams the full conversation history back to you.\n\nResume Workflow Summary\nfunction resumeSession(workdir):\n # List available sessions\n output = bash(\"opencode session list\", workdir: workdir)\n sessions = parseSessionList(output)\n \n if sessions.empty:\n notify(\"No previous sessions found. Starting fresh.\")\n return createNewSession(workdir)\n \n # Ask user to choose\n choice = askUser(\"Which session to resume?\", sessions)\n selectedId = matchUserChoice(choice, sessions)\n \n # Start OpenCode and load session\n process = bash(\"opencode acp --cwd \" + workdir, background: true, workdir: workdir)\n initialize(process)\n \n session_load(process, selectedId, workdir, mcpServers: [])\n \n notify(\"Session resumed. Conversation history loaded.\")\n return process\nImportant Notes\nHistory replay: On load, all previous messages stream back\nMemory preserved: Agent remembers the full conversation\nProcess independent: Sessions survive OpenCode restarts\nUpdating OpenCode\nOpenCode auto-updates when restarted. Use this workflow to check and trigger updates.\n\nStep 1: Check Current Version\nbash(command: \"opencode --version\")\nReturns something like: opencode version 1.1.13\n\nExtract the version number (e.g., 1.1.13).\n\nStep 2: Check Latest Version\nwebfetch(url: \"https:\/\/github.com\/anomalyco\/opencode\/releases\/latest\", format: \"text\")\nThe redirect URL contains the latest version tag:\n\nRedirects to: https:\/\/github.com\/anomalyco\/opencode\/releases\/tag\/v1.2.0\nExtract version from the URL path (e.g., 1.2.0)\nStep 3: Compare and Update\nIf latest version > current version:\n\nStop all running OpenCode processes:\n\nprocess.list() # Find all \"opencode acp\" processes\nprocess.kill(sessionId) # For each running instance\nRestart instances (OpenCode auto-downloads new binary on start):\n\nbash(command: \"opencode acp --cwd \/path\/to\/project\", background: true, workdir: \"\/path\/to\/project\")\nRe-initialize each instance (initialize + session\/load for existing sessions)\n\nStep 4: Verify Update\nbash(command: \"opencode --version\")\nIf version still doesn't match latest:\n\nInform user: \"OpenCode auto-update may have failed. Current: X.X.X, Latest: Y.Y.Y\"\nSuggest manual update: curl -fsSL https:\/\/opencode.dev\/install | bash\nUpdate Workflow Summary\nfunction updateOpenCode():\n current = bash(\"opencode --version\") # e.g., \"1.1.13\"\n \n latestPage = webfetch(\"https:\/\/github.com\/anomalyco\/opencode\/releases\/latest\")\n latest = extractVersionFromRedirectUrl(latestPage) # e.g., \"1.2.0\"\n \n if semverCompare(latest, current) > 0:\n # Stop all instances\n for process in process.list():\n if process.command.includes(\"opencode\"):\n process.kill(process.sessionId)\n \n # Wait briefly for processes to terminate\n sleep(2 seconds)\n \n # Restart triggers auto-update\n bash(\"opencode acp\", background: true)\n \n # Verify\n newVersion = bash(\"opencode --version\")\n if newVersion != latest:\n notify(\"Auto-update may have failed. Manual update recommended.\")\n else:\n notify(\"OpenCode is up to date: \" + current)\nImportant Notes\nSessions persist: opencodeSessionId survives restarts — use session\/load to recover\nAuto-update: OpenCode downloads new binary automatically on restart\nNo data loss: Conversation history is preserved server-side",
"changelogSource": "user",
"createdAt": 1771530814706,
"version": "0.1.1"
},
"owner": {
"_creationTime": 0,
"_id": "publishers:missing",
"displayName": "Bastian Berrios Alarcon",
"handle": "studio-hakke",
"image": "https:\/\/avatars.githubusercontent.com\/u\/253074697?v=4",
"kind": "user",
"linkedUserId": "kn74akfj24s29c981jn5zcej0580v987"
},
"ownerHandle": "studio-hakke",
"skill": {
"_creationTime": 1770640762925,
"_id": "kd7dvqm6gm7826qx15sgbwjf7980vbqk",
"badges": [],
"createdAt": 1770640762925,
"displayName": "Opencode Acp Control",
"latestVersionId": "k978wsyve09t36kb1fxz2k93gx81edjz",
"ownerUserId": "kn74akfj24s29c981jn5zcej0580v987",
"slug": "opencode-acp-control-2",
"stats": {
"comments": 0,
"downloads": 889,
"installsAllTime": 4,
"installsCurrent": 3,
"stars": 5,
"versions": 2
},
"summary": "Control OpenCode directly via the Agent Client Protocol (ACP). Start sessions, send prompts, resume conversations, and manage OpenCode updates.",
"tags": {
"latest": "k978wsyve09t36kb1fxz2k93gx81edjz"
},
"updatedAt": 1774323509536
}
}