Anyrobot Shadcn Frontend JS
opsrobot-ai/opsrobot
AnyRobot 前端开发核心指南:提供 JavaScript + React + shadcn/ui 开发的精简实用规范和最佳实践。
Patterns, conventions, and examples for implementing new oxlint Tailwind CSS rules and their tests.
$ npx skills add sergioazoc/oxlint-tailwindcss --skill write-rule -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install sergioazoc/oxlint-tailwindcss write-rule --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/sergioazoc/oxlint-tailwindcss.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/write-rule .claude/skills/write-rule && rm -rf skills-srcUse ~/.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/
Install the "write-rule" agent skill from https://github.com/sergioazoc/oxlint-tailwindcss/tree/main/.claude/skills/write-rule into .claude/skills/write-rule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-rule", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/sergioazoc/oxlint-tailwindcss/tree/main/.claude/skills/write-ruleType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add sergioazoc/oxlint-tailwindcss --skill write-rule -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install sergioazoc/oxlint-tailwindcss write-rule --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sergioazoc/oxlint-tailwindcss.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/write-rule .agents/skills/write-rule && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "write-rule" agent skill from https://github.com/sergioazoc/oxlint-tailwindcss/tree/main/.claude/skills/write-rule into .agents/skills/write-rule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-rule", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sergioazoc/oxlint-tailwindcss --skill write-rule -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install sergioazoc/oxlint-tailwindcss write-rule --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sergioazoc/oxlint-tailwindcss.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/write-rule .cursor/skills/write-rule && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "write-rule" agent skill from https://github.com/sergioazoc/oxlint-tailwindcss/tree/main/.claude/skills/write-rule into .cursor/skills/write-rule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-rule", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/sergioazoc/oxlint-tailwindcss.git --path .claude/skills/write-rule--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add sergioazoc/oxlint-tailwindcss --skill write-rule -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install sergioazoc/oxlint-tailwindcss write-rule --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sergioazoc/oxlint-tailwindcss.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/write-rule .gemini/skills/write-rule && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "write-rule" agent skill from https://github.com/sergioazoc/oxlint-tailwindcss/tree/main/.claude/skills/write-rule into .gemini/skills/write-rule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-rule", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install sergioazoc/oxlint-tailwindcss write-ruleInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add sergioazoc/oxlint-tailwindcss --skill write-rule -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/sergioazoc/oxlint-tailwindcss.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/write-rule .github/skills/write-rule && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "write-rule" agent skill from https://github.com/sergioazoc/oxlint-tailwindcss/tree/main/.claude/skills/write-rule into .github/skills/write-rule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-rule", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add sergioazoc/oxlint-tailwindcss --skill write-rule -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install sergioazoc/oxlint-tailwindcss write-rule --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/sergioazoc/oxlint-tailwindcss.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/write-rule .opencode/skills/write-rule && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "write-rule" agent skill from https://github.com/sergioazoc/oxlint-tailwindcss/tree/main/.claude/skills/write-rule into .opencode/skills/write-rule/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "write-rule", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
write-rulePatterns, conventions, and examples for implementing new oxlint Tailwind CSS rules and their tests.
Write Rule is an agent skill from sergioazoc/oxlint-tailwindcss. Patterns, conventions, and examples for implementing new oxlint Tailwind CSS rules and their tests. Use when creating, scaffolding, or understanding rule implementation.
Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Frontend & Design, covering Design systems and Project scaffolding. It works with Tailwind CSS and shadcn/ui. The repository describes itself as: Tailwind CSS v4 lint rules for oxlint that read your design system: unknown, conflicting and deprecated classes, theme colors and class order, with autofixes. The licence is MIT.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 1e4b9ee. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
pnpmnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm and npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Write Rule loads about 2.3k tokens when it runs. Until then it costs about 45 tokens; SKILL.md has 1,050 words of instructions outside code blocks.
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.
The automated check found no risky patterns in SKILL.md.
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); files beside SKILL.md are not scanned.
The full file from sergioazoc/oxlint-tailwindcss at commit 1e4b9ee, republished under its MIT licence (© sergioazoc). 1,050 words, ~2,348 tokens.
.claude/skills/write-rule/SKILL.md (or your agent's skills folder).If a rule name is provided as $ARGUMENTS, scaffold the rule at packages/oxlint-tailwindcss/src/rules/$ARGUMENTS.ts (exported under the camelCase name, e.g. noDemoThing) and its test at packages/oxlint-tailwindcss/tests/rules/$ARGUMENTS.test.ts, then register it (see Registration). Paths in the table and under Tests are relative to packages/oxlint-tailwindcss/. The helpers named here are documented in CLAUDE.md ("Shared helpers", "Key Constraints"); the reference files below are the patterns to copy — read the one that matches the rule's kind before writing.
Every rule is defineRule({ meta, createOnce }) from @oxlint/plugins, builds a check(locations: ClassLocation[]) function, and returns createExtractorVisitors(context, check) from ../utils/extractors. Don't hand-write the four visitors or pass DEFAULT_EXTRACTOR_CONFIG: that ignores the user's settings.tailwindcss extractor config. The one exception is a rule that compares an element's whole class list rather than each class string (no-borrowed-component-styles): it keeps Program from createExtractorVisitors (the settings check) and adds its own JSXAttribute visitor that calls extractFromJSXAttribute / extractFromCallExpression with getExtractorConfig(context). context.settings, context.filename, and options are unavailable in createOnce(), so read them lazily inside check through the helpers below. A rule that touches the design system starts check with if (locations.length === 0) return: the visitors call check([]) on every node, and without the guard an empty call triggers a DS load (and locations[0] throws). Both DS kinds declare entryPoint: { type: 'string' } in their schema next to their own options, because createLazyLoader reads the rule-level entryPoint.
| Kind | Copy | Key pieces |
|---|---|---|
| DS-dependent (needs the design system, fails loud) | src/rules/no-unnecessary-arbitrary-value.ts | createLazyLoader(context); in check, safeGetDS(getDS, context, locations[0].node), which reports designSystemUnavailable and returns null; ...DS_UNAVAILABLE_MESSAGE in meta.messages; defaultOptions: [{}] when entryPoint is the only option |
| DS-optional (uses the DS when configured, static fallback otherwise) | src/rules/no-deprecated-classes.ts | softGetDS(getDS) plus a deterministic static path when it returns null. softGetDS only guards the load: a later worker-service call (declarations, sort, canonicalize) can still throw, so wrap it in catch (e) { if (!isFatalError(e)) throw e; /* static path */ } as no-dark-without-light does. Never declares DS_UNAVAILABLE_MESSAGE |
| No DS, with options | src/rules/max-class-count.ts | createLazyOptions<Options, T>(context, compile) from ../utils/context; meta.defaultOptions (omit it when schema: []) |
src/utils/class-parser.ts is the home for class parsing (splitUtilityAndVariant, extractVariants, stripProjectPrefix, splitImportant / reattachImportant); don't split on : by hand, since brackets and parentheses can contain it. A rule that reads the variant chain strips the project prefix first (it comes first in the chain); a DS-optional rule gets it with softGetDS(getDS)?.cache.prefix ?? '', as enforce-consistent-line-wrapping does, and tests/fixtures/with-prefix.css exercises it.
Rewrite the utility, not the whole class: splitUtilityAndVariant separates the variant chain (the project prefix included) and splitImportant / reattachImportant round-trip ! — the DS-dependent reference shows the sequence. Split the class string with splitClassesWithSeparators(loc.value), build offending: { cls, replacement }[] from split.classes, and pass it to reportClassReplacements(context, loc, split, split.classes, offending, { messageId }) from ../utils/report. It reports data: { className, replacement } (rename the second key with replacementKey, as enforce-canonical does), so the messages use those placeholders. It puts the autofix on the first offender and a suggestReplace suggestion on each later one, and rebuilds with rebuildClassString, which keeps the multiline wrapping enforce-consistent-line-wrapping introduces — rebuilding with .join(' ') would flatten it. Declare fixable: 'code', hasSuggestions: true, and a suggestReplace message. When a replacement comes from a name table and must exist in the project's design system, guard it with makeReplacementGuard(cache) from ../utils/replacement, as no-deprecated-classes does: pass it the rebuilt class (variant and ! included). It wraps the tolerant cache.isValid. Suggestion-only rules (prefer-scale-token, no-unknown-classes) report suggest by hand instead.
Tests live in tests/rules/<rule-name>.test.ts, use RuleTester from oxlint/plugins-dev, and give JSX cases filename: 'test.tsx'.
runWithFixture(ruleTester, name, rule, ENTRY_POINT, cases) or makeFixtureRunner(ENTRY_POINT) from ../utils/with-fixture. They inject settings.tailwindcss.entryPoint; without it the rule reports designSystemUnavailable. A beforeAll that calls resetDesignSystem() + getLoadedDesignSystem(ENTRY_POINT) only warms the cache. Reference: tests/rules/no-unnecessary-arbitrary-value.test.ts (it also shows how to assert the suggestReplace suggestions).ruleTester.run (no entryPoint) exercises the static fallback, and a makeFixtureRunner block exercises the DS path. Reference: tests/rules/no-dark-without-light.test.ts.ruleTester.run, with options: [{ … }] on the cases that override the default. Reference: tests/rules/max-class-count.test.ts.data, include every placeholder its message uses: the RuleTester hydrates the message from data and fails on a partial one.designSystemUnavailable; a DS-optional rule gets one case whose settings.tailwindcss.entryPoint points at a missing CSS file and still produces the static result. For a DS-optional rule, also add expect(rule.meta?.messages).not.toHaveProperty(DS_UNAVAILABLE_MESSAGE_ID) next to the existing one in tests/integration/fatal-errors.test.ts — that assertion is per rule, not automatic.tests/integration/multiline-preservation.test.ts.Fixtures live in tests/fixtures/ (default.css is the usual entry point). Run one file with pnpm -C packages/oxlint-tailwindcss exec vitest run tests/rules/<rule-name>.test.ts; also run tests/integration/fatal-errors.test.ts (it iterates every registered rule) and tests/integration/multiline-preservation.test.ts.
A new rule is wired in at:
packages/oxlint-tailwindcss/src/index.ts — the import and the rules map entry (the key is the public rule name). The rule's meta.docs is ruleDocs('<name>', { description, category, recommended, designSystem }) from ../utils/rule-docs: category places it on rules/index.md and in the generated rule list, recommended puts it in the generated recommended configs, and designSystem must match what the rule does (docs-sync checks it). The docs generator reads this registry from the built dist/index.cjs, so run pnpm build before step 2.packages/docs/rules/_extras/<rule>.md and packages/docs/es/rules/_extras/<rule>.md, then pnpm -C packages/docs generate (it does not build first; pnpm -C packages/docs build does both). An _extras file replaces the whole generated body (options, examples, auto-fix), so copy the section layout of an existing one of the same kind; the ES copy uses neutral tuteo. The regenerated rules/<rule>.md and es/rules/<rule>.md are tracked — commit them, don't hand-write them. The ✗ / ✓ examples in both _extras files run as tests (tests/docs/doc-examples.test.ts): give options with // options: { … } and the fixed result with // → <line>; packages/docs/CLAUDE.md has the grammar.packages/docs/rules/index.md and packages/docs/es/rules/index.md (both the category section and the matching DS-group table under "Defaults reference"), packages/docs/index.md, packages/docs/es/index.md, README.md, and the count in the first line of packages/oxlint-tailwindcss/README.md (its config and rule table are generated from meta.docs).reportClassReplacements counts), and the source comments that enumerate helper users (the headers of src/utils/report.ts and src/utils/replacement.ts), when the new rule changes them.packages/oxlint-tailwindcss/CHANGELOG.md entry. A new rule is a minor bump (see Versioning in CLAUDE.md); check the published version with npm view oxlint-tailwindcss version before picking the number.© sergioazoc, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/write-rule of sergioazoc/oxlint-tailwindcss.
Open the folder on GitHubat commit 1e4b9ee
Write Rule 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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Write Rule this skillsergioazoc/oxlint-tailwindcss | 101 | — | ~2.3k | Automated safety check: Pass | MIT | |
| Anyrobot Shadcn Frontend JSopsrobot-ai/opsrobot | 135 | — | ~3.3k | Automated safety check: Notes | Apache-2.0 | |
| UI StylingOhh-889/skyroc | 795 | 13 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Creative Tim UI Blockscreativetimofficial/ui | 12k | — | ~2.1k | Automated safety check: Notes | MIT | |
| Cosscrafter-station/petdex | 4.2k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Activepieces Design Systemactivepieces/activepieces | 25k | — | ~3.6k | Automated safety check: Pass | Custom licence |
opsrobot-ai/opsrobot
AnyRobot 前端开发核心指南:提供 JavaScript + React + shadcn/ui 开发的精简实用规范和最佳实践。
Ohh-889/skyroc
Create beautiful, accessible user interfaces with shadcn/ui components (built on Radix UI + Tailwind), Tailwind CSS utility-first styling, and canvas-based visual designs.
creativetimofficial/ui
Helps install, generate and review Creative Tim UI blocks: shadcn/ui-based React and Tailwind sections that follow a restrained, production-minded design philosophy.
crafter-station/petdex
Helps implement coss UI components correctly. An agent skill from crafter-station/petdex.
activepieces/activepieces
Design system for Activepieces (open-source AI automation platform, "open source replacement for Zapier").
bitjaru/styleseed
Capture a human-approved UI design lesson as a privacy-minimized local StyleSeed candidate, review it, and prepare an opt-in share package without transmitting project code, prompts, screenshots, or…
sergioazoc/oxlint-tailwindcss
Set up oxlint-tailwindcss — Tailwind CSS v4 lint rules for oxlint — in a project, and act on its diagnostics.
Works with
Categories
Patterns, conventions, and examples for implementing new oxlint Tailwind CSS rules and their tests. Write Rule is an agent skill from sergioazoc/oxlint-tailwindcss. Patterns, conventions, and examples for implementing new oxlint Tailwind CSS rules and their tests.
Write Rule fits situations like: understanding rule implementation; tasks that involve Design systems; tasks that involve Project scaffolding.
Run `npx skills add sergioazoc/oxlint-tailwindcss --skill write-rule -a claude-code`. Or copy the skill folder (.claude/skills/write-rule in sergioazoc/oxlint-tailwindcss) into .claude/skills/write-rule in your project. Claude Code loads it when a task matches its description.
Run `npx skills add sergioazoc/oxlint-tailwindcss --skill write-rule -a codex`. Or copy the skill folder (.claude/skills/write-rule in sergioazoc/oxlint-tailwindcss) into .agents/skills/write-rule in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add sergioazoc/oxlint-tailwindcss --skill write-rule -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/write-rule, .gemini/skills/write-rule, .github/skills/write-rule and .opencode/skills/write-rule in your project.
Going by SKILL.md and its folder, Write Rule needs the command-line tools its instructions call (pnpm and npm).
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Write Rule is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.3k tokens (SKILL.md is roughly 9.4k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Write Rule: Anyrobot Shadcn Frontend JS (opsrobot-ai/opsrobot, 135 stars), UI Styling (Ohh-889/skyroc, 795 stars), Creative Tim UI Blocks (creativetimofficial/ui, 12k stars) and Coss (crafter-station/petdex, 4.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
sergioazoc (a GitHub user) maintains it in sergioazoc/oxlint-tailwindcss, which has 101 GitHub stars. The repository was last updated on October 10, 2026.
Source: sergioazoc/oxlint-tailwindcss on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.