Agent skill

Component Forge

by EliasOulkadi in EliasOulkadi/shokunin

Build production-grade components for React, Vue 3, and Svelte 5 with all states (loading, empty, error, success, idle), TypeScript strict, WCAG 2.2 accessibility, server components (RSC), and…

MITAuto-check: notesFrontend & Design

Install Component Forge

skills CLI
$ npx skills add EliasOulkadi/shokunin --skill component-forge -a claude-code

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

GitHub CLI
$ gh skill install EliasOulkadi/shokunin component-forge --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/EliasOulkadi/shokunin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.pack/skills/component-forge .claude/skills/component-forge && 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
component-forge
GitHub stars
114
Token cost
~3.6k tokens
SKILL.md length
981 words
Files
6 (incl. scripts, references, assets)
Skills in repo
49
Repo updated
First seen
Licence
MIT

At a glance

Build production-grade components for React, Vue 3, and Svelte 5 with all states (loading, empty, error, success, idle), TypeScript strict, WCAG 2.2 accessibility, server components (RSC), and…

  • Works in 5 steps: Determine component type → Scaffold component → Implement states with discriminated union → …
  • User asks to create a UI component
  • SKILL.md covers Workflow, Button Architecture, Popover Architecture and Tooltip Architecture, plus 9 more sections
  • Runs Shell scripts from its folder

What it does

Component Forge is an agent skill from EliasOulkadi/shokunin. Build production-grade components for React, Vue 3, and Svelte 5 with all states (loading, empty, error, success, idle), TypeScript strict, WCAG 2.2 accessibility, server components (RSC), and compound component patterns. Includes scaffold script, reference patterns, and template files for React and Vue. Use when user asks to create a UI component, frontend module, or design system component. Do NOT use for page layouts (use landing-craft), routing, or state management architecture (global stores).

Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts, reference files and assets (for example `references/a11y-patterns.md`, `references/react-patterns.md` and `scripts/scaffold-component.sh`). Compatibility notes: opencode

It sits in Frontend & Design, covering Accessibility and State management. It works with Vue.js, React, Svelte and TypeScript. The repository describes itself as: 職人 Shokunin 62 AI agent skills for OpenCode, Claude Code, Cursor, Windsurf. ChromaDB memory, MCP servers, declarative self-updates. Multi-model, open source, zero cost. The licence is MIT.

When your agent uses it

  • User asks to create a UI component
  • Frontend module
  • Design system component
  • Page layouts (use landing-craft)

Example prompts

  • “/component-forge”

Requirements

  • A Bash shell
  • Compatibility (from SKILL.md): opencode
  • Pre-approved tools (allowed-tools): Read, Bash, Write, Grep, Glob

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Determine component type
  2. Scaffold component
  3. Implement states with discriminated union
  4. Apply accessibility checklist
  5. Handle edge cases

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Bash
    • Write
    • Grep
    • Glob

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Shell), which the agent can run.

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

  • Network

    No URLs in SKILL.md.

    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.

  • Compatibility

    opencode

    From compatibility in the SKILL.md frontmatter.

Context cost

Component Forge loads about 3.6k tokens when it runs, and up to ~8.9k if it reads all its reference files. Until then it costs about 130 tokens; SKILL.md has 981 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~130
When it runs · the whole SKILL.md, loaded when a task matches
~3.6k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~8.9k

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Bash, Write, Grep, Glob

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); the scripts in this folder are not scanned.

SKILL.md

The full file from EliasOulkadi/shokunin at commit 4c68e5b, republished under its MIT licence (© EliasOulkadi). 981 words, ~3,604 tokens.

