tokens agents
Colophon View source

The argument and the artifact are the same claim, made twice.

This is a site about machine-readable, structured, token-driven design, so the site itself is a precise, token-driven artifact. Every visual value comes from a DTCG token through var(--token-name), with no raw hex and no pixel literals. Open the source and you find the thing it argues for.

The signature, under the hood

One value, from JSON to browser.

Trace
01Source · tokens/*.tokens.json
// tokens/*.tokens.json, merged (DTCG 2025.10)
{
"gray": { "950": { "$value": "#0B0B0D" } },
"color": { "foreground": { "$value": "{gray.950}" } },
"button": { "background": { "$value": "{color.foreground}" } }
}
style‑dictionary
build
02Compiled · tokens.css
/* compiled, never hand-edited */
:root {
--gray-950: #0B0B0D;
--color-foreground: var(--gray-950);
--button-background: var(--color-foreground);
}
browser
paints
03Rendered · browser
/* resolves the var chain */
.button {
background: var(--button-background);
}
computed background rgb(11, 11, 13) the same value as station 01

The chip at station 01 and the fill at station 03 are the same value, #0B0B0D. Style Dictionary compiled the JSON, the browser resolved the var chain, and nothing in between retyped it. The name changes at every station. The value never does.

One token remapped. Everything downstream followed. No value was touched twice.

Aa weight marks the traced token #0B0B0D inversion marks its one value no color, on the page or in the highlight

The dark theme is not a token file. The DTCG spec does not yet standardize theming, so the remap lives in the Style Dictionary config, the same build source of truth that compiles the tokens. At build time a generator walks the semantic layer and emits themes.css, and it fails the build if any color token lacks a dark alias. Nine tokens remapped, coverage enforced, never hand-edited.

How this was built

The repo is the diagram

This site was written as documents before it was built as pages. The argument came first, then the spec, then the context files agents execute against, then the build. The four layers the site teaches are the same four layers the repository instantiates. Read the tree and you are reading the thesis.

The layers are out of file order on disk and in exact order in the argument. Both readings are true at once. That is what machine-readable means.

The drift, caught

Drift is not hypothetical on this site. It happened here. Three files disagreed on the canonical sans: the tokens said N27, a working doc said Archivo, a handoff snapshot said Space Grotesk. An agent surfaced the conflict mid-build and stopped. The fix was not a font choice, it was governance: one canonical DESIGN.md, every earlier draft marked superseded. The failure, the catch, and the fix are all in the vault below.

The files

The canon, file by file.

Every public file that built this site, each with one line on what to look at. A repo is a pile of files until someone tells you where to start.

The argument
  1. Readme README.md The front door. The method in ten lines, and what is deliberately excluded and why. Download
    README.md Excerpt

    Curated excerpt. The full file is one click away.

    ## The framework decision
    
    Build on Astro.
    
    Astro is the right tool because the site is content-first, and Astro ships zero JavaScript by default, produces the cleanest static HTML, and gives you type-safe content collections for the pillars and an islands model for the one piece of interactivity. For the requirement that the source read as pristine, that matters concretely: an Astro page ships the HTML and the CSS you write and nothing else, with no framework runtime to clutter view-source.
  2. Start here START-HERE.md Orientation. Where a new human or a new agent begins in this repository. Download
    START-HERE.md Excerpt

    Curated excerpt. The full file is one click away.

    So the rule is simple: do not redesign, port. The design files are the source of truth for markup, tokens, type, motion, and behavior. Recreate them as Astro components on the real token pipeline.
    
    ## The lock
    
    Locked and approved. Reproduce faithfully. Do not restyle, re-lay-out, or refactor the look:
    - the homepage, including the kinetic stack signature
    - the four pillar pages (one template, four layers)
    - the token reference page
    - the audio player
    - the design language end to end: the monochrome system, the two type voices, inversion-only emphasis, the sharp 2px radius
  3. Thesis docs/thesis.md The canonical argument, fact-checked. Everything on this site is downstream of this file. Download
    docs/thesis.md Excerpt

    Curated excerpt. The full file is one click away.

    The short version: a design system used to be documentation a human read and interpreted. Now it is infrastructure an agent reads and executes against. When you formalize design decisions into structured, version-controlled data, design stops being a pile of static assets and becomes a source of executable intent. The truth of the system moves out of a fragile codebase and into an architecture built for machines to act on. Four layers make that real: design tokens, machine-readable logic, spec-driven development, and runtime context standards. Each layer hands the next the context it needs, and the whole chain is what turns AI from a guessing intern into a partner you can rely on.
  4. Strategy docs/strategy.md Why four doors into every layer. The learning model, stated once, built to everywhere. Download
    docs/strategy.md Excerpt

    Curated excerpt. The full file is one click away.

    Different people learn differently, so forcing everyone through one format is how a learning site fails. The strategy is to take one curated body of knowledge and offer it through several on-ramps, then let each person choose the depth and the format that fits them. The skimmer, the listener, the deep reader, and the question-asker each get their own door into the same curated knowledge.
    
    This is what makes the site a complete, self-directed learning environment rather than a links page with extras bolted on.
  5. Direction docs/art-direction.md The concept, the signature storyboard, and the master prompt. The prompt that built the look you are reading. Download
    docs/art-direction.md Excerpt

    Curated excerpt. The full file is one click away.

    ### Monochrome on purpose
    
    True monochrome, a single grayscale ramp from a warm paper to a cool, blue-black ink, with no chromatic accent anywhere. This is not a style preference, it is an argument. Tokens begin life as a grayscale ramp before any color decision is made, and stripping color out forces structure, type, and motion to carry the design. A site that leaned on a brand accent could hide weak structure behind it. This one cannot, which is the point: the discipline is visible.
    
    Emphasis is inversion, never a second color. A block that needs weight flips from ink-on-paper to paper-on-ink. The only chroma in the whole system is the faint temperature difference, paper kept slightly warm and ink kept slightly cool, and that is deliberate. If a reviewer cannot name a single accent color, the system is working.
