> **Shapeless documentation index**
> Fetch https://shapelessai.com/llms.txt to discover every page before exploring further.
> Every page also answers Markdown: append `.md` to its path, or send `Accept: text/markdown`.

# Brand Memory

The account's durable knowledge - voice, positioning, product facts - and how an agent reads and edits it.

*Verified 2026-09-14. Source: https://shapelessai.com/docs/brand-memory*

Brand Memory is the account's durable knowledge: who the business is, what it sells, how it
sounds, what it has already said. It is a small file tree, not a prompt, and every job reads it
before it writes anything.

This is the highest-leverage thing an agent can edit. A post with the wrong tone is a symptom; the
voice file is the cause. Fix the file and every future post is fixed.

## Read it

```bash
curl -s https://shapelessai.com/api/workspace -H "Authorization: Bearer $SHAPELESS_API_KEY"
curl -s "https://shapelessai.com/api/workspace/file?path=voice.md" -H "Authorization: Bearer $SHAPELESS_API_KEY"
```

```bash
shapeless brain ls
shapeless brain get positioning.md
```

```jsonc
// MCP
{ "tool": "brain_tree", "arguments": {} }
{ "tool": "brain_read", "arguments": { "path": "voice.md" } }
```

`GET /api/workspace` answers the tree with its completion ring - which parts of the brand are
filled in and which are still empty.

## Write it

```bash
curl -s -X PUT https://shapelessai.com/api/workspace/file \
  -H "Authorization: Bearer $SHAPELESS_API_KEY" -H "Content-Type: application/json" \
  -d '{"path":"voice.md","content":"Plain sentences. No hype. Never say '\''revolutionary'\''."}'
```

```bash
shapeless brain put voice.md --file ./voice.md    # or pipe on stdin
shapeless brain import ./pitch-deck.pdf           # .md, .txt, .pdf, .docx
shapeless brain export --out brain.zip
```

Needs `write`. `POST /api/brain/scan` reads a link and files what it says into the tree (an NDJSON
stream). `POST /api/brain/import` takes a document. Both are how you fill a new account in one
move rather than typing it.

## Assets

The brand's real files - logos, fonts, product shots, footage - live beside the text:

```bash
shapeless assets list
shapeless assets upload ./logo.png     # prints the media key
```

| Method | Path | Scope | Purpose |
| --- | --- | --- | --- |
| GET | `/api/brain/assets`, `/api/assets` | `read` | Brand uploads, and the whole asset library. |
| GET | `/api/brain/assets/[filename]` | `read` | Stream one asset (Range supported). |
| PUT/PATCH/DELETE | `/api/brain/assets/[filename]` | `write` | Upload, rename, delete. |
| GET | `/api/media/[...key]` | `read` | Stream any media key this account owns. |

A media key from here can go straight onto a post (`mediaKeys`) or onto a job message
(`mediaKeys`). Uploading an asset puts it in the library for reuse; attaching it to a message is
what makes *this* turn's agent look at it. Two different asks - do the one you were asked for.

## Standing agents

An agent is a recurring brief the server wakes on its own schedule.

```bash
shapeless agents list
shapeless agents create --name "Daily reach" --prompt "..." --days mon,thu --hours 9
shapeless agents edit <id> --status paused
shapeless agents wake <id>              # run it now  [publish]
```

`POST /api/strategies` needs `write`, or `publish` if the agent is armed to autopublish - arming
something that posts without a human is itself a publishing act. Waking one always needs
`publish`. What they propose lands in the queue as `proposed`; see [Posts](/docs/posts).