Download SKILL.mdSave it as .claude/skills/component-forge/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
component-forge
description
Build production-grade components for React, Vue 3, and Svelte 5 with all states (loading, empty, error, success, idle), TypeScript strict, WCAG 2.2 accessibility, server components (RSC), and compound component patterns. Includes scaffold script, reference patterns, and template files for React and Vue. Use when user asks to create a UI component, frontend module, or design system component. Do NOT use for page layouts (use landing-craft), routing, or state management architecture (global stores).
allowed-tools
Read, Bash, Write, Grep, Glob
compatibility
opencode
triggers
create component, build component, React component, Vue component, Svelte component, UI component, button component, modal component, form component…
negatives
page layout, routing, state management, global store, full page, landing page, design system colors
license
MIT
metadata.workflow
frontend
metadata.audience
developers
metadata.version
4.0.0
metadata.author
shokunin

Component Forge

Build components that survive every state, at every screen size, under every edge case. Inspired by Heydon Pickering (Inclusive Components), React core team patterns, and Emil Kowalski's design engineering philosophy.

Workflow

Step 1: Determine component type
TypeDescriptionExample
PresentationalPure rendering, props-drivenButton, Card, Badge
ComposableWraps children with behaviorModal, Tooltip, Accordion
Data-fetchingReads from API/storeUserProfile, OrderList
LayoutArranges childrenSidebar, Grid, Stack
FormInput + validationLoginForm, SearchInput
Step 2: Scaffold component
bash
scripts/scaffold-component.sh Button react
scripts/scaffold-component.sh Modal vue
scripts/scaffold-component.sh Accordion svelte

Windows: The scaffold script requires Git Bash or WSL. Not compatible with PowerShell or CMD.

Creates:

Button/
  Button.tsx
  Button.types.ts
  Button.test.tsx
  index.ts
Step 3: Implement states with discriminated union
tsx
type State<T> =
  | { status: 'idle' }
  | { status: 'loading' }
  | { status: 'empty' }
  | { status: 'error'; error: Error }
  | { status: 'success'; data: T }

function Profile({ userId }: { userId: string }) {
  const [state, setState] = useState<State<User>>({ status: 'idle' })

  if (state.status === 'loading') return <LoadingSkeleton />
  if (state.status === 'error') return <ErrorState error={state.error} onRetry={fetch} />
  if (state.status === 'empty') return <EmptyState message="No user found" />
  if (state.status === 'success') return <UserProfile user={state.data} />
  return null
}

Every data-fetching component renders all five states.

Step 4: Apply accessibility checklist
  • All interactive elements keyboard reachable (Tab ? Enter/Space)
  • ARIA labels on icon-only buttons
  • Focus trap in modals and dialogs
  • Loading state announced via aria-live="polite"
  • Error state has role="alert"
  • Color is not the only differentiator (add icon/text)
  • Proper heading hierarchy (h1 ? h2 ? h3, no skips)
  • Touch targets = 44-44px
  • prefers-reduced-motion respected

See references/a11y-patterns.md for roving tabindex, focus management, screen reader testing, and contrast ratios.

Step 5: Handle edge cases
Edge caseSymptomFix
Long textLayout breaktext-overflow: ellipsis, overflow-wrap: anywhere
Many items (100+)Slow renderingVirtualize (react-window, FlashList)
Network retryStale dataShow old data + loading indicator
Race conditionWrong data after fast re-fetchAbortController, cancel on unmount
null vs undefined vs []Wrong empty checkHandle all three explicitly

See references/react-patterns.md for compound components, RSC patterns, error boundaries, and suspense.


Button Architecture

Every button must feel responsive. Emil Kowalski's rule: scale(0.97) on press.

css
.button {
  transition: transform 160ms cubic-bezier(0.23, 1, 0.32, 1);
}
.button:active {
  transform: scale(0.97);
}

Scale must be subtle: 0.95-0.98. Applied to all pressable elements.

Button state transitions
StateCSS
Defaultbackground: var(--color-primary)
Hovertransform: translateY(-1px) 200ms
Activetransform: scale(0.97) 160ms
Focusoutline: 2px solid var(--accent); outline-offset: 2px
Disabledopacity: 0.5; cursor: not-allowed
LoadingReplace text with spinner, keep width stable
tsx
function Button({ children, loading, ...props }: ButtonProps) {
  return (
    <button
      className="button"
      aria-busy={loading}
      aria-disabled={loading}
      {...props}
    >
      {loading ? <Spinner /> : children}
    </button>
  )
}

