Agent skill

Frontend

by atopile in atopile/atopile

Frontend standards for atopile extension webviews: architecture, contracts, design system, and testing workflow.

MITAuto-check passedFrontend & Design

Install Frontend

skills CLI
$ npx skills add atopile/atopile --skill frontend -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install atopile/atopile frontend --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/atopile/atopile.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/frontend .claude/skills/frontend && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
frontend
GitHub stars
4k
Token cost
~3.3k tokens
SKILL.md length
1,196 words
Files
1
Skills in repo
19
Repo updated
First seen
Licence
MIT

At a glance

Frontend standards for atopile extension webviews: architecture, contracts, design system, and testing workflow.

  • Works in 4 steps: Define/modify backend Pydantic model. → Regenerate frontend TS schema/types. → Update frontend… → …
  • Tasks that involve Design systems
  • SKILL.md covers Quick Start, Relevant Files, Dependants (Call Sites) and How to Work With / Develop /…, plus 4 more sections
  • Calls bun, curl and tsc

What it does

Frontend is an agent skill from atopile/atopile. Frontend standards for atopile extension webviews: architecture, contracts, design system, and testing workflow.

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design, covering Design systems. It works with Visual Studio Code and Vite. The repository describes itself as: Design circuit boards with code! ✨ Get software-like design reuse 🚀, validation, version control and collaboration in hardware; starting with electronics ⚡️. The licence is MIT.

When your agent uses it

  • Tasks that involve Design systems

Example prompts

  • “/frontend”

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. Define/modify backend Pydantic model.
  2. Regenerate frontend TS schema/types.
  3. Update frontend transport/store/components using generated types.
  4. Add/update tests for changed contract behavior.

What it can do on your machine

Read from SKILL.md and the folder at commit 619eda7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bun
    • curl
    • tsc

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Frontend loads about 3.3k tokens when it runs. Until then it costs about 30 tokens; SKILL.md has 1,196 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~30
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from atopile/atopile at commit 619eda7, republished under its MIT licence (© atopile). 1,196 words, ~3,266 tokens.

