Skip to content
UHPUHPDeveloper Guide
Independent developer guide. Not affiliated with HarnessRouter or the official UHP project.

Goose

Goose is a released HarnessRouter backend while also exposing a first-party ACP server upstream. Those are two different interoperability surfaces, and their release coordinates now move independently.

Page reviewed 4 Oct 2026 Source and review policy

Historical UHP context: 2026-09-12HarnessRouter checked 4 Oct: v0.29.0

Select the Goose distribution for the interface you need

Section titled “Select the Goose distribution for the interface you need”

Goose v1.53.0 introduces a lean ACP-only binary. That offers a different deployment choice from the full native CLI/desktop runtime and from HarnessRouter’s pinned Goose 1.50.0 backend. Installing an ACP-oriented binary is not a UHP server installation.

ConsumerSelection criterionCheck before deployment
An ACP editor/clientNative ACP distribution and negotiated capabilitiesAuthentication, permission prompts and required tool surfaces
A native Goose userFull CLI or desktopProvider setup and extensions actually enabled
A UHP productGoose through CEInstalled executable, CE provider route and normalized results

The new upstream release also refreshes model metadata from a live source with a bundled fallback. A model name or capability badge in that metadata does not prove your provider account can execute it. Use the authenticated model route your integration will actually call.

When an unattended task fails, retain the native trailing output and normalized terminal error. The historical temp-directory fix below is a concrete reason not to discard that detail: the model can be reachable while an extension cannot write its temporary files. Compare the configured workspace/TMPDIR path and permissions before retrying the same task.

For a first tool-bearing task, verify one extension result and its final Response, then test continuation after a worker recycle. Use lifecycle to classify a lost stream and remote execution to decide who owns the process. These are evaluation steps, not new compatibility measurements for either Goose version.

The latest stable release observed in the upstream GitHub release API is v1.53.0, published 2026-10-02. The release introduces a lean ACP-only Goose binary and live model metadata with a bundled fallback. These upstream capabilities do not change the revision scope of HarnessRouter adapter measurements below.

HarnessRouter integration, checked 4 October 2026: the v0.29.0 entrypoint retains the default pin Goose 1.50.0. This is source-verified adapter configuration, not a fresh runtime or provider test. HarnessRouter now has 20 released backends; the earlier counts and measurements below retain their dated scope.

Evidence scope: the integration details, commands, measurements and development-head references below preserve the 18 Sep 2026 source snapshot. They are not presented as a fresh test of this newer release. For the current UHP protocol, HarnessRouter release and suite coordinates, use the release tracker and conformance guide. Adapter support does not establish upstream-native UHP adoption.

Goose is a released HarnessRouter backend. HarnessRouter PR #164 added goose as the eleventh built-in backend; the change shipped in v0.17.0 and remains in latest stable v0.18.1. The v0.18.1 release points to a27df946d77eae5efb6e765fcfb1645a4875731b. Checked upstream main is de992987ea54bea406d12c283947f38e634988e5 after PR #208, whose material change is release-publication automation rather than Goose runtime behavior. Stable and current main both expose twelve backends.

HarnessRouter still pins Goose 1.50.0 for this adapter. Goose upstream has moved independently: its latest observed stable release is v1.51.0, published 17 September 2026 at 19:15:25 UTC, with tag target 1a4249ac9f23c6e6e2526d4b54dbbf3bb09ba204. The official ACP registry documentation synchronized its Goose entry to 1.51.0 through ACP PR #2168 after that release.

That produces a deliberate version boundary: upstream Goose/ACP distribution is now 1.51.0, while HarnessRouter’s released Goose adapter remains pinned to 1.50.0. The latest directly probed ACP protocol-matrix evidence tracked by this guide is also still version-bounded to Goose 1.50.0; a registry version update is not a fresh protocol-matrix measurement.

This remains HarnessRouter adapter support, not native UHP adoption by Goose. Upstream Goose separately has a first-party ACP surface; its architecture material describes ACP as the default client interface. Native ACP support does not imply native UHP support.

Released temp-file correction and failure fidelity

Section titled “Released temp-file correction and failure fidelity”

PR #174, released in v0.17.1, responded to a hosted Goose failure in which a platform extension writing through std::env::temp_dir() hit an unusable /tmp. The release added a Goose-specific workspace TMPDIR, improved failed-turn evidence by preferring the CLI’s useful trailing output over a generic <cli> exited N normalizer, and increased retained gateway connection-error detail from 200 to 2,000 characters. PR #174 records 323 runner tests and 527 gateway tests passing.

PR #176, merged as c5413580 and inherited by v0.17.2 and later releases, corrects the root-cause attribution. The defect was in hosted image preparation, not a general HarnessRouter sandbox restriction: Goose’s release archive contains a ./ entry with mode 755, and extracting that archive directly into /tmp as root rewrote /tmp itself to mode 755. HarnessRouter’s own installer already extracts Goose into an isolated mktemp directory, so that installer never had the defect. The correction therefore removes the Goose-specific TMPDIR override and its dedicated assertion; the common runner path still supplies workspace scratch to session UIDs for every backend. PR #176 reports 42 Goose runner tests passing after the removal.

The failure-tail and 2,000-character gateway-detail improvements from v0.17.1 remain valid. The special-case temp-directory workaround and its original diagnosis were superseded by PR #176. These are HarnessRouter host/runtime corrections; they do not change Goose’s wire protocol, ACP, UHP, or the UHP conformance denominator.

