Set it up once
npm install sluglistimport { createFeedbackWidget, mountFeedbackWidget, LocalConnector } from "sluglist";
mountFeedbackWidget(
createFeedbackWidget({
connectors: [new LocalConnector()],
})
);Gate it behind an env flag so it never initializes in production —
enabled: process.env.NODE_ENV !== "production".
Then, next to your dev server:
npx sluglist dev # writes to ./.sluglist, port 4477Browser JavaScript cannot write to disk, which is the only reason this process exists. It binds
127.0.0.1, has no authentication, and is not meant to be exposed.
Use it while you work
Click the launcher (or press Shift+F), pick an element, type what is wrong. Every issue arrives as a folder of plain files:
.sluglist/session-2026-08-16-a1b2/
session.yaml
01-save-does-nothing.md # frontmatter + your comment + ## Errors + ## Actions
01-save-does-nothing.pngWhen a bug needs a sequence, record mode captures a screenshot per click and navigation, so the report carries steps-to-reproduce as numbered frames instead of a sentence you have to write.
Hand it to the agent
npx sluglist init # skills, .sluglist/checklists/, .gitignore rules, PROJECT.mdThen tell Claude Code "read feedback and fix it." The bundled sluglist-fix skill reads each
issue, looks at the screenshot, localizes by component and selector, fixes the code, and records the
outcome in fixes.yaml — fixed, wontfix or needs_info, never a guess.
npx sluglist status # what is still open, and what a pass left unansweredWhere it goes next
The same widget, one config line different, collects feedback from your team and from real users — with the same artifact format, so nothing downstream changes. And the whole cycle can run agent to agent when you want the tester to be an agent too.