| name | goose-acp-client |
| description | Communicate with Goose ACP agent for cross-tool task delegation. Enable SEA-Forge to coordinate between Claude Code and Goose. |
Goose ACP Client
Communicate with running Goose ACP (Agent Communication Protocol) agent for specialized task delegation between Claude Code and Goose.
When to Use
Use this skill when:
- Delegating long-running tasks to Goose
- Coordinating between Claude Code and Goose
- Running Goose recipes from Claude
- Checking Goose session status
- Retrieving results from Goose background work
Prerequisites
1. Start Goose ACP Server
First, ensure Goose ACP agent is running:
goose acp --socket /tmp/goose-acp.sock &
goose acp --port 4747 &
ls -l /tmp/goose-acp.sock 2>/dev/null || echo "Not running"
2. Verify ACP Connection
echo '{"method":"ping"}' | nc -U /tmp/goose-acp.sock
curl http://localhost:4747/ping
ACP Protocol
Basic Request Format
{
"jsonrpc": "2.0",
"id": 1,
"method": "task/execute",
"params": {
"instruction": "task description",
"context": {},
"recipe": "optional-recipe-name"
}
}
Response Format
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"status": "success|running|failed",
"output": "output text",
"task_id": "uuid"
}
}
ACP Methods
task/execute
Execute a task in Goose:
{
"method": "task/execute",
"params": {
"instruction": "Run full CI validation",
"recipe": "sea-dev-cycle",
"context": {
"branch": "dev",
"files": ["src/**/*.ts"]
}
}
}
task/status
Check task status:
{
"method": "task/status",
"params": {
"task_id": "uuid"
}
}
recipe/list
List available recipes:
{
"method": "recipe/list",
"params": {}
}
session/info
Get Goose session info:
{
"method": "session/info",
"params": {}
}
Tasks Best for Goose ACP
| Task | Claude Code | Goose ACP |
|---|
| Quick code edits | ✅ Ideal | ❌ Not suited |
| Full CI run | ⚠️ Possible | ✅ Ideal |
| Multi-file generation | ✅ Ideal | ⚠️ Possible |
| Long-running analysis | ❌ Context limit | ✅ Ideal |
| Interactive debugging | ✅ Ideal | ⚠️ Possible |
| Scheduled tasks | ❌ Not supported | ✅ Ideal |
| Recipe execution | ❌ Not native | ✅ Ideal |
Usage Examples
Example 1: Delegate Long-Running CI
const request = {
method: "task/execute",
params: {
instruction: "Run full CI validation for branch feature/auth",
recipe: "sea-dev-cycle"
}
};
const response = await sendToGooseACP(request);
console.log("Task ID:", response.result.task_id);
console.log("Status:", response.result.status);
Example 2: Check Task Status
const request = {
method: "task/status",
params: {
task_id: "abc-123-def"
}
};
const response = await sendToGooseACP(request);
if (response.result.status === "success") {
console.log("Output:", response.result.output);
}
Example 3: Run Recipe
const request = {
method: "task/execute",
params: {
instruction: "Prepare for release",
recipe: "sea-release",
context: {
version: "1.2.0"
}
}
};
Shared State Sync
After Goose completes tasks, sync state:
cat .goose/state.yaml | \
yq ".current_task.branch = \"$(git branch --show-current)\"" | \
yq ".goose_session.last_activity = \"$(date -u +%Y-%m-%dT%H:%M:%SZ)\""
Error Handling
Connection Errors
if (!fs.existsSync("/tmp/goose-acp.sock")) {
console.error("Goose ACP not running. Start with: goose acp --socket /tmp/goose-acp.sock");
}
Task Errors
{
"error": {
"code": -32000,
"message": "Task execution failed",
"data": {
"recipe": "sea-dev-cycle",
"exit_code": 1
}
}
}
Integration
- Integrates with
goose-handoff command
- Integrates with
sync-goose-state command
- Uses
.goose/state.yaml for shared state
Output
After ACP operation, output:
## Goose ACP Task
**Action**: {execute|status|info}
**Status**: {success|running|failed}
**Task ID**: {uuid}
### Details
{task details}
### Output
{output from Goose}
### Next Steps
{what to do next}
Usage
Claude invokes when:
- User says "run this in Goose"
- Task will exceed Claude's context
- Need background processing
- User explicitly requests Goose delegation
User can invoke with:
- "Run sea-dev-cycle in Goose"
- "Check Goose task status"
- "Delegate to Goose"