尚未检测到更新。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