Release
seasonedcc/remix-forms
Release a new version of the remix-forms npm package. An agent skill from seasonedcc/remix-forms.
Build idiomatic headless primitives in packages/ui for Remix.
$ npx skills add remix-run/remix --skill author-ui-primitives -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install remix-run/remix author-ui-primitives --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/remix-run/remix.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/author-ui-primitives .claude/skills/author-ui-primitives && 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 "author-ui-primitives" agent skill from https://github.com/remix-run/remix/tree/main/.agents/skills/author-ui-primitives into .claude/skills/author-ui-primitives/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "author-ui-primitives", 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/remix-run/remix/tree/main/.agents/skills/author-ui-primitivesType 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 remix-run/remix --skill author-ui-primitives -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install remix-run/remix author-ui-primitives --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/remix-run/remix.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/author-ui-primitives .agents/skills/author-ui-primitives && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "author-ui-primitives" agent skill from https://github.com/remix-run/remix/tree/main/.agents/skills/author-ui-primitives into .agents/skills/author-ui-primitives/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "author-ui-primitives", 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 remix-run/remix --skill author-ui-primitives -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install remix-run/remix author-ui-primitives --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/remix-run/remix.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/author-ui-primitives .cursor/skills/author-ui-primitives && 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 "author-ui-primitives" agent skill from https://github.com/remix-run/remix/tree/main/.agents/skills/author-ui-primitives into .cursor/skills/author-ui-primitives/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "author-ui-primitives", 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/remix-run/remix.git --path .agents/skills/author-ui-primitives--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 remix-run/remix --skill author-ui-primitives -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install remix-run/remix author-ui-primitives --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/remix-run/remix.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/author-ui-primitives .gemini/skills/author-ui-primitives && 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 "author-ui-primitives" agent skill from https://github.com/remix-run/remix/tree/main/.agents/skills/author-ui-primitives into .gemini/skills/author-ui-primitives/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "author-ui-primitives", 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 remix-run/remix author-ui-primitivesInstalls 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 remix-run/remix --skill author-ui-primitives -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/remix-run/remix.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/author-ui-primitives .github/skills/author-ui-primitives && 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 "author-ui-primitives" agent skill from https://github.com/remix-run/remix/tree/main/.agents/skills/author-ui-primitives into .github/skills/author-ui-primitives/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "author-ui-primitives", 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 remix-run/remix --skill author-ui-primitives -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install remix-run/remix author-ui-primitives --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/remix-run/remix.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/author-ui-primitives .opencode/skills/author-ui-primitives && 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 "author-ui-primitives" agent skill from https://github.com/remix-run/remix/tree/main/.agents/skills/author-ui-primitives into .opencode/skills/author-ui-primitives/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "author-ui-primitives", 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.
author-ui-primitivesBuild idiomatic headless primitives in packages/ui for Remix.
Author UI Primitives is an agent skill from remix-run/remix. Build idiomatic headless primitives in packages/ui for Remix. Use when authoring or revising accessible UI behavior, required structural styles, public primitive events, or shared primitive utilities under packages/ui/src.
Its SKILL.md is about 2.5k 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 Development. It works with Remix. The repository describes itself as: The fully-stacked web framework. The licence is MIT.
Read from SKILL.md and the folder at commit abe67bc. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Author UI Primitives loads about 2.5k tokens when it runs. Until then it costs about 62 tokens; SKILL.md has 1,053 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 remix-run/remix at commit abe67bc, republished under its MIT licence (© remix-run). 1,053 words, ~2,514 tokens.
.claude/skills/author-ui-primitives/SKILL.md (or your agent's skills folder).Use this skill when building or revising packages/ui primitive APIs. The public
@remix-run/ui/* entries are sourced from packages/ui/src/* and are not
available through the remix package.
Each public primitive has a top-level packages/ui/src/<name>.ts or
packages/ui/src/<name>.tsx entry.
Common files:
<name>.ts or <name>.tsx: the public primitive entry and implementation.<name>/README.md: usage docs for the primitive.<name>.test.ts or <name>.test.tsx: primitive tests.demos/<name>.demo.tsx: demo cases for the shared UI demo app.lib/*: shared implementation-only behavior used by multiple primitives.Current examples:
anchor, popover, listboxcombobox, menu, selectaccordion, tabs, toggleWhen adding or moving public entries, update both exports and
publishConfig.exports in packages/ui/package.json. Public entries use the
flat ./<name> path.
Choose the smallest layer that fits the job.
src/lib only when multiple primitives
already need it.Good composition flows downward:
select composes popover and listbox.combobox composes popover and listbox, then owns input text, filtering,
and popup timing.menu composes popover, outside interactions, typeahead, and hover aim.accordion, tabs, and toggle keep their own primitive contexts.Primitive modules export named bindings, and callers namespace them at import time:
import * as select from '@remix-run/ui/select'
function StatusSelect() {
return () => (
<select.Context defaultLabel="Status">
<button type="button" mix={select.trigger()} />
<div mix={select.popover()}>
<div mix={select.list()}>
<div mix={select.option({ label: 'Open', value: 'open' })}>Open</div>
</div>
</div>
</select.Context>
)
}Use Context, ItemContext, or GroupContext for providers, and short role
names for mixins such as trigger, popover, list, option, hiddenInput,
root, item, content, panel, parent, or control.
Do not add a public namespace object just to group exports. The established
pattern is named exports plus import * as name.
README examples should import primitives from @remix-run/ui/... and component
APIs from remix/component. Source files in this package import other primitive
APIs from @remix-run/ui/... and component APIs from @remix-run/component.
Primitive components use the current Remix component two-phase shape:
export function Component(handle: Handle<ComponentProps>): () => RemixNode {
let hasInitialized = false
let value: string | null = null
return () => {
if (!hasInitialized) {
value = handle.props.defaultValue ?? null
hasInitialized = true
}
return handle.props.children
}
}Rules:
handle.props object in setup and render code.handle.update().handle.props during the first
render when defaults depend on current props or registered children.handle.update() before DOM work that depends on the next rendered tree;
check the returned signal before continuing async flows.handle.queueTask() for post-render ref callbacks, registration checks,
popup show/hide work, CSS-transition follow-up, and public ref delivery.Providers scope one behavior instance. Prefer plain context objects with getters and methods over controller classes.
Use context for:
open(), close(), navigate(), select(),
highlight(), toggleItem(), or setInputText()Provider patterns:
handle.context.set(...) once in setup scope when the object can stay
stable.AccordionItemProvider.handle.props.children unless the provider must compose lower-level
providers, like SelectProvider returning listbox.Context.Do not add event emitters to context just to wake descendants. Normal component updates, getters, and context methods are the default coordination layer.
Mixins adapt one host element to one behavior role.
Use createMixin with explicit host, argument, and prop types:
const triggerMixin = createMixin<HTMLButtonElement, [], ElementProps>((handle) => {
let context = handle.context.get(SelectProvider)
return (props) => [
attrs({
'aria-haspopup': 'listbox',
'aria-expanded': context.isExpanded ? 'true' : 'false',
disabled: context.disabled ? true : props.disabled,
}),
ref((node: HTMLButtonElement, signal) => {
context.registerTrigger(node)
signal.addEventListener('abort', () => {
context.unregisterTrigger(node)
})
}),
on('click', () => {
context.open()
}),
]
})Mixin rules:
data-*, hidden, disabled, tabIndex, and ids from context
getters.ref(...), handle.queueTask(...), or an insert
listener, and clean up registrations with the abort signal when needed.hostType,
createElement(...), or renderMixinElement(...) to rewrite props safely.If a mixin accepts optional options and also receives host props, follow the
existing options = {}, props = options as ElementProps pattern when needed to
distinguish authored options from host props.
Keep imperative DOM work near the owner of the relevant ref.
popover.surface() owns showPopover(), hidePopover(), outside click,
focus restoration, anchoring, and scroll locking.select.popover() and combobox.popover() own popup min-width syncing because
they know their trigger/input refs.listbox owns option scrolling and selection flash.menu owns branch closing, focus transfer, hover aim, and close animation
sequencing.When waiting for transitions or timers, use existing utilities such as
waitForCssTransition(...), wait(...), and flashAttribute(...), then check
the component signal before dispatching events or updating more state.
Use bubbling DOM events for public primitive contracts, not for internal coordination.
Established public event pattern:
const EVENT_NAME = 'rmx:<primitive>-<action>' as constHTMLElementEventMapon<Primitive><Action>(handler) mixin that wraps on(...)onValueChange when the primitive is
statefulExamples include SelectChangeEvent, ComboboxChangeEvent, MenuSelectEvent,
AccordionChangeEvent, TabsChangeEvent, and ToggleChangeEvent.
Primitives may use css(...) only for structural styles required for correct
positioning, visibility, scrolling, or interaction. Typography, colours,
spacing, borders, shadows, radii, decorative icons, and themes belong to the
consumer.
For behavior changes, test the primitive directly.
Add or update:
<name>.test.tsx for provider, mixin, keyboard, focus, registration, and event
behaviorpackages/ui/src/demos<name>/README.md examples that import from @remix-run/ui/...Before finishing a packages/ui primitive change, verify:
packages/ui/src/<name>.ts or
packages/ui/src/<name>.tsx and exports match packages/ui/package.jsonpackages/ui/src/libon... mixin patternAvoid:
src/libpopover, listbox, typeahead, outside-click, or keyboard
helpers inside a higher-level primitivesrc/lib before a second primitive needs them© remix-run, 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 .agents/skills/author-ui-primitives of remix-run/remix.
Open the folder on GitHubat commit abe67bc
Author UI Primitives 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 |
|---|---|---|---|---|---|---|
| Author UI Primitives this skillremix-run/remix | 33k | — | ~2.5k | Automated safety check: Pass | MIT | |
| Releaseseasonedcc/remix-forms | 514 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Skill Managerseasonedcc/remix-forms | 514 | — | ~6.1k | Automated safety check: Pass | MIT | |
| Safe Element Comparisonseasonedcc/remix-forms | 514 | — | ~1.8k | Automated safety check: Pass | MIT | |
| Vercel Composition Patternssupabase/supabase | 111k | 58 repos | ~726 | Automated safety check: Pass | MIT | |
| Finishing a Development Branchobra/superpowers | 297k | 5 repos | ~1.9k | Automated safety check: Pass | MIT |
seasonedcc/remix-forms
Release a new version of the remix-forms npm package. An agent skill from seasonedcc/remix-forms.
seasonedcc/remix-forms
Create, manage, and debug Claude Code Agent Skills. An agent skill from seasonedcc/remix-forms.
seasonedcc/remix-forms
Maintain element type comparison safety in remix-forms. An agent skill from seasonedcc/remix-forms.
supabase/supabase
React composition patterns that scale. An agent skill from supabase/supabase.
obra/superpowers
Walks the last step of a branch: confirm tests pass, detect the git environment, ask how to integrate, carry out your choice and clean up the worktree.
rolling-scopes/rsschool-app
Master TypeScript's advanced type system including generics, conditional types, mapped types, template literals, and utility types for building type-safe applications.
remix-run/remix
Safely replace one GitHub pull request with another. An agent skill from remix-run/remix.
remix-run/remix
Create or align a package in the Remix monorepo to match existing package conventions.
remix-run/remix
Fix a reported issue in Remix from a GitHub issue. An agent skill from remix-run/remix.
remix-run/remix
Create or revise demos in the Remix repository. An agent skill from remix-run/remix.
remix-run/remix
Create GitHub pull requests with clear, reviewer-friendly descriptions.
remix-run/remix
Create or revise a GitHub tracking issue for a Remix change, including the target outcome, implementor context, a concise checkbox plan, compatibility concerns, and required gates.
Works with
Categories
Build idiomatic headless primitives in packages/ui for Remix. Author UI Primitives is an agent skill from remix-run/remix. Build idiomatic headless primitives in packages/ui for Remix.
Author UI Primitives fits situations like: revising accessible UI behavior; required structural styles; public primitive events; shared primitive utilities under packages/ui/src.
Run `npx skills add remix-run/remix --skill author-ui-primitives -a claude-code`. Or copy the skill folder (.agents/skills/author-ui-primitives in remix-run/remix) into .claude/skills/author-ui-primitives in your project. Claude Code loads it when a task matches its description.
Run `npx skills add remix-run/remix --skill author-ui-primitives -a codex`. Or copy the skill folder (.agents/skills/author-ui-primitives in remix-run/remix) into .agents/skills/author-ui-primitives 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 remix-run/remix --skill author-ui-primitives -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/author-ui-primitives, .gemini/skills/author-ui-primitives, .github/skills/author-ui-primitives and .opencode/skills/author-ui-primitives in your project.
SKILL.md names no scripts, command-line tools or credentials: Author UI Primitives is instructions for the agent only.
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.
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.
Author UI Primitives 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.5k tokens (SKILL.md is roughly 10k 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 Author UI Primitives: Release (seasonedcc/remix-forms, 514 stars), Skill Manager (seasonedcc/remix-forms, 514 stars), Safe Element Comparison (seasonedcc/remix-forms, 514 stars) and Vercel Composition Patterns (supabase/supabase, 111k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
remix-run (a GitHub organization) maintains it in remix-run/remix, which has 33,404 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 9, 2026.
Source: remix-run/remix on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.