Install
$ agentstack add skill-humanerd-drew-opencode-drewgent-goose-acp-integration ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ● Shell / process execution Used
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Goose ACP Integration for Drewgent
What is ACP
Agent Client Protocol (ACP) is a JSON-RPC-based standard for communicating with coding agents (GitHub: agentclientprotocol).
goose uses ACP to connect to agents like Claude Code as provider (subprocess communication over stdio):
goose → claude-agent-acp (NPM) → Claude Code CLI → Anthropic API
Key ACP providers in goose:
claude_acp.rs— Claude Code via@agentclientprotocol/claude-agent-acpcodex_acp.rs— OpenAI Codexcopilot_acp.rs— GitHub Copilot
Key Protocol Types (agentclientprotocol schema)
InitializeRequest/Response // handshake
NewSessionRequest/Response // create session
PromptRequest/Response // send messages
SessionNotification // async events (tool calls, permissions, completion)
- ToolCallStart { id, name, kind, raw_input }
- ToolCallComplete { id, raw_output, content[], is_error }
- PermissionRequest { request: RequestPermissionRequest }
- Complete(StopReason, Option)
ToolCallContent / ToolCallStatus
RequestPermissionResponse
How goose connects to Claude Code
// crates/goose/src/providers/claude_acp.rs
let config = AcpProviderConfig {
command: resolved_command, // path to claude-agent-acp
args: vec![],
env: vec![],
work_dir: current_dir,
mcp_servers: extension_configs_to_mcp_servers(&extensions), // Drewgent tools as MCP
session_mode_id: Some(mode_mapping[&goose_mode].clone()),
// mode_mapping:
// Auto → bypassPermissions (fully autonomous)
// Approve → default (ask before risky)
// SmartApprove → acceptEdits (auto-accept edits)
// Chat → plan (plan only)
};
AcpProvider::connect(name, model, goose_mode, config).await
AcpProvider (crates/goose/src/acp/provider.rs):
- Spawns subprocess (stdio JSON-RPC)
- Sends
initializethennewSession - Streams
SessionNotificationback (tool calls, permissions) - Sends tool results via
CallToolResult
Drewgent Implementation Points
1. ACP Provider Tool
Spawn any ACP agent as subprocess, communicate via newline-delimited JSON-RPC over stdio.
2. MCP Extension Bridge
Convert Drewgent tools → MCP server definitions → pass to ACP agent via mcp_servers config.
3. Permission Tiers
Map Drewgent P0-P6 brain rules to ACP permission decisions (AllowAlways/AllowOnce/RejectOnce/RejectAlways/Cancel).
Implementation Plan
Phase 1: tools/acp_provider.py — subprocess spawn + JSON-RPC over stdio + session lifecycle Phase 2: Delegate to Claude Code via claude-agent-acp, pass Drewgent tools as MCP servers Phase 3: Permission callback system bridging Drewgent P0 rules to ACP permission requests
References
- goose ACP provider impl:
crates/goose/src/providers/{claude_acp,codex_acp,copilot_acp}.rs - ACP core:
crates/goose/src/acp/provider.rs - ACP macros:
crates/goose-acp-macros/src/lib.rs - Protocol schema:
agent_client_protocolRust crate (github.com/agentclientprotocol) - ACP npm adapter:
@agentclientprotocol/claude-agent-acp - Docs: https://goose-docs.ai/docs/guides/acp-providers
Gotchas
- STDIO transport — newline-delimited JSON-RPC, no HTTP
- Mode mapping — each ACP agent has different mode strings; configured per-provider
- MCP servers — must follow Model Context Protocol schema
- Permission suspension — ACP agent waits for async permission response; cannot block main loop
- Nested sessions — set
env_removeto prevent infinite nesting (e.g., CLAUDECODE env var)
Related
- [[@action/skills/SKILL-INDEX]]
- [[@action/skills/agent-protocol/DESCRIPTION]]
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: humanerd-drew
- Source: humanerd-drew/opencode-drewgent
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.