Popover Architecture

Popovers scale from their trigger. Modals stay centered.

css
/* Radix UI */
.popover {
  transform-origin: var(--radix-popover-content-transform-origin);
}

/* Base UI */
.popover {
  transform-origin: var(--transform-origin);
}

/* Modals - always centered */
.modal {
  transform-origin: center;
}

Whether the user notices individually does not matter. In the aggregate, unseen details compound.


Tooltip Architecture

Tools must delay before appearing (prevent accidental activation). But once one tooltip is open, adjacent tooltips appear instantly with no animation.

css
.tooltip {
  transition: transform 125ms ease-out, opacity 125ms ease-out;
  transform-origin: var(--transform-origin);
}

.tooltip[data-instant] {
  transition-duration: 0ms;
}
tsx
function Tooltip({ children, content }: TooltipProps) {
  const [isOpen, setIsOpen] = useState(false)
  const [isInstant, setIsInstant] = useState(false)

  return (
    <TooltipRoot
      delayDuration={isInstant ? 0 : 500}
      onOpenChange={(open) => {
        setIsOpen(open)
        if (!open) setIsInstant(false)
      }}
    >
      <TooltipTrigger
        onPointerEnter={() => { if (isAnyTooltipOpen()) setIsInstant(true) }}
      >
        {children}
      </TooltipTrigger>
      <TooltipContent data-instant={isInstant || undefined}>
        {content}
      </TooltipContent>
    </TooltipRoot>
  )
}

Modal Architecture

Enter / exit animation timings
PhaseDurationEasing
Enter200-300mscubic-bezier(0, 0, 0.2, 1)
Exit150-200mscubic-bezier(0.4, 0, 1, 1)

Exit must ALWAYS be faster than enter.

Focus trap
tsx
function Modal({ open, onClose, children }: ModalProps) {
  const overlayRef = useRef<HTMLDivElement>(null)

  useEffect(() => {
    if (!open) return

    const previouslyFocused = document.activeElement as HTMLElement
    const overlay = overlayRef.current

    const handleKeyDown = (e: KeyboardEvent) => {
      if (e.key === 'Escape') { onClose(); return }

      if (e.key === 'Tab') {
        const focusable = overlay!.querySelectorAll<HTMLElement>(
          'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
        )
        const first = focusable[0]
        const last = focusable[focusable.length - 1]

        if (e.shiftKey && document.activeElement === first) {
          e.preventDefault(); last.focus()
        } else if (!e.shiftKey && document.activeElement === last) {
          e.preventDefault(); first.focus()
        }
      }
    }

    document.addEventListener('keydown', handleKeyDown)
    return () => {
      document.removeEventListener('keydown', handleKeyDown)
      previouslyFocused?.focus()
    }
  }, [open, onClose])

  if (!open) return null

  return (
    <div className="modal-overlay" ref={overlayRef} role="dialog" aria-modal="true">
      <AnimatePresence>
        {children}
      </AnimatePresence>
    </div>
  )
}

Skeleton Loading States

Skeleton loaders must match the layout dimensions of the content they replace.

tsx
function UserCardSkeleton() {
  return (
    <div className="card" aria-hidden="true">
      <div className="skeleton skeleton-avatar" style={{ width: 48, height: 48, borderRadius: '50%' }} />
      <div className="skeleton skeleton-text" style={{ width: '60%', height: 16, marginTop: 12 }} />
      <div className="skeleton skeleton-text" style={{ width: '40%', height: 12, marginTop: 8 }} />
    </div>
  )
}
css
.skeleton {
  background: linear-gradient(
    90deg,
    var(--skeleton-base) 25%,
    var(--skeleton-shine) 50%,
    var(--skeleton-base) 75%
  );
  background-size: 200% 100%;
  animation: shimmer 1.5s linear infinite;
}

