Best for
- state.stack.frontend resolves to plain, or to a label with no
- A stack whose axes.reactivity or axes.meta is recognised but has no
- As the base of a composition: an overlay skill (livewire, flux,
event4u-app/agent-config/src/skills/ui-apply-generic/SKILL.md
Use when implementing a UI brief on a stack with no framework executor — Svelte, Astro, Angular, plain HTML. Carries the stack-independent contract; idiom comes from the stack corpus.
Decision brief
The plain lane used to be a name with nothing behind it. This skill is the lane: it carries the implementation discipline that previously lived only inside the framework executors, and it gets framework idiom from the 16-stack corpus instead of from prose written here. That spli…
Compatibility matrix
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/ui-apply-generic"Inspect the Agent Skill "ui-apply-generic" from https://github.com/event4u-app/agent-config/blob/6a5670b7881a676c0da90d2afb950298087c4ccb/src/skills/ui-apply-generic/SKILL.md at commit 6a5670b7881a676c0da90d2afb950298087c4ccb. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
Read state.stack.axes and query per resolved axis value, most specific first: meta → reactivity → componentlib.
Read state.stack.axes and query per resolved axis value, most specific first: meta → reactivity → componentlib.
Every item is a hard requirement, and none of them is framework-specific:
Exercise the result with whatever the host actually has, and name which:
Do NOT use when a framework executor already covers the whole job — then this skill is the base and the executor is the overlay, dispatched together.
Permission review
No configured static risk pattern was detected
This is not proof of safety. Runtime behavior, indirect dependencies, and hidden external systems are outside the static scan.
Evidence record
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 91/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 9 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
The
plainlane used to be a name with nothing behind it. This skill is the lane: it carries the implementation discipline that previously lived only inside the framework executors, and it gets framework idiom from the 16-stack corpus instead of from prose written here.That split is the whole point. One skill plus a corpus serves Svelte, Astro, Angular, Alpine, htmx and everything future at once. Sixteen framework skills would serve the same set and cost a single maintainer sixteen surfaces to keep current — the enumeration this package refuses.
state.stack.frontend resolves to plain, or to a label with no
framework-specific overlay.axes.reactivity or axes.meta is recognised but has no
executor skill (svelte, angular, astro, solid, qwik, htmx).livewire, flux,
blade-ui, react-shadcn-ui) adds framework specifics on top of this
contract, it does not replace it.Do NOT use when a framework executor already covers the whole job — then this skill is the base and the executor is the overlay, dispatched together.
Read state.stack.axes and query per resolved axis value, most specific first:
meta → reactivity → component_lib.
<skills-root>/corpus-grounding/scripts/ground search \
--manifest <skills-root>/design-intelligence/data/manifest.json \
--stack <axis-value> "<the concrete question>"
axes.meta: nuxt with axes.reactivity: vue means two queries —
--stack nuxtjs and --stack vue. A meta-framework does not replace the layer
it wraps; that conflation is the defect the axes exist to fix.
Cite what you used. The result names the corpus rows the implementation followed. An uncited pick is indistinguishable from the model's memory, and memory is exactly what the corpus exists to replace.
No corpus domain for the detected stack → say so, in the result:
No stack corpus for
<stack>— proceeding on the generic contract. Framework idiom below is not grounded and should be reviewed by someone who knows this stack.
Silence is the failure mode. An unstated gap reads as grounded output.
Every item is a hard requirement, and none of them is framework-specific:
state.ui_design.microcopy exactly
as written — every label, empty-state line, and validation message. No
paraphrase, no improvement. Where a source artifact was provided, it beats
the brief (see design-fidelity).design-tokens' tokens validate.state.ui_audit.components_found before creating
anything. In a run that has already added components, re-read the component
directories — the audit inventory is computed once per state-file and does
not refresh (see existing-ui-audit § Gotchas).div + role; every interactive
element reachable and labelled; focus visible; contrast meets the project's
stated level, AA when unstated.empty, loading, error, success, disabled per
the brief. An explicit n/a is legitimate for a surface that genuinely has
no such state — declaring that is the opposite of inventing filler.<placeholder>, lorem, todo:, tbd, xxx are
rejected at the boundary — including inside arrays.Exercise the result with whatever the host actually has, and name which:
| Available | Do |
|---|---|
| Browser / Playwright | Render, check the states, exercise one interaction |
| Screenshot only | Capture and inspect layout at 375 / 768 / 1280 |
| Neither | Static inspection only, and say the render is unverified |
Never claim a state or interaction works without having exercised it. A caveat is a finding; a silent claim is a defect.
Four requirements, in order — each is checkable by a reader of the result:
Write state.ticket["ui_apply"]:
ui_apply:
files: ["resources/js/UserCard.svelte"]
rendered:
"resources/js/UserCard.svelte": |
<full text, microcopy-locked>
components_added: ["UserCard"]
components_reused: ["Button"]
microcopy_lock: true
stack_corpus: # which corpora answered, or the degrade note
queried: ["svelte"]
cited: ["svelte.csv:12 — prefer stores over prop drilling"]
verify:
method: static_inspect # or playwright / screenshot
caveats: ["render not verified — no browser available"]
axes.reactivity: unknown is not none. unknown means a project has
manifests and no recognised reactivity layer — proceed, and say the stack was
not recognised. none means there genuinely is no reactivity layer, which is
the normal shape for a static page.--stack vue for a
Nuxt project silently drops the routing, data-fetching and SSR idioms that
are the whole reason Nuxt exists.n/a is the escape for a surface that genuinely has no such state
(asserted in ui_lane_matrix.test.ts), so this is not a defect being
broadened. But if the decision is ever revisited, revisit it here.design-intelligence — the --stack
corpus this skill queries (16 stacks).existing-ui-audit — the inventory Step 2
checks, and its once-per-state-file limit.design-tokens — tokens validate.fe-design — where the brief's selection decisions
come from, and what it does when the corpus is not installed.ui-component-architect,
tailwind-engineer — stack-neutral
companions this skill composes with.Frequently asked questions
The plain lane used to be a name with nothing behind it. This skill is the lane: it carries the implementation discipline that previously lived only inside the framework executors, and it gets framework idiom from the 16-stack corpus instead of from prose written here. That spli…
The source record exposes this install command: npx skills add https://github.com/event4u-app/agent-config --skill "src/skills/ui-apply-generic". Inspect the command and pinned source before running it.
Alternatives
coreyhaines31/marketingskills
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
oaustegard/claude-skills
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre
event4u-app/agent-config
Use BEFORE writing or editing any non-trivial UI — inventories components, design tokens, shadcn primitives, and reusable patterns into state.ui_audit. Hard gate for the ui directive set.
event4u-app/agent-config
Frontend design heuristics — and, outside the ticket engine, the loop that applies them: audit, brief, inventory, build, review. Use when building or changing any UI, not only when planning one.