A preset is a named starting point in New bot. Choosing one fills in the new bot's name, title, description, standing instructions and look, and when you press Create bot it also brings the preset's skills, playbooks and starter notes. You can change every field before creating the bot.
Presets come from a shared file (a team file or a preset file someone sent you) or from your organization's shelf (Templates → From {Organization}, see org-library.md). In New bot's Starting role list, your organization's presets come first under From {Organization}, then Imported presets, then the built-in roles.
A preset is an allowlist. It can carry only:
- a name and a short description;
- the new bot's name, title, description and standing instructions;
- its look: colour, mascot and picture;
- playbooks;
- skills (the
SKILL.mdtext only, never scripts); - starter notes (
MEMORY.mdand topic notes).
It has no field for a model, a folder, a computer, an approval level, connected apps, MCP servers, a browser, peers or routines. Whatever you have chosen for those in New bot (or in your New bot defaults) stays as it is, so a preset can never widen what a bot may do. Every stored preset is read through the same package parser as every import, so a hand-edited preset still says only what a file may.
- From a file: the preset's skills are added switched off, like every skill in a shared file. Switch them on in the bot's Skills settings after reading them.
- From your organization: the skills are added switched on, because
your organization's Admin published them. Each also carries the install's
skill stamp (contract §3.2: the install, the skill's name, the release, and
the
SKILL.mdhashes as released and as written), markedvia: "preset", so a later automatic update can tell your own edits from the publisher's changes. The bot is still yours, not part of the package: it never keeps the package added, so a team you deleted can be added again.
The New bot dialog says which applies before you create the bot. A preset's
skills and starter notes win over your New bot defaults' own skill or note of
the same name. The bot records where it came from (installedPackage with
presetKey).
A preset from an organization release that was withdrawn, or from a team you
deleted, is no longer offered, and a bot already made from a withdrawn one
has that release's skills switched off (once; switching them back on is
yours). Which presets are offered follows the organization library's own
state (OrgLibrary.installStatuses() in server/org-library.ts), not a
separate read of state.json, so New bot and the shelf never disagree. With
no organization there are no installs and nothing is hidden. Adding the same organization package again, for example a
team you deleted, refreshes its presets in place rather than adding copies. Organization presets are
managed in Admin; an imported preset can be removed with Remove from New
bot under the Starting role list (no confirmation step).
Two ways, both saving the same file format (team-sharing.md):
- With a team. In Share team…, tick Include my New bot defaults as a preset. It is off unless you tick it: your New bot defaults are yours until you share them. The team's Include starter notes box also decides whether the preset's notes go in.
- On their own. Settings → General → Defaults for new bots → Share as preset… saves a preset file: the preset and its skills, no team, no bots. Choose the preset's name, a description, the version and whether to include the picture and starter notes.
Either way the preset is made from your saved New bot defaults through the allowlist above, and every text part passes through the same secret redaction as a team file. The dialog lists what was removed or left out. There is no confirmation step: Save file is the decision.
A preset file is added in Templates → Import like a team file. The preview shows the preset bots and any skills the file only offers; Add presets puts the presets in New bot and changes nothing else. A file with skills but no bots or presets has nothing to add here and is refused with a sentence. Adding the same file twice offers its presets once.
org-library/presets.json in the data folder: one row per preset (where it
came from, which install it belongs to, the package name and version, and the
preset exactly as the file carried it), plus the skill and playbook
definitions those presets use, so a bot can be made from a preset after the
file or the organization's release is gone. What this installation last
shared as a preset file (its package id and version) is kept in
published-library.json, so the next share suggests the next version.
All admin scope.
GET /api/bot-presets→{presets: [{id, source: "file"|"org", key, name, description?, packageName, release, publisherName?, bot, skills: [{name, description}], skillsEnabled, playbooks, notes}]}.DELETE /api/bot-presets/:idremoves an imported preset; an organization's answers409.POST /api/botswithpreset: "<id>"adds the preset's playbooks, skills and starter notes to the new bot and stamps it. Name, look and instructions are the request's own fields, as for any bot.POST /api/teams/exportwithincludeDefaultsPreset: true(and optionallypresetName,presetDescription,presetAvataras a data URL) adds the New bot defaults preset to a team file. Withkind: "library"instead ofteam, it saves a preset file (name,release,notes,includeMemory,dryRunas for a team).POST /api/teams/importadds a preset file's presets and answers{presets: [{id, key, name}], offeredSkills, bots: [], section: ""}.POST /api/org-library/addanswers with the samepresetslist, and the install's entry inorg-library/state.jsonrecords them underpresets({<key>: {presetId, r}},rthe release-side hash of contract §1.6).
See verification/presets.md for how this is tested.