Interface guidelines an AI agent can actually follow

People are packaging Apple's Human Interface Guidelines as agent skills, and it works better than nothing and worse than expected. The gap is specific and worth understanding before you write your own.

Updated July 27, 2026

What people are actually doing

The pattern showing up in agent-skill catalogues is to take Apple's Human Interface Guidelines — or Material, or a platform's accessibility guidance — and repackage it as something an agent loads before building UI. One published set breaks the HIG into fourteen skills covering platforms, foundations and components: layout, controls, dialogs, menus, search. Others ship it as a single design skill that promises native components, proper typography and semantic colours.

This is a good instinct. A coding agent asked for an iOS settings screen with no guidance will produce something that works and feels subtly wrong: a modal where a push was conventional, a control that exists on the web and not on the platform, touch targets sized for a mouse. Loading the platform's rules fixes a real class of error, and it fixes it cheaply.

It also does something people do not expect, which is worth being precise about.

What survives translation, and what doesn't

ExampleWhat the agent does with it
Prescriptive rulesMinimum touch target, which control for which job, when a sheet beats a push, contrast minimumsApplies them reliably. These are checkable, so a wrong answer is visibly wrong
Principles"Clarity", "deference", "depth"Agrees with them, then does what it was already going to do
How the two halves of a platform guideline behave once an agent is reading them.

That second row is the whole problem, and it is not specific to Apple. An unfalsifiable instruction cannot change behaviour, because the model can satisfy it with whatever it already believes the word means. Ask for clarity and you get the model's median idea of clarity, which is also every other model's, which is why so much agent-built UI converges on the same near-black surfaces, the same one-accent-and-grey palette, the same evenly rounded cards.

An agent can follow a rule. It can only agree with a principle.

We measured the same failure in the wild. Across 299 public DESIGN.md files — the documents developers write specifically so an agent will follow them — 54% contain at least one unmeasurable adjective, most often "clean" (39%) or "modern" (36%), and 44% never state a single concrete size value. Those files read like design direction and function as agreement.

The thing a platform guideline is not trying to give you

Here is the part that surprises people who install a HIG skill expecting their app to start looking good: platform guidelines are deliberately shared. Every app on the platform follows them. That is the entire point — a user should be able to open an app they have never seen and know how it works. Conformance is the goal, and identity is explicitly not.

So a HIG skill can make your interface *correct* — right components, right navigation, right target sizes, right contrast — and correct is not the same as distinctive. If two teams load the same guideline and no other design context, they should produce interchangeable interfaces. They usually do.

This is a feature until it isn't

For a utility, a plugin, or anything embedded in someone else's environment, blending in is the right answer and the guideline is the whole brief. The mismatch only appears when the thing being built is a product that has to be recognisable — and that is usually discovered somewhere around the fifth screen.

The two-layer setup

Once you see it as two separate jobs, the fix is obvious and the layers stop fighting each other.

Platform layerIdentity layer
AnswersHow should this behave here?What should this look like, everywhere?
SourceThe platform's guidelines, as a skill or rules fileYour token set and written rules, in the repo
Changes whenThe platform changesYour brand changes
Failure if missingCorrect-looking UI that feels foreign on the platformPlatform-perfect UI indistinguishable from every other app
Two layers, two sources, two failure modes.

Keep them in separate files. It is tempting to fold your brand into the HIG skill so there is one thing to load, and it goes wrong on the first platform update or the first rebrand, because you now have to unpick which sentences belonged to whom.

Token specimen · real values

Ambient Sage

Live render

Ambient Sage's actual tokens — the same values its exports use.

Color tokensSemantic roles with HEX / HSL / CMYK

Color tokens

Ambient Sage

light · HEX · HSL · CMYK

Core

#F3F4EF

background

H 72 · C0, 0, 2, 4

#1A1C17

foreground

H 84 · C7, 0, 18, 89

#E5E6E0

