Skip to content

Your agent writes the code. Your app still looks designed.

A UI kit for iOS and Android, in Figma and in code, built like a design system. In Figma the agent reads the file through MCP. With Appetite UI Code it reads the agent kit and the tokens, in React Native, SwiftUI, Flutter or Jetpack Compose.

  • Claude
  • Cursor
  • Figma Make
  • ChatGPT
  • Stitch
Asked for the wallet home screen, an agent that has read the Core Skill reads SKILL.md and tokens.json, takes brand/base for the action icons, the link and the tab, and builds the screen from Appetite UI tokens, among them radius/full for the avatar, brand/base for the View all link and bg/weak-50 for the transaction icons.

The problem

Code got cheap. Apps started to look the same.

An agent fills every decision you did not write down with its own default, so screens built from a prompt converge on the same colors, the same cards and the same spacing. More apps now compete for the same downloads, and more of them are built by agents that can read a design file. The numbers in full.

New App Store apps and App Store downloads, the first half of 2026 against the first half of 2025, both set to 1 at the start. Sensor Tower estimate, via 9to5Mac.
new App Store apps in the first half of 2026, about double the year before
560,000new App Store apps in the first half of 2026, about double the year beforeSensor Tower estimate, via 9to5Mac
more new iOS apps in the first quarter of 2026 than a year earlier
80%more new iOS apps in the first quarter of 2026 than a year earlierAppfigures, via TechCrunch
growth in App Store downloads over the same half year
2%growth in App Store downloads over the same half yearSensor Tower estimate, via 9to5Mac
weekly users of the Figma MCP server in Figma Design, first quarter of 2026 over the one before
5xweekly users of the Figma MCP server in Figma Design, first quarter of 2026 over the one beforeFigma, first quarter 2026 results

Side by side

One prompt, sent twice.

The same agent got the prompt “Build the wallet home screen in dark mode” twice: once on its own, once with the Core Skill and the Appetite UI tokens. Switch both to a larger text size and see which one holds.

Build the wallet home screen in dark mode.

Without a systemEvery value is a guess.
A wallet home screen in dark mode built from the prompt alone: a greeting for Klara, a total balance, four square quick actions with a pale blue Send, a navy card with a VISA mark, weekly spending and a tab barThe same screen at a larger text size with four breaks ringed in red: the avatar initials reduced to an ellipsis, the eye button touching the Total balance label, and the words Request and Activity split across two lines
21 typed RGB colorsDark onlyBreaks at larger textA palette that exists only in dark. At a larger text size the initials collapse, the eye button runs into its label and words break mid syllable.
With Appetite UIEvery value is a token.
The same prompt built with Appetite UI in dark mode: a brand blue header with an avatar, a search field and a card button, Total balance $28,401.75 with a plus $1,240.50 this month badge, Send, Receive, Pay and Top up, Recent transactions with four rows, and a floating tab barThe same Appetite UI screen at a larger text size: the balance, the badge and the quick actions grow, the actions wrap into two rows of two, and the tab bar stays clear of the content
0 typed colorsLight and dark from the same tokensScales with Dynamic Typebrand/base for the header, brand/lighter for the quick actions, bg/weak-50 under the rows. At the same larger size the text styles scale with Dynamic Type, the actions wrap and nothing overlaps.

Claude as the coding agent, SwiftUI, the iOS 27 simulator on an iPhone 18 Pro. Without: October 7, 2026, a project that held only the app shell. With: October 14, 2026, a project that held the Core Skill, AGENTS.md, design.md, tokens.md and AppetiteTokens.swift, and the kit's Finance Dashboard screen as a reference picture. Neither run used Figma. Larger text is the Accessibility Extra Large setting (AX3).

The thesis

Agents do not need a bigger library. They need one that explains itself.

That is what a system is: the context layer where your decisions are written down. A bigger library gives an agent more to guess between. Named tokens give it less.

A bigger libraryEleven blues to guess between.

Which blue is the button?

  1. 50
  2. 100
  3. 200
  4. 300
  5. 400
  6. 500
  7. 600
  8. 700
  9. 800
  10. 900
  11. 950

Nothing says which step a button takes, so the agent fills the gap with its own default.

One that explains itselfOne name for the button, in both modes.

brand/base

  1. 50
  2. 100
  3. 200
  4. 300
  5. Dark400
  6. Light500
  7. 600
  8. 700
  9. 800
  10. 900
  11. 950

Primary buttons, active states, links. Maps to iOS tint and M3 primary.

What the agent reads

Written to be read by something that cannot ask a follow-up question.

Four things an agent reads before it draws a screen. The specs and the token names are public, so you can check them now.

