Skip to content

feat(goose): add ZERO-294 Goose adapter#41

Closed
spencercharest wants to merge 1 commit into
mainfrom
spencer/zero-300-goose-adapter-open-plugins-hooks-skills
Closed

feat(goose): add ZERO-294 Goose adapter#41
spencercharest wants to merge 1 commit into
mainfrom
spencer/zero-300-goose-adapter-open-plugins-hooks-skills

Conversation

@spencercharest

@spencercharest spencercharest commented Jun 14, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Adds a Goose Open Plugins overlay at plugins/zero-goose with a versioned plugin.json and Goose SessionStart hook wiring.
  • Adds scripts/build-goose.sh to assemble dist/zero-goose from the shared Zero skill and runner hook.
  • Adds a standalone consumer guide at guides/goose.md and links it from the README Install Zero list.
  • Bumps all versioned manifests to 1.4.0 via make minor.

Official references checked

Verification

  • ./scripts/build-goose.sh
  • ./scripts/build-goose.sh --tar /tmp/zero-goose.tar.gz
  • make version -> 1.4.0
  • git diff --cached --check
  • Confirmed guides/agent-install.md is not modified or staged.
  • Docker install/load/hook smoke:
docker run --rm -v "$PWD":/repo -w /repo ubuntu:24.04 bash -lc '
set -euo pipefail
apt-get update >/dev/null
DEBIAN_FRONTEND=noninteractive apt-get install -y curl ca-certificates bash git jq bzip2 >/dev/null
curl -fsSL https://github.com/aaif-goose/goose/releases/download/stable/download_cli.sh | CONFIGURE=false bash >/dev/null
export PATH="$HOME/.local/bin:$HOME/.cargo/bin:$PATH"
goose --version
./scripts/build-goose.sh >/dev/null
mkdir -p "$HOME/.agents/plugins"
rm -rf "$HOME/.agents/plugins/zero"
cp -R dist/zero-goose "$HOME/.agents/plugins/zero"
GOOSE_PATH_ROOT="$HOME" goose skills list | grep -F "/root/.agents/plugins/zero/skills/zero"
PLUGIN_ROOT=/repo/dist/zero-goose /repo/dist/zero-goose/hooks/ensure-runner.sh >/tmp/hook.out 2>/tmp/hook.err
jq -e ".hookSpecificOutput.hookEventName == \"SessionStart\"" /tmp/hook.out >/dev/null
jq -r .hookSpecificOutput.additionalContext /tmp/hook.out | grep -F "Zero runner ready" >/dev/null
test -x "$HOME/.zero/runtime/bin/zero"
"$HOME/.zero/runtime/bin/zero" --help | head -n 1
'

Observed:

1.37.0
/root/.agents/plugins/zero/skills/zero
Usage: zero [options] [command]

E2E status

Draft because a full Goose-driven Zero capability call is still blocked in this environment:

  • Host Zero auth check returns Authentication required from ~/.zero/runtime/bin/zero auth whoami --json.
  • A model-backed Goose session was not configured in the Docker smoke test; goose session exits during onboarding/connectivity without a provider.

The adapter install, Goose skill discovery, and SessionStart runner provisioning path are verified.

Proposed guides/agent-install.md notes

Do not apply this text in this PR. This is the proposed runbook section to fold into guides/agent-install.md later.

### Goose

Use the Goose Open Plugins package when installing Zero for Goose.

Install/update from this repository:

```bash
git clone https://github.com/officialzeroxyz/zero-plugins.git
cd zero-plugins
./scripts/build-goose.sh
mkdir -p ~/.agents/plugins
rm -rf ~/.agents/plugins/zero
cp -R dist/zero-goose ~/.agents/plugins/zero
```

For updates, run `git pull`, rebuild, replace `~/.agents/plugins/zero`, then restart Goose.

Goose discovers plugin skills from `~/.agents/plugins/<plugin>/skills/` and project plugins from `<project>/.agents/plugins/<plugin>/`. The Zero skill is available as `zero` when copied directly into `~/.agents/plugins/zero`; Goose git-backed `goose plugin install` namespaces Open Plugin skills as `<plugin>:<skill>`.

Goose hooks live in `hooks/hooks.json` under the plugin directory. Zero wires only `SessionStart` for runner provisioning because Goose hook stdout is not an instruction-injection channel; Goose only treats blocking hook output specially. Do not document Zero auto-approval for Goose.

The Zero MCP connector is separate Goose config, not part of the Open Plugin directory:

```yaml
# ~/.config/goose/config.yaml
extensions:
  zero:
    enabled: true
    type: streamable_http
    name: zero
    uri: https://mcp.zero.xyz
    description: Zero capability search and account authorization
```

Equivalent Goose deeplink:

```text
goose://extension?type=streamable_http&url=https%3A%2F%2Fmcp.zero.xyz&id=zero&name=Zero&description=Zero%20capability%20search%20and%20account%20authorization
```

Claude-style plugin compatibility and simpler install option

Full Claude Code plugin package support: No. Goose uses its Open Plugins surface under .agents/plugins/ plus separate skill/MCP configuration. It can reuse Claude-compatible skill content, but it is not a documented Claude Code .claude-plugin installer.

What this means for users:

  • Build steps should be maintainer/release-only. The consumer path should be a Goose plugin or recipe install from a published source, with Zero MCP configured through Goose's normal MCP surface.

  • Preferred no-build shape:

    goose plugin install officialzeroxyz/zero-plugins/zero-goose
    goose plugin update zero

    Treat this as the productized target and verify exact Goose command syntax before moving out of draft.

  • If the Goose-specific plugin is not worth maintaining, the simpler path is a skill + remote MCP recipe. That likely keeps most user value while dropping hook parity with Claude Code.

GitHub Releases / no-build install check

Result: No confirmed Gemini-style GitHub Release asset install path. Goose/Open Plugins can be distributed through Goose's own plugin/recipe surfaces, but I did not verify a native Goose installer that resolves GitHub Release assets the way Gemini does.

Best no-build consumer path should be a Goose-native plugin/recipe install from a published source, for example:

goose plugin install officialzeroxyz/zero-plugins/zero-goose

Treat that command as a target until verified against Goose's current installer syntax. A GitHub Release tarball can be a manual fallback containing ready-to-copy .agents/plugins/zero plus MCP/recipe files, but it should not be described as a native release install unless Goose docs/source confirm that behavior.

@spencercharest

Copy link
Copy Markdown
Collaborator Author

Folded into #63 as a matrix entry (goose in plugins/zero/agents.json) — standalone skills (~/.agents/skills, which goose reads natively) + MCP + a SessionStart-only hook-only Open Plugin fragment at ~/.agents/plugins/zero/hooks/hooks.json. No install block: goose plugin install is root-manifest-only (verified in source) and zero-plugins has no root manifest; #63 tracks the graduation path (dedicated installable source + --auto-update). The adapter-template work here stays available on this branch if we later ship per-host templates.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant