#137 by GitHub stars

jakubkrehel/skills

A collection of agent skills that help you build great interfaces.

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

skills/better-accessibility/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/better-colors/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/better-interface/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Network or broad shell

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/better-layout/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Network or broad shell

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/better-typography/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/better-ui/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/better-writing/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/break/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/build-design/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Network or broad shell

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/explain-interface/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/interface-review/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Network or broad shell

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/state-machine/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/teardown/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

skills/variant/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Instructions only → After Instructions only

592aedc44d7d → 60bf140e43c9

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 592aedc44d7d

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 60bf140e43c98b248e6594487384ec967e89d98a

git clone --filter=blob:none --no-checkout https://github.com/jakubkrehel/skills.git .hotskills/jakubkrehel-skills && git -C .hotskills/jakubkrehel-skills checkout --detach 60bf140e43c98b248e6594487384ec967e89d98a # Copy each selected skill directory from .hotskills/jakubkrehel-skills into .claude/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/jakubkrehel/skills.git .hotskills/jakubkrehel-skills && git -C .hotskills/jakubkrehel-skills checkout --detach 60bf140e43c98b248e6594487384ec967e89d98a # Copy each selected skill directory from .hotskills/jakubkrehel-skills into .agents/skills/<skill-name>/
git clone --filter=blob:none --no-checkout https://github.com/jakubkrehel/skills.git .hotskills/jakubkrehel-skills && git -C .hotskills/jakubkrehel-skills checkout --detach 60bf140e43c98b248e6594487384ec967e89d98a # Copy each selected skill directory from .hotskills/jakubkrehel-skills into .opencode/skills/<skill-name>/
11.3kGitHub stars
1.7kstars in 7 days
14skills in this repository
31commits in 30 days

Heat

8.4
  • Star growth, last 7 daysAhead of 99% of tracked repositories
  • Star growth, last 24 hoursAhead of 99% of tracked repositories
  • Rank movement, last 7 daysAhead of 94% of tracked repositories
  • Commits, last 30 daysAhead of 87% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 2, 2026Nov 7, 202611,343

Individual skills in this repository

How it works

better-accessibility

When your agent uses it

Reviews and fixes keyboard and focus behavior, ARIA, accessible names, forms, screen-reader announcements, motion and zoom against WCAG 2.2.

What it loads into context

Frontmatter

39 tokens

Always available to the agent

SKILL.md

2,535 tokens

When the skill is activated

Reference documents

5,937 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. Criteria, not conventions
  2. Native elements first
  3. Disabled means unavailable
  4. Visible focus rings
  5. Full keyboard support
  6. Trap and restore focus
  7. Minimum hit area
  8. Label and type every control
  9. Errors that announce
  10. Accessible names everywhere
  11. Pair color with a second cue
  12. Honor prefers-reduced-motion
  13. Nothing the user needs runs on a timer
  14. Announce dynamic content
  15. Alt text by purpose
  16. Structure is navigation
  17. Survive zoom and text resize
  18. Before you finish
  19. Reporting

Files

  • ../../.claude-plugin/marketplace.jsonasset449 bytes
  • ../../.claude-plugin/plugin.jsonasset375 bytes
  • SKILL.mdcore10,949 bytes
  • agents/openai.yamlasset121 bytes
  • focus-and-keyboard.mddoc6,492 bytes
  • forms.mddoc3,491 bytes
  • hit-areas.mddoc3,262 bytes
  • motion-and-zoom.mddoc2,437 bytes
  • screen-readers.mddoc4,633 bytes
  • semantics-and-aria.mddoc4,636 bytes
Read SKILL.md

# Accessibility

This skill reviews and fixes semantics, keyboard and focus behavior, accessible names, forms, announcements, motion and zoom. It reports each failure against the WCAG criterion it breaks and writes the fix in the project's styling system.

Reviewing means two walks. Keyboard-only, where every flow completes without a mouse. Then screen-reader, where every control announces a name, a role and its state. When unsure, take the platform default over a custom rebuild, and remove ARIA rather than add it.

