Lolly
Öppna appen

Brand skills

A brand skill is a brand's standards for one discipline, written as an Agent Skill and carried with the design system. An Agent Skill is a Markdown file, with optional text references, in the open Agent Skills format. Lolly keeps the brand's text as written and hands the skill to the agent doing the work: through Lolly's MCP server, or as a folder for an agent tool on your own machine.

This page is for brand owners who write standards and for people who connect agents to Lolly. A brand skill guides. A skill never gives a pass or a fail: the design system's house rules are what Lolly checks.

Three layers of guidance

LayerSaysWritten byWhere an agent reads the layer
Lolly skillHow to operate LollyLollylolly://skill, or /info/skills/lolly/SKILL.md
Tool skillHow to operate one toolThe tool's author, over a baseline Lolly generates from the manifestlolly://tool/{id}/skill; see Tool Skills
Brand skillWhat the brand wants, one discipline at a timeThe brandlolly://design-system/skills, or lolly system skills

Each layer keeps to its own subject. A brand skill does not explain a tool, and the Lolly skill does not speak for a brand.

Lolly also generates a baseline skill for every design system from its design brief: named colours, approved pairings, type, logos per surface, icon themes, media families and the house rules Lolly checks. Its name ends in -baseline (lolly-demo-baseline for Lolly Demo). The baseline is marked as generated and states values rather than intent. The brand's own skills take precedence on anything they cover. Lolly writes the baseline on request and does not store a copy.

The Lolly Demo skills

Lolly Demo, Lolly's own example brand, carries three public skills. They are the worked example on this page.

Asset idNameDisciplineFor
lolly/skill/brandlolly-demo-brandbrandEvery piece of work: voice, the Opal palette, type, logo use and layout
lolly/skill/photographylolly-demo-photographyphotographyDarkroom and Filter, and the lolly/luts/ colour looks
lolly/skill/motionlolly-demo-motionmotionDesign and Lottie Ad; video and audio exports; the lolly/loops/ and lolly/songs/ music

List them from a checkout with the Lolly Demo content profile:

LOLLY_PROFILE=lolly-demo lolly system skills
Lolly Demo brand skills

lolly-demo-brand             brand          draft     public    r1.0  Lolly Demo brand standards
lolly-demo-motion            motion         draft     public    r1.0  Lolly Demo motion
lolly-demo-photography       photography    draft     public    r1.0  Lolly Demo photography
lolly-demo-baseline          generated baseline from the design brief

Read one: lolly system skill <name>

Write a skill Lolly carries well

The start of the Lolly Demo photography skill shows these habits:

---
name: lolly-demo-photography
description: How Lolly Demo photographs look and how to grade, crop and treat them. Use when choosing, editing or grading a photograph for Lolly Demo work, in Darkroom, Filter or Design.
---

# Lolly Demo photography

Read the Lolly Demo brand standards first. This skill covers photographs only.

## Grading

- Start from [Standard Slide](lolly/luts/slide-standard), a neutral daylight look. Use [Vivid Slide](lolly/luts/slide-vivid) for food and sweets, and [Fine Mono](lolly/luts/mono-fine) for black and white.
- A duotone uses two Opal colours, dark first: Liquorice with Spearmint, or Spearmint with Pandanus.

The catalog record

A skill is a catalog asset of type: "skill". Its id reads <namespace>/skill/<slug> and, like every asset id, is permanent: a new revision changes the record, never the id. The entry needs:

The skill's own fields live in meta.skill:

FieldRequiredHolds
nameYesThe Agent Skills name: 1 to 64 lowercase letters, digits and single hyphens. Unique within the design system, because agents and exported folders address a skill by this name.
descriptionYesUp to 1,024 characters: what the skill covers and when to read the skill.
disciplineYesbrand for the overall skill, or one of voice, logo, colour, typography, layout, photography, illustration, iconography, motion, sound, interactive, presentation, data-visualisation, print, merchandise, environmental, social, accessibility or other. The asset's own name stays the label people see.
audienceYespublic or internal. See Public and internal skills.
statusYesdraft or approved. Approval is the brand's own statement. Lolly does not check anything to grant approval.
skillRevisionYesThe brand's revision label, such as 1.0. The catalog version is separate.
ownerNoWho answers for the skill, in the brand's own words.
reviewedNoWhen the owner last reviewed the skill, as YYYY-MM-DD.
revisionNoteNoWhat changed in this revision, up to 500 characters.
maintainerNoWho maintains the text when the brand team does not. The Lolly Demo skills say lolly.
appliesToNoThe work the skill is for: tools (tool ids), categories, formats (pdf, mp4), media (print, screen, video, audio) and families (asset id prefixes ending in /, such as lolly/luts/).
referencesNoExternal links in the text that the owner approved as meaning a catalog asset, as { "url", "asset" } pairs.
filesNoThe reference files, each with path, url, checksum and size. pnpm run build:catalog writes the checksum and size.
generatedNotrue only on a baseline Lolly wrote.

