Effect TS
mattiacerutti/supernova
Write idiomatic Effect v4 TypeScript following official best practices from effect-solutions and the Effect source.
Moves logic out of Astro frontmatter into tested helper modules under shared/lib, with rules for naming, typing, deterministic demo data and sibling test files.
$ npx skills add tabler/tabler --skill shared-lib -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install tabler/tabler shared-lib --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/tabler/tabler.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/shared-lib .claude/skills/shared-lib && 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 "shared-lib" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/shared-lib into .claude/skills/shared-lib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "shared-lib", 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/tabler/tabler/tree/dev/.agents/skills/shared-libType 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 tabler/tabler --skill shared-lib -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install tabler/tabler shared-lib --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/shared-lib .agents/skills/shared-lib && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "shared-lib" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/shared-lib into .agents/skills/shared-lib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "shared-lib", 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 tabler/tabler --skill shared-lib -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install tabler/tabler shared-lib --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/shared-lib .cursor/skills/shared-lib && 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 "shared-lib" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/shared-lib into .cursor/skills/shared-lib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "shared-lib", 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/tabler/tabler.git --path .agents/skills/shared-lib--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 tabler/tabler --skill shared-lib -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install tabler/tabler shared-lib --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/shared-lib .gemini/skills/shared-lib && 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 "shared-lib" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/shared-lib into .gemini/skills/shared-lib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "shared-lib", 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 tabler/tabler shared-libInstalls 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 tabler/tabler --skill shared-lib -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/shared-lib .github/skills/shared-lib && 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 "shared-lib" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/shared-lib into .github/skills/shared-lib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "shared-lib", 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 tabler/tabler --skill shared-lib -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install tabler/tabler shared-lib --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/tabler/tabler.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/shared-lib .opencode/skills/shared-lib && 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 "shared-lib" agent skill from https://github.com/tabler/tabler/tree/dev/.agents/skills/shared-lib into .opencode/skills/shared-lib/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "shared-lib", 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.
shared-libMoves logic out of Astro frontmatter into tested helper modules under shared/lib, with rules for naming, typing, deterministic demo data and sibling test files.
Components in the Tabler repository stay as markup, and anything with a branch worth testing belongs in shared/lib as a named TypeScript module. The skill lists what qualifies: formatting of dates, numbers and strings, data access that turns a JSON file into a typed export, generation of deterministic demo values, SVG and markdown handling, and any helper duplicated across two components.
Class assembly, a ternary over props and a single map over a prop stay in the component, and DOM code, Astro rendering and build tooling do not go in lib at all. Modules use named exports, one topic per kebab-case file, explicit return types and pure functions, with a header comment when they encode a quirk and relative imports inside shared.
Every module gets a sibling test file, because the Vitest config collects lib/**/*.test.ts. The skill gives the pnpm commands for a single run, watch mode and the whole workspace through turbo, and asks for tests of fallbacks, empty ranges and thrown errors, not only the happy path.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit dcacb65. 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:
pnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use pnpm, 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.
Tabler Shared Lib Helpers loads about 1.2k tokens when it runs. Until then it costs about 124 tokens; SKILL.md has 531 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 tabler/tabler at commit dcacb65, republished under its MIT licence (© tabler). 531 words, ~1,232 tokens.
.claude/skills/shared-lib/SKILL.md (or your agent's skills folder).shared/libshared/lib/*.ts is the only place in shared/ where real logic lives. Components stay markup; anything with a branch worth testing moves here, gets a name, and gets a test.
Move it to shared/lib when it is:
date-format.ts, string-format.ts)people.ts, site.ts)pseudo-random.ts), SVG/icon handling (svg.ts), markdown rendering (render-markdown.ts)Keep it in the component when it is class assembly, a ternary over props, or a single .map() over a prop — pushing that into lib only adds an import.
Do not put in shared/lib: DOM code (that is an inline script — see the astro-scripts skill), Astro-specific rendering (that is a component), or build-time tooling (that is .build/).
// Demo data date formatting quirks:
// - unix seconds are shifted by local timezone offset (not the true epoch)
const MONTHS = ['January', 'February', /* … */]
/** Formats a date as "Month DD, YYYY" using its UTC components. */
export function formatLongDate(date: Date): string {
return `${MONTHS[date.getUTCMonth()]} ${String(date.getUTCDate()).padStart(2, '0')}, ${date.getUTCFullYear()}`
}page-scripts.ts is the deliberate exception — a render-scoped registry)./** … */ line on each exported function.export interface Person), so call sites do not re-cast.shared/ are relative (./array, ../data/people.json). Any bare npm import must be declared in shared/package.json.shared/vitest.config.mts collects lib/**/*.test.ts, so foo.ts gets foo.test.ts next to it. This is not optional — every module in the directory has one.
pnpm --filter @tabler/shared test # one run
pnpm --filter @tabler/shared test:watch # while writing
pnpm run test # all packages, via turboTest the branches, not the happy path only: the fallback when a regex does not match, the empty range, the thrown error. globals: true is set, but the existing files still import describe/it/expect from vitest — keep that style.
Pages are rebuilt constantly and the rendered HTML is compared byte-for-byte (html-diff skill), so a helper that produces different output on each run breaks the harness and pollutes diffs.
pseudo-random.ts (randomNumber, randomDate, randomItem, timeagoLabel), seeded by the loop index — never Math.random().Date.now() / new Date() without arguments. Fixed dates only.Every package extends astro/tsconfigs/strictest, so indexing an array yields T | undefined:
requireIndex(items, i) from array.ts when the demo data is trusted to have the entry — it throws with a useful message instead of rendering undefined.export const people = peopleData as Person[]). Call sites import the typed export; they never re-cast the JSON.[key: string]: unknown) when the JSON has more fields than the components read.pnpm run type-check runs astro check per package and covers these files.
*.test.ts covering the branches, not just the happy pathpseudo-random.ts, no Math.random(), no unseeded datesrequireIndex for trusted indexingpnpm --filter @tabler/shared test, repo-level type-check and format:prettier clean© tabler, 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/shared-lib of tabler/tabler.
Open the folder on GitHubat commit dcacb65
Tabler Shared Lib Helpers 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 |
|---|---|---|---|---|---|---|
| Tabler Shared Lib Helpers this skilltabler/tabler | 42k | — | ~1.2k | Automated safety check: Pass | MIT | |
| Effect TSmattiacerutti/supernova | 187 | — | ~2.8k | Automated safety check: Pass | MIT | |
| Effect TSpproenca/dot-skills | 214 | — | ~2k | Automated safety check: Pass | MIT | |
| Effect TStellahq/opensession | 392 | — | ~3.7k | Automated safety check: Pass | MIT | |
| Typescript Idiomsirahardianto/awesome-agv | 157 | — | ~6.1k | Automated safety check: Pass | MIT | |
| Vue Idiomsirahardianto/awesome-agv | 157 | — | ~6k | Automated safety check: Pass | MIT |
mattiacerutti/supernova
Write idiomatic Effect v4 TypeScript following official best practices from effect-solutions and the Effect source.
pproenca/dot-skills
Effect-TS library usage in TypeScript — Effect.gen generators, Schema.Struct/Schema.Class definitions, Layer/Context.Tag/Service patterns, Effect.pipe pipelines, Data.TaggedError/Data.Class error…
tellahq/opensession
Write idiomatic Effect v4 TypeScript verified against the pinned effect@4.0.0-rc.112 source.
irahardianto/awesome-agv
TypeScript strict typing: type narrowing, discriminated unions, Zod runtime validation, generic utility types, and Vitest testing.
irahardianto/awesome-agv
Vue 3 Composition API patterns: <script setup syntax, reactive state with Pinia stores, reusable composables, and Vitest component testing.
home-assistant/frontend
Home Assistant frontend testing and validation workflow. An agent skill from home-assistant/frontend.
tabler/tabler
Starts the right Tabler dev server, keeps it from clashing with builds and verifies changes in the browser before a page or component is handed back.
tabler/tabler
Rules for adding or fixing client-side scripts in Tabler's Astro components so the copied preview HTML stays readable, self-contained and runs in the right order.
tabler/tabler
Sets the file structure, typing and Data API pattern for writing a new Bootstrap-style JavaScript component class in Tabler's vendored port of Bootstrap's JS.
tabler/tabler
Writes or updates the classnames front matter that renders the class table at the end of a Tabler component docs page.
tabler/tabler
Guidance for changing the Tabler framework's own JavaScript in core/js: the tabler.js and tabler-theme.js bundles, the Bootstrap port and their tests.
tabler/tabler
Rules for adding or changing styles in Tabler's core/scss framework: file placement, custom properties, dark mode, RTL, tests and build gates.
Works with
Categories
Moves logic out of Astro frontmatter into tested helper modules under shared/lib, with rules for naming, typing, deterministic demo data and sibling test files. Components in the Tabler repository stay as markup, and anything with a branch worth testing belongs in shared/lib as a named TypeScript module. The skill lists what qualifies: formatting of dates, numbers and strings, data access that turns a JSON file into a typed export, generation of deterministic demo values, SVG and markdown handling, and any helper duplicated across two components.
Tabler Shared Lib Helpers fits situations like: frontmatter in a component or page has grown beyond assembling classes; demo data needs shaping, formatting or deterministic generation; the same helper appears in two components; adding a unit test under shared for an existing helper.
Run `npx skills add tabler/tabler --skill shared-lib -a claude-code`. Or copy the skill folder (.agents/skills/shared-lib in tabler/tabler) into .claude/skills/shared-lib in your project. Claude Code loads it when a task matches its description.
Run `npx skills add tabler/tabler --skill shared-lib -a codex`. Or copy the skill folder (.agents/skills/shared-lib in tabler/tabler) into .agents/skills/shared-lib 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 tabler/tabler --skill shared-lib -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/shared-lib, .gemini/skills/shared-lib, .github/skills/shared-lib and .opencode/skills/shared-lib in your project.
Going by SKILL.md and its folder, Tabler Shared Lib Helpers needs the command-line tools its instructions call (pnpm). Our summary lists: The Tabler monorepo with pnpm and its shared package.
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.
Tabler Shared Lib Helpers is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.2k tokens (SKILL.md is roughly 4.9k 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 Tabler Shared Lib Helpers: Effect TS (mattiacerutti/supernova, 187 stars), Effect TS (pproenca/dot-skills, 214 stars), Effect TS (tellahq/opensession, 392 stars) and Typescript Idioms (irahardianto/awesome-agv, 157 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
tabler (a GitHub organization) maintains it in tabler/tabler, which has 41,821 GitHub stars. The repository holds 21 skills in this directory. The repository was last updated on October 6, 2026.
Source: tabler/tabler on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.