Reference
Files layout
Files hold nothing unstructured. Everything has its own place, and lib/files/layout.js is the only code that builds those places. A writer asks it for a folder and never spells a path by hand.
<files root>/
Projects/<project record id>/
files/ the project's own files
chat/<chat id>/ a chat's folder
made/<chat id>/ what a chat made
agents/<agent id>/
instructions/
context/
memory/
work/
objects/<object>/<record id>/ a record's attachments
templates/<template id>/
flows/<flow id>/ only for a flow that keeps files
space/ the Space's own documents
Rules
- A folder is named by an id that never changes. A rename changes the display name in the record and moves nothing.
Projectskeeps its capital letter and its record id. Every existing project, its access guard and its seal already use that folder, so it is the canonical one. The other roots are new.- An object is named by its slug (lowercase letters, digits, hyphens). Every other segment is an id of letters, digits,
_and-, at most 64 characters. A segment with a slash, a dot at the start or a space is refused. whereIs(path)reads a path back into what it is (project, agent, record, template, flow, space) or answers null.
Old places
Nothing moves. A writer that used a different place keeps reading it and writes new files to the canonical one. Today:
- The agent page keeps an agent's context under
agents/<uid>/contextand its instructions inagents/<uid>/CLAUDE.md. ReadingCLAUDE.mdstays; new instruction files go toagents/<uid>/instructions/. work.start-projectwrites the project's Drive folder withprojectDir, the same path as before.