The Lolly Demo photography entry, with its checksum and size left for the build to fill:

{
  "id": "lolly/skill/photography",
  "name": "Lolly Demo photography",
  "description": "How Lolly Demo photographs look, and how to grade, crop and credit them.",
  "type": "skill",
  "version": "1.0.0",
  "tier": "core",
  "formats": [
    { "format": "md", "url": "/catalog/assets/lolly/skills/photography/SKILL.md", "checksum": "sha256-PLACEHOLDER", "size": 0 }
  ],
  "license": "CC0-1.0",
  "meta": {
    "skill": {
      "name": "lolly-demo-photography",
      "description": "How Lolly Demo photographs look and how to grade, crop and treat them. Use when choosing, editing or grading a photograph for Lolly Demo work, in Darkroom, Filter or Design.",
      "discipline": "photography",
      "audience": "public",
      "status": "draft",
      "skillRevision": "1.0",
      "maintainer": "lolly",
      "appliesTo": { "tools": ["darkroom", "filter"], "families": ["lolly/luts/"] }
    }
  }
}

To add a skill to a brand pack, put SKILL.md and any references/ under catalog/assets/<namespace>/skills/<slug>/, add the entry, then follow the steps in Add an asset to a catalog. pnpm run validate:catalog runs the same admission check the CLI and the MCP server run on every read. It also checks the id pattern, the tier, the licence, the single md format, that no two skills share a name and each reference file's checksum. A skill that fails is refused with the reason. Owner lint warnings, such as a long body or an unclosed code fence, are printed and do not fail the build.

Public and internal skills

audience decides where a skill can travel.

Wherepublicinternal
A static build (dist/, lolly.tools, any statically hosted catalog)IncludedLeft out, file and index entry
An instance pack (scripts/build-instance-pack.ts)IncludedOnly when the recipe sets "skills": { "internal": true }
A hosted MCP serverListed and servedNot listed and not served
The CLI, and an MCP server on your own machineListed and servedListed and served

A statically hosted catalog is public whichever profile built the catalog, so internal is enforced by leaving files out of static output, not by hiding them. The CLI and an MCP server on your own machine read the brand pack from your disk, so they serve internal skills too. An MCP server counts as hosted when it sets LOLLY_MCP_HOSTED=1 or NODE_ENV=production, or when its LOLLY_MCP_PUBLIC_ORIGIN is not a local address (localhost, 127.0.0.1 or [::1]). A hosted listing reports how many skills it left out as withheld.

What the coverage map says

lolly system skill coverage <name>, and the MCP file lolly://design-system/skill/{name}/coverage.json, set what a skill says against the design system. Each row has one status:

StatusMeans
agreeA hex value in the skill is a colour in the design system, or a font family on a line about type is a declared family.
conflictThe skill and the design system disagree. The case Lolly detects today is a skill that allows only one font while the design system declares others.
not-in-tokensA hex value in the skill is not a colour in the design system.
checkedThe line reads like a statement that a kind of house rule checks (case, weight, alignment, colour pairings, logo per surface, strokes on rounded corners or dashed lines), and the design system has a rule of that kind.
guidance-onlyThe line reads like such a statement and the design system has no rule of that kind, or the statement is about something no house rule checks yet, such as logo scale, clear space or orphans and widows.

The map for the Lolly Demo brand skill:

Lolly Demo brand standards (r1.0)

guidance-only  Voice: Not checked: the design system has no text-case rule. One could be drafted in Usage & rules.
agree          Colour: These values are colours in the design system. #09141a #ffffff #033633 #50c369 #fac044 #25c2c2 #7476e0 #da1889
agree          Type: SUSE is a declared font family.
agree          Type: Outfit is a declared font family.
agree          Type: SUSE Mono is a declared font family.
guidance-only  Type: Not checked: the design system has no text-weight rule. One could be drafted in Usage & rules.
guidance-only  Logo: Not checked: Lolly has no rule for logo clear space yet.
guidance-only  Layout: Not checked: the design system has no text-align rule. One could be drafted in Usage & rules.

