Automate pattern discovery with Topics ↗

Ship quality agents at scale

Surface patterns in production, turn them into evals, and improve quality with every release.

Start buildingContact sales
Build with agents ⌄
Trusted by the best AI teams
Observability

Agents fail differently

Trace every run

Capture inputs, outputs and intermediate steps for every agent execution.

Score automatically

Run evals continuously and compare across model and prompt versions.

Surface patterns

Cluster production failures into topics you can act on.

experiments / gpt-eval-v4 · 1,284 rows
factuality0.94+0.03
relevance0.88+0.01
latency p950.71−0.04
tool accuracy0.66+0.09
safety0.990.00
cost / run0.52−0.11
Controls

One blue, one pill

Start building Contact sales Sign in Disabled eval ExperimentsLogsDatasets
Start building Contact sales Sign in ← hover state
Search experiments Search experiments ← focus — see the note below

Controls are 40px tall at 0 16px padding with a 24px pill radius and an 18px/400 label; the primary fill is #2c1fea. Disabled is a real token, #7e95fc at opacity .5–.6, not just a fade.

Accessibility note: the real site suppresses its focus ring (focus-visible:ring-0 and outline-hidden). That is recorded in DESIGN.md as an anti-pattern, so the focus state shown above is a recommended replacement (3px #7e95fc ring), not a reproduction. Do not copy the suppressed ring.

Typography

Weight 400 at 60px

Hero display h1 · btSans · 60/60 · 400Ship quality agents at scale
Section h3 · btSans · 48/48 · 400Agents fail differently
Sub-heading h2 · btSans · 20/25 · 400Surface patterns in production
Body · Inter · 14/24 · 400Turn production traces into evals you can run on every release.
Nav link · btSans · 15/22.5 · 600 (heaviest text)Customers · Pricing
Button label · Inter · 18 · 400Start building
Mono eyebrow · suisseMono · 12 · UPPERTrusted by the best AI teams

Specimens substitute Space Grotesk for the custom btSans and JetBrains Mono for suisseMono; Inter is the real face. Note the 1:1 line-height at display sizes and that nav is the heaviest text on the page.

Palette

Chrome and charts, kept apart

Text
text-ink#000000
text-inverse#ededed
text-inverse-2#ededf0
text-muted#71717a
text-dim#a1a1aa
text-faint#c4c4cc
Surfaces & borders
canvas#ffffff
canvas-dark#000000
surface-dark#0e0e0f
surface-dark-2#19191c
slate band#99a1af
border-dark#3c3c42
border-dark-2#26262a
Brand & semantic
brand-blue#2c1fea
accent-400 (disabled)#7e95fc
accent#5770ff
mint pill#5ee9b5
Categorical chart palette — charts only, never chrome
chart-1#9e60f6
chart-2#5770ff
chart-3#f97316
chart-4#ef46ef
chart-5#00bba7
chart-6#f0b100
Depth & motion

Borders, not shadows

4px small
6px default
12px
16px
24px pill
32px
6px 0 0 tab
canvas + 1px #000000
dark + 1px #3c3c42
panel + 1px #26262a

There is no shadow scale — across ~5,000 elements the only box-shadow is a transparent ring reset, so depth is band colour plus a 1px border that swaps colour with the band. Motion is opacity-led: 0.15s cubic-bezier(.4,0,.2,1) on 206 elements, with a slow 0.7s cubic-bezier(0,0,.2,1) for large panel reveals. Table keyframes columnFlash and rowFlash highlight data cells; slow-stripes runs 2s infinite. Two prefers-reduced-motion blocks are honoured, and 21 container queries size the data components.