frontend-testing
Skill238 starsChanged 10 days agoMITView on GitHub
Verify any Plexus admin-UI screen or component in the actually running app. Boots the worktree-safe dev stack (`bun run dev:agent`), auto-logs in, and drives a real browser (agent-browser) using the correct port/credentials. Use whenever you edit anything under `packages/frontend/src` (React, routes, forms, buttons, tables, modals, Tailwind/CSS, layout, dashboards) or when asked to look at or verify a screen (e.g., "screenshot the dashboard", "does the new tab show up", "verify UI", "does the button work", "test web app", "reproduce visual bug"). Prefer this over the generic agent-browser skill for local Plexus frontend because it knows port, credentials, and auto-login. Don't hand UI work back unverified.
- Installs packages
We split this skill into the rules it gives an agent
7 rules. 0 are common, 3 are distinctive, and 4 are very specific to this project.
0
Common
Most of the 16 edited versions we read keep these.
3
Distinctive
This author's own choices. Worth a look.
4
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 45
Use the agent launcher — it does the right thing in one call:
- Very specific: line 51
If mise is not activated, use mise exec -- bun run dev:agent --detach.
- Very specific: line 71
If dev:agent reports it never became healthy, read the LOG path it printed — a common cause is a real error in the code you just changed …
- Very specific: line 94
If the snapshot still shows a key input / "Log in" heading, the token was rejected — double-check ADMIN_KEY matches what the running server …
- Distinctive: line 123
If your UI change creates, edits, or deletes something (a provider, key, alias, quota, setting), don't trust the optimistic UI alone — …
- Distinctive: line 147
When you report results, quote that printed path and state plainly what the screenshot shows.
- Very specific: line 151
Leave the instance running — it's meant to persist, and reusing it makes your next check instant (and dev:agent will just reuse it).
“Common” is measured: kept by at least 6 in 10 of the 16 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Frontend testing (verify your own UI work)
The point of this skill is self-verification: after you change something in the Plexus frontend, don't hand it back unverified. Boot the app, look at it through a real browser, interact with it the way a user would, and confirm it renders and works. This catches the class of mistakes that typecheck and unit tests miss — a component that throws on mount, a button wired to nothing, a layout that collapses, a form that never submits.
You already have every piece you need:
bun run dev:full— starts a fully-seeded, worktree-safe dev stack (backend + frontend watcher).bun run dev:get:port— tells you which port this worktree uses.- agent-browser — drives a real Chromium browser (load its
coreskill for command syntax). - plexus-cli skill — inspects/seeds backend state through the management CLI when you need to set up or confirm data behind the UI. Use plexus-rest-api only when the CLI is unavailable or lacks the required operation.
This skill wires them together. Follow the steps in order the first time; on later runs you can skip straight to browsing if the instance is already up.
Step 0 — Preflight (once per environment)
agent-browser needs a Chromium binary, which may not be installed yet. Install it once; it's a no-op if already present:
bunx agent-browser install --with-deps # --with-deps pulls Linux browser libs; drop it on macOSNote the bunx prefix: agent-browser is a dev dependency here, not a global binary, so run
every command as bunx agent-browser ....
Step 1 — Start or reuse the instance
Use the agent launcher — it does the right thing in one call:
bun run dev:agent --detachIf mise is not activated, use mise exec -- bun run dev:agent --detach.
dev:agent --detach starts or reuses the full stack target, waits until the server is healthy, then returns
while the stack keeps running in the background. (When run interactively without --detach, dev:agent streams live process logs via Paseo or log tailing.) Do not use bun run dev:full directly for this — it runs in the foreground under a file watcher and never returns, so it will hang your session. dev:agent is also idempotent: if an instance is already up on this worktree's port it just reports it and returns immediately.
It prints everything you need — capture it:
PORT=17508
ADMIN_KEY=password
URL=http://localhost:17508/ui/login?token=password
LOG=/tmp/plexus-dev-<worktree>.logThe stack is keyed to the worktree directory name, so each worktree gets its own stable port and
its own database — parallel worktrees never collide. Health is a single sufficient readiness gate
for the whole stack: the backend embeds the built frontend at startup, so it can't report healthy
until the frontend has been built. On the very first boot of a fresh worktree the stack also seeds
data via prep-dev and restarts once, so that first dev:agent call takes longer than later ones.
If dev:agent reports it never became healthy, read the LOG path it printed — a common cause is
a real error in the code you just changed (the backend --watch crash-loops on a broken import or
a component that fails to build). Another is missing dependencies — run bun install first.
Step 2 — Log in automatically
The remaining steps use $PORT and $ADMIN_KEY. Set them from the values dev:agent printed
(or re-derive the port — it's deterministic per worktree):
PORT=$(bun run dev:get:port)
ADMIN_KEY="${ADMIN_KEY:-password}" # dev default is "password" unless you set ADMIN_KEYSkip the login form entirely. The login page accepts the admin key as a ?token= query
parameter and authenticates on load, so navigate straight there:
bunx agent-browser open "http://localhost:$PORT/ui/login?token=$ADMIN_KEY"
bunx agent-browser wait --load networkidle
bunx agent-browser snapshot -i # confirm you've landed in the app, not back on the login formIf the snapshot still shows a key input / "Log in" heading, the token was rejected — double-check
ADMIN_KEY matches what the running server used (see the ADMIN_KEY: line in the dev log at
/tmp/plexus-dev-<worktree>.log).
Step 3 — Drive and inspect the UI
Now exercise whatever you changed. For the exact agent-browser command syntax — snapshots, element refs, clicking, filling, waiting, screenshots — load its core skill once and follow it; don't guess flags:
bunx agent-browser skills get coreThe essential loop is: snapshot -i to see interactive elements and their @eN refs → act on a
ref (click, fill, type, select) → re-snapshot, because refs go stale the instant the
page changes (navigation, submit, re-render, modal open).
Navigate directly to the route you touched rather than clicking through the whole app, e.g.
bunx agent-browser open "http://localhost:$PORT/ui/<route>". Then verify the specific thing you
changed:
- Does the page render without an error boundary / blank screen? (
snapshot -ishould show real content.) - Does the element you added/changed appear, with the right text and state?
- Does the interaction you wired up actually do something? Click it, then re-snapshot and confirm the expected change.
- Capture a screenshot as evidence (see below).
Step 4 — Confirm backend state when the UI writes data
If your UI change creates, edits, or deletes something (a provider, key, alias, quota, setting), don't trust the optimistic UI alone — confirm the change actually persisted. Use the plexus-cli skill for this, pointed at your local instance:
export PLEXUS_BASE_URL="http://localhost:$PORT"
export PLEXUS_ADMIN_KEY="$ADMIN_KEY"Then follow the plexus-cli skill to read back the relevant resource (e.g. list providers after your form submits and check the new one is there). You can also use it in the other direction — to seed data the UI needs before you test a read/display change.
Screenshots
Capture a screenshot as evidence of what you verified. Let agent-browser save it to its own
default screenshot directory and use the path it prints in its output — don't fight it with a
custom path (a bare relative path is parsed as a CSS selector, not a filename, and a leading
./ is easy to forget):
bunx agent-browser screenshot # prints e.g. "Screenshot saved to /home/.../screenshot-<ts>.png"When you report results, quote that printed path and state plainly what the screenshot shows.
When you're done
Leave the instance running — it's meant to persist, and reusing it makes your next check instant
(and dev:agent will just reuse it). Note in your summary that it's still up on
http://localhost:$PORT/ui/. You don't need to close the browser between checks, but
bunx agent-browser close frees it. To tear the stack down for this worktree, run
bun run dev:stop.
After editing frontend code mid-session
Both watchers rebuild automatically when you save a file, and the backend --watch restarts to
re-embed the rebuilt frontend. So after a further change, give it a moment, re-run
bun run dev:agent (it returns as soon as health is stable again), then reload in the browser
(bunx agent-browser open the same URL, or a hard reload) before re-checking — otherwise you may
be looking at the pre-change build.
Troubleshooting
dev:agentreports never-healthy → read the dev log at theLOGpath it printed (/tmp/plexus-dev-<worktree>.log). Two common causes: (a) the change you made broke the build or crashes the backend on start; (b) dependencies aren't installed — aCould not resolve: "react"(or similar) crash-loop means the worktree needsbun installbefore the stack can boot.prep-devfails / DB looks empty → the stack only seeds if a data source exists (saved local data orPLEXUS_STAGING_URL/PLEXUS_STAGING_ADMIN_KEY). Without one, the server still runs fine on an empty DB — seed what you need for the test via the plexus-cli skill.- Stuck/old process on the port →
bun run dev:stoptears down this worktree's stack, thenbun run dev:agentto start fresh. - agent-browser can't launch a browser → run
bunx agent-browser install --with-deps. In headless/CI-like environments this can fail two ways: the downloaded Chrome binary may lack the execute bit (chmod +x ~/.agent-browser/browsers/*/chrome), and--with-depsneedssudotoapt-get installsystem libs. Diagnose missing libs withldd ~/.agent-browser/browsers/*/chrome | grep 'not found'and install the matching packages. - Login snapshot still shows the form → the
?token=key didn't match the server'sADMIN_KEY; confirm from the dev log. - UI looks stale after an edit → the watcher hadn't finished; wait for
/health, then hard-reload.
Other versions16 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 16
- langgenius/dify★ 160ksame name
- langflow-ai/langflow★ 156ksame name
- YFGaia/dify-plus★ 2.3ksame name
- YosemiteCrew/Yosemite-Crew★ 2ksame name
- Ohh-889/skyroc-admin★ 795same name
- theexperiencecompany/gaia★ 324same name
- nightscout/nocturne★ 161same name
- nilecui/SkillsBase★ 27same name
- bestdeejay-design/agent-skills★ 6same name
- aboio-labs/aboio-skills★ 3same name
6 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
Used alongsideProjects with it also use backend-code-review, component-refactoring and 2 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
jpoindexterSkillbackend-code-review
Review backend code for quality, security, maintainability, and best practices based on established checklist rules. Use when the user requests a review, analysis, or improvement of backend files (e.g., `.py`) under the `api/` directory. Do NOT use for frontend files (e.g., `.tsx`, `.ts`, `.js`). Supports pending-change review, code snippets review, and file-focused review.
Also in 4 projects that use this
Charlie85270Skillcomponent-refactoring
Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component --json` shows complexity > 50 or lineCount > 300, when the user asks for code splitting, hook extraction, or complexity reduction, or when `pnpm analyze-component` warns to refactor before testing; avoid for simple/well-structured components, third-party wrappers, or when the user explicitly wants testing without refactoring.
Also in 3 projects that use this
chendongqiSkillfrontend-code-review
Trigger when the user requests a review of frontend files (e.g., `.tsx`, `.ts`, `.js`). Support both pending-change reviews and focused file reviews while applying the checklist rules.
Also in 6 projects that use this
CloudflareSkillreceiving-code-review
Use when receiving code review feedback, before implementing suggestions, especially if feedback seems unclear or technically questionable - requires technical rigor and verification, not performative agreement or blind implementation
Also in 3 projects that use this
In this repository10 other files it gives its agents.
- AGENTS.mdAGENTS.md
- CLAUDE.mdCLAUDE.md
- add-provider-presetSkill
- add-quota-checkerSkill
- agent-browserSkill
- batch-grill-meSkill
- db-schema-migrationsSkill
- plexus-cliSkill
- plexus-rest-apiSkill
- to-ticketsSkill
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