@keyframes shimmer {
  from { background-position: 200% 0; }
  to   { background-position: -200% 0; }
}

Stagger Children

When multiple children enter, stagger their appearance.

tsx
function List({ items }: { items: Item[] }) {
  return (
    <ul>
      {items.map((item, i) => (
        <motion.li
          key={item.id}
          initial={{ opacity: 0, transform: 'translateY(8px)' }}
          animate={{ opacity: 1, transform: 'translateY(0)' }}
          transition={{ delay: i * 0.05, duration: 0.3, ease: [0.23, 1, 0.32, 1] }}
        >
          <ItemCard item={item} />
        </motion.li>
      ))}
    </ul>
  )
}

Keep stagger delays 30-80ms. Never block interaction while stagger plays.


Error Handling

ErrorCauseFix
Component crashes on missing propMissing default valueAdd defaultProps or default parameter
Infinite re-renderMissing dependency arrayAdd deps to useEffect/useMemo
Flash of unstyled contentCSS not loadedInline critical CSS, use CSS-in-JS or preload
ARIA live region not announcingWrong role/valueUse role="status" for loading, role="alert" for errors
Focus trap not workingMissing focusable elementEnsure at least one focusable child in trap
Skeleton layout shiftSkeleton doesn't match content dimensionsMatch exact width/height. Use min-height blocks.
Stagger blocks interactionLong delay on large listsCap total stagger at 400ms. Show remaining items instantly.
Modal focus lost after closeFocus not restoredSave document.activeElement before opening, restore after closing

Review Format (Required)

When reviewing component code, use a Before/After table:

BeforeAfterWhy
Missing loading state{ status: 'loading' } ? <Skeleton />Users see a blank screen otherwise
aria-label missing on icon buttonaria-label="Close dialog"Screen reader announces "button" with no context
ease-in on modal entercubic-bezier(0, 0, 0.2, 1) 250msEase-in starts slow, feels sluggish on entering UI
No :active state on buttontransform: scale(0.97) 160ms ease-outButtons must feel responsive to press
setState after unmountuseEffect cleanup + AbortControllerRace condition - stale data overwrites fresh state
h-screen for heromin-h-[100dvh]100vh breaks on iOS Safari with URL bar visible
500ms modal enter250msUI animations over 300ms feel slow
Focus not trapped in modalImplement focus loop (Tab/Shift+Tab)Keyboard users escape modal and get lost

Show full SKILL.md (331 more words)Show less

Production Checklist

  • Every component has typed props (interface, not type)
  • All states rendered (loading, empty, error, success, idle)
  • Accessibility checklist passed
  • Edge cases handled (overflow, retry, race conditions)
  • Named exports only (no default exports)
  • Co-located tests in same directory
  • One component per file
  • Custom hook extracted for non-rendering logic
  • Tests for every state transition
  • Button: scale(0.97) on :active, 160ms ease-out
  • Popover: transform-origin anchors to trigger
  • Modal: enter 200-300ms, exit 150-200ms, exit faster than enter
  • Tooltip: delay on first, instant on adjacent
  • Skeleton: matches content dimensions exactly
  • Stagger: 30-80ms delay, max 400ms total
  • Focus: restored to trigger after modal/tooltip close
  • 100dvh used instead of 100vh for full-screen
  • Touch targets = 44-44px
  • prefers-reduced-motion respected

Anti-Patterns

Anti-patternFix
Default exportNamed exports only
any in propsStrict types, discriminated unions
Missing loading stateEvery data-fetching component renders loading ? error ? success
useEffect for derived stateuseMemo or computed property
Giant component > 200 linesSplit into sub-components
Inline handlers in renderExtract to useCallback
Mixing server/client without boundaryClear 'use client' / 'use server'
Prop drilling > 3 levelsContext or composition
ease-in on entering UIStrong ease-out (cubic-bezier(0.23, 1, 0.32, 1))
Modal exit same speed as enterExit must be faster
Skeleton different shape from contentMatch dimensions exactly
Focus not restored after overlay closeSave and restore document.activeElement
h-screen on mobilemin-h-[100dvh]
Gray text on gray backgroundWCAG AA 4.5:1 minimum
Touch targets under 44pxMinimum 44-44px

