Agent skill

Holm Web

by volfpeter in volfpeter/holm

A skill your agent uses when working on web apps built with holm, or to answer questions about holm.

MITAuto-check passedBackend & APIs

Install Holm Web

skills CLI
$ npx skills add volfpeter/holm --skill holm-web -a claude-code

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

GitHub CLI
$ gh skill install volfpeter/holm holm-web --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/volfpeter/holm.git skills-src && mkdir -p .claude/skills && cp -r skills-src/holm/resources/skills/holm-web .claude/skills/holm-web && 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
holm-web
GitHub stars
132
Token cost
~1.2k tokens
SKILL.md length
479 words
Files
11 (incl. references)
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

A skill your agent uses when working on web apps built with holm, or to answer questions about holm.

  • Works in 8 steps: Forms without method="POST" submit as… → page.py and actions.py and api.py in the… → Returning Response objects from pages,… → …
  • Working on web apps built with holm
  • SKILL.md covers Architecture summary, Application initialization, File-system based routing and URL construction, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Holm Web is an agent skill from volfpeter/holm. Use when working on web apps built with holm, or to answer questions about holm. Covers file-system routing, layouts, pages, actions, page metadata, form handling, error handling, partial HTML and HTMX considerations.

Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including reference files (for example `references/actions.md`, `references/apis.md` and `references/error-handling.md`).

It sits in Backend & APIs, covering Backend development and Forms and validation. It works with FastAPI, Next.js, Python and JavaScript. The repository describes itself as: Hypermedia web development metaframework that brings the Next.js developer experience to Python, built on FastAPI. The licence is MIT.

When your agent uses it

  • Working on web apps built with holm
  • Answer questions about holm

Example prompts

  • “/holm-web”

Requirements

  • Python 3

Workflow steps

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

  1. Forms without method="POST" submit as GET and hit page(), not handle_submit()
  2. page.py and actions.py and api.py in the same package have their routes merged into a single APIRouter
  3. Returning Response objects from pages, actions, or handlers bypasses rendering
  4. holm auto-wraps page() and layout() list/tuple returns in Fragment. Do not return a list/tuple unless it is a component sequence
  5. htmy does not flatten nested component sequences: [comp1, comp2] is valid, but [[comp1, comp2]] is not. Use list unpacking or Fragment…
  6. Strongly prefer ComponentType and ComponentSequence return type annotations over Component to avoid component nesting problems!
  7. holm uses htmy.page() for both pages and actions automatically. Actions always return HTML; use api.py if you need standard FastAPI behavior
  8. Path parameters from _id_ or {id} packages are available as standard FastAPI dependencies in pages, layouts, actions, metadata, and APIs

What it can do on your machine

Read from SKILL.md and the folder at commit c90c9b4. 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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are python).

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

  • Network

    No URLs in SKILL.md.

    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

Holm Web loads about 1.2k tokens when it runs, and up to ~4.7k if it reads all its reference files. Until then it costs about 57 tokens; SKILL.md has 479 words of instructions outside code blocks.

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

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from volfpeter/holm at commit c90c9b4, republished under its MIT licence (© volfpeter). 479 words, ~1,169 tokens.

Download SKILL.mdSave it as .claude/skills/holm-web/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.
name
holm-web
description
Use when working on web apps built with holm, or to answer questions about holm. Covers file-system routing, layouts, pages, actions, page metadata, form handling, error handling, partial HTML and HTMX considerations.

Building holm web applications

Architecture summary

  • FastAPI: underlying web framework; all holm pages, layouts, actions, and metadata are FastAPI dependencies (so they can all be async)
  • htmy: async, pure-Python HTML component engine; JSX-like syntax with html.div(...), full typing, async support, and context (no prop drilling)
  • FastHX (fasthx.htmy.HTMY): the rendering layer; htmy.page() renders HTML for all requests; htmy.hx() renders HTML only for HTMX requests, otherwise keeps FastAPI route behavior
  • holm: file-system based routing (similar to Next.js), automatic layout composition, page metadata, actions, and submit handlers
  • Optional Jinja2 layout/template support via layout.jinja and holm.JinjaTemplate — see references/jinja.md

Application initialization

python
from holm import App

app = App()