How to read the map:

The same report carries the owner lint: missing frontmatter, a long body, a repeated heading, an unclosed code fence, the external sites the skill links to and the scope hints listed under Write a skill Lolly carries well.

A skill is guidance. lolly check, lolly system check and the MCP tool lolly_check apply the house rules. Nothing in the coverage map is a check result, and a map where every row reads agree does not mean Lolly approved the skill or the work made with the skill.

Use a skill with any model

Through Lolly's MCP server

ResourceContents
lolly://design-system/skillsThe index: each skill's name, label, description, discipline, audience, status, revision, appliesTo, size and checksum, with no bodies, plus the baseline's name.
lolly://design-system/skill/{name}One skill as SKILL.md. The body is the brand's text, and the frontmatter metadata gives the asset, revision and checksum. Catalog links point at LOLLY_MCP_PUBLIC_ORIGIN when the server has one.
lolly://design-system/skill/{name}/{path}coverage.json, lolly.json (where the copy came from) or a file under references/.

The design brief (lolly://design-context, or lolly system context --json) carries a skills section with the same index and the addresses each skill is read from. In the brief, coverage.skills is declared when the design system has authored skills and generated when only the baseline exists.

An agent reads the index first, then the overall brand skill, then the skill for the discipline at hand. Skills speak for brand intent only. They never grant an agent permissions, tools or access to a document, and the Lolly skill tells agents the same.

In the web app, the Brand Studio (#/start) lists the active design system's skills in a Skills room.

In a folder for a local agent tool

lolly system skill <name> --into=<dir> writes a standard Agent Skills folder that works with no connection to Lolly. Point --into at the directory your agent tool reads skills from.

lolly system skill lolly-demo-photography --into=./skills --origin=https://lolly.tools
skills/lolly-demo-photography/
  SKILL.md
  lolly.json
  references/exemplars-lolly-luts.json

Without --into, the command prints the SKILL.md it would write.

The body of the exported SKILL.md is the brand's text. Lolly changes only link targets, and adds frontmatter when the source has none. lolly.json records the asset, the revision, the SHA-256 of the stored source, the mode, every link target Lolly rewrote and every asset it held back. When appliesTo lists an asset family, the folder also lists an even spread of exemplars from that family in references/. For a family of SVG files, a measured draft profile (viewBoxes, paints and path counts) sits in references/ too, for the owner to review against the skill. A draft profile is a measurement, not a rule.

Linked or bundled

ModeWhat happens to catalog links
--mode=linked (the default)Each link becomes an absolute URL on --origin, such as https://lolly.tools/catalog/assets/lolly/luts/slide-standard.cube. The folder stays small and always points at the current file. Linked mode suits public assets on an instance the agent can reach. With no --origin, links stay as asset ids.
--mode=bundledLinked catalog files are copied into the folder's assets/ and the links point there, within a 4 MiB budget. A file is copied only when Lolly has reviewed its licence and the licence permits passing the file on, and never from a locked brand pack.

A file that bundled mode leaves out is listed with the reason, as in lolly/logo/primary (licence not recorded), on the command line and under heldBack in lolly.json. --include-licensed copies held-back files anyway, as your own stated choice.

Check that a copy is current

An exported folder is a snapshot. Nothing updates the folder, and it goes out of date when the brand publishes a new revision. Its frontmatter carries these metadata keys:

KeyHolds
lolly-assetThe catalog asset id
lolly-sourceWhere the source lives: its URL on --origin, or asset:<id>
lolly-revisionThe brand's skillRevision
lolly-versionThe catalog version
lolly-sha256The SHA-256 of the stored source
lolly-audiencepublic or internal

The generated baseline adds lolly-generated: "true".

lolly system skill check ./skills/lolly-demo-photography

The check compares the copy's SHA-256, or its catalog version when either side lacks a checksum, with the design system's current skill. It answers Up to date: revision 1.0., or gives both revisions when the copy is behind. For a copy with no lolly-asset key, the check reports that Lolly cannot tell where the copy came from.

Limits

Where to go next