CERMM/wiki>

Contribute

Conventions

The rules the code and the screens follow. CLAUDE.md in the repository has every decision with its date; this is the short version.

Writing

  • Plain words, in sentences. Say what happened and what to do: "Agent offline since 14:02", not "Error 503". A failure says what went wrong the moment it happens.
  • Sentence case for headings and buttons. No ALL-CAPS tracked labels, no "A · B · C" strings: facts are label over value, or separate pieces.
  • Be honest. Nothing in the app, the site or the docs that isn't true.

What goes on screen

  • Nothing that doesn't work yet. No "coming soon" tabs or buttons. (Backups' placeholder is the one exception, asked for.)
  • Responsive and informative. An action starts within a second or says exactly why it can't. Every step shows as it happens. Nothing just spins.
  • Think at scale, hundreds to thousands of machines. Never headline online or offline counts; call out only what needs someone (servers down, critical alerts). Lists sort problems first, filter, and page.
  • The server checks every write (need(priv)); the web app hides what you can't use. Every change goes in the audit log.

The look

  • The frame is fixed: the black title bar (☰, the mark, the prompt, search in the middle, flat icon buttons) and the one sidebar, where the current page unfolds its sections under its own row. Never a second sidebar. Don't restyle the frame.
  • Black, warm off-white text, translucent panels with a hairline, no glow. Geist for everything, Geist Mono for code and the prompt, self-hosted.
  • Sections have a sentence-case heading with a small icon of its own, and more space between sections than inside them.
  • Colour means status: the lights are ok, warn, bad and off. Nothing animates in; motion only answers what you did.
  • Light theme: only the page goes light; the frame stays black. Write colours as tokens or rgba(var(--tint), a), never a fixed white.
  • Every screen size: lists and device pages take the window; settings and reports stop at 1480px. Check a phone width too.

Code

  • Server: only erasable TypeScript, imports with .ts. No build step for the server.
  • shared/types.ts and agent/types.go change together.
  • The agent is light (targets: under 1% of one core, under 30 MB), connects out only, and does nothing on its own beyond collecting. Every command comes from the server, signed.
  • Microsoft is an integration, never the default.

Editions

The MSP and Personal editions are meant to build from one codebase, chosen at build time, with code only one edition uses kept under src/editions/. The switch isn't in the current code yet; when you add something only one edition needs, keep it separable.

CERMM is in development. Something here wrong or out of date? Tell us or fix it.