Contrast measurement and color fixes belong to `better-colors`. Text sizing, iOS input zoom and language metadata belong to `better-typography`. Spacing between targets and spatial RTL belong to `better-layout`. Label, error and alt-text wording belong to `better-writing`. Animation recipes, hover styling and scroll containment belong to `better-ui`.

## Criteria, not conventions

A finding cites a WCAG 2.2 Level A or AA criterion by number, or a concrete task an assistive-technology user cannot complete. Everything else is a recommendation and never `HIGH`. That covers AAA criteria, APG conventions, the one-`<h1>` and no-skipped-levels outline and the 44px and 40px targets. The criterion thresholds below are exact. The larger targets are heuristics, so keep an established, usable density.

## Native elements first
View the complete source on GitHub

Skills included

  • better-accessibility
  • better-colors
  • better-interface
  • better-layout
  • better-typography
  • better-ui
  • better-writing
  • break
  • build-design
  • explain-interface
  • interface-review
  • state-machine
  • teardown
  • variant

Repository facts

License
MIT
Created
Jul 10, 2026
Last pushed
Nov 2, 2026
Forks
439
Open issues
4
Project activity
Active

Rank over the last 12 weeks

Now #137 · best #137 · up 32 in 30 days

  1. #146 on Nov 2
  2. #145 on Nov 3
  3. #141 on Nov 4
  4. #139 on Nov 5
  5. #138 on Nov 6
  6. #137 since Nov 7
73 earlier periods
  1. #291 on Aug 2
  2. #260 on Aug 8
  3. #257 on Aug 9
  4. #262 on Aug 10
  5. #245 on Aug 11
  6. #241 on Aug 12
  7. #242 on Aug 13
  8. #241 on Aug 14
  9. #239 on Aug 15
  10. #240 from Aug 16 to Aug 17
  11. #246 on Aug 18
  12. #243 on Aug 19
  13. #239 on Aug 20
  14. #237 on Aug 21
  15. #233 on Aug 22
  16. #237 on Aug 23
  17. #235 on Aug 24
  18. #234 on Aug 25
  19. #231 on Aug 26
  20. #233 on Aug 27
  21. #231 on Aug 28
  22. #230 on Aug 29
  23. #228 on Aug 30
  24. #225 on Aug 31
  25. #230 on Sep 1
  26. #225 on Sep 2
  27. #222 on Sep 3
  28. #203 on Sep 4
  29. #202 on Sep 5
  30. #195 on Sep 6
  31. #197 from Sep 7 to Sep 8
  32. #198 from Sep 9 to Sep 10
  33. #190 from Sep 11 to Sep 12
  34. #189 on Sep 13
  35. #187 from Sep 14 to Sep 15
  36. #185 from Sep 16 to Sep 17
  37. #186 on Sep 18
  38. #183 on Sep 19
  39. #186 on Sep 20
  40. #184 on Sep 21
  41. #182 on Sep 22
  42. #179 on Sep 23
  43. #178 on Sep 24
  44. #177 on Sep 25
  45. #176 on Sep 26
  46. #175 on Sep 27
  47. #174 from Sep 28 to Sep 29
  48. #170 on Sep 30
  49. #173 on Oct 1
  50. #174 on Oct 2
  51. #171 on Oct 3
  52. #168 on Oct 4
  53. #171 on Oct 5
  54. #170 on Oct 6
  55. #172 on Oct 7
  56. #169 on Oct 8
  57. #170 on Oct 9
  58. #168 on Oct 10
  59. #167 from Oct 11 to Oct 12
  60. #168 on Oct 13
  61. #167 from Oct 14 to Oct 15
  62. #166 on Oct 16
  63. #168 on Oct 17
  64. #169 on Oct 18
  65. #168 from Oct 19 to Oct 20
  66. #169 from Oct 21 to Oct 22
  67. #168 on Oct 23
  68. #167 on Oct 24
  69. #168 on Oct 25
  70. #158 from Oct 28 to Oct 29
  71. #155 on Oct 30
  72. #154 on Oct 31
  73. #150 on Nov 1

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 5, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 7 notes
  • skills/better-interface/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/better-interface/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/better-layout/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/build-design/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/interface-review/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/teardown/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • skills/teardown/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 50 signals by file

