skills/operators-notebook/SKILL.md
Operator's Notebook design register — a dense BI/admin dashboard visual language built on OKLCH ink-blue tokens, hairline dividers, Bricolage Grotesque display, and 60/30/10 accent discipline. Use when designing or migrating admin dashboards, internal tools, BI consoles, or operator-facing surfaces that need editorial clarity over SaaS chrome. Triggers on tasks involving shadcn/ui dashboards, Next.js admin apps, Tailwind v4 token migration, or rewriting "default shadcn" SaaS-flavored UIs into a disciplined editorial register.
npx skillsauth add pseudoyu/agent-skills operators-notebookInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A complete design register for dense, glance-and-decide internal dashboards. Cool off-white canvas biased toward ink-blue, hairlines instead of card shadow, editorial display type, semantic-token-only color discipline. The visual opposite of "default shadcn SaaS."
Reach for this register when building:
Avoid for:
--radius: 0.25rem, no dark-mode drift)PageHeader, StatCard, SectionLabel, EmptyState):root {
--background: oklch(98% 0.003 250);
--foreground: oklch(22% 0.020 250);
--card: oklch(99% 0.002 250);
--primary: oklch(35% 0.040 250);
--accent: oklch(92% 0.025 250);
--muted: oklch(96% 0.003 250);
--muted-foreground: oklch(52% 0.010 250);
--destructive: oklch(52% 0.140 28);
--border: oklch(88% 0.004 250);
--radius: 0.25rem;
}
Full contract (chart tokens, popover, ring, semantic foregrounds) in references/recipes/tokens.md.
text-*/bg-* color utilities allowed in app code)| Role | Token |
| ---------------------------- | ------------------------------------------- |
| Canvas | bg-background |
| Card / popover surface | bg-card (visually equal to background) |
| Primary ink | text-foreground |
| Faded ink (labels, captions) | text-muted-foreground |
| Active / confirmed / positive | text-primary, bg-primary/5, border-primary/40 |
| Negative / destructive | text-destructive, bg-destructive/5 |
| Hairline | border-border |
| Subtle fill | bg-muted, bg-accent/55 |
No bg-emerald-*, bg-green-*, bg-amber-*, bg-blue-*, bg-purple-*, bg-sky-*, text-red-500 or any raw Tailwind color. Map every existing literal to a semantic token. The grep grep -rE "(bg|text)-(emerald|green|amber|sky|purple|red|blue|gray|slate|zinc|neutral)-[0-9]" should return zero hits in app code (UI primitives excepted only if they ship with the shadcn defaults you haven't yet touched).
| Role | Font | CSS variable | Notes |
| -------- | ---------------------------------- | ------------------- | ---------------------------------------------------------------- |
| Body | Noto Sans SC / Noto Sans JP / Inter | --font-body | Match the user-facing language. Weights 400/500/600/700. |
| Display | Bricolage Grotesque (variable) | --font-display | Section labels, headlines, metric figures. Tight tracking. |
| Mono | Sometype Mono | --font-mono | IDs, timestamps, prices, tabular metrics. Never running prose. |
Globally enable tabular figures: body { font-feature-settings: "tnum" }.
Recipes for next/font/google wiring in references/recipes/fonts.md.
<div className="grid grid-cols-1 divide-x divide-y divide-border border border-border md:grid-cols-5 md:divide-y-0">
{cells.map((c) => (
<StatCard key={c.label} label={c.label} value={c.value} hint={c.hint} accent={c.accent} />
))}
</div>
accent — that's the 60/30/10 highlighter<h2 className="font-display text-[11px] font-medium uppercase tracking-[0.1em] text-muted-foreground border-b border-border pb-2">
预约日程
</h2>
Same shape across dashboard, list views, and chart sections so the whole app reads as one ledger.
<Link
href={item.href}
className={cn(
"flex items-center gap-2 px-3 py-2 text-sm transition-colors hover:bg-accent/30",
isActive ? "bg-accent/55 text-foreground" : "text-muted-foreground",
)}
>
{isActive ? <span className="h-1.5 w-1.5 rounded-full bg-primary" /> : <span className="h-1.5 w-1.5" />}
<item.icon className="h-4 w-4" />
<span>{item.label}</span>
</Link>
<Card className="border border-border bg-card p-5">
{/* No `shadow-sm`, no `rounded-2xl`, no backdrop-blur */}
</Card>
The Card primitive itself is tuned to ship rounded-md border border-border bg-card with no shadow — see references/recipes/primitives.md.
export const CHART_GRID_DASH = "2 4";
export const CHART_TICK_SM = { fontSize: 11, fill: "var(--muted-foreground)" };
export const CHART_TOOLTIP_CONTENT_STYLE = {
background: "var(--card)",
border: "1px solid var(--border)",
borderRadius: 4,
fontSize: 12,
color: "var(--foreground)",
};
Full chart contract (axes, bar radius=0, area fillOpacity: 0.12, hue-locked series) in references/recipes/charts.md.
These are absolute. If your PR adds one of these, the PR is wrong:
border-left / border-right ≥ 2px as accent stripe — use a leading icon, tinted background, or the ink-dot patternbg-clip-text + any gradient) — text fills are solid color, alwaysease-out curves only; one authored anticipation curve max per appanimate-{width,height,top,left,padding,margin} — transform + opacity onlybg-card shadow chrome — if you reach for shadow-sm/shadow-md, you've broken the registerbg-white / bg-black — overlays use bg-foreground/40, surfaces use bg-cardbg-emerald-100, text-red-500, etc.) — map to semantic tokensbackdrop-blur on chrome) — solid bg-popover / bg-cardFull taxonomy + the perl scrub commands in references/bans.md.
Order matters. Don't skip phases — token drift propagates fast.
globals.css to the OKLCH contract, delete .dark block + tw-animate-css + next-themes, wire three fonts via next/font/google, set lang correctlybutton, card, input, dialog, badge, label, textarea, tabs, select, dropdown-menu, tooltip, switch, checkbox, scroll-area, separator, skeleton, avatar, tablecomponents/shared/{page-header,section-label,stat-card,empty-state}.tsx + lib/chart-typography.tssidebar, header, mobile-nav (CSS slide-in), root layout (md:pl-60 shell)<Card className="shadow-sm"> → <Card>, stat grids → hairline strips, section dividers → <SectionLabel>, color literals → semantic tokens. Do not touch oRPC calls, React Query hooks, form schemas, mutation callbacks, or permission checks.grep -rE "border-l-[2-9]|bg-clip-text|bg-(white|black)|shadow-sm|rounded-(xl|2xl|3xl)|text-[0-9]" returns zero in app code. pnpm typecheck && pnpm lint && pnpm build all green. Playwright sweep every route, screenshot, assert no React warnings.Full migration playbook in references/recipes/migration-checklist.md.
| Path | What it gives you |
| ------------------------------------------------------- | ------------------------------------------------------ |
| references/design-contract.md | Full register description (aesthetic, why, when, where) |
| references/bans.md | All 10 absolute BANs + grep commands to enforce them |
| references/recipes/tokens.md | Drop-in globals.css (full token block + keyframes) |
| references/recipes/fonts.md | lib/fonts.ts + app/layout.tsx wiring |
| references/recipes/primitives.md | shadcn/ui variant overrides (button/card/input/dialog) |
| references/recipes/shared-primitives.md | PageHeader, StatCard, SectionLabel, EmptyState |
| references/recipes/chrome.md | Sidebar / header / mobile-nav / layout shell |
| references/recipes/login.md | Centered 360px login chrome |
| references/recipes/charts.md | chart-typography.ts + recharts patterns |
| references/recipes/migration-checklist.md | Big-bang migration playbook |
border border-border carries more hierarchy in this register than any shadow.bg-emerald-100. If you can't name the role (positive, destructive, muted, foreground), the color doesn't belong.development
Solidity smart contract gas optimization guidelines based on RareSkills. Use when writing, reviewing, or auditing Solidity code. Triggers on tasks involving smart contracts, EVM development, gas optimization, or Solidity best practices.
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------