Platform
Code Signals
Code Signals are automatic, per-diff indicators — blast radius, a risk heatmap, and dependency expansion — that tell you how big and how risky an agent's change is before you read a single line of the diff.
They require no setup and no extra agent tool call. They're computed the moment an agent calls planwright_record_diff, from diff content the audit chain already captures.
What Code Signals are
ConceptThree automatic, per-diff signals that answer the reviewer's first question — how big and how risky is this change — before you open a single file.
Every agent run that calls planwright_record_diff gets its diff parsed into three signals: blast radius (size and shape of the change), a risk heatmap (does it touch sensitive paths), and dependency expansion (did it pull in a new third-party package). Nothing to configure and no extra tool call for the agent to make — the signals are derived from diff content the audit chain already captures.
Blast radius
SignalFiles changed, lines added/deleted, and whether the diff touches schema or a public API.
Four numbers and two flags, computed from the unified diff: files changed, +added/-deleted line counts, whether any touched path matches a migration or schema pattern ("schema: yes/no"), and whether any touched path matches an API pattern ("public API: yes/no"). A five-file, thirty-line docs change and a two-file, four-hundred-line migration both request acceptance the same way — blast radius is what tells them apart at a glance, before you open the diff.
Risk heatmap
SignalA high/medium/low badge, with reasons, based on whether the diff touches sensitive paths.
The badge only appears when risk is above low — a clean diff shows no badge at all, not a green "low" pill. High-risk paths (auth, billing, payments, migrations, API) turn the badge red; medium-risk paths (a bare schema.ts) turn it amber. The reasons list names which pattern matched, e.g. "high risk · auth, api". A generic default pattern set (auth/billing/payments/migrations/schema/api) is always on, so the signal works from day one with zero setup.
A project can extend the defaults with its own sensitive-path patterns via a risk-patterns.json context file — Planwright proposes one automatically from prior agent-run diffs through the existing doc-suggestion queue, and a human reviews and publishes it like any other context file. The executing agent never supplies its own pattern list.
Dependency expansion
SignalFlags any brand-new third-party package introduced by the diff.
If a diff adds an import or require for a package not already in package.json, it shows up as "New dependency: X" (or "New dependencies: X, Y" for more than one) directly under the blast radius row. This is the highest-signal line of the three — a new npm package landing in the middle of an unrelated objective is exactly the moment a reviewer should stop and ask why.
Where signals appear
PlacementThe same panel renders in the review drawer and inline on every agent run — including while it's still in progress.
Review drawer
Opens when an objective reaches the acceptance or done lane. Signals sit alongside the acceptance-criteria checklist so you can weigh size and risk while you're deciding accept or reject.
Objective detail page
Each agent-run card shows its own signals inline, above the diff/test-result download links — visible the moment record_diff runs, even while the objective is still in_progress. No need to wait for a review to get a sense of what changed.
Agent runs recorded before this feature shipped simply show nothing — not a broken panel or a zero-state placeholder.
Not yet available
RoadmapComplexity delta is planned but not implemented — the panel omits it silently.
The original scope for Code Signals included a fourth signal, complexity delta, meant to compute asynchronously via a background worker. It hasn't shipped yet. The panel is built to omit any signal that isn't present rather than show a loading spinner or placeholder, so nothing changes in the UI you see today — the row will simply appear once that signal exists.
Continue reading