Call holm.App() directly within a module in the root application package

Optional:

  • pass a pre-configured FastAPI app
  • pass a custom fasthx.htmy.HTMY renderer

File-system based routing

FilePurposeHTTP method
page.pyPage callableGET /
page.py + handle_submitSubmit handlerPOST /
layout.pyLayout callable, wraps pages/layouts in subpackages—
layout.jinjaJinja2-based layout (alternative to layout.py)—
actions.pyAction functions decorated with @action.*custom paths/methods
api.pyAPIRouter (JSON or rendering APIs)custom paths/methods
error.py / errors.pyError handlers (root only)—

Dynamic routes: _id_ or {id} package names become path parameters (/user/{id})

Private packages: prefix with underscore (_components) — ignored entirely

The default path for actions is the decorated function's name, underscores replaced with hyphens

Apply REST principles whenever possible

URL construction

python
from fastapi import Request


def some_page(request: Request) -> ComponentType:
    url = request.url_for("my_app.users.page")
    return html.a("Users", href=str(url))
  • Pages and submit handlers: "my_app.page", "my_app.users.page" (path is the same, method is different)
  • Actions: "my_app.users.actions.enable_user"

Pages vs Actions

  • Pages (page.py) return full HTML (wrapped in layouts); they handle regular browser navigation requests
  • Actions (@action.*) return HTML fragments without layouts by default; ideal for HTML/HTMX partials
Show full SKILL.md (225 more words)Show less

Reference files

FileLoad when…
references/layouts.mdCreating or modifying layouts
references/jinja.mdUsing Jinja2 templates/layouts (layout.jinja, JinjaTemplate)
references/pages.mdCreating or modifying pages or page metadata
references/actions.mdCreating actions or HTMX partials
references/forms.mdCreating submit handlers or form submissions
references/apis.mdCreating custom api.py routers with JSON or mixed rendering
references/htmx-integration.mdAdding HTMX interactivity, partial rendering, or boosted navigation
references/htmy-context.mdWorking with the htmy rendering context or request processors
references/htmy.mdCreating or modifying htmy components
references/error-handling.mdSetting up custom error handlers

Gotchas

  1. Forms without method="POST" submit as GET and hit page(), not handle_submit()
  2. page.py and actions.py and api.py in the same package have their routes merged into a single APIRouter
  3. Returning Response objects from pages, actions, or handlers bypasses rendering
  4. holm auto-wraps page() and layout() list/tuple returns in Fragment. Do not return a list/tuple unless it is a component sequence
  5. htmy does not flatten nested component sequences: [comp1, comp2] is valid, but [[comp1, comp2]] is not. Use list unpacking or Fragment when mapping/generating components
  6. Strongly prefer ComponentType and ComponentSequence return type annotations over Component to avoid component nesting problems!
  7. holm uses htmy.page() for both pages and actions automatically. Actions always return HTML; use api.py if you need standard FastAPI behavior
  8. Path parameters from _id_ or {id} packages are available as standard FastAPI dependencies in pages, layouts, actions, metadata, and APIs

© volfpeter, 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 10 other files (references) in holm/resources/skills/holm-web of volfpeter/holm.

  • SKILL.md
  • references/actions.md
  • references/apis.md
  • references/error-handling.md
  • references/forms.md
  • references/htmx-integration.md
  • references/htmy-context.md
  • references/htmy.md
  • references/jinja.md
  • references/layouts.md
  • references/pages.md

Open the folder on GitHubat commit c90c9b4

Compare with similar skills

Holm Web 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.

Holm Web compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Holm Web this skillvolfpeter/holm132—~1.2kAutomated safety check: PassMIT
Spec To Repoalirezarezvani/claude-skills28k—~2.7kAutomated safety check: NotesMIT
Fastcrudbenavlabs/fastcrud1.6k—~5kAutomated safety check: PassMIT
Phoenix ServerArize-ai/phoenix12k—~1.6kAutomated safety check: PassCustom licence
Andrej Karpathy Perspectivenazarli-shabnam/clevis1702 repos~3.8kAutomated safety check: PassMIT
Starlettesimonw/research783—~8.6kAutomated safety check: NotesNone

