#665 by GitHub stars

petergyang/human-review

Open an HTML file, Markdown file, or localhost page in the browser so the user can edit text directly and leave comments on specific parts, then send all edits and comments back to you. Use after writing or updating something the user will read — specs, plans, reports, newsletter drafts, landing pag

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

src/SKILL.md

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

Before Network or broad shell → After Network or broad shell

f9a55812f6f3 → f9a55812f6f3

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → f9a55812f6f3

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit f9a55812f6f37e2c53da6ec26c52ef7a489485d6

1.4kGitHub stars
2stars in 7 days
1skill in this repository
0commits in 30 days

Heat

3.6
  • Star growth, last 7 daysAhead of 51% of tracked repositories
  • Star growth, last 24 hoursAhead of 72% of tracked repositories
  • Rank movement, last 7 daysAhead of 21% of tracked repositories
  • Commits, last 30 daysAhead of 0% 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

Jul 27, 2026Nov 6, 20261,446

Individual skills in this repository

How it works

human-review

When your agent uses it

Open an HTML file, Markdown file, or localhost page in the browser so the user can edit text directly and leave comments on specific parts, then send all edits and comments back to you. Use after writing or updating something the user will read — specs, plans, reports, newsletter drafts, landing pages, slide decks, and locally running web pages.

What it loads into context

Frontmatter

77 tokens

Always available to the agent

SKILL.md

2,071 tokens

When the skill is activated

Reference documents

0 tokens

Loaded on request

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

The playbook

  1. The loop
  2. What you get
  3. Rules
  4. Better edit labels (optional)

Scripts executed separately

  • anchor-text.js
  • chrome-client.js
  • chrome-session.js
  • cli.js
  • click-target.js
  • editing.js
  • frame-policy.js
  • html-transform.js
  • markdown.js
  • paths.js
  • sdk.js
  • serialize.js
  • server-entry.js
  • server.js
  • setup.js
  • state.js

Files

  • SKILL.mdcore8,476 bytes
  • SKILL.mdcore8,476 bytes
  • SKILL.mdcore8,476 bytes
  • SKILL.mdcore8,476 bytes
  • SKILL.mdcore8,476 bytes
  • SKILL.mdcore8,476 bytes
  • SKILL.mdcore8,476 bytes
  • SKILL.mdcore8,476 bytes
  • SKILL.mdcore8,476 bytes
  • anchor-text.jsruns3,681 bytes
  • chrome-client.jsruns38,669 bytes
  • chrome-session.jsruns217 bytes
  • chrome.cssasset13,386 bytes
  • chrome.htmlasset3,893 bytes
  • cli.jsruns13,621 bytes
  • click-target.jsruns1,538 bytes
  • editing.jsruns2,887 bytes
  • frame-policy.jsruns594 bytes
  • html-transform.jsruns3,507 bytes
  • markdown.jsruns4,893 bytes
  • paths.jsruns2,559 bytes
  • sdk.jsruns68,264 bytes
  • serialize.jsruns1,826 bytes
  • server-entry.jsruns613 bytes
  • server.jsruns61,599 bytes
  • setup.jsruns8,758 bytes
  • state.jsruns17,171 bytes
Read SKILL.md

# human-review

The user reviews your HTML, Markdown, or localhost page in a real browser: they fix small things
by typing, select anything to comment on it, and send you the whole batch at once.

Markdown files open rendered. Their quotes and edits reference the rendered text,
and the file itself is never touched — apply every change to the Markdown source,
keeping its formatting syntax.

## The loop

1. Write or update the HTML or Markdown file, or start the local page being reviewed.
2. Open it for the user:
View the complete source on GitHub

Skills included

  • human-review

Repository facts

License
MIT
Created
Jul 27, 2026
Last pushed
Sep 17, 2026
Forks
126
Open issues
15
Project activity
Active

Rank over the last 12 weeks

Now #665 · best #514 · down 83 in 30 days

  1. #653 on Nov 1
  2. #654 on Nov 2
  3. #659 on Nov 3
  4. #661 on Nov 4
  5. #663 from Nov 5 to Nov 6
  6. #665 since Nov 7