The values
  1. Tokens tokens/ The DTCG source, one file per tier. Every value on every page traces back to a decision here. Three tiers only, primitive, semantic, component, and a component never points at a raw primitive. Download
    tokens/ Excerpt

    Curated excerpt. The full file is one click away.

    // tokens/primitive.tokens.json
      "gray": {
        "050": { "$value": "#F6F5F2", "$type": "color", "$description": "Paper, kept slightly warm on purpose." },
        ...
        "950": { "$value": "#0B0B0D", "$type": "color", "$description": "Ink, kept slightly cool on purpose." }
      },
    
    // tokens/semantic.tokens.json
      "color": {
        "surface": { "$value": "{gray.050}", "$type": "color", "$description": "Default page surface, warm paper." },
        "foreground": { "$value": "{gray.950}", "$type": "color", "$description": "Default text and marks." },
        ...
      }
    
    // tokens/component.tokens.json
      "button": {
        "background": { "$value": "{color.foreground}", "$type": "color", "$description": "Solid control fill. References a semantic token, never a primitive." },
        ...
      }
The meaning
  1. Glossary the glossary data 54 terms with provenance, cross-linked, shipped as a DefinedTermSet machines can read. The meaning layer, practiced on the site's own vocabulary. View
The intent
  1. Spec PRODUCTION-BUILD-SPEC.md The spec this site was built from. Layer 03, practiced on itself. Protect the intent, regenerate the code. Download
    PRODUCTION-BUILD-SPEC.md Excerpt

    Curated excerpt. The full file is one click away.

    ## Non-negotiables
    
    These carry from AGENTS.md and do not loosen.
    - True monochrome. Warm paper to cool blue-black ink, no accent color anywhere. Emphasis is inversion.
    - Two type voices. The characterful sans for the human argument, the designed monospace for the machine voice (layer numbers, token names, code, labels).
    - Every visual value is a token, consumed as var(--token-name). Nothing hardcoded.
    - Never use em dashes or en dashes, in the code or any copy. Use commas, colons, parentheses, or periods.