Download SKILL.mdSave it as .claude/skills/frontend/SKILL.md (or your agent's skills folder).
name
frontend
description
Frontend standards for atopile extension webviews: architecture, contracts, design system, and testing workflow.

Frontend Skill

Use this skill when building or modifying frontend features in atopile. Default target is extension webviews (ui-server + vscode-atopile).

Quick Start

Dependency install:

bash
cd src/ui-server
bun install

Frontend-only loop (no backend integration):

bash
cd src/ui-server
bun run dev
bun run test
bun run build

Webview integration loop (backend + Vite):

bash
cd src/ui-server
./dev.sh

Extension package/install loop:

bash
ato dev compile && ato dev install cursor
# or
ato dev compile && ato dev install vscode

Command reference:

  • bun install: install/sync JS dependencies.
  • bun run dev: start local Vite dev server (frontend-only iteration).
  • bun run test: run local Vitest suite once.
  • bun run build: run local tsc && vite build.
  • ./dev.sh: run backend + Vite for integration testing in browser.
  • ato dev compile: build extension artifacts (default target all).
  • ato dev install cursor|vscode: install latest built extension .vsix.
  • ato dev ui: open a webpage for the user showing the shared component library components.

Relevant Files

Main Extension Webview App
  • Root: src/ui-server/src/
  • Transport: src/ui-server/src/api/
  • Global state: src/ui-server/src/store/
  • Feature hooks: src/ui-server/src/hooks/
  • Feature components: src/ui-server/src/components/
  • Shared components: src/ui-server/src/components/shared/
  • Utilities: src/ui-server/src/utils/
  • Styles/tokens: src/ui-server/src/styles/
  • Contracts: src/ui-server/src/types/
  • Tests: src/ui-server/src/__tests__/
Extension Host Bridge
  • Root: src/vscode-atopile/src/
  • Use for IDE commands/webview wiring/host integration.
  • Keep core React UI logic out of this layer.
Specialized Standalone App Example
  • Root: src/atopile/visualizer/web/src/
  • Use as reference for compute/canvas/worker patterns.
Layout Editor (Specialized)
  • Root: src/atopile/layout_server/frontend/src/
  • Specialized layout editor frontend; not default architecture for webviews.

Dependants (Call Sites)

  • Extension webviews are built from src/ui-server and loaded by src/vscode-atopile.
  • ato dev compile and ato dev install are the common extension developer loop.
  • src/atopile/visualizer/web is a separate app and reference pattern, not default target.

How to Work With / Develop / Test

Typical Change Paths

Use these patterns to keep changes scoped and predictable.

  1. UI-only change (no contract changes)
  • touch components/, styles/, small hooks/ usage
  • avoid transport/store churn unless required
  • validate through browser-first flow + focused component tests
  1. UI + state change
  • add/adjust store fields/actions/selectors
  • keep transport untouched if payload shape is unchanged
  • add store transition tests and UI interaction tests
  1. UI + contract/transport change
  • update Pydantic contracts first
  • regenerate TS types
  • update api/ mapping + store state transitions + UI
  • add transport and state tests, then browser flow validation
Architecture Standard

Default architecture:

  • Backend: FastAPI (domain, APIs, events)
  • Frontend: React + Vite
  • Realtime: WebSocket-first transport

Layer boundaries:

  • api/: HTTP + WS transport and payload mapping
  • store/: typed app state, actions, selectors
  • components/: rendering/composition
  • utils/lib: pure transforms/logic
Contract Standard (Required)

Schema-first contract workflow:

  1. Define/modify backend Pydantic model.
  2. Regenerate frontend TS schema/types.
  3. Update frontend transport/store/components using generated types.
  4. Add/update tests for changed contract behavior.

Do not:

  • maintain duplicate handwritten interfaces if generated types exist
  • use stringly-typed protocol payloads when typed contracts exist
One-Flow Rule (Required)

Implement one canonical user flow per feature.

Do not introduce fallback flow branches. If dependency/state is unavailable, surface a clear stop-state error in the same flow context.

WebSocket Standard

Use WebSocket for:

  • interactive state sync
  • action dispatch + action results
  • long-running workflow updates

Use HTTP for:

  • bootstrap reads
  • direct idempotent reads
  • file/artifact retrieval

Required WS client behavior:

  • reconnect with bounded backoff
  • explicit connected/disconnected state in store
  • pending request timeout/cancel handling
  • post-reconnect resync

Recommended WS client behavior:

  • centralize WS connection in api/ module
  • keep message decoding/type-guarding out of components
  • record minimal telemetry/logging for reconnect and parse failures
  • guard against stale async results when reconnecting

Example envelope shape:

ts
type WsMessage =
  | { type: "state"; data: AppState }
  | { type: "event"; event: EventType; data: EventPayload }
  | {
      type: "action_result";
      action: string;
      requestId?: string;
      result: { success: boolean; error?: string };
    };
Reuse Rules

Before creating new primitives:

  1. Check src/ui-server/src/components/shared/.
  2. Check src/ui-server/src/utils/ for existing logic.
  3. If adding compute/canvas behavior, check src/atopile/visualizer/web/src/lib/ and src/atopile/visualizer/web/src/workers/.
  4. If behavior is IDE-host specific, keep it in src/vscode-atopile/src/.

Promote to shared when:

  • used by 2+ feature surfaces, or
  • repeated interaction semantics would drift if duplicated.

Shared Assets Reference

Shared Components (ui-server)

Prefer reusing the components in src/ui-server/src/components/shared/ before creating equivalents. If a new component is needed, create it in src/ui-server/src/components/shared/ and reuse it in the feature. If possible, compose complex components from existing shared components.

Shared Utilities (ui-server)

Prefer extending these utilities:

  • src/ui-server/src/utils/codeHighlight.tsx
  • src/ui-server/src/utils/nameValidation.ts
  • src/ui-server/src/utils/packageUtils.ts
  • src/ui-server/src/utils/searchUtils.ts
Specialized Utility Reference (visualizer)

Useful standalone reference:

  • src/atopile/visualizer/web/src/lib/exportUtils.ts

Best Practices

Frontend Code Quality
  • Keep strict TS and typed state transitions.
  • Isolate side effects in transport/hooks, not leaf components.
  • Use selectors, not broad full-store subscriptions.
  • Implement explicit loading/error/empty states.

Example typed API boundary:

ts
export async function fetchBuilds(
  projectRoot: string,
): Promise<BuildSummary[]> {
  const res = await fetch(
    `/api/builds?project_root=${encodeURIComponent(projectRoot)}`,
  );
  if (!res.ok) throw new APIError(res.status, "Failed to fetch builds");
  const data = (await res.json()) as { builds: BuildSummary[] };
  return data.builds;
}
Design System

Apply across all surfaces:

  • host-native typography/colors first
  • brand accents only where semantically useful
  • complete interaction states (default/hover/focus-visible/active/disabled/loading)
  • consistent spacing/row-height/typography rhythm
  • tokenized colors/spacing/radius/z-index, no ad-hoc semantic hardcoding

Example tokenized control:

css
.btn-default {
  background: var(--accent);
  color: var(--text-on-accent);
  border: 1px solid var(--accent);
  border-radius: var(--radius-md);
  padding: 0 var(--spacing-md);
}
.btn-default:hover:not(:disabled) {
  background: var(--accent-hover);
  border-color: var(--accent-hover);
}
.btn-default:focus-visible {
  outline: 2px solid var(--info);
  outline-offset: 1px;
}
.btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}
Accessibility Baseline