card

H 70 · C0, 0, 3, 10

#ECEEE8

muted

H 80 · C1, 0, 3, 7

#D8D9D2

border

H 69 · C0, 0, 3, 15

Brand

#FEE951

primary

H 53 · C0, 8, 68, 0

#1A1C17

primary-fg

H 84 · C7, 0, 18, 89

#E5E6E0

secondary

H 70 · C0, 0, 3, 10

#F7E464

accent

H 52 · C0, 8, 60, 3

#FEE951

ring

H 53 · C0, 8, 68, 0

Semantic

#C0392B

destructive

H 6 · C0, 70, 78, 25

#FFFFFF

destructive-fg

H 0 · C0, 0, 0, 0

#2D7238

success

H 130 · C61, 0, 51, 55

#C97D12

warning

H 35 · C0, 38, 91, 21

#545651

muted-fg

H 84 · C2, 0, 6, 66

Charts

#FEE951

chart-1

H 53 · C0, 8, 68, 0

#4A8FD4

chart-2

H 210 · C65, 33, 0, 17

#6BBF8A

chart-3

H 142 · C44, 0, 28, 25

#E07498

chart-4

H 340 · C0, 48, 32, 12

#E8A24B

chart-5

H 33 · C0, 30, 68, 9

Type scaleHeading, body, and mono in the kit's fonts

Typography

Ambient Sage

Scale: compact-product

Density: balanced

Heading · Plus Jakarta Sans · 1.875rem

Sample headline

Subheading · Plus Jakarta Sans · 1.375rem

A warm-sage neutral-surface mobile kit with a single vivid yellow accent, flat tonal cards, and oversized display numerals.

Body · Plus Jakarta Sans · 1rem