The context
  1. Agents AGENTS.md The intent the agents execute against. Architectural decisions and drift alarms in Markdown, the format models read with the highest fidelity. Download
    AGENTS.md Excerpt

    Curated excerpt. The full file is one click away.

    ## Drift alarms, self-correct when you catch these
    
    - A centered hero. Use left-aligned and asymmetric, with the kinetic stack as the hero.
    - Inter, Roboto, or system-ui. Use the characterful sans plus the designed mono.
    - A gradient, or any single bright accent color. Stay fully monochrome; inversion is the only emphasis.
    - Rounded cards in a three-column grid with soft drop shadows. Use the exposed grid and real structure.
    - Fade-in-on-scroll on every element. One orchestrated signature, everything else static.
    - Buzzword copy, meaning unlock, seamless, empower, elevate. Use the thesis voice, plain and specific.
  2. Claude CLAUDE.md The working agent's context, the AGENTS.md companion that carried the build day to day. Download
    CLAUDE.md Excerpt

    Curated excerpt. The full file is one click away.

    Three rules that always apply, restated here so they are never missed:
    
    1. Never use em dashes or en dashes, anywhere, in the UI or in copy. Use commas, colons, parentheses, or periods.
    2. Every visual value comes from a design token. Never hardcode what a token should own.
    3. Pristine naming and structure are a feature. Write the repository so it reads as deliberate to anyone who opens it.
  3. Design DESIGN.md The canonical design file. One answer for type, color, and concept. This file is the fix from the drift story above. Download
    DESIGN.md Excerpt

    Curated excerpt. The full file is one click away.

    ## Two voices, one answer each
    
    The human voice is N27, licensed from atipo. It carries the argument: prose, headlines, annotations, labels, and UI chrome. Weights carry the hierarchy: Bold (700, with 600 declared into the same cut) for page titles and primary headings, Medium (500) for subheads, nav, labels, and chrome, Regular (400) for body copy at 17px with 1.7 leading, and Light (300) reserved for display sizes above 40px, never for body. The wordmark ("tokens", an arrow, "agents", all lowercase) is set in this voice at medium (500), in the header and the footer alike.
    
    The machine voice is Basier Square Mono, licensed from atipo, shipped in Regular (400) only. It carries everything that is, or represents, structured data: code, token names and values, file paths, and structured-data excerpts, set at 0.9em against the surrounding sans. The two faces share the same cap height and x-height, so no size-adjust is needed; the 0.9em compensates for the mono's wide set. font-synthesis is off on every mono surface, so a weight the family does not ship is never faked. It is consumed only through the font.family.mono token, never as a hardcoded family, so a future swap propagates in one edit.
    
    There are no candidates and no alternatives in this file on purpose. Earlier drafts listed options, three files disagreed, and an agent caught the conflict mid-build. This file is the fix. One canonical answer per decision, every earlier draft superseded.
The output
  1. Repo the repository The public mirror, fresh history, curated canon. The typefaces, N27 and Basier Square Mono, both from atipo, are licensed for this website only and are not redistributable, so they are excluded and the repo builds on the fallback stacks. Open the repo
Run it

It compiles in one step

Clone the repo, install, build. The tokens compile through Style Dictionary into the custom properties this site runs on. There is no hidden step. What renders here is what builds from these files.

sh
git clone https://github.com/digitalcotton/tokens-to-agents-public.git npm install npm run build
The discipline

Open the source and the rules are visible. That is the whole point.

Monochrome No accent, anywhere A warm paper to cool ink ramp, and no chromatic accent at all. If a reviewer cannot name a single accent color, the system is working.
Emphasis By inversion only A block that needs weight flips from ink on paper to paper on ink. The live button is the one inversion, and it is the proof.
Tokens Every value, named Color, size, spacing, tracking, leading, radius: each is a DTCG token read through var(--token-name). Nothing on this page is hardcoded.
Two voices Human and machine A characterful sans for the argument, a designed monospace for the machine voice: numbers, token names, code, labels. Never blurred, because the separation is the meaning.
One signature All motion in one place The whole boldness budget is spent on the kinetic stack signature on the map. Every other screen is static, or the smallest calm transition.
Pristine source Clean by default Zero client JavaScript by default. The proof has to survive view-source, so the markup stays deliberate and readable. No em dashes, no en dashes.

The stack.

The colophon, in the machine voice
Framework Astro. Zero client JavaScript by default.
Tokens DTCG JSON, compiled by Style Dictionary to one CSS custom-properties file. Regenerated, never hand-edited.
Islands The signature, the audio player, the 404 field, the source editor, and a cookieless analytics beacon. Nothing else ships JavaScript.
Content MDX content collections. One entry per pillar, drawn from the thesis.
Type N27 and Basier Square Mono. Both consumed as font.family tokens, sans for prose, mono for machine content.
Output Static HTML. Pristine view-source, the same claim the page makes, made once more.
The conversation

Running this inside an organization, or thinking about it? I compare notes with teams doing this work. The files above are the method. The rest travels by conversation.

Get in touch
The catalog

The rest of the system, rendered live.

This page traced one value from JSON to browser. The token reference renders the whole system from the same values, read at runtime: the palette ramp, the type scale, the spacing, and the three-tier map.

Open the token reference
The map

Every screen runs on these tokens. Start at the top and follow the chain, layer by layer.

Return to the map