Required:

  • keyboard-operable controls
  • deterministic focus order
  • ARIA only where native semantics are insufficient
  • visible focus states
  • readable contrast in light/dark modes
Show full SKILL.md (490 more words)Show less
Performance Baseline

Required:

  • memoize expensive derived data/callbacks in hot paths
  • use requestAnimationFrame for drag/resize animation paths
  • move heavy layout/geometry/compute work to workers where needed
  • keep WS update handling efficient under active event streams

Operational checks:

  • avoid full-store subscriptions in high-frequency components
  • memoize derived collections used in render loops
  • verify no avoidable setState chains during drag/scroll/update streams
  • keep long-running transformations out of component render bodies

Implementation Playbooks

Playbook A: New Extension Webview Panel (ui-server)
  1. Add/confirm contracts
  • if backend shape changes: update Pydantic + regenerate types
  1. Add transport mapping
  • implement data/action methods in src/ui-server/src/api/
  1. Add store state/actions
  • add minimal new fields/actions in store/
  • expose selectors for component use
  1. Compose UI
  • build panel in components/
  • reuse components/shared/ primitives where possible
  1. Validate
  • run tests
  • run browser-first flow
  • capture screenshot + inspect ui logs
Playbook B: Compute/Canvas-heavy Feature
  1. Put core transforms into utils/ or specialized lib/ module.
  2. Add worker offload if main-thread latency becomes visible.
  3. Keep render components thin and memoized.
  4. Validate interaction smoothness under active updates.
Playbook C: Long-running Workflow UI

Use one canonical flow:

  • trigger
  • in-progress
  • completion or error in same context

Required:

  • disable conflicting controls during in-progress state
  • emit progress updates via typed WS events
  • provide deterministic terminal state in store

Detailed Testing Notes

Testing Scope by Layer
  1. Unit tests
  • pure utils/lib transforms
  1. Store tests
  • action transitions and derived selector correctness
  1. Transport tests
  • API/WS mapping, error handling, request correlation behavior
  1. UI tests
  • user interaction + state rendering behavior
  1. Browser automation checks
  • key flow interaction + screenshot + ui logs
WebSocket Feature Test Cases

At minimum test:

  • initial connect path
  • disconnect state update
  • reconnect and resync path
  • pending request timeout/cancel path

Recommended:

  • late or duplicate event tolerance
  • malformed message handling without UI crash

Testing Standard

Minimum per feature:

  1. Store/action test
  2. API/transport test
  3. UI interaction test
  4. Error/loading/empty-state test

