Skip to main content

Goose Under the Linux Foundation: The Neutral Reference Client for Deploy-from-Chat

9 min readDora NodaDora Noda
Share
On this page

The agent that deploys your app from chat should not be coupled to any single vendor's CLI — and as of 2026, it does not have to be. When the Linux Foundation announced the Agentic AI Foundation on December 9, 2025, co-founded by OpenAI, Anthropic, and Block, the three founding donations told the whole story in one line: Anthropic contributed the Model Context Protocol, OpenAI contributed AGENTS.md, and Block contributed Goose, its open-source AI agent. The protocol, the instruction file, and a full working agent — all under neutral governance, all in one place.

For a team building deploy-from-chat on a self-hosted PaaS, that third donation is the one that changes the build plan. Goose is a local-first, model-agnostic agent whose extensions are MCP servers: there is no privileged built-in tool API, just a thin orchestrator over the same protocol your platform's deploy, rollback, and log tools already speak. This post makes the case for Goose as the neutral reference client for a PaaS tool surface — the client you build against, test against, and document first — and then wires it up concretely: a PaaS MCP extension plus a versioned deploy recipe you can adapt today.

The neutral stack, in one table

Three donations and one earlier handoff now define the vendor-neutral agent stack. Worth stating plainly, because each layer answers a different "what do we standardize on" question:

LayerProjectDonorNeutral home
Agent-to-tool protocolModel Context Protocol (MCP)AnthropicAgentic AI Foundation
Agent instruction filesAGENTS.mdOpenAIAgentic AI Foundation
Reference agentGoose (Apache-2.0)BlockAgentic AI Foundation
Agent-to-agent protocolA2AGoogle (April 2025, donated to the LF in June 2025)Linux Foundation, alongside MCP under AAIF

The governance detail matters more than the logos. The AAIF operates as a Linux Foundation directed fund where technical steering committees, not funders, set roadmaps — and as MCP co-creator David Soria Parra told TechCrunch at launch, the goal is plain: enough adoption that the open stack becomes the de facto standard. Google's A2A took the same path months earlier, with more than a hundred companies behind it. The pattern is now three-for-three: build the thing, prove it in production, hand it to a foundation before adoption calcifies around one vendor's roadmap.

What Goose actually is (and why its architecture fits a PaaS)

Goose is Block's general-purpose AI agent: a Rust core with a CLI, a desktop app, and an HTTP/ACP serve mode (goose serve), connecting to 15-plus model providers — Anthropic, OpenAI, Google, Ollama for fully local runs, OpenRouter, Bedrock, Databricks — on a bring-your-own-key basis. Four properties make it interesting as platform infrastructure rather than just another coding assistant:

Extensions are MCP servers, full stop. Goose ships more than 70 bundled extensions, and every one of them speaks MCP; community servers bring the reachable ecosystem into the thousands. Tools are not compiled into the binary behind a privileged API. When your PaaS exposes deploy, rollback, app.status, and logs.tail as MCP tools, Goose consumes them through exactly the same path as its own file editor — no adapter, no plugin SDK, no fork.

Recipes are runbooks. A recipe is a shareable YAML file packaging instructions, extensions, and parameters ({{app_name}}-style templating), with sub-recipe composition and scheduling (goose schedule add). A deploy procedure becomes a repo artifact with diff, blame, and review — the same "runbook as code" argument this site made for Agent Skills, in a format Goose executes directly.

It is already proven at scale. Inside Block, 60% of the company's 12,000 employees use Goose weekly, with reported time savings of 50–75% on covered workflows. Stripe's Minions — fully unattended coding agents merging over a thousand PRs a week — are built on a customized Goose fork. And a Grant Program plus white-label custom distributions mean teams can ship a branded Goose with preconfigured providers and extensions.

The repo now lives under the foundation. Stewardship moved from block/goose to an AAIF home in 2026, which is what converts "open source, backed by Block" into "open source, governed like Linux itself." A platform betting its docs and test matrix on Goose is betting on a steering committee, not a corporate roadmap.

That last point deserves a concrete anchor before we move on, because "MCP-native" is doing a lot of work in this post. Adding a PaaS tool server to Goose is extension configuration, not integration engineering — roughly:

yaml
extensions:
  paas-deploy:
    enabled: true
    type: stdio
    cmd: paas-mcp-server
    args: ["--fleet", "prod"]
    timeout: 300

One entry, whether through goose configure or the config file directly, and every recipe on the machine can call your deploy tools. The rest of this post is about making that call worth making.

Why neutral governance changes the reference-client bet

Every deploy-from-chat project answers one question early, usually without noticing: which agent do we build against? The default answer — the vendor CLI your team already uses — carries three costs that only show up later. First, roadmap capture: a breaking change in one vendor's tool-call format becomes your incident. Second, a test matrix of one: "works in our CLI" tells you nothing about the next harness. Third, documentation coupling: every runbook example embeds vendor-specific UX, so switching clients means rewriting docs.

A foundation-governed reference client inverts all three. The roadmap is set by a steering committee with multi-vendor membership, so no single company's quarter can strand your tool surface. The test matrix becomes the spec: if your MCP server behaves against Goose, it behaves against any spec-compliant client, because Goose has no proprietary tool path to accidentally depend on. And the docs travel: a recipe written against MCP tools runs on every client that speaks them.

