尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Open source from Noise Factor · more projects
A Claude Code plugin for the Handfish Design System. Handfish provides Web Components and OKLCH design tokens for Noisedeck, Tetra, and other Noise Factor products.
The plugin teaches light-DOM style injection, --hf-* token use, form-associated components, and the 17-theme system. It prevents common mistakes with hardcoded colors, !important, Shadow DOM workarounds, and event semantics.檢視完整 README ↗Open source from Noise Factor · more projects
A Claude Code plugin for the Handfish Design System. Handfish provides Web Components and OKLCH design tokens for Noisedeck, Tetra, and other Noise Factor products.
The plugin teaches light-DOM style injection, --hf-* token use, form-associated components, and the 17-theme system. It prevents common mistakes with hardcoded colors, !important, Shadow DOM workarounds, and event semantics.
handfish or uses --hf-*.data-theme values (some files declare both dark/light variants), plus the two default modes. The skill knows how each one re-skins the token layer.!important or Shadow DOM hacks./plugin marketplace add noisefactorllc/handfish-design
/plugin install handfish-design@noisefactor
Or require it for your team by adding to .claude/settings.json:
{
"extraKnownMarketplaces": {
"noisefactor": {
"source": {
"source": "github",
"repo": "noisefactorllc/handfish-design"
}
}
},
"enabledPlugins": {
"handfish-design@noisefactor": true
}
}
The skill triggers whenever Claude is doing web work that touches:
handfish or @noisedeck/handfish--hf-* CSS variables in stylesheets or inline styles<toggle-switch>, <slider-value>, <select-dropdown>, <dropdown-menu>, <dropdown-item>, <color-picker>, <color-wheel>, <color-swatch>, <gradient-stops>, <vector2d-picker>, or <vector3d-picker>. This also includes <justify-button-group>, <code-editor>, <image-magnifier>, <knob-dial>, <led-matrix>, <tempo-bar>, <menu-bar>, <seance-dialog>, <session-status>, <join-session-dialog>, and <agent-connect-dialog>.AboutDialog JS class (constructed with new AboutDialog({...}), then .show())showToast, showSuccess, showError, showWarning, showInfo)initializeTooltips, class="tooltip" + data-title attribute)registerEscapeable, unregisterEscapeable, initEscapeHandler)formatShortcut, isMacPlatform)rgbToHex, parseHex, rgbToHsv, OkLab/OKLCH math)dir="rtl" on a handfish page, data-language="industrial", or overriding a component's built-in stringsThe plugin includes domain-specific reference documents that Claude loads contextually:
| Reference | Covers |
|---|---|
setup.md | CDN URLs, importmap pattern, three pinning levels (/0, /0.10, /0.10.1), font preloading, base styles, the industrial.css typeface opt-in, RTL setup |
tokens.md | The full --hf-* token catalog, OKLCH color format, semantic vs. primitive tokens, the --hf-led-* readout palette, why hardcoding breaks themes |
theming.md | The 17 built-in themes, data-theme switching, building a custom theme, dark/light variants, preventing FOUC, and the theme / language / direction axes |
components.md | Hand-written prose for the 21 custom elements + AboutDialog class + helper utility families: usage patterns, examples, gotchas, anti-patterns |
api-canonical.md | Machine-generated source-of-truth reference — attribute names, event types, event detail payloads, form-association status, toast defaults. Generated deterministically from handfish source, checked by npm run check. Wins when it disagrees with components.md. |
styling.md | Light-DOM style injection model, overriding component styles by specificity, logical vs. physical CSS for RTL, why !important and Shadow DOM workarounds are banned |
i18n.md | Bidi/RTL support, dir, overridable strings, logical CSS, and <bdi> isolation. Handfish provides component support. Apps provide translations. |
color.md | Color conversion utilities (rgbToHex, parseHex, OkLab/OKLCH math), the 0–255 vs OKLCH conventions |
utilities.md | Toasts (defaults, real options, dismissLabel), the stack-based escape handler, tooltip initialization (class="tooltip" + data-title), platform-aware shortcut formatting (formatShortcut) |
contributing.md | Adding a new component to handfish itself + the canonical-reference regeneration workflow for skill maintainers |
The last API audit was 2026-08-12, against handfish 0.10 at HEAD commit 9bbb287. It covered all industrial components (knob-dial, led-matrix, tempo-bar), menu-bar, and the Seance components (seance-dialog, session-status, join-session-dialog). It also covered code-editor collaboration APIs, bidi/RTL support, and shortcuts utilities. The generated references/api-canonical.md records separate provenance. Its JSON last changed at commit d8d350c on 2026-07-28, when the extracted API last changed.
handfish ships components independently of this repo. This repo does not update automatically when handfish ships, so the plugin can teach Claude a catalog missing a third of the library. Checks cover both surfaces that can drift:
references/api-canonical.md — generated from handfish's machine-extracted
docs/component-api.json.description frontmatter in skills/handfish-design/SKILL.md — the
activation trigger. A tag missing here means nobody working on that
component gets handfish guidance at all.npm test # both drift checks, plus the generator's own behaviour
npm run check # is api-canonical.md current? (read-only, exits non-zero if not)
npm run regenerate
The drift checks need a sibling handfish checkout at ../handfish. Without one,
they skip, so the suite still runs standalone. The CI test job gates changes
to this repo with the drift checks skipped. Thus, a handfish release cannot
fail an unrelated PR. A separate weekly drift job clones handfish and runs
the checks live.
The generator produces byte-identical output for the same input. Provenance comes from git rather than a wall clock. An empty diff therefore means nothing changed, which makes the check possible.
When handfish ships something new:
cd ../handfish && git pull && node scripts/generate-component-api.jsnpm run regenerate here. Review the diff.description in SKILL.md (npm test names the
missing ones).components.md for anything whose API changed.See skills/handfish-design/references/contributing.md § "Maintaining this
skill" for the full workflow.
MIT