Example matrix (build queue):

  • store: enqueue + complete transitions
  • API: build start error -> typed API error
  • UI: cancel click dispatches cancel action
  • state: disconnected WS state is visible
Browser-First Dev Viewer Flow (Required)

Agents should self-test in browser flow first:

bash
cd src/ui-server
./dev.sh

Then:

  1. Validate interaction flow in browser webview page.
  2. Capture key-state screenshots.
  3. Inspect UI logs.
  4. Fix issues.
  5. Ask user to test in extension host only after browser flow is clean.

Relevant pages:

  • http://127.0.0.1:5173/
  • http://127.0.0.1:5173/log-viewer.html
  • http://127.0.0.1:5173/migrate.html
  • http://127.0.0.1:5173/test-explorer.html
Puppeteer + Vite Screenshot APIs

Use these built-in dev endpoints:

bash
curl -sS -X POST http://127.0.0.1:5173/api/screenshot \
  -H 'Content-Type: application/json' \
  -d '{"path":"/","name":"default","waitMs":1200}'
bash
curl -sS -X POST http://127.0.0.1:5173/api/screenshot \
  -H 'Content-Type: application/json' \
  -d '{"path":"/","name":"projects-expanded","uiActions":[{"type":"openSection","sectionId":"projects"}],"uiActionWaitMs":600}'
bash
curl -sS http://127.0.0.1:5173/api/ui-logs

Automation guardrails:

  • stable selectors (data-testid or semantic roles)
  • fixed viewport for diffs
  • readiness-based waits preferred over arbitrary sleep
  • runtime errors treated as failures unless allowlisted

Definition of Done

A feature is done only when all are true:

  • one canonical flow implemented (no fallback branch)
  • contract changes modeled in Pydantic + regenerated TS consumed
  • WS behavior validated (connect/reconnect/resync)
  • tests added/updated (store + transport + UI + state handling)
  • browser-first dev viewer checks complete
  • user asked to test extension host only after browser validation
  • build/test commands pass for touched app
  • component/util placement follows repo structure and reuse rules

PR Checklist (Copy/Paste)

md
- [ ] Single canonical flow preserved (no fallback path added)
- [ ] Pydantic models updated for API/WS changes
- [ ] Generated TS schema/types regenerated and committed
- [ ] WS reconnect/resync behavior verified
- [ ] Browser dev viewer flow validated (`./dev.sh`)
- [ ] Screenshots + UI logs reviewed (no unapproved runtime errors)
- [ ] Added/updated: store test, transport test, UI interaction test
- [ ] Asked user to test in extension host only after browser checks passed

© atopile, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/frontend of atopile/atopile.

Open the folder on GitHubat commit 619eda7

Compare with similar skills

Frontend next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Frontend compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Frontend this skillatopile/atopile4k—~3.3kAutomated safety check: PassMIT
Creative Tim UI Blockscreativetimofficial/ui12k—~2.1kAutomated safety check: NotesMIT
RayRailly/tinte624—~712Automated safety check: PassMIT
Local Testinglobehub/lobe-ui2.2k—~2.1kAutomated safety check: PassMIT
TinteRailly/tinte624—~1.6kAutomated safety check: PassMIT
Using Docs Kitlobehub/lobe-ui2.2k—~2.8kAutomated safety check: PassMIT

Similar skills

  • Creative Tim UI Blocks

    creativetimofficial/ui

    Helps install, generate and review Creative Tim UI blocks: shadcn/ui-based React and Tailwind sections that follow a restrained, production-minded design philosophy.

    12k GitHub stars~2.1k tokensUpdated 6 mo ago
    Frontend & DesignAuto-check: notes
  • Ray

    Railly/tinte

    Generate code screenshots via ray.tinte.dev API. An agent skill from Railly/tinte.

    624 GitHub stars~712 tokensUpdated 2 mo ago
    Frontend & DesignAuto-check passed
  • Local Testing

    lobehub/lobe-ui

    Local browser verification for the lobe-ui component library and documentation site.

    2.2k GitHub stars~2.1k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Tinte

    Railly/tinte

    Agent-native design system infrastructure. An agent skill from Railly/tinte.

    624 GitHub stars~1.6k tokensUpdated 2 mo ago
    Frontend & DesignAuto-check passed
  • Using Docs Kit

    lobehub/lobe-ui

    Set up and author a documentation site with @lobehub/docs-kit (the lobedocs CLI, React Router + Vite static docs used by ui.lobehub.com).

    2.2k GitHub stars~2.8k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Daleui

    DaleStudy/daleui

    Use the daleui React design system with semantic Panda CSS tokens and accessible components.

    119 GitHub stars~675 tokensUpdated yesterday
    Frontend & DesignAuto-check passed