Sources

  • Emil Kowalski - Design engineering philosophy (Sonner, Vaul, Linear)
  • Heydon Pickering - Inclusive Components
  • React docs (react.dev) - Composition vs Inheritance
  • Vue 3 docs (vuejs.org) - Composition API
  • Svelte 5 docs (svelte.dev) - Runes
  • MDN ARIA Authoring Practices Guide
  • WCAG 2.2 - Accessibility guidelines
  • Radix UI - Focus trap, popover, tooltip patterns
  • Base UI - Transform origin variables

Checklist

  • Skill loads without errors in the AI agent
  • YAML frontmatter is valid (description, compatibility, audience)
  • Workflow section provides clear step-by-step instructions
  • Error handling section covers common failure modes
  • All referenced files (references/, scripts/, assets/) exist
  • Skill triggers correctly for intended use cases
  • No broken links or missing resources

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

Files

SKILL.md and 5 other files (scripts, references, assets) in .pack/skills/component-forge of EliasOulkadi/shokunin.

  • SKILL.md
  • assets/react-component.template.tsx
  • assets/vue-component.template.vue
  • references/a11y-patterns.md
  • references/react-patterns.md
  • scripts/scaffold-component.sh

Open the folder on GitHubat commit 4c68e5b

Compare with similar skills

Component Forge 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.

Component Forge compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Component Forge this skillEliasOulkadi/shokunin114—~3.6kAutomated safety check: NotesMIT
UI/UX Design System AdvisorGalaxy-Dawn/claude-scholar5.7k1 repos~1.1kAutomated safety check: PassMIT
Monochromevaneenige/monochrome-ui132—~2.3kAutomated safety check: PassMIT
Frontend Designjwynia/agent-skills169—~3.2kAutomated safety check: PassMIT
Kb Web ScanningCommunity-Access/accessibility-agents423—~1.2kAutomated safety check: PassMIT
UI CraftMemTensor/memmy-agent2.1k—~2.9kAutomated safety check: PassMIT

Similar skills

  • UI/UX Design System Advisor

    Galaxy-Dawn/claude-scholar

    Turns a vague UI request into a concrete design system with style, palette, typography and layout guidance from a search script, plus stack-specific implementation advice.

    5.7k GitHub starsUsed in 1 repo~1.1k tokens
    Frontend & DesignAuto-check passed
  • Monochrome

    vaneenige/monochrome-ui

    Build accessible UI with monochrome, the framework-agnostic UI library for agents.

    132 GitHub stars~2.3k tokensUpdated 2 days ago
    Frontend & DesignAuto-check passed
  • Frontend Design

    jwynia/agent-skills

    Create distinctive, production-grade frontend interfaces with high design quality.

    169 GitHub stars~3.2k tokensUpdated 7 mo ago
    Frontend & DesignAuto-check passed
  • Kb Web Scanning

    Community-Access/accessibility-agents

    Reference data, not a reviewer. An agent skill from Community-Access/accessibility-agents.

    423 GitHub stars~1.2k tokensUpdated 16 days ago
    Frontend & DesignAuto-check passed
  • UI Craft

    MemTensor/memmy-agent

    Design, build, redesign, or modify browser-visible web interfaces with product-quality composition, visual systems, interaction states, responsive behavior, accessibility, and browser visual QA.

    2.1k GitHub stars~2.9k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Dokan Frontend Dev

    getdokan/dokan

    Add or modify Dokan frontend code (React, TypeScript, Vue, Tailwind).

    288 GitHub stars~1.9k tokensUpdated today
    Frontend & DesignAuto-check passed

More from EliasOulkadi/shokunin

