Agent skill

Make Pages Interactive

by paraschopra in paraschopra/make-pages-interactive

Turn a directory of static HTML pages into a live commenting surface.

MITAuto-check passedProductivity & Automation

Install Make Pages Interactive

skills CLI
$ npx skills add paraschopra/make-pages-interactive --skill make-pages-interactive -a claude-code

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

GitHub CLI
$ gh skill install paraschopra/make-pages-interactive make-pages-interactive --agent claude-code

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

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
make-pages-interactive
GitHub stars
481
Token cost
~2k tokens
SKILL.md length
937 words
Files
10 (incl. scripts)
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Turn a directory of static HTML pages into a live commenting surface.

  • Works in 6 steps: Identify the target directory. Usually… → Inject the feedback tags into every… → Pick a port. Default 5050. Before… → …
  • Phrases — make this page interactive
  • SKILL.md covers When to invoke, Setup flow (when user wants to…, Responding to a feedback batch and On startup in a directory that…, plus 5 more sections
  • Runs Python and JavaScript scripts from its folder; calls python, curl and git

What it does

Make Pages Interactive is an agent skill from paraschopra/make-pages-interactive. Turn a directory of static HTML pages into a live commenting surface. Injects a feedback library, starts a tiny server, and routes user comments into a JSONL inbox that the agent monitors and responds to by editing the pages. Trigger phrases — "make this page interactive", "make these pages interactive", "let me comment on this page", "add feedback to these pages".

Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 11 other files, including scripts (for example `README.md`, `lib/feedback.js` and `lib/server.py`).

It sits in Productivity & Automation, covering Email management and HTML artifacts. The licence is MIT.

When your agent uses it

  • Phrases — make this page interactive
  • Make these pages interactive
  • Let me comment on this page
  • Add feedback to these pages

Example prompts

  • “make this page interactive”
  • “make these pages interactive”
  • “let me comment on this page”
  • “/make-pages-interactive”

Requirements

  • Python 3
  • Node.js

Workflow steps

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

  1. Identify the target directory. Usually the user's current working directory or a folder they named. If ambiguous, ask.
  2. Inject the feedback tags into every *.html in that directory
  3. Pick a port. Default 5050. Before starting, check what's there
  4. Start the server in the background via Bash with run_in_background: true
  5. Tell the user the URL. For example: http://localhost:5050/index.html (use whatever filename they actually have — index.html, report.html…
  6. Start a Monitor on the inbox so new comments notify you immediately

What it can do on your machine

Read from SKILL.md and the folder at commit 053b056. 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 2 files in scripts/ (Python and JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • python
    • curl
    • git

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

  • Network

    No URLs in SKILL.md. Its commands use curl and git, which can reach the network depending on how they are called.

    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

Make Pages Interactive loads about 2k tokens when it runs. Until then it costs about 98 tokens; SKILL.md has 937 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~98
When it runs · the whole SKILL.md, loaded when a task matches
~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 paraschopra/make-pages-interactive at commit 053b056, republished under its MIT licence (© paraschopra). 937 words, ~2,020 tokens.

Download SKILL.mdSave it as .claude/skills/make-pages-interactive/SKILL.md (or your agent's skills folder). This skill also uses 9 other files; get the full folder from GitHub.
name
make-pages-interactive
description
Turn a directory of static HTML pages into a live commenting surface. Injects a feedback library, starts a tiny server, and routes user comments into a JSONL inbox that the agent monitors and responds to by editing the pages. Trigger phrases — "make this page interactive", "make these pages interactive", "let me comment on this page", "add feedback to these pages".

Make Pages Interactive

Turns any folder of HTML files into a place the user can leave inline comments on (text selections, element selections, page-level notes). Comments POST to a local JSONL inbox; you (the agent) Monitor that inbox, edit the HTML in response, append to feedback/history.json, and the page auto-reloads with a walkthrough of what changed.

When to invoke

User says any of:

  • "make this page interactive" / "make these pages interactive" → Setup flow
  • "add feedback to this page" / "let me comment on this page" → Setup flow
  • "set up feedback on <dir>" → Setup flow
  • "stop the feedback server" / "kill the server" / "shut it down" → Stop flow
  • "remove the feedback layer" / "make pages static again" → Removal flow
  • "update the make-pages-interactive skill" → Update flow

Setup flow (when user wants to make pages interactive)

  1. Identify the target directory. Usually the user's current working directory or a folder they named. If ambiguous, ask.
  2. Inject the feedback tags into every *.html in that directory:
    python ~/.claude/skills/make-pages-interactive/scripts/inject.py <dir>
    Add --recursive if the pages live in subfolders. The script is idempotent — safe to re-run. It also creates <dir>/feedback/inbox.jsonl and <dir>/feedback/history.json if missing.
  3. Pick a port. Default 5050. Before starting, check what's there:
    curl -s --max-time 2 http://localhost:5050/info
    • JSON with artifact_dir matching this <dir> → reuse it, skip to step 5.
    • JSON with a different artifact_dir → port is held by another exploration. Either ask the user to free it (lsof -ti:5050 | xargs kill) or use port 5051, 5052, … (try the next port; tell the user the URL).
    • No response → port 5050 is free.
  4. Start the server in the background via Bash with run_in_background: true:
    python ~/.claude/skills/make-pages-interactive/lib/server.py <dir> --port <chosen>
    The server auto-shuts-down on parent death or 10 min of idle, so you don't need to manage its lifecycle.
  5. Tell the user the URL. For example: http://localhost:5050/index.html (use whatever filename they actually have — index.html, report.html, etc.). If they have multiple pages, list the top-level ones.
  6. Start a Monitor on the inbox so new comments notify you immediately:
    Monitor on path: <dir>/feedback/inbox.jsonl
    Do NOT poll — let the Monitor notification arrive.

Responding to a feedback batch

When a new batch arrives in inbox.jsonl:

  • Read the entry. Each comment has a stable cf_id and a selector pointing to the exact element/text the user commented on.
  • Edit the relevant HTML files to address each comment. Wrap each modified region with <span data-cf-change="ch-<short-slug>">…</span> (or add data-cf-change to an existing wrapping element) so the post-reload walkthrough can find the change. One anchor per change.
  • Append a new batch object to the end of <dir>/feedback/history.json (newest = last; the library walks from the end to find the latest batch). Schema:
    json
    {
      "batch_id": "b-<timestamp-or-slug>",
      "timestamp": "<ISO 8601>",
      "comments": [ /* echo back the inbox comments you addressed */ ],
      "changes": [
        {
          "id": "ch-<slug>",
          "in_response_to": ["<cf_id from inbox>"],
          "anchor": "ch-<slug>",   // must match a data-cf-change in the HTML
          "title": "short, concrete",
          "description": "longer prose (hidden in UI, just for the record)"
        }
      ]
    }
  • The page polls history.json, sees the new batch, auto-reloads (scroll position preserved), and offers the user a walkthrough of the changes. The "processing…" banner clears automatically when any in_response_to matches a submitted comment id.
Post in-flight status while you work

When you receive feedback and start working, POST a short status string so the user sees what you're doing instead of just a generic spinner:

POST /status
{"comment_id": "<cf_id from inbox>", "message": "Filing 2 receipts to Google Sheet (~30s)"}

To clear an entry early, POST the same comment_id with message: null or "". Entries are auto-pruned by the server after 10 min so a crashed agent never leaves a stuck "working" message.

history.json remains the source of truth for "done" — the status message is decoration only. The banner clears the moment a matching batch lands in history.json, regardless of whether you cleared the status entry.

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

On startup in a directory that already has feedback

If you find <dir>/feedback/inbox.jsonl and <dir>/feedback/history.json and the skill has been invoked in this session:

  1. Scan inbox for comment ids.
  2. Scan history's changes[*].in_response_to union — those are already processed.
  3. If unprocessed comments exist, tell the user the count and ask whether to process now.
  4. Either way, set up the Monitor on the inbox.

Stop flow (user wants to kill the server)

  1. Identify the port. If you started the server in this session, you know it. Otherwise check curl -s http://localhost:5050/info (try 5051, 5052 if 5050 returns nothing or a different artifact).
  2. Kill it: lsof -ti:<port> | xargs kill (use kill -9 only if a plain kill doesn't free the port within a few seconds — the server traps SIGTERM and exits cleanly).
  3. Confirm: lsof -i :<port> should be silent.
  4. If you also started a Monitor on the inbox in this session, it will keep watching the file — that's fine, the file just won't get new entries.

Note: in most cases the user doesn't need to manually stop the server. It auto-shuts-down when (a) the parent process dies (e.g. they close the Claude Code window — within ~5–10 s) or (b) no client requests for 10 min. Manual stop is for the case where they want the port back right now in the same session.

Update flow (user wants the latest lib/)

python ~/.claude/skills/make-pages-interactive/scripts/update.py

Runs git pull --ff-only inside the skill dir. Requires git-clone install (the script tells the user how to re-install if not).

Removal flow (clean static copy)

If the user wants their HTML back to a clean, server-independent state:

python ~/.claude/skills/make-pages-interactive/scripts/inject.py <dir> --remove

Strips both tags from every *.html. Leaves the feedback/ directory alone (delete manually if not wanted).

Files in this skill

~/.claude/skills/make-pages-interactive/
├── SKILL.md              # this file (agent-facing)
├── README.md             # GitHub-facing docs (human readers)
├── LICENSE
├── lib/
│   ├── feedback.js       # client library: selection + commenting + tour
│   ├── feedback.css      # styles
│   └── server.py         # stdlib-only HTTP server
└── scripts/
    ├── inject.py         # idempotent tag injection / removal
    └── update.py         # git pull --ff-only

Gotchas

  • The injected <link> and <script> reference absolute paths /lib/feedback.css and /lib/feedback.js. These resolve through server.py, which routes /lib/* to the skill's own lib/ directory. So pages only work when opened through this server — opening the HTML file directly in a browser will silently fail to load the feedback widget (the page itself still renders).
  • history.json order matters: append (don't prepend). The library walks from the end to find the latest batch for the walkthrough.
  • anchor values must match a data-cf-change attribute actually present in the HTML. Typos here cause "anchor not found" warnings post-reload.

© paraschopra, 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 9 other files (scripts) in the repository root of paraschopra/make-pages-interactive.

  • SKILL.md
  • .gitignore
  • LICENSE
  • README.md
  • lib/feedback.css
  • lib/feedback.js
  • lib/server.py
  • screenshot.png
  • scripts/inject.py
  • scripts/update.py

Open the folder on GitHubat commit 053b056

Compare with similar skills

Make Pages Interactive 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.

Make Pages Interactive compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Make Pages Interactive this skillparaschopra/make-pages-interactive481—~2kAutomated safety check: PassMIT
Creator Daily Analysisdragon-hh/ai-boshu-crawler106—~920Automated safety check: PassNone
Creator Three Day Analysisdragon-hh/ai-boshu-crawler106—~920Automated safety check: PassNone
Creator Weekly Analysisdragon-hh/ai-boshu-crawler106—~945Automated safety check: PassNone
Morning BriefingTheCraigHewitt/skills157—~1.3kAutomated safety check: PassMIT
Checking A Pageawss1i/assay102—~712Automated safety check: PassMIT

Similar skills

  • Creator Daily Analysis

    dragon-hh/ai-boshu-crawler

    Analyze every tracked creator video published in the rolling 24-hour window ending at the latest successful Feishu local sync, using the complete mirrored readable transcript plus current metrics…

    106 GitHub stars~920 tokensUpdated 1 mo ago
    Productivity & AutomationAuto-check passed
  • Creator Three Day Analysis

    dragon-hh/ai-boshu-crawler

    Analyze every tracked creator video published in the rolling 72-hour window ending at the newest successful Feishu local sync, using complete readable transcripts, reusable video profiles, current…

    106 GitHub stars~920 tokensUpdated 1 mo ago
    Productivity & AutomationAuto-check passed
  • Creator Weekly Analysis

    dragon-hh/ai-boshu-crawler

    Analyze every tracked creator video published in the rolling 168-hour window ending at the newest successful Feishu local sync, using complete readable transcripts, reusable video profiles, current…

    106 GitHub stars~945 tokensUpdated 1 mo ago
    Productivity & AutomationAuto-check passed
  • Morning Briefing

    TheCraigHewitt/skills

    Generate a daily briefing dashboard that pulls calendar, email, and news into one interactive HTML page.

    157 GitHub stars~1.3k tokensUpdated 4 mo ago
    Productivity & AutomationAuto-check passed
  • Checking A Page

    awss1i/assay

    Check that a web page you wrote or changed actually works, by opening it in a browser and driving every control on it.

    102 GitHub stars~712 tokensUpdated today
    Frontend & DesignAuto-check passed
  • Material Studio

    infometa/workbuddyskills

    Render a pharma sales rep's marketing material into a self-contained mobile-portrait HTML page (digital business card + content) with a one-click export-as-long-image button.

    344 GitHub stars~2.2k tokensUpdated yesterday
    Frontend & DesignAuto-check passed

Questions about Make Pages Interactive

What does Make Pages Interactive do?

Turn a directory of static HTML pages into a live commenting surface. Make Pages Interactive is an agent skill from paraschopra/make-pages-interactive. Turn a directory of static HTML pages into a live commenting surface.

When should I use Make Pages Interactive?

Make Pages Interactive fits situations like: phrases — make this page interactive; make these pages interactive; let me comment on this page; add feedback to these pages.

How do I install Make Pages Interactive in Claude Code?

Run `npx skills add paraschopra/make-pages-interactive --skill make-pages-interactive -a claude-code`. Or copy the skill folder (the paraschopra/make-pages-interactive repository) into .claude/skills/make-pages-interactive in your project. Claude Code loads it when a task matches its description.

How do I install Make Pages Interactive in Codex?

Run `npx skills add paraschopra/make-pages-interactive --skill make-pages-interactive -a codex`. Or copy the skill folder (the paraschopra/make-pages-interactive repository) into .agents/skills/make-pages-interactive in your project. Codex loads it when a task matches its description.

Can I use Make Pages Interactive 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 paraschopra/make-pages-interactive --skill make-pages-interactive -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/make-pages-interactive, .gemini/skills/make-pages-interactive, .github/skills/make-pages-interactive and .opencode/skills/make-pages-interactive in your project.

What does Make Pages Interactive need to run?

Going by SKILL.md and its folder, Make Pages Interactive needs Python and JavaScript for the scripts in its folder and the command-line tools its instructions call (python, curl and git). Our summary lists: Python 3; Node.js.

Does Make Pages Interactive access the network?

SKILL.md contains no URLs. Its commands use curl and git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Make Pages Interactive 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 Make Pages Interactive use?

Make Pages Interactive is published under the MIT licence (from the LICENSE file in the skill folder). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Make Pages Interactive use?

About 2k tokens (SKILL.md is roughly 8.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Make Pages Interactive?

Skills that share tags, products or a category with Make Pages Interactive: Creator Daily Analysis (dragon-hh/ai-boshu-crawler, 106 stars), Creator Three Day Analysis (dragon-hh/ai-boshu-crawler, 106 stars), Creator Weekly Analysis (dragon-hh/ai-boshu-crawler, 106 stars) and Morning Briefing (TheCraigHewitt/skills, 157 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Make Pages Interactive?

paraschopra (a GitHub user) maintains it in paraschopra/make-pages-interactive, which has 481 GitHub stars. The repository was last updated on June 18, 2026.

Source: paraschopra/make-pages-interactive on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.