plugins/acss-kit/skills/utilities/SKILL.md
Use when the developer wants Tailwind-style atomic CSS utility classes for fpkit/acss — add, list, tune spacing/breakpoints, or regenerate the token-bridge.
npx skillsauth add shawn-sandy/acss-plugins utilitiesInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Atomic-CSS utility-class generation and management for fpkit/acss projects. Routes between four flows depending on which slash command was invoked. Bundles a single utilities.css (full atomic suite) and a token-bridge.css (acss-kit ↔ fpkit alias layer).
Naming and class catalogue: see references/utility-catalogue.md and references/naming-convention.md.
Breakpoints and responsive syntax: see references/breakpoints.md.
Token bridge mapping: see references/token-bridge.md.
The plugin's atomic suite is generated from assets/utilities/utilities.tokens.json. Edits to that file (manual or via /utility-tune) should be followed by python3 ${CLAUDE_PLUGIN_ROOT}/scripts/generate_utilities.py --tokens ${CLAUDE_PLUGIN_ROOT}/assets/utilities/utilities.tokens.json --out-dir ${CLAUDE_PLUGIN_ROOT}/assets/utilities/ to regenerate the committed bundle.
The committed assets/utilities/utilities.css and assets/utilities/<family>.css partials are the canonical artifacts — tests/run.sh enforces idempotency by regenerating and diffing.
Applies to every flow below (/utility-add, /utility-list, /utility-tune, /utility-bridge). If the session is in plan mode, call ExitPlanMode before proceeding — the write-bearing flows each shell out to a different subset of the bundled scripts:
/utility-add runs detect_utility_target.py and copies the prebuilt utilities.css (and token-bridge.css unless --no-bridge) into the project. When acss-kit is installed alongside, it also calls the cross-plugin detect_stack.py + verify_integration.py from acss-kit; when acss-kit is absent, those two are skipped with a warning./utility-bridge writes token-bridge.css and runs validate_utilities.py./utility-tune edits assets/utilities.tokens.json, regenerates the bundle via generate_utilities.py, and validates via validate_utilities.py.Plan mode blocks every one of those Write/Edit/Bash calls.
/utility-list is read-only and stays safe under plan mode — no Write/Edit/Bash and no need to exit. Only call ExitPlanMode when the user pivots to one of the write-bearing flows above.
Stay in plan mode only when it is absolutely necessary — i.e. the user explicitly asked for a preview ("show me which families would land", "don't write the bundle yet"). In that case, narrate the file list and bundle size without invoking Write/Edit/Bash, and wait for approval before re-entering this skill.
/utility-add [--target=<dir>] [--families=<list>] [--no-bridge]Purpose: Copy utilities.css (and token-bridge.css unless --no-bridge) into the user's React project.
${CLAUDE_PLUGIN_ROOT}/scripts/detect_utility_target.py. Capture JSON.
source: "configured" or "default" → use utilitiesDir from result.source: "none" (exit 1) → halt with the reasons array; suggest --target=<dir>.${CLAUDE_PLUGIN_ROOT}/scripts/detect_stack.py <project_root> to classify framework + entrypoint. If the cross-plugin path is unavailable (acss-kit not installed), skip with a warning and the verification step (8) will be a no-op. When detection succeeds, merge the result into .acss-target.json under a stack key.--target=<dir> was passed, override the detected utilitiesDir.--families=<list> was passed:
assets/utilities/.FAMILY_ORDER in generate_utilities.py) plus the bundle header.<target>/utilities.css.${CLAUDE_PLUGIN_ROOT}/assets/utilities/utilities.css verbatim to <target>/utilities.css.--no-bridge, copy ${CLAUDE_PLUGIN_ROOT}/assets/utilities/token-bridge.css to <target>/token-bridge.css.import "./styles/token-bridge.css"; // first
import "./styles/utilities.css"; // then
${CLAUDE_PLUGIN_ROOT}/scripts/verify_integration.py <project_root> (skip if acss-kit was not present in step 2). Exit 0 → done. Exit 1 → print the reasons array as a numbered fix-up list. Do not auto-edit the entrypoint.references/utility-catalogue.md — full family list, every class, every CSS custom property referenced.references/token-bridge.md — required when --no-bridge is not set, so the assistant can explain the bridge's role./utility-list [family]Purpose: Read-only catalogue printer. No side effects.
/utility-list (no arguments)assets/utilities.tokens.json from ${CLAUDE_PLUGIN_ROOT}/.families with its enabled and responsive status./utility-list <family> for class-level detail./utility-list <family>${CLAUDE_PLUGIN_ROOT}/assets/utilities/<family>.css.var() chain — e.g. .bg-error → var(--color-error, transparent) → resolved via token-bridge.css to var(--color-danger, #dc2626).references/utility-catalogue.md/utility-tune <natural-language>Purpose: Adjust the spacing baseline, breakpoints, or family-enable map via natural language. Edits assets/utilities.tokens.json, regenerates the bundle, runs the validator.
| Phrase | Effect on tokens.json |
|---|---|
| "use a 4px spacing baseline" | spacing.baseline = "0.25rem" |
| "use an 8px spacing baseline" | spacing.baseline = "0.5rem" |
| "add an xs breakpoint at 20rem" | breakpoints.xs = "20rem" (validator extends --prefixes) |
| "disable shadow utilities" | families.shadow.enabled = false |
| "drop responsive variants from spacing" | families.spacing.responsive = false |
| "add a 'soft' radius value at 1rem" | radius.soft = "1rem" |
utilities.tokens.json. If the intent is ambiguous, ask one clarifying question via AskUserQuestion before making edits.${CLAUDE_PLUGIN_ROOT}/assets/utilities/utilities.tokens.json. Apply the edits in memory.python3 ${CLAUDE_PLUGIN_ROOT}/scripts/generate_utilities.py --tokens ${CLAUDE_PLUGIN_ROOT}/assets/utilities/utilities.tokens.json --out-dir ${CLAUDE_PLUGIN_ROOT}/assets/utilities/.python3 ${CLAUDE_PLUGIN_ROOT}/scripts/validate_utilities.py ${CLAUDE_PLUGIN_ROOT}/assets/.
ok: false, print the reasons array and revert the tokens.json edit. The committed bundle should never go out of contract.references/utility-catalogue.md, references/breakpoints.md, references/naming-convention.md/utility-bridge [--theme=<file>]Purpose: Regenerate token-bridge.css aliases against the user's active acss-kit theme. Always emits both :root and [data-theme="dark"] blocks.
--theme=<file> was passed, use that as the source theme. Otherwise look in priority order:
<projectRoot>/src/styles/theme/light.css and dark.css<projectRoot>/src/styles/theme/*.css${CLAUDE_PLUGIN_ROOT}/assets/utilities/token-bridge.css defaults and warn the user.--color-danger, --color-primary, --color-success, etc. values for both light and dark modes.--color-error: var(--color-danger, <resolved-hex>), --color-error-bg: color-mix(in oklch, var(--color-danger, <hex>) 12%, var(--color-background, <bg-hex>)), and so on.[data-theme="dark"], fall back to the same values for dark (and warn).<projectRoot>/<utilitiesDir>/token-bridge.css (default src/styles/token-bridge.css).python3 ${CLAUDE_PLUGIN_ROOT}/scripts/validate_utilities.py <bridge-file> to enforce parity.references/token-bridge.md — full alias mapping and rationale.Every flow ends with a contract check. The plugin's hooks and tests/run.sh enforce these automatically; the skill should run them locally too:
python3 ${CLAUDE_PLUGIN_ROOT}/scripts/validate_utilities.py ${CLAUDE_PLUGIN_ROOT}/assets/ exits 0.utilities.tokens.json produces the same bytes as the committed utilities.css.:root is also defined in [data-theme="dark"].If any of these fail, the user-visible flow halts and the assistant reports the reasons array verbatim.
--families provides static filtering./utility-tune is the explicit invocation.dark:bg-primary, etc.) — fpkit doesn't ship these upstream.acss-kit owns components.development
Internal orchestrator for /kit-create, /kit-list, /kit-sync, /kit-update and Form/HTML/Style-Tune modes. Per-component generation lives in component-<name> skills; do not auto-trigger for component requests.
data-ai
Use when the user asks to generate, create, or scaffold a Table — accessible data table with caption, scope headers, responsive scroll wrapper, and sortable column support.
tools
Use when the user asks to generate, create, or scaffold a Popover — accessible tooltip/popover using the Popover API with focus trap, aria-expanded, and light-dismiss.
tools
Use when the user asks to generate, create, or scaffold a Nav — accessible navigation landmark with aria-label, current-page link marking, and horizontal/vertical layout.