Agent skill

Htmx

by ericrisco in ericrisco/rsc-harness

A skill your agent uses when adding interactivity to a server-rendered app (FastAPI/Jinja, Django, Rails, Laravel, Go templates, Express) without adopting a JS framework — hx-get/post/put/delete…

MITAuto-check passedBackend & APIs

Install Htmx

skills CLI
$ npx skills add ericrisco/rsc-harness --skill htmx -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install ericrisco/rsc-harness htmx --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/ericrisco/rsc-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/htmx .claude/skills/htmx && rm -rf skills-src

Use ~/.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/

Facts

Skill name
htmx
GitHub stars
167
Token cost
~3.4k tokens
SKILL.md length
1,423 words
Files
6 (incl. scripts, references)
Skills in repo
227
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when adding interactivity to a server-rendered app (FastAPI/Jinja, Django, Rails, Laravel, Go templates, Express) without adopting a JS framework — hx-get/post/put/delete…

  • Works in 4 steps: a verb — hx-get / hx-post / hx-put /… → hx-target — which DOM node receives the… → hx-swap — how the response is placed… → …
  • Adding interactivity to a server-rendered app (FastAPI/Jinja
  • SKILL.md covers When to use, When NOT to use — route…, Decision rules and Request anatomy: Bad to Good, plus 9 more sections
  • Runs Shell scripts from its folder; reaches unpkg.com

What it does

Htmx is an agent skill from ericrisco/rsc-harness. Use when adding interactivity to a server-rendered app (FastAPI/Jinja, Django, Rails, Laravel, Go templates, Express) without adopting a JS framework — hx-get/post/put/delete with hx-target, hx-swap and hx-trigger, returning HTML fragments instead of JSON, out-of-band swaps, active search, infinite scroll, inline edit and polling. NOT a client-state SPA with routing and a store (that is react or nextjs).

Its SKILL.md is about 3.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files, including scripts and reference files (for example `evals/README.md`, `evals/cases.yaml` and `references/patterns.md`).

It sits in Backend & APIs, covering Backend development. It works with Django, FastAPI, Next.js and React. The repository describes itself as: Your agent invents things because it has no memory, and can't touch your database because it has no arms. rsc is the meta-harness that gives it both, plus the trade to know the… The licence is MIT.

When your agent uses it

  • Adding interactivity to a server-rendered app (FastAPI/Jinja
  • Express) without adopting a JS framework — hx-get/post/put/delete with hx-target
  • Hx-swap and hx-trigger
  • Returning HTML fragments instead of JSON

Example prompts

  • “/htmx”

Requirements

  • Python 3
  • A Bash shell

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. a verb — hx-get / hx-post / hx-put / hx-patch / hx-delete (the URL)
  2. hx-target — which DOM node receives the response (CSS selector or this)
  3. hx-swap — how the response is placed (default innerHTML)
  4. hx-trigger — on what event (default: natural — click for buttons, submit for forms,

What it can do on your machine

Read from SKILL.md and the folder at commit e3d5b33. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 1 file in scripts/ (Shell), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • unpkg.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Htmx loads about 3.4k tokens when it runs, and up to ~5.2k if it reads all its reference files. Until then it costs about 104 tokens; SKILL.md has 1,423 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~104
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~5.2k

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.

Safety

Auto-check passed

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); the scripts in this folder are not scanned.

SKILL.md

The full file from ericrisco/rsc-harness at commit e3d5b33, republished under its MIT licence (© ericrisco). 1,423 words, ~3,388 tokens.

Download SKILL.mdSave it as .claude/skills/htmx/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
htmx
description
Use when adding interactivity to a server-rendered app (FastAPI/Jinja, Django, Rails, Laravel, Go templates, Express) without adopting a JS framework — hx-get/post/put/delete with hx-target, hx-swap and hx-trigger, returning HTML fragments instead of JSON, out-of-band swaps, active search, infinite scroll, inline edit and polling. NOT a client-state SPA with routing and a store (that is `react` or `nextjs`).
tags
htmx, hypermedia, frontend, server-rendered, html
recommends
fastapi, django, secure-coding, accessibility
origin
risco

htmx: hypermedia-driven UIs

The server owns all application state and renders HTML. The client is dumb: it swaps server-rendered fragments into the DOM. There is no JSON API for the UI, no client store, no virtual DOM, no client router. If you find yourself returning JSON and rendering it with JavaScript, you have stopped doing htmx and started building an SPA — use a different tool.

The unit of work is one request, described by four attributes on one element:

  1. a verb — hx-get / hx-post / hx-put / hx-patch / hx-delete (the URL)
  2. hx-target — which DOM node receives the response (CSS selector or this)
  3. hx-swap — how the response is placed (default innerHTML)
  4. hx-trigger — on what event (default: natural — click for buttons, submit for forms, change for inputs)

Versions (verify before pinning). htmx 2.0.x is current stable (2.0.10 latest 2.x line); v1 (1.9.x) is legacy, kept only for IE/old-browser support. htmx v4 is in beta targeting Summer 2026 and changes some defaults (default swap behavior, config) — do not write to v4 yet. Pin to 2.x:

html
<script src="https://unpkg.com/htmx.org@2.0.10" crossorigin="anonymous"></script>

When to use

  • Adding interactivity to a server-rendered app without a JS framework.
  • Wiring a verb + hx-target + hx-swap + hx-trigger to update a page region.
  • Returning partials/fragments — full page on direct navigation, fragment on htmx request (branch on the HX-Request header).
  • Out-of-band updates (hx-swap-oob) when one response must refresh several regions.
  • Trigger-driven UX: active search, infinite scroll, inline edit, click-to-load, polling, revealed, intersect, debounced input.
  • Server-driven control flow via response headers (HX-Trigger, HX-Redirect, …).

When NOT to use — route elsewhere

  • A client-state-heavy SPA (offline, optimistic UI everywhere, complex client routing) → react, vue-nuxt, svelte, solid-js, angular, or ../nextjs/SKILL.md. htmx is the anti-SPA; do not fight it.
  • How to structure the server framework itself (routers, ORM, controllers) → ../fastapi/SKILL.md, django, rails, laravel. This skill owns the htmx contract (which fragment, which header, which swap), not framework internals. Cross-link, do not duplicate.
  • Generic XSS/CSP/auth theory → ../secure-coding/SKILL.md. Keep only the htmx-specific notes here.
  • Focus management and ARIA live regions after a swap → accessibility.
  • Browser E2E of swaps → testing-web / e2e-testing.
  • Purely-client state (Alpine, vanilla sprinkles) → out of scope; htmx is for server round-trips.

Decision rules

  1. Return HTML, never JSON, for the UI. The response is the new DOM. JSON forces a client renderer, which is the SPA you are trying to avoid.
  2. Branch on HX-Request: fragment for htmx, full page otherwise. A bookmarked URL or hard refresh must still render a whole page; the htmx call gets just the partial.
  3. The full page is the layout wrapping the same partial. One template for the fragment, reused inside the page layout — never two copies that drift.
  4. Set hx-target and hx-swap explicitly when the default is wrong. Default target is the element itself; default swap is innerHTML. Be explicit the moment you need otherwise.
  5. Use out-of-band swaps for multi-region updates, not multiple requests. One action that changes a list and a counter is one response with one OOB element.
  6. Drive UX with hx-trigger, not JavaScript. Debounce, polling, reveal, intersect are all trigger modifiers — reaching for addEventListener usually means you missed a modifier.
  7. Steer the client from the server with response headers. Redirect, retarget, reswap, and fire events via HX-* response headers instead of branching logic in the browser.
  8. Escape everything; add CSRF yourself. Your template engine auto-escapes — keep it on. htmx does not add CSRF tokens; you propagate them via hx-headers or a hidden field.

Request anatomy: Bad to Good

html
<!-- Bad: JSON endpoint + hand-written DOM patching = a tiny SPA -->
<button id="like">Like</button>
<script>
  document.getElementById('like').addEventListener('click', async () => {
    const r = await fetch('/posts/42/like', { method: 'POST' });
    const data = await r.json();                       // JSON contract
    document.getElementById('count').textContent = data.count;  // manual render
  });
</script>
html
<!-- Good: the server returns the new HTML; the element declares the swap -->
<button hx-post="/posts/42/like"
        hx-target="#likes"
        hx-swap="outerHTML">Like</button>
<span id="likes">42 likes</span>
<!-- POST /posts/42/like responds with: <span id="likes">43 likes</span> -->

The Good version has no JS, no JSON, no client state. The server computed the count and rendered the truth; the client placed it.

Fragment rendering: branch on HX-Request

Framework-agnostic rule: if HX-Request: true, render the partial; otherwise render the page that embeds that same partial. Concrete FastAPI + Jinja2:

python
from fastapi import FastAPI, Request
from fastapi.templating import Jinja2Templates

app = FastAPI()
templates = Jinja2Templates(directory="templates")

@app.get("/contacts")
def contacts(request: Request, q: str = ""):
    rows = search_contacts(q)
    # htmx asked for just the table body; a browser nav gets the whole page.
    template = "contacts/_rows.html" if request.headers.get("HX-Request") else "contacts/index.html"
    return templates.TemplateResponse(template, {"request": request, "rows": rows, "q": q})
jinja
{# templates/contacts/index.html — the page wraps the SAME partial #}
{% extends "base.html" %}
{% block content %}
  <input type="search" name="q" value="{{ q }}"
         hx-get="/contacts" hx-target="#rows" hx-swap="innerHTML"
         hx-trigger="keyup changed delay:500ms">
  <table><tbody id="rows">{% include "contacts/_rows.html" %}</tbody></table>
{% endblock %}
jinja
{# templates/contacts/_rows.html — auto-escaped; reused by page AND fragment #}
{% for c in rows %}<tr><td>{{ c.name }}</td><td>{{ c.email }}</td></tr>{% endfor %}

Full per-framework wiring (Django django-htmx middleware, Express, CSRF per stack) is in references/server-contract.md.

Swap and target reference

hx-swapWhere the response goes
innerHTMLinside the target, replacing contents (default)
outerHTMLreplaces the target element itself
beforebegin / afterbeginbefore the target / as its first child
beforeend / afterendas its last child / after the target
deletedeletes the target (response ignored)
nonedoes not swap (use with OOB or HX-Trigger)

Swap modifiers: transition:true, swap:<time> (delay before swap), settle:<time>, scroll:top|bottom, show:top|bottom, focus-scroll:false.

hx-target accepts a CSS selector, this, or an extended selector: closest <sel>, find <sel>, next <sel>, previous <sel>. Prefer a stable id over a fragile structural selector — a deep div > div:nth-child(3) breaks the first time markup shifts.

Out-of-band swaps

When one action must refresh more than the target, mark extra elements in the response with hx-swap-oob. They are swapped into the matching live element by id, bypassing the target.

html
<!-- Response to POST /cart/add: swap the row in normally... -->
<tr id="row-42">2 × Widget</tr>
<!-- ...and update the cart badge out of band (default OOB swap is outerHTML) -->
<span id="cart-count" hx-swap-oob="true">3 items</span>

hx-swap-oob="true" defaults to outerHTML; you can specify a strategy (hx-swap-oob="beforeend:#log"). Use OOB instead of firing two requests for two regions.

Server-driven control flow (response headers)

The server can steer htmx without any client code:

Response headerEffect
HX-Triggerfire client event(s); JSON value {"event": detail} passes detail
HX-Retargetoverride hx-target with a CSS selector
HX-Reswapoverride hx-swap for this response
HX-Redirectfull-page client redirect to the given URL
HX-Locationclient-side navigation with an htmx request (no full reload)
HX-Push-Urlpush a URL into history
HX-Refreshtrue forces a full page reload

Request headers htmx sends (read these server-side): HX-Request, HX-Target, HX-Trigger, HX-Current-URL, HX-Boosted. Full tables in references/server-contract.md.

hx-boost is the cheapest "SPA feel": it upgrades normal <a>/<form> to AJAX that swaps <body> with pushState history — no SPA, no JSON.

Show full SKILL.md (526 more words)Show less

Security (htmx-specific only)

htmx makes HTML more expressive, so injected HTML is an XSS surface. The htmx-specific rules (generic theory lives in ../secure-coding/SKILL.md):

  • Keep your template engine's auto-escaping on. Never | safe / |safe user-controlled content. Manually rendering raw user HTML re-introduces XSS that escaping had closed.
  • When you must inject third-party HTML, scrub it with a whitelist — strip hx-*/data-hx-* attributes and inline scripts. An injected hx-get would issue requests you never intended.
  • hx-disable halts htmx processing for a subtree as defense-in-depth — but it is bypassable by closing the tag, so it is not a primary control. Sanitize at the source.
  • htmx.config.selfRequestsOnly defaults to true in 2.x — keep it. It blocks htmx requests to other origins.
  • CSRF is your job. htmx sends same-origin requests but adds no CSRF token. Propagate it: <body hx-headers='{"X-CSRF-Token": "…"}'> or a hidden form field.
  • Guard HX-Redirect / HX-Location — never build them from attacker-controlled values; a javascript: URL there is an injection.

UX recipes

Worked, copy-ready recipes — server fragment + client markup for each — live in references/patterns.md:

  • Active search — debounced keyup changed delay:500ms filtering a results table.
  • Infinite scroll / click-to-load — hx-trigger="revealed" or a "load more" button.
  • Inline edit (click-to-edit) — swap a row to a form and back.
  • Delete row + OOB count — remove a row and update a counter in one response.
  • Modal dialog — load a dialog fragment on demand.
  • Progress bar — every 600ms polling closed by an HX-Trigger event.
  • Tabs / accordion — swap the active panel.

Common triggers

hx-trigger valueUse
keyup changed delay:500msactive search (debounced, only on real change)
every 2spolling a progress/status region
revealedinfinite scroll — load when the sentinel scrolls into view
intersect oncelazy-load a region once it enters the viewport
load delay:1sdeferred load after the page paints
click[ctrlKey]event filter — only ctrl-click
submit / changenatural defaults for forms / inputs
customEvent from:bodyreact to an HX-Trigger-fired event from elsewhere

Modifiers worth knowing: throttle:<time>, queue:first|last|all|none, from:<sel>, once, changed, delay:<time>.

Anti-patterns

Anti-patternWhy it is wrongDo instead
Endpoint returns JSON, JS renders itthat is an SPA; you lose htmx's whole pointreturn the HTML fragment; the server renders
No HX-Request branchthe fragment leaks the full layout (nested <html>) on htmx calls, or a bookmark renders a bare partialbranch: partial vs page wrapping the same partial
Two copies of the fragment (page + ajax)they drift; bug fixed in one, not the otherone partial template, {% include %}d by the page
Polling every 1s for a one-off eventwasteful traffic; hammers the serverpoll only while pending, end it with HX-Trigger/hx-swap-oob; or use SSE
hx-target="div > div:nth-child(3)"structural selectors shatter when markup shiftstarget a stable id
`{{ user_htmlsafe }}`unescaped user content → XSS
Rebuilding client state in hx-on/JSre-creates the SPA state you came here to avoidlet the server hold state; re-render from it
Multiple requests to update related regionsextra round-trips, racesone response + hx-swap-oob

See also

  • ../fastapi/SKILL.md — FastAPI routes/templates that serve these fragments.
  • ../secure-coding/SKILL.md — the general XSS/CSP/auth theory this skill defers to.
  • ../nextjs/SKILL.md — when the requirement really is a React/SPA app, not hypermedia.
  • django, rails, laravel — other server frameworks (the htmx contract is identical).
  • accessibility — focus and ARIA after a DOM swap.

© ericrisco, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files (scripts, references) in skills/htmx of ericrisco/rsc-harness.

  • SKILL.md
  • evals/README.md
  • evals/cases.yaml
  • references/patterns.md
  • references/server-contract.md
  • scripts/verify.sh

Open the folder on GitHubat commit e3d5b33

Compare with similar skills

Htmx 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.

Htmx compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Htmx this skillericrisco/rsc-harness167—~3.4kAutomated safety check: PassMIT
Senior Fullstackalirezarezvani/claude-skills28k1 repos~3.7kAutomated safety check: NotesMIT
Senior Fullstackborghei/Claude-Skills881—~1.7kAutomated safety check: PassMIT
Arch Wikiahmedemad3/arch-wiki249—~5.1kAutomated safety check: PassNone
PayRam Checkout IntegrationPayRam/payram-mcp158—~3.4kAutomated safety check: NotesNone
Ag2 Ag UIag2ai/build-with-ag2252—~1.7kAutomated safety check: PassApache-2.0

Similar skills

  • Senior Fullstack

    alirezarezvani/claude-skills

    Fullstack development toolkit with project scaffolding for Next.js, FastAPI, MERN, and Django stacks, code quality analysis with security and complexity scoring, and stack selection guidance.

    28k GitHub starsUsed in 1 repo~3.7k tokens
    DevelopmentAuto-check: notes
  • Senior Fullstack

    borghei/Claude-Skills

    Fullstack development toolkit with project scaffolding for Next.js/FastAPI/MERN/Django stacks and code quality analysis.

    881 GitHub stars~1.7k tokensUpdated today
    DevelopmentAuto-check passed
  • Arch Wiki

    ahmedemad3/arch-wiki

    Scans any project codebase for new/changed modules, endpoints, middleware, infrastructure, Docker topologies, SQL queries, or permissions and updates docs/architecture/architecture.json.

    249 GitHub stars~5.1k tokensUpdated 18 days ago
    Backend & APIsAuto-check passed
  • Adds crypto checkout to a web app with PayRam: create a payment from your backend, send the customer to the payment page, then confirm the result.

    158 GitHub stars~3.4k tokensUpdated today
    Backend & APIsAuto-check: notes
  • Ag2 Ag UI

    ag2ai/build-with-ag2

    Expose an AG2 beta Agent over the AG-UI protocol so a frontend (CopilotKit, custom React/Next.js, or any AG-UI client) can stream responses, render tool calls, sync shared state, and surface…

    252 GitHub stars~1.7k tokensUpdated 1 mo ago
    Backend & APIsAuto-check passed
  • Docs Guide

    fivetaku/gptaku-plugins-codex

    Fetch and explain official documentation for any library, framework, API, or service using an llms.txt-first strategy — triggers on "How do I…", "What is…", "How does X work", "Best practice for…"…

    128 GitHub stars~3.5k tokensUpdated 29 days ago
    Backend & APIsAuto-check passed

More from ericrisco/rsc-harness

All 227 skills in this repo
  • Ab Testing

    ericrisco/rsc-harness

    A skill your agent uses when designing or analyzing a controlled experiment — falsifiable hypothesis, sample size from an MDE, reading significance/CI/power, CUPED, or rescuing tests that won't go…

    167 GitHub stars~2.4k tokensUpdated today
    Auto-check passed
  • Accessibility

    ericrisco/rsc-harness

    A skill your agent uses when making a web UI conform to WCAG 2.2 Level AA — axe-core or Lighthouse a11y violations, keyboard operability, focus management, ARIA roles/names/live regions, contrast…

    167 GitHub stars~3.4k tokensUpdated today
    Auto-check passed
  • Ads

    ericrisco/rsc-harness

    A skill your agent uses when running or fixing paid acquisition on Google or Meta — campaign structure (Performance Max, Demand Gen, Search, Advantage+), platform-fit creative, budget/scaling rules…

    167 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Agent Eval

    ericrisco/rsc-harness

    A skill your agent uses when measuring whether an LLM or agent system actually got better and gating merges on it: golden sets, fixing an inflated LLM-as-judge, scoring RAG (faithfulness, contextual…

    167 GitHub stars~3.2k tokensUpdated today
    Auto-check passed
  • AI Media

    ericrisco/rsc-harness

    A skill your agent uses when a creative goal must become a finished media file: pick and order generative-media models per modality — AI voiceover, image-to-video clips, score — then glue them with…

    167 GitHub stars~3.3k tokensUpdated today
    Auto-check passed
  • Analytics

    ericrisco/rsc-harness

    A skill your agent uses when instrumenting product or web analytics — GA4/PostHog SDK wiring, event taxonomy, funnels, double-counted events, consent gating, PII scrubbing.

    167 GitHub stars~2.8k tokensUpdated today
    Auto-check passed

Categories

Questions about Htmx

What does Htmx do?

A skill your agent uses when adding interactivity to a server-rendered app (FastAPI/Jinja, Django, Rails, Laravel, Go templates, Express) without adopting a JS framework — hx-get/post/put/delete…. Htmx is an agent skill from ericrisco/rsc-harness. Use when adding interactivity to a server-rendered app (FastAPI/Jinja, Django, Rails, Laravel, Go templates, Express) without adopting a JS framework — hx-get/post/put/delete with hx-target, hx-swap and hx-trigger, returning HTML fragments instead of JSON, out-of-band swaps, active search, infinite scroll, inline edit and polling.

When should I use Htmx?

Htmx fits situations like: adding interactivity to a server-rendered app (FastAPI/Jinja; express) without adopting a JS framework — hx-get/post/put/delete with hx-target; hx-swap and hx-trigger; returning HTML fragments instead of JSON.

How do I install Htmx in Claude Code?

Run `npx skills add ericrisco/rsc-harness --skill htmx -a claude-code`. Or copy the skill folder (skills/htmx in ericrisco/rsc-harness) into .claude/skills/htmx in your project. Claude Code loads it when a task matches its description.

How do I install Htmx in Codex?

Run `npx skills add ericrisco/rsc-harness --skill htmx -a codex`. Or copy the skill folder (skills/htmx in ericrisco/rsc-harness) into .agents/skills/htmx in your project. Codex loads it when a task matches its description.

Can I use Htmx in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add ericrisco/rsc-harness --skill htmx -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/htmx, .gemini/skills/htmx, .github/skills/htmx and .opencode/skills/htmx in your project.

What does Htmx need to run?

Going by SKILL.md and its folder, Htmx needs a shell for the scripts in its folder. Our summary lists: Python 3; A Bash shell.

Does Htmx access the network?

SKILL.md names 1 domain. In commands or code: unpkg.com; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Htmx safe to install?

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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Htmx use?

Htmx is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Htmx use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.8k tokens, read only when the agent opens those files.

What are the alternatives to Htmx?

Skills that share tags, products or a category with Htmx: Senior Fullstack (alirezarezvani/claude-skills, 28k stars), Senior Fullstack (borghei/Claude-Skills, 881 stars), Arch Wiki (ahmedemad3/arch-wiki, 249 stars) and PayRam Checkout Integration (PayRam/payram-mcp, 158 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Htmx?

ericrisco (a GitHub user) maintains it in ericrisco/rsc-harness, which has 167 GitHub stars. The repository holds 227 skills in this directory. The repository was last updated on October 7, 2026.

Source: ericrisco/rsc-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.