77 earlier periods
  1. #728 on Aug 8
  2. #710 on Aug 9
  3. #711 on Aug 10
  4. #688 on Aug 11
  5. #612 on Aug 12
  6. #597 on Aug 13
  7. #581 on Aug 14
  8. #549 on Aug 15
  9. #558 from Aug 16 to Aug 17
  10. #567 on Aug 18
  11. #556 on Aug 19
  12. #555 on Aug 20
  13. #558 on Aug 21
  14. #533 on Aug 22
  15. #544 from Aug 23 to Aug 24
  16. #551 on Aug 25
  17. #539 on Aug 26
  18. #551 from Aug 27 to Aug 28
  19. #528 on Aug 29
  20. #514 on Aug 30
  21. #543 on Aug 31
  22. #547 on Sep 1
  23. #540 on Sep 2
  24. #544 on Sep 3
  25. #525 on Sep 4
  26. #519 on Sep 5
  27. #534 on Sep 6
  28. #540 on Sep 7
  29. #554 on Sep 8
  30. #537 on Sep 9
  31. #546 on Sep 10
  32. #539 on Sep 11
  33. #532 on Sep 12
  34. #535 on Sep 13
  35. #555 on Sep 14
  36. #541 on Sep 15
  37. #554 on Sep 16
  38. #548 on Sep 17
  39. #551 on Sep 18
  40. #536 on Sep 19
  41. #551 on Sep 21
  42. #562 on Sep 22
  43. #557 on Sep 23
  44. #542 on Sep 24
  45. #536 on Sep 25
  46. #542 on Sep 26
  47. #565 on Sep 28
  48. #586 on Sep 29
  49. #559 on Sep 30
  50. #546 on Oct 1
  51. #550 on Oct 2
  52. #534 on Oct 3
  53. #537 on Oct 4
  54. #544 on Oct 5
  55. #556 on Oct 6
  56. #559 on Oct 7
  57. #582 on Oct 8
  58. #578 on Oct 9
  59. #561 on Oct 10
  60. #562 on Oct 11
  61. #572 on Oct 12
  62. #583 on Oct 14
  63. #579 on Oct 15
  64. #584 on Oct 16
  65. #576 on Oct 17
  66. #573 on Oct 18
  67. #591 on Oct 19
  68. #599 on Oct 20
  69. #604 on Oct 21
  70. #591 on Oct 22
  71. #582 on Oct 23
  72. #566 on Oct 24
  73. #626 on Oct 25
  74. #642 on Oct 28
  75. #646 on Oct 29
  76. #649 on Oct 30
  77. #650 on Oct 31

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 3, 2026

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

Show 8 notes
  • src/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • src/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • src/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • src/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • src/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • src/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • src/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • src/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 52 signals by file

src/SKILL.md

  • Network accessline 28
    npx -y human-review http://localhost:3000/wiki

src/anchor-text.js

  • Executable scriptline 1
    Executable file