brand/base

Color variable

Primary buttons, active states, links. Maps to iOS tint and M3 primary.

Light
colors/blue/500#155DFC
Dark
colors/blue/400#2B7FFF
Web
var(--ap-brand-base)
iOS
Color.apBrandBase
Android
AppetiteTheme.colors.brandBase

Variables

Every variable knows its code name.

codeSyntax for web, iOS and Android, written into the variable itself, which is what Figma MCP hands the agent.

How do I install the library?

Open the Figma file, duplicate it into your team, then publish it as a library from the Assets panel.

Description in the Figma file
Collapsible content row. FAQ lists and grouped settings. Do not nest. iOS: DisclosureGroup. Android: expandable ListItem.

Descriptions

Components describe themselves.

Every component carries a written description an agent can parse: what it is for and what it maps to on iOS and Android.

accordion.md/docs/accordion.md

Accordion

Accordion hides an answer or a detail under a one-line title until someone taps the row, so a long screen stays short.

Which states does Accordion have?

Three states on one shape: Default is bg/white-0 with a 1 border/soft-100 edge and a shadow, and Pressed drops both and fills bg/weak-50.

Specs

Every docs page has a Markdown twin.

The definition, the states and the tokens of each component, at the page address plus .md, such as /docs/accordion.md.

tokens.jsonW3C DTCG, Figma names

"bg": { "weak-50": {  "$value": "#F4F5F5",  "$extensions": {   "com.appetiteui": {    "modes": { "light": "#F4F5F5", "dark": "#242427" },    "codeSyntax": {     "web": "var(--ap-bg-weak-50)",     "ios": "Color.apBgWeak50",     "android": "AppetiteTheme.colors.bgWeak50"    }   }  } }}

Tokens

One name from Figma to code.

/tokens.json files each token under its Figma path, with its light and dark values and its web, iOS and Android names.

Tools

Which agents can use the Core Skill?

Any agent that reads files. Where the rules go depends on the tool; the rules are the same.

  • The rules

    SKILL.md

    skills/appetite-core

    • Tokens
    • Color
    • Spacing
    • Radius
    • Type
  • Claude Code

    Where the rules go
    The Core Skill in .claude/skills, the rules in CLAUDE.md
    What it reads before a screen
    tokens.md and design.md in the project
  • Cursor

    Where the rules go
    .cursor/rules/appetite-ui.mdc, or Rules for AI in Cursor Settings
    What it reads before a screen
    tokens.md and design.md in the project
  • Windsurf and Codex

    Where the rules go
    AGENTS.md at the root of the repository
    What it reads before a screen
    tokens.md and design.md in the project
  • Figma Make and ChatGPT

    Where the rules go
    SKILL.md attached to the chat
    What it reads before a screen
    What you attach: SKILL.md and tokens.md
  • Any agent on Figma MCP

    Where the rules go
    The Figma file, connected through Figma MCP
    What it reads before a screen
    The components, the variables with their code names and the specs, from the Figma file

Install

One file briefs the agent.

AI can draw a button. It cannot invent your decisions: which spacing step you use, what your error state is called, how your brand maps onto Material roles. The Core Skill writes those decisions down where an agent can read them.

Open the Core Skill in the file you buy.

One instruction file, SKILL.md, with AGENTS.md and the Cursor rules beside it. It names the layers, the naming logic and the rules of the system.
The Core Skill file, SKILL.md, open. Tokens: Read the tokens before you produce anything. Color: Semantic tokens only, such as brand/base. Never a hex. Spacing: The 4 pt scale. spacing/1 is 4, spacing/6 is 24. Radius: Buttons full, cards 2xl.

Add it to your agent.

Claude Code reads it from .claude/skills, Cursor from .cursor/rules, any coding agent from AGENTS.md at the root of the repository. In Figma Make or ChatGPT, attach it to the chat. No plugin, no setup call.
A prompt composer with SKILL.md attached and the message: Use SKILL.md for every screen in this project. Above it, the tools it works in: Claude Code, Cursor, Figma Make, ChatGPT.

Ask for screens.

The agent picks brand/base instead of guessing a hex, because the file tells it which token that is.
The request, Build the wallet home screen from the kit. The answer names the token for each part: brand/lighter for the quick actions, brand/base for the action icons and the active tab, bg/weak-50 for the row icons and radius/full for the avatar.

The screen the agent builds reads your tokens, not its guess.

The same W3C DTCG source generates SwiftUI, Compose, Flutter and CSS, so the build reads the values you set.
The wallet home screen the agent built from the kit: balance, quick actions, recent transactions and the tab bar.

Your next rebrand is one edit.