All 49 skills in this repo
  • CI CD

    EliasOulkadi/shokunin

    Design CI/CD pipelines for GitHub Actions, GitLab CI, and CircleCI with matrix builds, test sharding, caching, Docker layer caching, OIDC auth, deployment strategies (rolling, blue-green, canary)…

    114 GitHub stars~3.4k tokensUpdated 5 days ago
    Auto-check: notes
  • DB Admin

    EliasOulkadi/shokunin

    PostgreSQL database administration — backup/restore (pgdump, PITR, WAL archiving), health monitoring (connections, bloat, cache hit ratio, dead tuples), connection pooling (PgBouncer), replication…

    114 GitHub stars~2k tokensUpdated 5 days ago
    Auto-check: notes
  • DB Sculptor

    EliasOulkadi/shokunin

    Design database schemas with Prisma/Drizzle, PostgreSQL index strategy (B-tree, GIN, GiST, BRIN, Hash), query optimization (EXPLAIN ANALYZE), migration safety (expand/contract, zero-downtime), and…

    114 GitHub stars~3.1k tokensUpdated 5 days ago
    Auto-check: notes
  • Docker

    EliasOulkadi/shokunin

    Optimize Docker images with multi-stage builds, distroless bases, BuildKit cache mounts, multi-arch builds, compose watch, security hardening (non-root, seccomp, capabilities drop), and…

    114 GitHub stars~3.8k tokensUpdated 5 days ago
    Auto-check: notes
  • Error Handler

    EliasOulkadi/shokunin

    Design error handling, structured logging, and observability with OpenTelemetry (traces, metrics, logs), error classification, recovery patterns (retry with jitter, circuit breaker, bulkhead…

    114 GitHub stars~3.6k tokensUpdated 5 days ago
    Auto-check: notes
  • Kubernetes

    EliasOulkadi/shokunin

    Deploy, manage, and debug Kubernetes in production — Deployments, Services, Gateway API, Service Mesh (Istio/Linkerd/Cilium), eBPF observability (Cilium Hubble), security hardening (Pod Security…

    114 GitHub stars~3.3k tokensUpdated 5 days ago
    Auto-check: notes

Questions about Component Forge

What does Component Forge do?

Build production-grade components for React, Vue 3, and Svelte 5 with all states (loading, empty, error, success, idle), TypeScript strict, WCAG 2.2 accessibility, server components (RSC), and…. Component Forge is an agent skill from EliasOulkadi/shokunin.2 accessibility, server components (RSC), and compound component patterns.

When should I use Component Forge?

Component Forge fits situations like: user asks to create a UI component; frontend module; design system component; page layouts (use landing-craft).

How do I install Component Forge in Claude Code?

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

How do I install Component Forge in Codex?

Run `npx skills add EliasOulkadi/shokunin --skill component-forge -a codex`. Or copy the skill folder (.pack/skills/component-forge in EliasOulkadi/shokunin) into .agents/skills/component-forge in your project. Codex loads it when a task matches its description.

Can I use Component Forge 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 EliasOulkadi/shokunin --skill component-forge -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/component-forge, .gemini/skills/component-forge, .github/skills/component-forge and .opencode/skills/component-forge in your project.

What does Component Forge need to run?

Going by SKILL.md and its folder, Component Forge needs a shell for the scripts in its folder. Our summary lists: A Bash shell. Its frontmatter pre-approves these tools: Read, Bash, Write, Grep, Glob. Compatibility (from SKILL.md): opencode.

Does Component Forge access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Component Forge safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Component Forge use?

Component Forge is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Component Forge use?

About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.3k tokens, read only when the agent opens those files.

What are the alternatives to Component Forge?

Skills that share tags, products or a category with Component Forge: UI/UX Design System Advisor (Galaxy-Dawn/claude-scholar, 5.7k stars), Monochrome (vaneenige/monochrome-ui, 132 stars), Frontend Design (jwynia/agent-skills, 169 stars) and Kb Web Scanning (Community-Access/accessibility-agents, 423 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Component Forge?

EliasOulkadi (a GitHub user) maintains it in EliasOulkadi/shokunin, which has 114 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 5, 2026.

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