agentleFS
angadhnangadhn/botference/.agents/skills/see-ui/SKILL.md

see-ui

Skill20 starsChanged 16 days agoMITView on GitHub

Look at any web UI you build or change — render it headless with `botference see` and read the screenshots — because layout and design failures produce NO errors or warnings. Use after every UI change, before declaring done, and whenever a human says something "looks wrong".

The file

We split this skill into the rules it gives an agent

5 rules. About 0 are common, 2 are distinctive, and 3 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 3

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Never hand-roll rendering via ImageMagick/qlmanage/rsvg to check a chart — their SVG engines have artifacts Chrome does not.

    line 25
  2. Very specific:

    Default viewports: 390x844 (phone) and 1440x900 (desktop).

    line 28
  3. Distinctive:

    After ANY change that affects rendered UI, screenshot both default viewports and look at them before reporting the change as done.

    line 45
  4. Very specific:

    When a human reports something "looks wrong/bad/off", screenshot FIRST, at the viewport they used (phone screenshots → 390x844), and …

    line 47
  5. Distinctive:

    If the app has a login form, your screenshot will show only the gate.

    line 51

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

see-ui — look at the page before you say it's done

Layout and design failures are invisible to your normal loop: the DOM is valid, the CSS applied, the console silent — and the page is still broken to a human eye (a chart squashed into 5% of its width renders "successfully"). Code and logs cannot catch "technically correct but looks wrong". Pixels can, and you can read pixels.

The command

botference see <target> [label] [--viewport WxH]... [--basic-auth U:P] [--out DIR]
  • <target>: a URL, a bare :port (localhost), a local file path (HTML, SVG — rendered via file://, no server needed: the way to verify charts, reports, and mockups you just wrote), or the NAME of a running botference service — its listening port is discovered from the live process, you never need to know it.
  • Never hand-roll rendering via ImageMagick/qlmanage/rsvg to check a chart — their SVG engines have artifacts Chrome does not; see is the trustworthy lane and works from your sandbox.
  • Default viewports: 390x844 (phone) and 1440x900 (desktop). Any width under 500 px is shot as an emulated phone screen of exactly that size: the page sees innerWidth 390, a device pixel ratio of 3, a mobile user agent and touch input, and the PNG is 390 by 844 pixels. (Before 2026-10-30 this was not true: headless Chrome will not make a window narrower than 500 px, so "phone" shots were a 500 px layout with the right edge cut off. Do not trust overflow findings from older phone shots.) A page with no <meta name="viewport"> lays out 980 px wide and is zoomed out to fit, as on a real phone. If see prints "NOT a real phone layout", the emulation failed and that shot is the old cut-off kind.
  • It prints wrote: <path>.png lines. Read those images. That is the entire point — do not run the command and skip looking.
  • Output defaults to .botference/shots/ (gitignored by convention).

Protocol

  1. After ANY change that affects rendered UI, screenshot both default viewports and look at them before reporting the change as done.
  2. When a human reports something "looks wrong/bad/off", screenshot FIRST, at the viewport they used (phone screenshots → 390x844), and compare with what they see. Do not reason about CSS from source alone.
  3. If the app has a login form, your screenshot will show only the gate. Fix that properly: let bare-localhost requests through unauthenticated (the review engine's rule — anyone on the loopback port already owns the machine). --basic-auth helps only for HTTP basic auth, not form gates.
  4. Charts and figures: vision discovers a failure class once — then lock it out forever with a deterministic test on the generated SVG/scales, no browser needed. Assert data coverage (observed data spans ≥ ~half the x-range; projections must not compress history), containment (points inside the plot area, y-domain spans the data, no NaN coordinates), and legibility (labels don't collide, sane tick counts, markers above minimum visible size). Every visual chart fix ships with the invariant test that would have failed on the bad render.

Notes

  • Engine: headless system Chrome — no Playwright, nothing to install. A --virtual-time-budget is applied so client-drawn charts finish rendering before the shot.
  • Sandboxes are handled — run the command yourself. Your sandbox cannot launch Chrome (seatbelt kills it); botference see detects that and hands the job to the see-broker service automatically, printing the same wrote: paths. Do not retry Chrome by hand and do not ask a human for pixels. If it reports "no see-broker service is alive", relay exactly this to the machine owner: botference service start see-broker -- botference see --serve
  • Emulation caveat: it is Chrome at phone size, not iOS Safari. If a bug reproduces on a real iPhone but not in your render, say so — that is the one case that justifies installing Playwright (for its WebKit engine), a decision for the human, not you.
  • botference service list shows what is running if you are unsure of a service name.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.