ScriptGrain in goose and Buzz: your voice inside team chat

By Jack Stovell X · Instagram · LinkedIn · published 2026-11-11 · updated 2026-11-11

goose is an open-source AI agent with a desktop app, a CLI and an API, and it connects to MCP servers as extensions. Add ScriptGrain as one and goose drafts in a measured voice, yours or your brand's, then scores every draft against it. Run that goose as an agent in Buzz, Block's open-source team chat for people and agents, and the drafts it posts in a channel sound like the team instead of like a model.

How to connect goose

You need a ScriptGrain account with at least one voice profile, and an API key from Settings, API (keys are on every plan, Free included). To look around first with no account, use the trial address in the last step.

  1. goose Desktop. Open the sidebar, choose `Extensions`, then `Add custom extension`. Pick the Streamable HTTP type, name it `scriptgrain`, set the URL to `https://mcp.scriptgrain.com/mcp`, and under Request Headers add `Authorization` with the value `Bearer sg_live_...` (your key).
  2. goose CLI. Run `goose configure`, choose `Add Extension`, then `Remote Extension (Streamable HTTP)`. Give the same name and URL, answer yes to adding custom headers, and enter the same `Authorization` header.

Or edit the config file. goose keeps extensions in `~/.config/goose/config.yaml`. This entry does the same as the steps above:

extensions:
  scriptgrain:
    type: streamable_http
    name: scriptgrain
    enabled: true
    uri: https://mcp.scriptgrain.com/mcp
    headers:
      Authorization: "Bearer sg_live_..."
    timeout: 300

No key yet? Point the extension at `https://mcp.scriptgrain.com/try` with no header. goose loads the trial tools: build a profile from your writing, score text against it, compare pieces.

Use the Streamable HTTP address. goose does not support SSE extensions, so ScriptGrain's older `/sse` address will not load. goose's docs also describe OAuth sign-in for remote extensions; the API key header is the route we tested.

We checked this on goose 1.59.0 (released 10 November 2026): the keyed entry loaded every ScriptGrain tool and `list_profiles` returned the account's profiles, and the `/try` entry loaded the trial tools with no key.

Using it inside Buzz

Which Buzz you run decides whether your goose extensions reach its agents.

Buzz 0.X with the buzz-acp harness. buzz-acp starts `goose acp` as its agent unless you tell it otherwise, and goose's ACP sessions use the extensions enabled in your goose configuration. Add ScriptGrain to goose on the machine that runs the harness, as above, and the agent can use it when someone mentions it in a channel.

Buzz 1.0 desktop. Buzz 1.0 gives the agents it starts a fixed tool set: goose's developer tools plus Buzz's own tools. Its source says extensions in your goose config never load into a Buzz agent, and Claude Code agents there run with a strict MCP config too. So a ScriptGrain extension in goose does not reach a Buzz 1.0 agent today. Use ScriptGrain in goose itself and bring the scored draft into the channel, or run the agent through buzz-acp.

Why an agent in your team chat needs your voice

An agent in a shared channel writes in front of everyone. Release notes, customer replies, summaries, announcements: all of it lands where your colleagues can read it, and they notice when it sounds off.

The default model voice has a problem. It reads like a different person every time. Monday's summary is breezy, Tuesday's announcement is stiff, and the customer reply sounds like a stranger who's never heard of your company. Fair enough, the model isn't being careless. It just has no idea who you are.

So give it a measurement instead of an adjective. ScriptGrain measures a voice as 45 attributes across 8 layers, built from writing you've already published. The agent drafts from that measurement, then scores the draft against it.

And it works per voice. One profile per person or brand, which means a team can keep its brand voice consistent no matter who asked the agent. The profile decides how it sounds.

Building one is free. You need 3 or more pieces of writing, and 3,000 words or more works best.

What goose can do with ScriptGrain connected

With the extension on, goose gets ScriptGrain's tools, including:

The profile, the connector and the scoring tools cost nothing; drafts and polish are the paid part. The MCP tool reference lists every tool.

A channel request, start to finish

Someone in a channel asks the goose agent for release notes in the team's brand voice.

The agent calls `generate_content` with the brand profile. A draft comes back with a voice-match score attached. On-voice drafts score 0.85 to 0.95; a clearly different voice scores under 0.45. If the draft lands short, the agent runs `polish`, which revises toward a target score for 1 credit.

Then it posts the draft in the thread. Nobody has to wonder whether it sounds like the company, because the score already said so.

A teammate edits the last couple of lines, because people always have opinions about the ending. That edit isn't wasted: `save_edit` (free) feeds it back, so the next draft starts closer to where the team actually landed.

Sources

Everything above about goose and Buzz comes from their own docs and code, read on 11 November 2026:

Questions

Does ScriptGrain work in goose without an API key?

Yes, for a trial. Point the extension at https://mcp.scriptgrain.com/try with no header and goose loads the trial tools: build a profile from your writing, score text against it and compare pieces. Drafting in your voice needs an account and an API key, which every plan includes.

Will my goose extensions show up in Buzz agents?

In Buzz 0.X with the buzz-acp harness, yes: it starts goose acp, which uses the extensions enabled in your goose configuration. Buzz 1.0 desktop gives its agents a fixed tool set, so extensions from your goose config do not load there today.

Which ScriptGrain tools are free in goose?

Building a profile, scoring any text against it with check_voice_match, and comparing pieces with compare_voice are free on every plan. Drafting with generate_content costs 1 credit per draft up to 5,000 words, and polish costs 1 credit.

Related