Similar skills

  • Spec To Repo

    alirezarezvani/claude-skills

    A skill your agent uses when the user says 'build me an app', 'create a project from this spec', 'scaffold a new repo', 'generate a starter', 'turn this idea into code', 'bootstrap a project', 'I…

    28k GitHub stars~2.7k tokensUpdated 1 mo ago
    Backend & APIsAuto-check: notes
  • Fastcrud

    benavlabs/fastcrud

    A skill your agent uses when building or modifying CRUD endpoints with FastCRUD (the fastcrud PyPI package) in a FastAPI project — covers FastCRUD, crudrouter, EndpointCreator, FilterConfig…

    1.6k GitHub stars~5k tokensUpdated 14 days ago
    Backend & APIsAuto-check passed
  • Phoenix Server

    Arize-ai/phoenix

    Backend development guide for the Phoenix AI observability platform (Strawberry GraphQL, SQLAlchemy async, FastAPI).

    12k GitHub stars~1.6k tokensUpdated today
    Backend & APIsAuto-check passed
  • Andrej Karpathy Perspective

    nazarli-shabnam/clevis

    Andrej Karpathy的思维框架与表达方式。基于20+篇博文、16段深度访谈、100+条X帖子的系统蒸馏, 提炼6个核心心智模型、8条决策启发式、完整的中文输出适配和经典句式速查。

    170 GitHub starsUsed in 2 repos~3.8k tokens
    Backend & APIsAuto-check passed
  • Starlette

    simonw/research

    Build async web applications and APIs with Starlette 1.0, the lightweight ASGI framework for Python.

    783 GitHub stars~8.6k tokensUpdated 4 days ago
    Backend & APIsAuto-check: notes
  • Fba

    Zhongye1/KnowAgenticRAG

    FastAPI Best Architecture (fba) project development guide. An agent skill from Zhongye1/KnowAgenticRAG.

    143 GitHub stars~758 tokensUpdated 9 days ago
    Backend & APIsAuto-check passed

More from volfpeter/holm

  • Documentation Guide

    volfpeter/holm

    A skill your agent uses when writing or modifying documentation, guides, or example READMEs.

    132 GitHub stars~1.4k tokensUpdated 23 days ago
    Auto-check passed

Categories

Questions about Holm Web

What does Holm Web do?

A skill your agent uses when working on web apps built with holm, or to answer questions about holm. Holm Web is an agent skill from volfpeter/holm. Use when working on web apps built with holm, or to answer questions about holm.

When should I use Holm Web?

Holm Web fits situations like: working on web apps built with holm; answer questions about holm.

How do I install Holm Web in Claude Code?

Run `npx skills add volfpeter/holm --skill holm-web -a claude-code`. Or copy the skill folder (holm/resources/skills/holm-web in volfpeter/holm) into .claude/skills/holm-web in your project. Claude Code loads it when a task matches its description.

How do I install Holm Web in Codex?

Run `npx skills add volfpeter/holm --skill holm-web -a codex`. Or copy the skill folder (holm/resources/skills/holm-web in volfpeter/holm) into .agents/skills/holm-web in your project. Codex loads it when a task matches its description.

Can I use Holm Web 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 volfpeter/holm --skill holm-web -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/holm-web, .gemini/skills/holm-web, .github/skills/holm-web and .opencode/skills/holm-web in your project.

What does Holm Web need to run?

SKILL.md names no scripts, command-line tools or credentials: Holm Web is instructions for the agent only. Our summary lists: Python 3.

Does Holm Web access the network?

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.

Is Holm Web 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. Review the folder before installing.

What licence does Holm Web use?

Holm Web 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 Holm Web use?

About 1.2k tokens (SKILL.md is roughly 4.7k 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 3.5k tokens, read only when the agent opens those files.

What are the alternatives to Holm Web?

Skills that share tags, products or a category with Holm Web: Spec To Repo (alirezarezvani/claude-skills, 28k stars), Fastcrud (benavlabs/fastcrud, 1.6k stars), Phoenix Server (Arize-ai/phoenix, 12k stars) and Andrej Karpathy Perspective (nazarli-shabnam/clevis, 170 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Holm Web?

volfpeter (a GitHub user) maintains it in volfpeter/holm, which has 132 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on September 16, 2026.

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