Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add jianshuo/claude-skills --skill wjs-looping-feedbackgit clone --depth 1 https://github.com/jianshuo/claude-skillsWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/jianshuo/claude-skills/wjs-looping-feedback)<a href="https://agentmods.dev/skills/jianshuo/claude-skills/wjs-looping-feedback"><img src="https://agentmods.dev/badge/skills/jianshuo/claude-skills/wjs-looping-feedback/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/jianshuo/claude-skills/wjs-looping-feedback"><img src="https://agentmods.dev/badge/skills/jianshuo/claude-skills/wjs-looping-feedback.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector warn
SkillSpector: 1 finding, up to medium
These are SkillSpector’s own severities. On a checked sample its high-severity flags on skills were ~96% false positives — a documented command, a public API, a “never do X” rule — so we show them as a caution to read, not a verdict. Why →
- medium Excessive Agency · line 15 Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.Fix: Add human-in-the-loop confirmation for destructive, irreversible, or high-impact operations. Never auto-execute commands that modify files, send data, or alter system state.
What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00118 | $0.00759 |
| Opus 5 | $0.00059 | $0.00380 |
| Sonnet 5 | $0.00024 | $0.00152 |
| Haiku 4.5 | $0.00012 | $0.00076 |
Grade A, and why
wjs-looping-feedback scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 11d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 48 lines — stays where its author put it; the contents beside it link to each section on GitHub.
wjs-looping-feedback
Installs a self-driving feedback loop into any website repo. Runs entirely on the repo
owner's own GitHub Actions, authenticated with their Pro/Max OAuth token or their own
ANTHROPIC_API_KEY — no extra service or backend.
What it installs
- A floating feedback button (prefills a GitHub Issue — no backend, no keys client-side).
.github/workflows/feedback.yml— allowlist gate → Claude Code Action → auto-commit → push tomain(auto-deploy) → ledger + dashboard update → close issue./_feedbackdashboard — every suggestion, what Claude did, commit, status, one-click revert..feedback/runtime:feedback-lib.mjs,feedback-finalize.mjs,INSTRUCTIONS.md,feedback-ledger.json,config.json.
How it works
visitor clicks button → fills suggestion → prefilled GitHub Issue (label feedback) →
Actions checks the author is in FEEDBACK_ALLOWLIST (else closes the issue) →
Claude Code edits the site per .feedback/INSTRUCTIONS.md → workflow commits to main,
updates the ledger + dashboard → the deploy ships it →
the issue gets a comment with the commit and a link to /_feedback.
Revert is the same loop driven by a revert: #N issue.
Deploy triggering — read before you install (common gotcha)
The workflow pushes to main with the built-in GITHUB_TOKEN. Two cases:
- External push-deploy host (Cloudflare Pages git-connect, Vercel, Netlify): their webhook fires on every push, so the bot's commit deploys automatically. Nothing to do.
- Deploy is itself a GitHub Actions workflow in the SAME repo (e.g. GitHub Pages via
Actions): GitHub deliberately does NOT let a
GITHUB_TOKENpush trigger another workflow (recursion prevention), so the deploy workflow'son: pushwill NOT fire — the change lands onmainbut never goes live. Bridge it by adding aworkflow_runtrigger to the deploy workflow (seereferences/install.mdstep 4.5).
To install
Read references/install.md and follow it in the target repo. It detects the site type
(Hugo / Next.js / Astro / static), copies assets, injects the widget, and asks the user for
exactly two things: the allowlist of GitHub usernames and the auth (Pro/Max OAuth
token via claude setup-token, or an ANTHROPIC_API_KEY).
What ships with it
15 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- .gitignore 24 B
- assets/config.sample.json 43 B
- assets/feedback-finalize.mjs 1.4 KB runs code
- assets/feedback-ledger.json 20 B
- assets/feedback-lib.mjs 2.9 KB runs code
- assets/feedback-widget.html 2.0 KB
- assets/feedback.yml 5.8 KB
- assets/INSTRUCTIONS.md 1.4 KB
- package.json 144 B
- README.md 294 B
- references/install.md 5.9 KB
- scripts/detect-site.mjs 803 B runs code
- tests/detect-site.test.mjs 1.3 KB runs code
- tests/finalize.test.mjs 3.0 KB runs code
- tests/lib.test.mjs 3.7 KB runs code
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 11d ago First seen · 48 lines · 118 tokens per session scan A b08019ae78fd
wjs-looping-feedback is a skill published in the GitHub repository jianshuo/claude-skills (129 stars, last pushed 21d ago), licensed MIT. It adds 118 tokens to every session and 759 once invoked, about $0.0006 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
fe-engineering
A front-end engineering guide covering architecture review, build-tool upgrades, refactoring, shared development standards, and monorepo management. A monorepo is one repository containing multiple related projects or packages.
verify-behavior
Verify or reproduce visible product behavior by driving the real UI with pi-computer-use's checked tools, requiring verified expect postconditions and durable state evidence for meaningful UI flows. Use when triage needs visual reproduction, implementation needs behavioral proof, review needs interactive confirmation…
git-workflow
A guide for handling Git repository work safely, including status checks, branches, commits, pushes, pull requests, and rebasing. Git is a version-control system that records code changes and coordinates work between developers.
history-portability
Import Claude Code or Codex history and move complete CCAM datasets between machines. Use when rescanning provider history, importing a copied directory, uploading JSONL or archives, exporting a backup, restoring it idempotently, or verifying that tokens, workflows, runs, rules, and pricing survived.
shiny-bslib
Build modern Shiny dashboards and applications using bslib (Bootstrap 5). Use when creating new Shiny apps, modernizing legacy apps (fluidPage, fluidRow/column, tabsetPanel, wellPanel, shinythemes), or working with bslib page layouts, grid systems, cards, value boxes, navigation, sidebars, filling layouts, theming…
layout-skill
Layer A layout-mechanics reference. Stacks on any style skill when the screen is an app shell, dashboard, settings, list-detail, mail/inbox, or any layout with fixed regions plus a scrolling body — or when a layout breaks under long, empty, or unbroken content. Owns spatial structure and scroll ownership; owns zero…