Voice Brain Memory API: what a voice has already said

By Jack Stovell X · Instagram · LinkedIn · published 2026-10-29

The Voice Brain Memory API returns what a voice has already said, quoted verbatim from its own pieces, so an assistant can build on it instead of repeating it. Developers and AI assistants call it, through REST or the MCP server, before drafting. It's on every plan, Free included.

At a glance

What it does: Keeps the ideas, stories, claims and frameworks a voice has written, each with a verbatim quote, so new drafts build on them.

Endpoints`GET /v1/profiles/{id}/memory`, `POST .../memory/sync`, `.../memory/pieces`, `.../memory/units`, `.../memory/settings`, `GET .../brains`, `POST .../brain`
MCP tools`get_memory`, `sync_memory`, `add_to_memory`, `edit_memory`, `delete_memory`, `forget_piece`, `set_repeat_policy`, `list_brains`, `set_voice_brain`
CostFree on every plan, no generation credit; reads and syncs count against the monthly AI usage ceiling

What the memory holds

Call get_memory and you get the author's record, not a summary of it. Ideas the author returns to, with a count of how many pieces repeat each. Stories told. Claims made, with the context they were made in. Frameworks used. Topics, with counts. And claims the author later changed, which is the part most tools skip.

Every unit carries a verbatim quote from its source piece. That matters. An assistant that can point at the exact sentence doesn't have to guess what the author meant.

The lists are capped: 12 ideas, 8 stories, 10 claims, 6 frameworks, 40 topics and 12 changes. They're drawn from the 400 most recent memories, so you see what's current rather than everything ever filed. One limit to state plainly: the memory knows only the writing it has been given. Feed it three pieces and it knows three pieces. It builds on the Voice Brain, which sits behind every voice profile.

Keeping it current, and correcting it

Memory goes stale unless something tends it. Two things do.

sync_memory reads the profile's final drafts and samples that are new or changed, one extraction per piece, inside a 90-second budget. If it returns out_of_time, call it again. A cron also syncs every half hour, so most of the time you don't have to think about it.

For anything else, you have direct controls:

  1. add_to_memory adds a piece by text or public URL (60+ words, read up to 3,500; identical text is skipped), or one memory stated directly, up to 300 characters.
  2. edit_memory rewords a memory, changes its kind or moves its topic. The change survives the source being read again, so a correction stays corrected.
  3. delete_memory deletes one memory for good.
  4. forget_piece removes a piece and every memory taken from it.

That last one is the blunt instrument. Use it when a piece never should have been in the record at all.

Shared brains and the repeat policy

A brain is a memory. By default, one brain per voice keeps voices apart. Share one brain across several voices and something useful happens: novelty checks and what_next see everything any of them has said, while each still writes in its own voice. Think of a founder and their company, or a writer's personal voice and their client voices.

list_brains shows the options. set_voice_brain moves a voice; joining a shared brain brings its memory along, and leaving takes a copy of the shared memory with it. A team voice may use only the team's brains.

Then there's the repeat policy, set with set_repeat_policy. The default, 'avoid', steers drafts away from points already argued. The alternative, 'allow', keeps established ideas on the table to build on and reports repeats as information instead of blocking them. That's the right setting for a brand line or a campaign, where repetition is the point.

To be fair, most voices want 'avoid'. The novelty check leans on the same memory, and content generation respects whichever policy you've set. New tools land on the what's new page.

Request and response

Read the memory (from the OpenAPI spec's examples; lists cut to one item).

curl https://auth.scriptgrain.com/functions/v1/api-v1/v1/profiles/{id}/memory -H "Authorization: Bearer sg_live_..."
{
  "items": 14,
  "units": 62,
  "topics": [
    {
      "label": "plain writing",
      "unit_count": 9,
      "last_seen": "2026-10-01T08:00:00Z"
    }
  ],
  "ideas": [
    {
      "kind": "idea",
      "text": "Short sentences carry the argument; long ones carry the evidence.",
      "quote": "I keep the claim short and let the evidence run long.",
      "item_title": "Why plain writing wins",
      "times": 3
    }
  ],
  "stories": [],
  "claims": [],
  "frameworks": [],
  "last_synced": "2026-10-20T06:30:12Z",
  "brain": {
    "name": "Marketing Voice",
    "shared": false
  }
}

In Claude, ChatGPT or Cursor

Over MCP this is the tools `get_memory`, `sync_memory`, `add_to_memory` and `set_repeat_policy`. Connect `https://mcp.scriptgrain.com/mcp` once (a custom connector in claude.ai, developer mode in ChatGPT on the web, the MCP settings in Cursor, or `claude mcp add` in Claude Code), then ask in plain words:

What have I already written about pricing? Quote me, and tell me which ideas I keep coming back to.

Moving a voice between brains, deleting a memory and forgetting a piece are marked destructive, so the assistant confirms with you first.

Get a key

API and MCP access is on every plan, Free included. Create a free account (no card), then mint a key at Settings, then API: it starts `sg_live_`, is shown once, and goes in an `Authorization: Bearer` header. Every request, field and error code is in the OpenAPI spec.

Questions

Does the Memory API cost anything to call?

Reading and managing memory is free and uses no generation credit. Memory syncs, additions, novelty checks and what-next do count against the account's monthly AI usage ceiling, and you'll get a 402 budget_exceeded when it's reached. API calls draw on the same credits as the app; there is no separate API quota.

How do I authenticate, and what are the limits?

Mint an sg_live_ key at Settings, then API, and send it as Authorization: Bearer. The rate limit is 60 requests a minute per key. The REST API and the MCP server at https://mcp.scriptgrain.com/mcp are on every plan, Free included. Payments never happen through the API.

Can I correct something the memory got wrong?

Yes. Use edit_memory to reword a memory, change its kind or move its topic; the change survives the source being read again. Use delete_memory to remove one memory for good, or forget_piece to remove a whole piece and every memory taken from it. Nothing in the record is locked in.

Will several voices share one memory, and can I stop that?

Voices share only when you put them in the same brain. Use list_brains to see the options and set_voice_brain to move a voice. Joining brings its memory; leaving takes a copy of the shared memory. A team voice may use only the team's brains. The default keeps one brain per voice.

Related