Borrowing it
Nothing to install: this file belongs to LedgerHQ/ledger-live. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.
curl -O https://raw.githubusercontent.com/LedgerHQ/ledger-live/develop/.agents/skills/universal-components/SKILL.mdgit clone --depth 1 https://github.com/LedgerHQ/ledger-liveWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/ledgerhq/ledger-live/universal-components)<a href="https://agentmods.dev/skills/ledgerhq/ledger-live/universal-components"><img src="https://agentmods.dev/badge/skills/ledgerhq/ledger-live/universal-components/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/ledgerhq/ledger-live/universal-components"><img src="https://agentmods.dev/badge/skills/ledgerhq/ledger-live/universal-components.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00125 | $0.01730 |
| Opus 5.5 | $0.00050 | $0.00692 |
| Sonnet 5.5 | $0.00025 | $0.00346 |
| Haiku 4.5 | $0.00013 | $0.00173 |
Grade A, and why
universal-components scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured today.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 132 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Universal components
A package whose entries resolve per platform (a react-native condition, a ./web or ./native
subpath, or .web / .native files behind an entry) is dual-platform. Each component its
package.json#exports reaches takes one props API on both platforms, or names its platform in
the import path. The ADR holds the reasoning; this
skill holds the rules you write against. Internal components, single-platform packages and test
support entries (a subpath segment starting with test or mock) are out of scope.
Pick the shape first
| Shape | When | Entry | Example |
|---|---|---|---|
| Logic only | The entry exports hooks, view models, selectors, no component | any entry, no contract: R1 to R4 find nothing to check | . of @features/flow-lazy-onboarding-banner |
| Universal (default) | Both platforms need it and every prop it needs has a neutral type | universal entry, one contract, R1 to R5 | ContactAvatar in @features/platform-contacts |
| Platform entry | One platform needs it, or a prop it cannot work without has no neutral type (a surface style, a bundler asset) | ./native and/or ./web alone, R5 only |
@shared/lottie; ./native of @features/flow-pay-card-widget |
A platform entry is an exit for a component that cannot be universal, not a way around the
contract. An awkward prop is not a reason: keep the quirk in the implementation, or add an
optional @platform prop (R3).
Scaffold, do not hand-write
pnpm exec nx g @ledgerhq/generators:universal-component <Name> \
--project features/platform/contacts --directory components/<Name>
--directory is relative to src/.
It writes the contract with a testID prop, both implementations, a test per platform and the
two barrel lines, in the barrel the entries already reach, never a new one. --platform-entry web
or --platform-entry native writes a platform component behind ./web or ./native instead,
and adds the subpath when it is missing. It refuses a name an entry already exports.
What ships with it
1 file beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- today First seen · 132 lines · 125 tokens per session scan A f38563e45a6d
universal-components is a skill published in the GitHub repository LedgerHQ/ledger-live (624 stars, last pushed yesterday), licensed MIT. It adds 125 tokens to every session and 1,730 once invoked, about $0.0005 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-29.
Other skills, from other repositories
material-ui-tailwind
Integrates Material UI with Tailwind CSS v4 using cascade layers (enableCssLayer, @layer order) and documents Tailwind v3 interoperability (preflight, important, injectFirst, portals). Use when combining MUI with Tailwind utilities, slotProps className, or theme token bridges.
r3f-best-practices
React Three Fiber (R3F) and Poimandres ecosystem best practices. Use when writing, reviewing, or optimizing R3F code. Triggers on tasks involving @react-three/fiber, @react-three/drei, zustand, @react-three/postprocessing, @react-three/rapier, or leva.
fast-typescript-check
Keep www-sacred's TypeScript fast to type-check and fast to run. Use when touching the ASCII/canvas animation components (the only real per-frame code here), tightening type-check wall-clock, or auditing a change for runtime or compiler regressions. Scoped to this repo — a React 19 / Next.js 16 component library plus…
remotion-best-practices
Best practices and domain knowledge for building videos programmatically with Remotion (videos in React/TypeScript, rendered to MP4). Use whenever writing or editing Remotion code — scaffolding a video project, animating with interpolate/spring over useCurrentFrame(), sequencing scenes and transitions…
react-native-ease-refactor
Scan for Animated/Reanimated code and migrate to EaseView.
devtools-event-client
Create typed EventClient for a library. Define event maps with typed payloads, pluginId auto-prepend namespacing, emit()/on()/onAll()/onAllPluginEvents() API. Connection lifecycle (5 retries, 300ms), event queuing, enabled/disabled state, SSR fallbacks, singleton pattern. Unique pluginId requirement to avoid event…