with one click
hono-review
// Owner-only. Reviews honojs/hono PRs or local branches with two checks — tests (do they pass, is the approach right) and breaking change (public API, types, hc).
// Owner-only. Reviews honojs/hono PRs or local branches with two checks — tests (do they pass, is the approach right) and breaking change (public API, types, hc).
When a project on Hono needs real React — for the React component ecosystem, SSR, or an SPA — drop hono/jsx and wire React in via vite-ssr-components.
Anything Cloudflare (Workers, D1, R2, KV, Durable Objects, Queues). Detailed guidance lives in the official cloudflare/skills collection.
How to add or update a skill in yusukebe/skills from inside another working project. Owner-only — uses Yusuke's local gh CLI auth.
Use @hono/inertia on the server and @ts-76/inertia-hono-jsx on the client to get SPA-style interactivity without leaving the Hono/hono-jsx stack.
Hono is the default web framework for any project here. Detailed guidance lives in the yusukebe/hono-skill collection on GitHub.
yusukebe/rj is a tiny CLI that fetches a URL and prints the response metadata (status, headers, protocol, timing) as JSON. It does not print the body — use it alongside `curl`, not as a replacement.
| name | hono-review |
| title | Review a honojs/hono PR or branch as a maintainer |
| description | Owner-only. Reviews honojs/hono PRs or local branches with two checks — tests (do they pass, is the approach right) and breaking change (public API, types, hc). |
| tags | ["hono","review","maintenance","owner-only"] |
| references | ["https://github.com/honojs/hono","https://hono.dev/","https://github.com/honojs/hono/tree/main/runtime-tests"] |
| related | ["hono"] |
Use this skill to help Yusuke review a PR or local branch on honojs/hono (core repo). The framing is collaborative — the output is material a maintainer skims and then forms their own opinion from, not a verdict handed down. Owner-only: it reflects how Yusuke reviews the core, not a generic PR reviewer.
Scope.
honojs/honoonly. Sibling repos (middleware,honox,vite-plugins,create-hono,node-server, ...) are not covered — they each have different concerns and would warrant their own skill.
Do not start reviewing automatically. Always begin by asking the user what to review. Do not auto-pick the current branch, guess from context, or jump straight into gh pr diff.
Ask a single short question, e.g.:
What should I review? Reply with a PR number, "current branch", or a specific path.
Phrase the question in whichever language the user is using in the session. Wait for the user's reply before fetching anything. If the user already supplies a PR number or branch in the request — whether as a slash-command argument (/hono-review 3845) or in natural language (a "what do you think of PR #3845?" / "look at this branch" style message) — treat that as the answer and proceed without asking again. Only ask when the target is genuinely ambiguous.
Activate not just on the slash command but whenever Yusuke makes a review-flavoured request about a PR or branch on honojs/hono. Typical shapes (in any language he is using):
/hono-review <PR#> or /hono-reviewCommon situations:
honojs/hono and needs a maintainer-flavoured triage pass.honojs/hono checkout is about to be pushed or merged.Once the user has confirmed the target, pick whichever fits:
gh pr diff <N> --repo honojs/hono for the patch, gh pr view <N> --repo honojs/hono for context. If anything beyond a static review is needed (running tests, type-perf check), gh pr checkout <N> locally first.git diff main...HEAD for the patch, git log main..HEAD --oneline for the commit shape. Confirm the working tree is the honojs/hono repo.src/**, then runtime-tests/**, then everything else.The default mode is static review. Do not check the PR out locally just to start the review — gh pr diff <N> and gh pr view <N> (or git diff main...HEAD for the current branch) give enough context for the two checks below. CI already runs the test matrix and format/lint, so re-running them locally on every review is wasteful.
Escalate to a local checkout (gh pr checkout <N>) only when one of these applies:
tsserver).If a local checkout exists, the mechanical commands are:
bun run test
bun run format:fix && bun run lint:fix
Surface the result inside Issues: test failures block merge; format:fix / lint:fix diffs are listed as files the contributor needs to commit.
Two checks. Everything else is "mention it only if you happen to notice it while doing these two" — never a starting point.
This is about the test approach, not just whether they pass. Even when CI is green, the wrong tests can pass.
Content-Type, invalid Accept-Encoding, malformed headers, zero-length input, ...). Match the edge cases nearby tests already cover.runtime-tests/<runtime>/ case. compress, body parsers, streaming, and cookie handling are the usual suspects.*.test-d.ts reflecting the new inference. If missing, ask for one..skip / .only / commented-out assertions left behind.src/index.ts or a preset (src/preset/*) — values and types — is the public contract.hc-inferred shape are breaking even when runtime behaviour is identical. TS users hit it on the next compile.@deprecated, schedule removal for the next major.hc (RPC client) is especially load-bearing — its inferred shape is the public API.These are not checklist items — do not go looking for them. If, while doing the two checks above, one of these jumps out, fold it into Issues:
Map, WeakMap, lazy singletons, memoization layers) in src/. Core must stay isolate-safe; in-process caches can leak between requests/tenants on Workers-style runtimes.node:fs, node:process, Buffer, __dirname, setImmediate, ...) outside an adapter directory.import that drags in unrelated code or top-level side effects (breaks tree-shaking; bundle size is a Hono headline).Hono / Context / Handler / Env / Schema that look like they would slow tsserver visibly across user route chains.Keep the output short. Four sections, in this order:
file:line.merge OK, merge OK after issues fixed, or do not merge.The two-check structure is for your internal analysis, not for the output shape. Do not group findings by check, and do not use "blockers / suggestions / notes" tiers. Stop after the verdict line.
Tone is collaborative — you are handing material to a maintainer who will form their own judgment, not pronouncing a verdict for them. "merge OK" is a suggestion, not a decision.
Write the review like you are explaining the PR to Yusuke over coffee, not delivering a technical report. He has the deep context; what he needs from the skill is something easy to skim.
subprotocol, "echo back", "spread order" are fine when they are the most economical option — but pair them with a plain-language clue rather than chaining them. "Makes sure the user-supplied options.protocol wins" beats "places ...options after the header-derived field in the spread so it wins".The line between AI and Yusuke is at remote-mutating actions:
gh pr checkout, edit files, run bun run test / format:fix / lint:fix, show git status -sb / git diff.git add, git commit, git push (incl. force-push), gh pr review, gh pr comment, anything that updates the PR on GitHub.For minor fixes — typo, missing test case, format/lint diff the contributor forgot — Yusuke sometimes patches the contributor's branch directly. The skill handles the local prep so the path from "I want to fix this" to "ready to commit" is one step; Yusuke takes it from there.
Trigger: only act after Yusuke explicitly says he wants to patch the branch — phrasings along the lines of "I'll just fix it", "let me edit the branch", "add the test for me", "apply the format fix", or equivalents in whichever language he is using. Do not propose this unsolicited.
Steps the skill does:
gh pr checkout <N> — switch to the contributor's branch with the correct upstream. Confirm with git status -sb and verify the branch matches the PR. If the PR is from a fork without maintainer-edit permission, surface that immediately — there is no clean recovery.
Apply the edit Yusuke described. Stay within what he asked for; this is a light touch, not a rewrite.
Run the mechanical checks locally:
bun run test
bun run format:fix && bun run lint:fix
Show git status -sb and the relevant git diff so Yusuke can see exactly what will be committed.
Then stop. git add / git commit / git push are Yusuke's. Do not stage, do not draft a commit message and run it, do not push. If he asks for a commit-message suggestion, give it as text — let him run the command.
The Fix lines in the review output should already be concrete enough that this whole flow is a small step ("apply Fix #1, commit, push") rather than a discussion. Vague Fix lines like "add a test case" defeat the point — rewrite them to something paste-ready.
np handles that locally.