Skip to main content
A workspace is a tree of objects under a single storage prefix: workspaces/{workspaceId}/. One workspace, one brand. Everything the platform knows about a brand lives in this tree, and everything you read through the brain surface is a file in it.

What each folder means for a client

You never write to this tree from a client. You read it, through two lenses:
  • The portal file index (portal.listFiles) returns every key in the workspace, workspace-relative.
  • The brain surfaces return the keys that matter for rendering a published agent: feed covers and posters, item media, and the frozen file index.

projects/{slug}/output/ is the feed

Published content lives in the project’s output/ folder. A feed post’s key, poster, and playable all point at files under projects/{slug}/output/. This is the folder to watch if you are syncing media to your own storage.

Posters and playables

Every .comp gets a baked .comp.poster.jpg still. Video-producing comps additionally get a transcoded .mp4 in output/, which the feed surfaces as playable. If playable is empty, only the poster exists.

Brand data clients can use

config/design-tokens.json and config/brand.json are readable through the R2 proxy and are the cheapest way to theme your own UI in the brand’s palette and typography — the same tokens the platform’s own renders use.

Key scoping, restated

Stream either through brain.streamR2File, which takes a workspace-relative key.

What the R2 proxy will serve

Only allowlisted prefixes are reachable through the brain’s R2 endpoint; anything else returns 403: projects/, workflows/, assets/, config/, meta/, wrapper/, knowledge/, import/, .meta/ That set covers everything an integrator needs. The platform’s internal machinery (databases, secrets, service-to-service planes) is not in this tree and not reachable from the client API at all — see Scope.

Writing to the tree

Clients never write. Content enters the tree through the platform itself: agents generate, publishing freezes a release, and the ws CLI (used by the workspace owner and authorized tooling) syncs a local checkout. The supported client path for new content is: run it through an agent on the platform, then read it back from the feed — see Scope.