Couple to one vendor CLIBuild against Goose + the MCP spec
Tool contractVendor's format, versioned by the vendorMCP tools; Goose adds no proprietary surface
Test signalWorks-here-todayWorks-against-the-spec
Docs lifespanRewrite on every client switchRecipes travel across clients
Failure modeVendor ships a breaking change; you scrambleSpec evolves in the open with a conformance trail
When it winsPrototype this week, one team, one harnessAnything you plan to support for years

The honest caveat: for a weekend prototype, the vendor CLI still wins on minutes-to-first-deploy. The reference-client bet pays off the moment a second team, a second model, or a second year enters the picture. And nothing here is exclusive — certify against Goose, then keep thin notes for vendor CLIs as adapters, the way a database documents the SQL standard first and dialect quirks second.

The worked artifact: deploy tools as a Goose recipe

Here is the payoff: a deploy runbook as a Goose recipe, calling generic PaaS MCP tools. Four tools are all it assumes — app.status, app.deploy, logs.tail, app.rollback — which is deliberately the smallest surface any deploy-from-chat MCP server needs. Save it as .goose/recipes/fleet-deploy.yaml so it travels with the repo:

yaml
title: fleet-deploy
description: Deploy a service on the fleet. Use when asked to ship, release,
  roll out, or promote any app. Verifies health before and after; rolls back
  on any gate failure instead of retrying.
parameters:
  - key: app_name
    input_type: string
    requirement: required
    description: Service name as registered on the fleet.
  - key: ref
    input_type: string
    requirement: required
    description: Pinned commit SHA or image digest. Never "latest".
  - key: environment
    input_type: string
    requirement: optional
    description: Target environment. Defaults to staging.
instructions: >
  You are the fleet deploy operator. You may only act through the paas-deploy
  extension tools. Never run shell commands against the fleet, never retry a
  failed batch, and never deploy the ref you were not given.
prompt: >
  Deploy {{app_name}} at {{ref}} to {{environment}}:
 
  1. Call app.status for {{app_name}} and record the currently live ref.
     If the fleet reports degraded health, stop and report — do not deploy
     onto a sick environment.
  2. Call app.deploy with the pinned {{ref}}. Record the deployment id.
  3. Poll app.status until the rollout reports healthy or 10 minutes pass.
     On timeout or any unhealthy gate, call app.rollback to the ref from
     step 1, then stop. Do not retry the deploy.
  4. Call logs.tail scoped to the deployment id and confirm the new ref is
     serving traffic without error spikes.
  5. Report: live ref before/after, deployment id, verification evidence.

Run it headless with goose run, or schedule the staging variant nightly with goose schedule add so drift gets caught by a machine, not a human. Three things to notice. First, the recipe carries knowledge — the ordered gates, the no-retry rule, the rollback trigger — while the MCP tools carry authority: it is the server that validates the ref, scopes the credentials, and refuses a deploy onto a degraded environment. Second, every step is verifiable: status before and after, a deployment id, log evidence in the report. An agent that cannot show its work cannot be trusted at 2 a.m. Third, validate the recipe against your installed Goose version's schema before relying on it — the format is stable, but a runbook deserves the same CI check as the code it ships.

What your MCP surface must expose first

Goose can only be as reliable as the tools it calls. Before any agent — Goose, vendor CLI, or otherwise — deploys through your MCP server, the surface needs six properties. Treat this as the readiness checklist:

  1. Structured deploy status. app.status returns machine-readable rollout state (live ref, desired ref, per-node health), not a prose blob. The agent branches on it; prose is for humans.
  2. Idempotent deploy and rollback. Replaying app.deploy with the same ref and idempotency key converges instead of duplicating. Agents retry; the server must make retries safe.
  3. Pageable logs. logs.tail takes a deployment id plus cursor/limit so the agent pages through evidence instead of drowning in one unbounded dump.
  4. Scoped credentials per action. The token behind app.status cannot call app.deploy. Least privilege is what lets you hand the read tools to every agent and the write tools to a gated few.
  5. Errors the agent can branch on. Typed error codes (ENV_DEGRADED, REF_UNKNOWN, ROLLOUT_TIMEOUT) beat free-text messages. The recipe's gates are only as good as the signals they read.
  6. A dry-run path. A plan mode (or a staging environment with identical gates) lets teams rehearse the recipe — and lets CI execute it against staging on every recipe change — before production ever sees it.

Items 1–3 are what "operate from chat" concretely requires of the build system; 4–6 are what keep it safe once it works. If your MCP server has the first three but not the last three, you have a demo, not a deployment path.

The platform play

Zoom out, and the AAIF donations sketch a division of labor for the next few years of agent infrastructure. The foundations own the protocols and the reference agent; vendors compete on models, harnesses, and managed surfaces; platforms like yours own the governed tools in the middle — the deploy, rollback, and status endpoints where "the agent asked" becomes "the fleet did." That middle layer is the only one that cannot be commoditized away, because it is where your fleet's actual authority lives.

So the concrete playbook: ship a spec-first MCP surface that satisfies the six-item checklist, certify it against Goose as the neutral reference client with versioned recipes in the repo, and treat every vendor CLI as an adapter to that surface rather than the surface itself. When the next harness launches — and there will be a next one — your deploy path keeps working, because it was never about the harness. It was about the tools.

Bex.co is the open-source, AI-native Render alternative — push a git repo, get a running HTTPS service on machines you own. A spec-first MCP surface for deploy and rollback is exactly the kind of governed tool layer agents need, and it is the direction bex is heading. Star the repo on GitHub or deploy your first app today.

Related articles

Give your agents a chain backend

Autonomous agents hit RPC endpoints very differently than people do. See what bex router handles on their behalf.

Read the agents guide