src/chrome-client.js

  • Executable scriptline 1
    Executable file
  • Network accessline 59
    async function api(path, options) {   const res = await fetch(path, {
  • Network accessline 60
    const res = await fetch(path, {
  • Network accessline 761
    case "eh:asset":       try {         const saved = await fetch(`/api/page/${state.key}/asset?type=${encodeURIComponent(msg.assetType || "")}`, {
  • Network accessline 762
    try {         const saved = await fetch(`/api/page/${state.key}/asset?type=${encodeURIComponent(msg.assetType || "")}`, {           method: "POST",
  • Network accessline 763
    const saved = await fetch(`/api/page/${state.key}/asset?type=${encodeURIComponent(msg.assetType || "")}`, {
  • Network accessline 925
    if (events) events.close();   try {     fetch(`/api/session/${state.sessionId}/away`, {
  • Network accessline 926
    try {     fetch(`/api/session/${state.sessionId}/away`, {       method: "POST",
  • Network accessline 927
    fetch(`/api/session/${state.sessionId}/away`, {

src/chrome-session.js

  • Executable scriptline 1
    Executable file

src/cli.js

  • Executable scriptline 1
    #!/usr/bin/env node
  • Network accessline 116
    process.exit(1);   }   const url = `http://127.0.0.1:${server.port}${body.path}`;
  • Network accessline 117
    }   const url = `http://127.0.0.1:${server.port}${body.path}`;   openBrowser(url);
  • Network accessline 118
    const url = `http://127.0.0.1:${server.port}${body.path}`;

src/click-target.js

  • Executable scriptline 1
    Executable file

src/editing.js

  • Executable scriptline 1
    Executable file
  • Network accessline 48
    /**  * A typed link, made openable and safe. Bare domains get https://, in-page
  • Network accessline 49
    * A typed link, made openable and safe. Bare domains get https://, in-page
  • Network accessline 61
    candidate = `https://${href}`;
  • Network accessline 65
    }   try {     const parsed = new URL(candidate, "https://relative.invalid");
  • Network accessline 66
    try {     const parsed = new URL(candidate, "https://relative.invalid");     if (!/^(https?:|mailto:|tel:)$/i.test(parsed.protocol)) return "";
  • Network accessline 67
    const parsed = new URL(candidate, "https://relative.invalid");

src/frame-policy.js

  • Executable scriptline 1
    Executable file

src/html-transform.js

  • Executable scriptline 1
    Executable file

src/markdown.js

  • Executable scriptline 1
    Executable file
  • Network accessline 47
    */ export const MERMAID_VERSION = "11.17.2"; const MERMAID_SRC = `https://cdn.jsdelivr.net/npm/mermaid@${MERMAID_VERSION}/dist/mermaid.esm.min.mjs`;
  • Network accessline 48
    export const MERMAID_VERSION = "11.17.2"; const MERMAID_SRC = `https://cdn.jsdelivr.net/npm/mermaid@${MERMAID_VERSION}/dist/mermaid.esm.min.mjs`; const MERMAID_LOADER = `<script type="module" data-eh-diagram>
  • Network accessline 49
    const MERMAID_SRC = `https://cdn.jsdelivr.net/npm/mermaid@${MERMAID_VERSION}/dist/mermaid.esm.min.mjs`;

src/paths.js

  • Executable scriptline 1
    Executable file

src/sdk.js

  • Executable scriptline 1
    Executable file
  • Network accessline 554
    /**  * The boot comparison only catches scripts that rewrote the DOM before this  * module ran. Pages that render on load or after a fetch (charts, mermaid,
  • Network accessline 555
    * The boot comparison only catches scripts that rewrote the DOM before this  * module ran. Pages that render on load or after a fetch (charts, mermaid,  * client-rendered apps) mutate later — watch for any serialization drift that
  • Network accessline 556
    * module ran. Pages that render on load or after a fetch (charts, mermaid,

src/serialize.js

  • Executable scriptline 1
    Executable file

src/server-entry.js

  • Executable scriptline 1
    Executable file

src/server.js

  • Executable scriptline 1
    Executable file
  • Network accessline 84
    let response;   try {     response = await fetch(url, {
  • Network accessline 85
    try {     response = await fetch(url, {       redirect: "manual",
  • Network accessline 86
    response = await fetch(url, {
  • Network accessline 738
    const server = http.createServer(async (req, res) => {     touch();     const url = new URL(req.url, "http://127.0.0.1");
  • Network accessline 739
    touch();     const url = new URL(req.url, "http://127.0.0.1");     const route = url.pathname;
  • Network accessline 740
    const url = new URL(req.url, "http://127.0.0.1");
  • Network accessline 847
    sdkOptions = {                 baseHref: fetched.resolvedUrl,                 src: `http://${host}/sdk.js?key=${encodeURIComponent(key)}`,
  • Network accessline 848
    baseHref: fetched.resolvedUrl,                 src: `http://${host}/sdk.js?key=${encodeURIComponent(key)}`,               };
  • Network accessline 849
    src: `http://${host}/sdk.js?key=${encodeURIComponent(key)}`,

src/setup.js

  • Executable scriptline 1
    Executable file
  • Network accessline 64
    After writing an HTML or Markdown file the user will read, open it for them with \`npx -y human-review <file.html>\`. For a locally running web page, open the real route with \`npx -y human-review http://localhost:3000/path\` instead of rec
  • Network accessline 65
    \`npx -y human-review <file.html>\`. For a locally running web page, open the real route with \`npx -y human-review http://localhost:3000/path\` instead of recreating it as a static file. Then run
  • Network accessline 66
    route with \`npx -y human-review http://localhost:3000/path\` instead of recreating

src/state.js

  • Executable scriptline 1
    Executable file

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.

Signal confidence: 1 fact

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md src/SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md src/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md src/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md src/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md src/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md src/SKILL.md.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.

petergyang/human-review: #665 on hotskills, 1.4k stars

[![petergyang/human-review on hotskills](https://hotskills.dev/badge/petergyang-human-review.svg)](https://hotskills.dev/skill/petergyang-human-review/)