Ambient Sage uses a near-white warm-sage canvas (#f3f4ef) with card panels distinguished only by a tonal shift to #e5e6e0, never by shadows or borders. A single vivid yellow (#fee951) is the only saturated color and appears sparingly at component scale as orbs, button fills, and focus rings. Primary data values render as oversized bold hero numerals with a small superscript unit. Typography is a friendly rounded geometric (Plus Jakarta Sans) with no uppercase and no tight tracking, while JetBrains Mono is reserved for hex codes and technical strings. Generous rounding and luminance-only contrast give the whole system a calm, minimal feel.

Mono · JetBrains Mono · 0.8125rem

npx shadcn add ambientsage.json

Aa

Plus Jakarta Sans · Heading

400500600700

Aa

Plus Jakarta Sans · Body

400500600700

ABCDEFGHIJKLM NOPQRSTUVWXYZ

abcdefghijklmnopqrstuvwxyz

0123456789 & @ # % →

Radius & spacingCorner radius, elevation, and spacing steps

Tokens

Ambient Sage primitives

density: balanced

Radius scale

sm · 0.375rem
md · 0.75rem
lg · 1.25rem
xl · 1.75rem

Component radius

button
card
input

Elevation

level 1
level 2
level 3
level 4

Spacing · base 4px

1x
2x
3x
4x
6x
8x
The identity layer, as values rather than adjectives. Nothing here contradicts a platform guideline; it answers a question guidelines deliberately leave open.

Writing a rule an agent can check

The test is simple: could someone look at the output and say, without argument, whether the rule was followed? If two reasonable people could disagree, the agent will too, and it will resolve the disagreement in favour of its defaults.

Agreed withFollowed
ColourUse a clean, modern paletteUse only the semantic tokens. Never a raw hex in a component. One accent per screen
TypeTypography should feel refinedTwo families: display and body. Scale steps at 1.25×. Never a third weight in body copy
SurfacesKeep surfaces light and airyCards are flat. No shadow on a flat surface. Border 1px, border token
Dark modeSupport dark modeEvery colour role defined in both modes. Never ship a light change without its dark counterpart
The same intent, twice.

Note how many of the right-hand entries are prohibitions. That is not a stylistic choice: a preference adds one option, while a prohibition removes all the others. "Use our green" leaves every generic default still legal; "never introduce a colour that is not a token" does not. In our corpus 76% of files listed only preferences, which is a precise description of why they stop working.

When the guideline and your brand disagree

This happens less often than people fear, because the two layers mostly address different questions. When it does happen, it is usually one of three cases, and only one of them is a real conflict.

  1. Accessibility minimums versus a brand colour. Not a conflict. The minimum wins, and your accent needs adjusting for that surface. An agent told this explicitly will do it; an agent left to choose will usually keep the brand colour, because that is the instruction that sounded more specific.
  2. Platform convention versus a house pattern. A real trade-off. Decide once, write down which wins and why, and put it in the identity layer so it is not re-litigated per screen.
  3. Platform default styling versus your tokens. Not a conflict, though it looks like one. Guidelines specify which control to use; they rarely specify its exact colour. Use the platform's component, painted with your tokens.

Say which layer wins, in the file

An agent holding two documents with no stated precedence will pick per turn, and it will not tell you which it picked. One line — "where these conflict, accessibility minimums win, then platform conventions, then house style" — removes a whole category of inconsistency that is otherwise almost impossible to diagnose from the output.

Practical setup

  1. 1

    Load the platform layer as a skill or rules file

    Whatever your agent supports — a skill, .cursor/rules, .devin/rules, a section in CLAUDE.md. Keep it as close to the source guideline as you can, so it can be replaced wholesale when the platform updates.

  2. 2

    Put the identity layer in the repo

    A token file plus a DESIGN.md with your rules and prohibitions. It has to be in the repository rather than a prompt, because the agent needs to re-read it on every task and so does the next person.

  3. 3

    State the precedence once

    One sentence at the top of the identity file naming what wins in a conflict.

  4. 4

    Test on the screen nobody designed

    Ask for something plausible that neither layer anticipated — an empty state, a permissions error, a pagination control. Whatever the agent invents is what every uncovered case will look like, and that is your real coverage measurement.

The last step is the one worth repeating. Both layers cover the cases someone thought about. In an agent-built product most screens are cases nobody thought about, which is why the identity layer has to state general rules and refusals rather than enumerate components. More on what belongs in that file: what a DESIGN.md is.

The identity layer, as one installable file

Every Identity Forge kit serialises to a full DESIGN.md — semantic tokens in light and dark, a real font pairing, motifs and explicit prohibitions — alongside the token file. It sits next to whatever platform guidance you load, and never argues with it.

FAQ

Can an AI agent follow Apple's Human Interface Guidelines?

The prescriptive parts, yes — control choice, navigation patterns, minimum touch targets, contrast minimums. These are checkable, so the agent applies them reliably. The principled parts — clarity, deference, depth — cannot change behaviour, because an agent satisfies an unfalsifiable instruction with whatever it already believes the word means.

Will a HIG skill make my app look good?

It will make it correct, which is different. Platform guidelines are deliberately shared by every app on the platform so users can transfer knowledge between them. Two teams loading the same guideline and nothing else should produce interchangeable interfaces. Distinctiveness comes from a second layer: your own tokens and rules.

Should platform guidelines and my design system live in one file?

No. They change on different schedules — one when the platform updates, one when your brand does — and merging them means unpicking which sentences belong to whom later. Keep two files and state which wins in a conflict.

What do I do when a brand colour fails an accessibility minimum?

The minimum wins and the accent needs adjusting for that surface. State this explicitly in your rules: an agent left to choose usually keeps the brand colour, because that instruction sounded more specific than a general accessibility note.

How do I know if a rule is written well enough for an agent?

Ask whether a reviewer could look at the output and say, without argument, that the rule was followed. "Use a clean palette" fails that test. "Use only the semantic tokens, never a raw hex, one accent per screen" passes it.