More from atopile/atopile

All 19 skills in this repo
  • Ato Language

    atopile/atopile

    Reference for the .ato declarative DSL: type system, connection semantics, constraint model, and standard library.

    4k GitHub stars~3.5k tokensUpdated 3 mo ago
    Auto-check passed
  • Compiler

    atopile/atopile

    How the atopile compiler builds and links TypeGraphs from .ato (ANTLR front-end → AST → TypeGraph → Linker → DeferredExecutor), plus the key invariants and test entrypoints.

    4k GitHub stars~1k tokensUpdated 3 mo ago
    Auto-check passed
  • Domain Layer

    atopile/atopile

    Instructions for electronics-specific logic and build processes: netlists, PCBs, build steps, and exporters.

    4k GitHub stars~791 tokensUpdated 3 mo ago
    Auto-check passed
  • Fabll

    atopile/atopile

    How FabLL (faebryk.core.node) maps Python node/trait declarations into the TypeGraph + instance graph, including field/trait invariants and instantiation patterns.

    4k GitHub stars~1.1k tokensUpdated 3 mo ago
    Auto-check passed
  • Faebryk

    atopile/atopile

    How Faebryk's TypeGraph works (GraphView + Zig edges), how to traverse/resolve references, and how FabLL types/traits map onto edge types.

    4k GitHub stars~861 tokensUpdated 3 mo ago
    Auto-check passed
  • Graph

    atopile/atopile

    How the Zig-backed instance graph works (GraphView/NodeReference/EdgeReference), the real Python API surface, and the invariants around allocation, attributes, and cleanup.

    4k GitHub stars~952 tokensUpdated 3 mo ago
    Auto-check passed

Questions about Frontend

What does Frontend do?

Frontend standards for atopile extension webviews: architecture, contracts, design system, and testing workflow. Frontend is an agent skill from atopile/atopile. Frontend standards for atopile extension webviews: architecture, contracts, design system, and testing workflow.

When should I use Frontend?

Frontend fits situations like: tasks that involve Design systems.

How do I install Frontend in Claude Code?

Run `npx skills add atopile/atopile --skill frontend -a claude-code`. Or copy the skill folder (.claude/skills/frontend in atopile/atopile) into .claude/skills/frontend in your project. Claude Code loads it when a task matches its description.

How do I install Frontend in Codex?

Run `npx skills add atopile/atopile --skill frontend -a codex`. Or copy the skill folder (.claude/skills/frontend in atopile/atopile) into .agents/skills/frontend in your project. Codex loads it when a task matches its description.

Can I use Frontend in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add atopile/atopile --skill frontend -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/frontend, .gemini/skills/frontend, .github/skills/frontend and .opencode/skills/frontend in your project.

What does Frontend need to run?

Going by SKILL.md and its folder, Frontend needs the command-line tools its instructions call (bun, curl and tsc).

Does Frontend access the network?

SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Frontend safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Frontend use?

Frontend is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Frontend use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Frontend?

Skills that share tags, products or a category with Frontend: Creative Tim UI Blocks (creativetimofficial/ui, 12k stars), Ray (Railly/tinte, 624 stars), Local Testing (lobehub/lobe-ui, 2.2k stars) and Tinte (Railly/tinte, 624 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Frontend?

atopile (a GitHub organization) maintains it in atopile/atopile, which has 3,979 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on June 13, 2026.

Source: atopile/atopile on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.