.claude-plugin/plugin.json

  • Network accessline 7
    "email": "jakub@kbo.sk"   },   "homepage": "https://interfaces.dev/",
  • Network accessline 8
    },   "homepage": "https://interfaces.dev/",   "repository": "https://github.com/jakubkrehel/skills",
  • Network accessline 9
    "homepage": "https://interfaces.dev/",
  • Network accessline 10
    "repository": "https://github.com/jakubkrehel/skills",

skills/explain-interface/no-browser.md

  • Network accessline 8
    cd "$(mktemp -d)" curl -sL --max-time 25 "$URL" -o page.html
  • Network accessline 9
    curl -sL --max-time 25 "$URL" -o page.html

skills/teardown/assets/export.js

  • Network accessline 1
    (function (root) {   const ns = 'http://www.w3.org/2000/svg';
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    const ns = 'http://www.w3.org/2000/svg';
  • Network accessline 65
    async function inline(url) {     if (url.startsWith('data:')) return url;     const bytes = new Uint8Array(await (await fetch(url)).arrayBuffer());
  • Network accessline 66
    if (url.startsWith('data:')) return url;     const bytes = new Uint8Array(await (await fetch(url)).arrayBuffer());     let binary = '';
  • Network accessline 67
    const bytes = new Uint8Array(await (await fetch(url)).arrayBuffer());

skills/teardown/assets/flipbook.js

  • Executable scriptline 1
    Executable file

skills/teardown/assets/geometry.js

  • Executable scriptline 1
    Executable file

skills/teardown/assets/projection.js

  • Executable scriptline 1
    Executable file

skills/teardown/assets/render-queue.js

  • Executable scriptline 1
    Executable file

skills/teardown/assets/sheet.js

  • Executable scriptline 1
    Executable file

skills/teardown/assets/theme.js

  • Executable scriptline 1
    Executable file

skills/teardown/assets/viewer.html

  • Network accessline 116
    appearance: none;   border: 0;   background: transparent url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='m3 4.5 3 3 3-3' stroke='white' stroke-opacity='.6' stroke-width='1.25' s
  • Network accessline 117
    border: 0;   background: transparent url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='m3 4.5 3 3 3-3' stroke='white' stroke-opacity='.6' stroke-width='1.25' stroke-linecap='round
  • Network accessline 118
    background: transparent url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='m3 4.5 3 3 3-3' stroke='white' stroke-opacity='.6' stroke-width='1.25' stroke-linecap='round' stroke-line

skills/teardown/assets/viewer.js

  • Network accessline 1
    const drawings = JSON.parse(document.getElementById('drawing-data').textContent); const $ = id => document.getElementById(id), ns = 'http://www.w3.org/2000/svg';
  • Executable scriptline 1
    Executable file
  • Network accessline 2
    const $ = id => document.getElementById(id), ns = 'http://www.w3.org/2000/svg';
  • Network accessline 217
    const labels = to === 0 && !playback && geometry.querySelector('[data-annotations]');   if (labels) {     const leaving = document.createElementNS('http://www.w3.org/2000/svg', 'g');
  • Network accessline 218
    if (labels) {     const leaving = document.createElementNS('http://www.w3.org/2000/svg', 'g');     leaving.setAttribute('data-leaving', '');
  • Network accessline 219
    const leaving = document.createElementNS('http://www.w3.org/2000/svg', 'g');

skills/teardown/assets/worker.js

  • Executable scriptline 1
    Executable file

skills/teardown/scripts/build-viewer.cjs

  • Executable scriptline 1
    #!/usr/bin/env node

skills/teardown/scripts/check-viewer.cjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 13
    }   const port = fs.readFileSync(portFile, 'utf8').split('\n')[0];   const page = (await (await fetch(`http://127.0.0.1:${port}/json/list`)).json()).find(t => t.type === 'page');
  • Network accessline 14
    const port = fs.readFileSync(portFile, 'utf8').split('\n')[0];   const page = (await (await fetch(`http://127.0.0.1:${port}/json/list`)).json()).find(t => t.type === 'page');   const socket = new WebSocket(page.webSocketDebuggerUrl);
  • Network accessline 15
    const page = (await (await fetch(`http://127.0.0.1:${port}/json/list`)).json()).find(t => t.type === 'page');
  • Network accessline 53
    if (method === 'Runtime.exceptionThrown') problems.push('Page error: ' + (params.exceptionDetails.exception?.description ?? params.exceptionDetails.text));       if (method === 'Runtime.consoleAPICalled' && params.type === 'error') problems
  • Network accessline 54
    if (method === 'Runtime.consoleAPICalled' && params.type === 'error') problems.push('Console error: ' + params.args.map(a => a.value ?? a.description).join(' '));       if (method === 'Network.requestWillBeSent' && !/^(file|data|blob|about)
  • Network accessline 55
    if (method === 'Network.requestWillBeSent' && !/^(file|data|blob|about):/.test(params.request.url)) requests.push(params.request.url);

skills/teardown/scripts/commands.cjs

  • Executable scriptline 1
    Executable file

skills/teardown/scripts/config.cjs

  • Executable scriptline 1
    Executable file

skills/teardown/scripts/proof.cjs

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 38
    function sheet(markup, title, viewBox = SHEET_BOX.join(' '), size = `width="${SHEET.width}mm" height="${SHEET.height}mm"`) {   return `<svg xmlns="http://www.w3.org/2000/svg" ${size} viewBox="${viewBox}"><title>${title.replaceAll('&', '&amp
  • Network accessline 39
    return `<svg xmlns="http://www.w3.org/2000/svg" ${size} viewBox="${viewBox}"><title>${title.replaceAll('&', '&amp;').replaceAll('<', '&lt;')}</title>`
  • Network accessline 124
    }).join('');   const sheetFile = path.resolve(outDir, 'contact.svg'), sheetHeight = Math.round(PIXELS * height / width);   fs.writeFileSync(sheetFile, `<svg xmlns="http://www.w3.org/2000/svg" width="${PIXELS}" height="${sheetHeight}" viewBo
  • Network accessline 125
    const sheetFile = path.resolve(outDir, 'contact.svg'), sheetHeight = Math.round(PIXELS * height / width);   fs.writeFileSync(sheetFile, `<svg xmlns="http://www.w3.org/2000/svg" width="${PIXELS}" height="${sheetHeight}" viewBox="0 0 ${width}
  • Network accessline 126
    fs.writeFileSync(sheetFile, `<svg xmlns="http://www.w3.org/2000/svg" width="${PIXELS}" height="${sheetHeight}" viewBox="0 0 ${width} ${height}"><rect width="${width}" height="${height}" fill="#fff"/>${tiles}</svg>`);

skills/teardown/scripts/test-flipbook.cjs

  • Executable scriptline 1
    Executable file

skills/teardown/scripts/test-geometry.cjs

  • Executable scriptline 1
    Executable file

skills/teardown/scripts/test-render-queue.cjs

  • Executable scriptline 1
    Executable file

skills/teardown/scripts/test-theme.cjs

  • Executable scriptline 1
    Executable file

skills/teardown/scripts/test-viewer-builder.cjs

  • Executable scriptline 1
    Executable file

skills/teardown/sheet-and-svg.md

  • Network accessline 63
    <svg xmlns="http://www.w3.org/2000/svg"

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Declared and executed: 3 facts
Signal confidence: 43 facts

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexNativeManifest AGENTS.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/better-accessibility/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/better-accessibility/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/better-accessibility/SKILL.md.github/skills/<skill-name>/
OpenCodeNativeManifest opencode.json.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

jakubkrehel/skills: #137 on hotskills, 11.3k stars

[![jakubkrehel/skills on hotskills](https://hotskills.dev/badge/jakubkrehel-skills.svg)](https://hotskills.dev/skill/jakubkrehel-skills/)