What agent skills do to a web page
The same prompts, built by Codex and Claude Code, each with and without a web-design skill (SKILL.md). Every prompt runs as a 2×2: Codex native, Codex + skill, Claude Code native, Claude Code + skill. The native cells are shared by all skills.
46 of 46 cells have run.
Overview
Rows are skills, columns are prompts. Each square shows the Codex result on the left and the Claude Code result on the right (top of the page, desktop width).
landing-saasdashboardblog-portfoliodesign-taste-frontend)with skillSkills
frontend-design
Anthropic's official front-end design skill. It asks the agent to commit to a design direction (palette, type, layout, principles) and to check it against common AI defaults before writing code. Instructions only, no scripts.
anthropics/skills · Apache-2.0 · 6 of 6 cells
ui-ux-pro-max
A community UI/UX knowledge-base skill: local CSV data (styles, palettes, font pairings, UX rules, chart types, stacks) plus a Python search script that produces a design system before the agent writes the page.
nextlevelbuilder/ui-ux-pro-max-skill · MIT · 6 of 6 cells
web-design-engineer
A front-end design skill whose output is always HTML (pages, dashboards, prototypes, slides, data visualization). It starts with a design-direction step and ships 25 style recipes. Instructions only, no scripts.
ConardLi/garden-skills · MIT · 6 of 6 cells
taste-skill (
design-taste-frontend)taste-skill v2: art direction for websites and app screens. A script deals three researched directions from a library of 247 studied sites, the agent builds the page from the chosen one, then checks it in a real browser with a bundled inspector. Instructions plus Node scripts; needs Node 22+, Chrome, and network for found pictures.
Leonxlnx/taste-skill · MIT · 6 of 6 cells
frontend-ui-engineering
Engineering-quality front-end skill by Addy Osmani: accessible, responsive UIs with loading, empty and error states, semantic tokens and a table of "AI aesthetic" defaults to avoid. Instructions only, no scripts.
addyosmani/agent-skills · MIT · 8 of 8 cells
theme-factory
Anthropic's theme toolkit: ten preset colour palettes with font pairings (or a generated custom theme) applied to a finished artifact such as a landing page. Colour and type only, no layout. Instructions plus ten small theme files and a showcase PDF.
anthropics/skills · Apache-2.0 · 6 of 6 cells
Prompts
SaaS landing page
A marketing page for Rotaline, a fictional on-call scheduling tool: hero with a product illustration, features, steps, results, testimonials, pricing with a monthly/annual toggle, FAQ and footer.
landing-saas· version 1 · 14 of 14 cellsData dashboard
A sales and operations dashboard for Kestrel Coffee Roasters: KPI cards, a monthly revenue chart with a channel filter, category shares, a sortable café table, recent orders and a stock warning, all from fixed data.
dashboard· version 1 · 14 of 14 cellsPersonal blog and portfolio
A one-page site for Maya Lindqvist, a fictional product designer: four case studies, a filterable post list, one full article, an about section with a timeline, a newsletter form and a light/dark switch.
blog-portfolio· version 1 · 14 of 14 cellsForm and feedback component states Showcase
A reference page for a fictional online bank’s form and feedback components, with every state visible at once: text fields, choices, buttons, a transfers list (loading, empty, error, filled), messages and a transfer form.
form-states· version 1 · 4 of 4 cells
Method
| Agent | Model | Effort | CLI version | Runs |
|---|---|---|---|---|
| Codex CLI | gpt-6.1-sol | high | 0.164.0 | 23 runs |
| Claude Code | claude-opus-5-5 | high | 2.1.308 | 23 runs |
The model and effort are fixed in the run scripts. The table shows what the run.json files record.
- One sample per cell, no picking
- Each cell is generated once, in one pass, with no follow-up turns. The result is shown as it came out, failed runs included. If a cell is rerun, the earlier attempt is kept in
runs/<prompt>/_attempts/. - Same prompt in all four cells
- The prompts use neutral wording with no style adjectives. Skill cells add one closing sentence that names the skill:
Use the <name> skill.for Claude Code andUse the $<name> skill.for Codex. - Isolation
- Every run starts in a fresh throwaway directory outside the repository, with an empty
HOME, its own config home (CLAUDE_CONFIG_DIRorCODEX_HOME) and an environment built from scratch. No user settings, plugins, user-level skills, MCP servers or memories are loaded. The skill under test is copied only into that throwaway project's skill folder (.claude/skills/or.agents/skills/). Skills bundled with each CLI stay available and count as native. The evidence comes from each agent's own logs and is stored inrun.jsonunderisolation. - The skill has to fire
- For skill cells, the logs must show that the skill was loaded (
skill_triggered). If it was not, the cell is marked Failed instead of being shown as a skill result. - Screenshots
- Full-page captures at 1440 and 390 CSS px wide, taken after the network is idle and fonts have loaded, with animations disabled (playwright 1.64.1, playwright-chromium 156.0.8078.4). Thumbnails show the top of the page. “Open page” loads the original
index.htmlin a sandboxed iframe (sandbox="allow-scripts", no same-origin access). - Accessibility scan
- Each page is also checked with an automated accessibility scanner, and the number of violations by severity is shown. Automated scans catch only part of accessibility problems (they cannot judge, for example, whether alt text or focus order make sense), so treat the counts as a pointer, not a verdict.
- Scroll recordings
- Some cells also have a short recording of the page being scrolled at desktop width, because motion does not show in screenshots. It loads only when you press play on the cell page.
- Run dates
- 2026-10-25 – 2026-10-26 (UTC), 46 cells.
- Votes
- Each result page has a 👍 vote through giscus, a third-party widget that loads only on result pages, not on the rest of the gallery. Voting needs a GitHub sign-in. Votes are stored as reactions in this repository's GitHub Discussions, one discussion per cell, shared by all languages. The counts on the comparison pages are refreshed every few hours. They show what visitors prefer; they are not an evaluation.
Known limitations
- Native means out of the box, not zero skills. Every cell, native ones included, can use the skills that ship with its agent: the 19 skills bundled with Claude Code, and Codex's system skills (
imagegen,openai-docs,skill-creator,skill-installer). In thedashboardprompt, Claude Code's bundleddatavizskill fired on its own twice, once inclaude__nativeand once inclaude__frontend-design;run.jsonrecords this underbuiltin_skills_used. This is on purpose: the comparison is about what a reader actually gets after installing the agent. - Isolation means “nothing loaded”, not “nothing readable”. The agents can still read the rest of the disk: Codex's stock
workspace-writesandbox can read/, and Claude Code withbypassPermissionshas no sandbox. In the v0 runs, agents looked forAGENTS.mdin parent directories and one used Playwright from the operator's npm cache. Stronger isolation (a separate user account or a container) is future work. - Fixed sidebars in screenshots. Full-page captures draw
position: fixedorstickyelements sized100vhat the first screen's height only, so a dashboard sidebar can look as if it stops at 900 px. This comes from the capture, not from the page. - One sample is not a benchmark. Each cell is a single generation. Treat the gallery as examples of what a skill tends to do, not as a score.