frontend-design-system — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited frontend-design-system (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
worclaude has no web frontend. This skill covers the terminal UI system — the equivalent of a design system for CLI output: display utilities, styling, interactive prompts, and spinner management.
All user-facing output goes through the display namespace. Import as:
import * as display from '../utils/display.js';The CLI uses a "Bold + Badges" restyle for all output. Key display functions:
display.success(msg) — green checkmark + messagedisplay.error(msg) — red styled errordisplay.info(msg) — info badgedisplay.warning(msg) — warning badgedisplay.newline() — empty line for spacingdisplay.header(title) — section headers with stylingRule: Never use console.log() for user-facing output. Always display.*. Console is only acceptable in test files.
Using Chalk ^5.4.1 (ESM-only version). Colors are applied via chalk.hex() for brand-consistent styling, not via named colors.
No custom theme object — colors are defined inline in display.js functions. If you add a new display function, match the existing visual weight and color scheme.
Spinners provide progress feedback during non-interactive operations (file copying, backup creation, merge processing).
Ora spinners must be stopped before any Inquirer prompt fires. If a spinner is animating when Inquirer renders a prompt, the terminal gets corrupted.
// CORRECT
spinner.stop(); // or spinner.succeed() / spinner.fail()
const answer = await inquirer.prompt([...]);
spinner = ora('Continuing...').start();
// WRONG — terminal corruption
// spinner is still running
const answer = await inquirer.prompt([...]);const spinner = ora('Creating backup...').start();
try {
await doWork();
spinner.succeed('Backup created');
} catch (err) {
spinner.fail('Backup failed');
display.error(err.message);
}Using Inquirer ^12.5.0. Prompts are isolated in src/prompts/ — one file per prompt group:
project-type.js — multi-select project type with redundancy warningstech-stack.js — multi-select languages + Docker questionagent-selection.js — two-step category → fine-tune selectionconflict-resolution.js — hook conflict resolution (keep/replace/chain)claude-md-merge.js — CLAUDE.md merge strategy selectionUse list-based confirmation (explicit choices), not simple confirm (y/n). This was a bug fix — simple y/n confirms accepted random text as "no".
// CORRECT
{ type: 'list', choices: ['Yes, install', 'No, let me start over', 'Let me adjust'] }
// AVOID for important decisions
{ type: 'confirm' } // accepts any non-y input as "no"Header → Project info prompts → Type selection → Stack selection → Agent selection →
Confirmation review → Spinner (scaffolding) → File creation list → Next stepsUses indented, aligned display with consistent badge formatting. File status indicators: ✓ (success), ~ (modified), - (missing), + (extra).
Every command that modifies files ends with a "Next steps" section — numbered list of what the user should do next. /setup is always listed as the primary next step after init.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.