agentleFS
alphaXivalphaXiv/OpenResearch/.agents/skills/orx-look/SKILL.md

orx-look

Skill8k starsChanged 9 days agoMITView on GitHub

Make the OpenResearch app look and move right. Covers spacing, alignment, hitboxes, density, scrolling, motion and layout shift, colour and theme tokens, light and dark, icons, logos and chips, popups across machines, and the desktop window on macOS, Windows and Linux. Use whenever you write or change CSS, Tailwind classes, a component's layout, an animation, an icon or a logo in `ui/`, and whenever something looks off, jumps, jitters or scrolls oddly. In this repo, use it in place of any general UI skill, including when reviewing someone else's change.

Adopted by

Steady: 0 new projects took it in the last 4 weeks, none the 4 weeks before.thin data

Week of Sep 13: 0 new projectsWeek of Sep 20: 0 new projectsWeek of Sep 27: 0 new projectsWeek of Oct 4: 0 new projectsWeek of Oct 11: 0 new projectsWeek of Oct 18: 0 new projectsWeek of Oct 25: 0 new projectsWeek of Nov 1: 0 new projects
Sep 2026Oct 2026Nov 2026
New projects taking a version of this file each week, over the 8 weeks our latest run read: only 0 in all, so this is a hint, not a trend.

Who's talking about alphaXiv/OpenResearch

The biggest 5 of 39 mentions linking to the repository that our crawl found. Each line is their own headline.

See all 39

Talked about on GitHub, Bluesky and Hacker News (39 times).

On GitHub · 27

22 more on GitHub

On Bluesky · 11

6 more on Bluesky

On Hacker News · 1

The file

We split this skill into the rules it gives an agent

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

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈3

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 2

    Very specific

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

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

    Start and end, not left and right: Use ms-, me-, ps-, pe-, start-, end-, text-start for anything that would mirror in a right-to-left …

    line 14
  2. Distinctive:

    Unsupported JavaScript crashes the whole page: Check new syntax, regex features and APIs against Safari 14.

    line 20
  3. Distinctive:

    WebKit has its own layout bugs: Look at a layout change in the desktop app before calling it done (orx-testing).

    line 21
  4. Very specific:

    Use the libraries ui/package.json already has: before adding one, and keep what you add in proportion to the job.

    line 28
  5. Distinctive:

    After a visual fix, check every instance: every row, both themes, open and collapsed, hovered and focused, the narrowest window.

    line 35

≈ “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

How OpenResearch looks and moves

The rules the build enforces

  • Theme tokens only. Colours, borders and shadows come from ui/src/theme.css (bg-background, bg-surface, text-text, text-subtext, text-muted, border-border, bg-accent-red-subtle, shadow-modal…). Raw colours live only in theme.css, and pnpm lint:styles rejects #hex, rgb(), color-mix() and arbitrary text-[…], bg-[…] and border-[…] values anywhere else. A third-party renderer (charts, diagrams, syntax) is themed from the same tokens, never left on its own defaults.
  • Tailwind's own palette is gone (--color-*: initial in theme.css): bg-blue-500 or text-gray-400 compiles to nothing and no check fails. Every colour class names a token.
  • The theme is resolved by ui/src/theme.ts and set as data-theme on the root. Never add a prefers-color-scheme override. Judge light and dark separately; a fix that looks right in one is checked in the other.
  • Text sizes are the scale: text-sm is the app's body, text-menu (13 px) menus and compact rows, text-xs secondary detail; larger sizes are for titles and the onboarding.
  • Start and end, not left and right. Use ms-, me-, ps-, pe-, start-, end-, text-start for anything that would mirror in a right-to-left language.

The desktop webviews

The desktop app renders in the system's webview: WKWebView on macOS, WebView2 on Windows, WebKitGTK on Linux. WKWebView is whatever WebKit the Mac has, which on a Mac that skipped Safari updates goes back to Safari 14. Chromium in a dev browser forgives the most.

  • Unsupported JavaScript crashes the whole page. Check new syntax, regex features and APIs against Safari 14.
  • WebKit has its own layout bugs. Look at a layout change in the desktop app before calling it done (orx-testing).

Use what exists

  • Dialogs come from the dialog system (orx-flows); menus, popovers, selects and tooltips from Base UI (@base-ui/react); everything else from the primitives in ui/src/components/ui/. A one-off restyle of a primitive is a new variant there or a sign the design is off.
  • Tooltips wrap the control: <Tooltip interactive content={…}>. Without interactive, Tooltip is its own focusable info icon. Button, IconButton and MenuItem reject title, so no native tooltip appears beside the app's.
  • Every machine the user has opened stays mounted (ui/src/Machines.tsx), hidden and inert when not shown. A popup portals into its machine's copy, container={useContext(WorkspaceDomContext).portalContainer}, as every Base UI portal in ui/src does, never into document.body.
  • Use the libraries ui/package.json already has before adding one, and keep what you add in proportion to the job.

Alignment and hitboxes

  • Edges and centres line up across rows and regions, including against the window's own controls, which share the top row with the app's content on macOS and Windows (WindowControls).
  • The hitbox is the whole visible control, the same in every state the control has. Sizes and contrast are in orx-accessibility.
  • Single pixels count. Report offsets in pixels, measured from a screenshot at 2×, and fix the cause instead of nudging.
  • After a visual fix, check every instance: every row, both themes, open and collapsed, hovered and focused, the narrowest window.

Scrolling and density

  • Nothing scrolls by a few pixels. A panel that fits shows no scrollbar. Size the container so its content fits, rather than hiding the overflow.
  • Long lists are virtualized (@tanstack/react-virtual, as the transcript, search and CSV viewer are): rows measure without moving what the user is reading, and the scroll position holds when a row above grows.
  • Quiet repeated controls. One button per item becomes noise in a list; show it on hover or focus, or once for the group.
  • Separate with space before rules.
  • Nothing floats over what the user is typing or reading, and an indicator sits on the control it describes.
  • Plan for the edges: the longest name a user can type, the longest list they can build, the narrowest window, and fullscreen or maximized on each platform. A truncated name keeps the full text in a tooltip.

Motion

  • Instant or visible, never in between. Hover and colour take 120 ms, dialogs and popovers 150 ms, with ease-standard. Content that changes because of typing or filtering swaps instantly.
  • Nothing jumps on render. Reserve the final size before content arrives, so a placeholder doesn't give way to something taller.
  • Nothing changes under a drag. What a selection reveals appears on mouse-up.
  • A refactor keeps every hover, focus and active state.
  • Motion is optional. Tailwind motion goes behind motion-safe:, as the dialog's error shake does; a CSS animation in app.css gets a rule in its prefers-reduced-motion: reduce block.

Colour, icons and logos

  • UI glyphs are lucide-react at the size of the text beside them, in text-subtext until hovered or active.
  • Brand marks are the brand's own (HarnessLogo, BackendLogos, LitSourceLogo): never boxed, tiled or recoloured, except muted to grey where the mark is secondary. A provider gets its own mark; never invent one for a model.
  • References are pills: an icon and the first words of what they point at, never a raw hash.
  • A choice that changes how the agent works shows its state in the composer, with an icon and a tooltip, wherever it is set.

When it looks off

Compare it side by side, at the same scale, with its sibling surface in the app, and name the differences in pixels. For an open call, see orx-flows, "Before you build".

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.