AGENT.md. An agent that authors a new deck fetches the reference, reads it, and builds the new deck
from what it read.
There are two types today:
- A brand holds how the company looks and sounds: fonts, colours, backgrounds, shapes, motion and voice. Its pages show the brand applied, and its files carry the logo and the fonts.
- A template holds the structure of a recurring deck: what the deck is for, which pages it has and how to fill them. Its pages are the model to copy.
brand and template are names for the same thing underneath. The API calls it reference.
The type comes from the file
The reservedAGENT.md at the root of the bundle (see
Deck self-description) may start with a frontmatter: a YAML
block between two --- lines, at the very top of the file. A frontmatter whose type is Brand or
Template makes the deck a reference of that type. The match ignores case, and the API returns the
type in lowercase.
Every reference carries the same first fields:
Then come the fields of the type. A brand has
fonts, colors, background, shape, motion and
voice. A template has purpose, pages and fill. Slideless stores every field as you wrote it.
It reads type and nothing else, so the shape inside each field is yours to choose.
The text under the frontmatter is the prose an agent reads. The frontmatter says what can be said in
values. The prose says the rest: the judgement calls, the things never to do, where each file is.
The frontmatter must close within the first 16 KB of the file, and it must stay under 16 KB once
parsed.
A brand
A template
A frontmatter that cannot be used
The classification never refuses a push. When the frontmatter is malformed, too large, or names a type Slideless does not know, the push succeeds and the deck stays an ordinary deck. The push answer carries one sentence that says what was unusable, inversion.referenceWarning, and the CLI prints
it. For example:
AGENT.md with no frontmatter, or with a frontmatter that has no type, is an ordinary briefing.
It raises no warning.
Existing decks
A deck is classified when a version is pushed. A deck that already exists stays an ordinary deck until its next push, even when itsAGENT.md already carries a usable frontmatter. Push it once and
it becomes a reference.
What the API returns
A deck carries three fields for this, on every read:reference: the frontmatter of the current version as an object, withtypein lowercase. It isnullon an ordinary deck.audience:privateorworkspace.defaultReference:trueorfalse.
reference and referenceWarning, so the history shows what each push
declared.
The audience
The audience says who in the workspace reads a reference. It is a property of the deck. It is never a field of the frontmatter, so nobody changes it by editing a file.privateis the default. The reference follows the ordinary deck rule: its owner, the workspace’s admins and owners, and the collaborators invited on it (Workspaces).workspaceopens the reference to every member of the workspace. They read the deck, its versions and its files. Nobody gains the right to push to it or to change it. Every version opens, the ones pushed before the switch included. Look at the history before you publish a deck that started as something else.
The default reference
A workspace has at most one default reference per type: one default brand, one default template. The default is the one an agent takes when nobody names another. A workspace admin or owner sets it:- The reference must have the
workspaceaudience. On a private reference the call answers409 audience_private. A default that most members cannot read would be of no use to them. - Setting a default clears the previous default of that type. There is no moment with two.
{ "defaultReference": false }clears it. The workspace then has no default of that type.- A default reference cannot return to
privatewhile it is the default (409 default_reference). Clear the default, then change the audience. - Deleting a default reference is allowed. The workspace then has no default of that type.
- On an ordinary deck the call answers
422 not_a_reference.
A project’s brand
A project can name one brand of its own, chosen among the references linked to it. An agent authoring a deck for that project reads the project’s brand instead of the workspace’s default. A manager of the project sets it, and the reference has to be linked to the project first. When a push takes thetype: Brand line out of that reference’s AGENT.md, it stops being a brand, so it
stops being the project’s brand at the same moment.
When a reference stops being one
Each push classifies the deck again, from the new version’sAGENT.md.
- The new version has no usable frontmatter. The deck becomes an ordinary deck in that same
push. Its audience returns to
privateand it stops being the default. A later push that brings the frontmatter back makes it a reference again, but a private one: someone has to choose theworkspaceaudience again. A deck never reopens to the workspace through a file alone. - The new version changes the type, from brand to template or the other way. The deck keeps its audience and stops being the default, since it was the default of a type it no longer has.
private or drops the default, the
version’s referenceWarning carries a sentence that names what the deck lost, after the sentence on
the frontmatter when there is one. The CLI prints it, so the person who pushed knows at once.
Duplicating a reference
A duplicate copies one version of a deck. When that version is a reference, the duplicate is a reference of the same type. It is private and it is never the default, whatever the original was.Listing references
References leave the ordinary list.GET /api/v1/presentations with no type returns ordinary
decks only. The type parameter lists references instead:
brand and template list the references of that type, and reference lists every reference. The
list holds what you can read: your own references, the ones you collaborate on, and every reference
with the workspace audience. Admins and owners see them all.
Add default=true to keep only the default references:
default=true
with no type means type=reference.
Agents connected over MCP have two tools:
slideless_list_referencestakes atypeand lists the references of that type.slideless_get_default_referencetakes atypeand returns the workspace’s default of that type.
From the command line
The CLI carries the same operations, in one real family and two shortcuts:slideless reference <verb> takes --type brand|template where the type
matters, and slideless brand and slideless template are the same verbs with
the type already chosen. Eight verbs: list, pull, new, push, publish,
unpublish, default, start
(References: brand, template).
The everyday sequence:
- An admin scaffolds a folder with
slideless brand new, fills itsAGENT.mdand its pages, and pushes it withslideless brand push. That push is what classifies the deck as a brand, and it names the new deck after the frontmatter’stitle:line. - The same admin opens it with
slideless brand publish, so every member of the workspace reads it, and makes it the house brand withslideless brand default. - A member authoring a deck runs
slideless brand pullwith no name, which fetches the workspace’s default into.slideless/brand/beside the deck, and reads.slideless/brand/AGENT.mdbefore writing a page. - A deck that follows a template starts as a copy of it:
slideless template start <ref> ./new-deckwrites a fresh folder with thetype:line removed, so the deck is an ordinary deck. - The push records what the deck was made from:
slideless push --brand <ref>and--template <ref>write thereferencesentries above, and a push with neither flag records whatever.slideless/brand/and.slideless/template/were pulled from.
Reusing a reference’s files
A reference’s files follow the reference’s rule: whoever reads the reference reads its files. So a member who reads a workspace brand can put its logo in their own deck without uploading it again. The push asks the instance which files it is missing, and the instance answers that the logo is already present. The bytes are stored once in the workspace (Versions). This holds for as long as you read the reference. A file of a reference you cannot read counts as missing, and the push uploads it.Provenance
A deck made from references records them in itsmetadata, under references:
metadata is replaced whole on a PATCH, so keep references when you change another key
(Deck self-description).