PR #164 integrates Goose end to end rather than treating it as a generic command passthrough.

  • Pinned binary installation. HarnessRouter installs the prebuilt Goose release asset and currently pins 1.50.0. An explicit HR_GOOSE_VERSION override requires the corresponding HR_GOOSE_SHA256 to remain verified; otherwise the installer warns that the override is unverified instead of silently skipping integrity checking.
  • Relay-backed model routing. Goose reaches models through its OpenAI-compatible Chat Completions provider pointed at HarnessRouter’s loopback relay. Because Goose splits that endpoint into OPENAI_HOST and OPENAI_BASE_PATH, the adapter splits the relay URL rather than passing one combined /v1 URL and producing a duplicated /v1/v1/chat/completions path.
  • Checkpointable state. GOOSE_PATH_ROOT is placed inside the HarnessRouter .harness/ state tree so Goose configuration, its session database and harness skills travel with checkpoint/recycle state while remaining outside the produced-file list.
  • Native stream normalization. The adapter handles Goose’s mixed stream schema: snake_case event tags such as message and complete, camelCase content blocks such as toolRequest and toolResponse, nested tool-call values, and Goose’s result/error shape.
  • Token accounting. Goose’s cache_write_input_tokens field is normalized instead of being dropped because the shared usage picker only recognizes the camelCase spelling.
  • Hard disabled-tool enforcement. The adapter uses Goose available_tools to remove disabled tools from the model-visible set. HarnessRouter explicitly avoids relying on permission.yaml here because GOOSE_MODE=auto bypasses that permission table.
  • Partial extension configuration. HarnessRouter only names the extensions it must restrict or add, preserving Goose defaults such as Skills, Todo and Analyze instead of accidentally disabling them by writing a complete replacement map.

The same integration includes several correctness fixes found while measuring the adapter.

Goose can turn some upstream provider failures into ordinary assistant prose followed by complete. HarnessRouter recognizes the pinned binary’s real error prefixes and converts them back into an error result instead of recording the turn as successfully completed and carrying the provider-error prose into later history.

Session existence is checked through Goose’s SQLite sessions table rather than searching raw database bytes for a session string. The regression coverage includes an uncheckpointed WAL case, so the check follows SQLite state rather than a brittle byte-pattern heuristic.

HarnessRouter’s relay also records the served model for CLIs that do not expose it themselves. The SSE reader carries a tail across 4096-byte read boundaries so a split model field is not silently missed. That relay evidence is what makes the Goose support-matrix rows substitution-checkable.

PR #164 records a dedicated Goose support-matrix pass dated 12 September 2026 across seven provider columns: TokenRouter, Vercel, OpenRouter, OpenAI, Azure, Anthropic and the hosted HarnessRouter provider. The merge notes say the Goose column ran 36 models, with 35 shipped after excluding claude-opus-5 because tool-using turns produced an empty response through Goose’s Chat Completions path. Five catalog candidates are explicitly listed as not yet run rather than being presented as measured.

That evidence is tied to HarnessRouter’s Goose 1.50.0 adapter coordinate. Upstream Goose 1.51.0 does not retroactively re-version the measured HarnessRouter matrix, and this guide does not claim that HarnessRouter has separately revalidated its adapter against 1.51.0.

The earlier candidate verification also records follow-up continuity, a model switch and switch-back, artifact byte equality, forced-recycle recall, skill/script execution, a genuinely absent disabled tool and a declared MCP server call. These are HarnessRouter implementation/runtime measurements under the stated test conditions. They are not UHP conformance, universal Goose/provider compatibility, or evidence that upstream Goose implements UHP.

Goose’s upstream architecture independently standardizes its client-facing surface around Agent Client Protocol (ACP). The tagged v1.50.0 architecture article says ACP is Goose’s default interface and describes the production-ready server with session persistence, extensions and streaming as complete.

The ACP distribution evidence has since advanced: ACP PR #2168 updated the generated registry documentation from Goose 1.50.1 to 1.51.0 after Goose v1.51.0 was published. That is current registry/distribution metadata, not a new ACP protocol release and not a new direct compatibility run. The latest directly probed ACP protocol matrix tracked on UHP vs ACP remains the 14 September 2026 run against Goose 1.50.0.

That produces two simultaneous integration paths:

  1. Goose ↔ ACP client — upstream-native client/agent interoperability.
  2. Product ↔ UHP/HarnessRouter ↔ Goose — HarnessRouter adapts the Goose runtime behind the UHP-facing server boundary.

Neither path proves the other. A product can use Goose through HarnessRouter without speaking ACP to Goose directly, and Goose’s native ACP server does not make Goose a native UHP implementation.

UHP remains 2026-09-12 Draft with conformance package 2026.9.12. HarnessRouter v0.18.1, the inherited Goose runtime fixes and upstream Goose v1.51.0 do not publish another UHP protocol version, change the 74-check conformance denominator, or establish a standardized UHP↔ACP binding.

At this cutoff:

  • HarnessRouter stable: v0.18.1 — twelve released backends.
  • HarnessRouter stable tag target: a27df946d77eae5efb6e765fcfb1645a4875731b.
  • HarnessRouter checked main: de992987ea54bea406d12c283947f38e634988e5.
  • HarnessRouter Goose pin: 1.50.0.
  • Goose upstream stable: v1.51.0 — tag target 1a4249ac9f23c6e6e2526d4b54dbbf3bb09ba204.
  • ACP registry Goose distribution: 1.51.0.
  • Latest directly tracked ACP matrix measurement for Goose: 1.50.0 on 14 September 2026.
  • Native Goose ACP: verified upstream.
  • Native Goose UHP adoption: not established.

See HarnessRouter for the reference implementation boundary and UHP vs ACP for the client/agent protocol comparison.