Health check
The health check certifies the install: the runtime, the settings and the release channel are checked live and rolled into one verdict. It runs interactively as /health and headless as mercury health. The home screen's Health Check row opens the same certificate. Configured MCP servers are validated without being started.
The report is read-only against Mercury: it consults gate helpers, snapshots, small local artifacts and operating-system metrics, echoes no credential, and its only write is the last-certificate summary.
Certificate verdicts
Every check carries a mandatory evidence string naming the artifact, probe or value consulted, and fixes are ranked worst-first.
certified(OKbadge in/health): No check readsfail,warn,staleorunknown.caution(ATTENTIONbadge in/health): At least one check readswarn,staleorunknown, and none readsfail.fault(FAILEDbadge in/health): At least one check readsfail.
A check's status is one of ok, warn, fail, stale, unknown, off or info. A check without evidence reads unknown; evidence that predates what it certifies reads stale. off and info are neutral and stay out of the verdict.
A fast run certifies sixteen sections: IDENTITY, PROOFS, GIT, CREW & DAEMONS, MEMORY & CONTEXT, SETTINGS & FLAGS, AUTH, INTERFACE, RUNTIME, DURABILITY, TERMINAL RUNTIME, PROFILE, CODING LOOP, TERMINAL FLUIDITY, TOOL CAPABILITY and ARCHITECTURE PRIMITIVES.
Run a health check
Run mercury health from the command line to print the certificate: the verdict, the sections with their checks and evidence, and the ranked fixes.
Open the interactive certificate
Enter /health in a session (or select Health Check on the home screen) to open the health popup with the install's certificate and fixes: the verdict badge beside the title, the provenance and counts under it, every check as a row with its status in one scrolling list, and the key legend when the window fits. ↑, ↓, the mouse wheel and PageUp/PageDown move through the list, Enter or → opens a row's evidence and detail in place, ← closes it, f opens the fix card on a fixable row, r and d re-run the check, and Esc or a click outside closes the popup.
Inspection options
--json: Prints the certificate as one JSON document.--deep: Runs the deep inventory in addition to the fast checks.--only <id>: Limits the plain report,--jsonor--fixto one check.
A piped or redirected run is not the host's interactive terminal, so the terminal-profile row reads as environmental and stays out of the verdict.
Notable checks
- Client contract: In IDENTITY, names the client version Mercury presents on the Claude sign-in and where it came from. A too-old contract refusal causes Mercury to read the current version once and retry.
- Refused models: In IDENTITY, keeps a model refused for a minimum client version, a subscription tier or a model-specific 403 or 404 visible with the same sentence as the chat and the picker. A successful request for that model on that route clears the refusal; with no recorded refusal the row reads
info. - Browser: In INTERFACE, names the executable the Browser tool resolves. With no managed browser the row reads
infoand names/browser install, the one-time consented Chrome for Testing download. - Tools withheld: In TOOL CAPABILITY, names every built-in tool kept out of the model's catalogue because a machine dependency is absent, such as a debug adapter for Debug or the desktop driver for Computer, with the reason and the remedy.
- Local media: In TOOL CAPABILITY, shows whether local media generation is
off, the configured media folder when the folder and runtime binary exist (ok), or a warning when the folder or runtime is missing (with/imagesetupas the fix) or when default model slot keys were placed in Mercury's settings instead of<media.root>/config.json(Local images and video). - Env overrides: In SETTINGS & FLAGS, lists the registered flags set in the environment, with Mercury's own stamps and the boot's saved defaults named apart from your overrides. A retired setting still set turns the row to
warn, and the fix says to unset it. - Store isolation: In CREW & DAEMONS, reports a config-home record written by another tool with its evidence line. Its remedy archives the foreign records into a dated directory inside the home, reversibly.
- Store quarantines: Names a store file Mercury will not read. A global configuration field of the wrong shape is dropped and named on its own row, and the rest of the file is read.
- Box lock: In RUNTIME, names the box lock's coordination directory from
MERCURY_BOX_LOCK_DIR, the slots held and by whom, and the tickets waiting. - Session kind: In RUNTIME, reads the focused session's kind from its daemon record (Sessions). An
oculussession belongs to a screen: its permission asks and questions wait without timing out until you answer them or end the session, including while you switch to another chat. Aheadlesssession is unattended: its unanswered asks expire on their clock, and an unanswered question ends the run asblocked. A record without a kind reads asheadlessuntil the session is resumed from the screen, and with no chat open the row says so. The row isinfoand leaves the verdict unchanged. - Sovereign mode: Shows the permission-posture record: whether Sovereign mode is on, what turned it on, and whether the consent dialog was shown. The record is kept per project, and the row names the folder it describes.
- Artifact signature and Payload signature: Report the release signature verdict on the bundle's bytes, and with
--deepon the whole payload tree. - Bash tool shell: Names the shell that serves the Bash tool and why (on Windows, the bundled
brushshell engine is the default whenever its pack is present, whileMERCURY_SHELL_ENGINE=systemorshell.engineset tosystemkeeps Git Bash'sbash.exe; on macOS and Linux, the system shell is the default andbrushis opt-in), alongside the Shell engine row (iface-shell-engine), and warns on Windows when neither the bundled engine nor Git Bash is available. - Terminal color: Reports the detected colour depth and the reason.
- Default model: Says which model a fresh, unpinned session starts on and why.
- Memory front page and Semantic embedder: In MEMORY & CONTEXT, report the memory front page's size, its topic lines and how full the pinned shelf is, and whether the on-device semantic embedding addon and model are present for meaning-ranked recall.
- Model lists and Provider slots: In AUTH,
Model listsjudges every typed model identifier Mercury carries across all 21 typed-id provider families against the live model list this process has already read for that provider (lists read <n> of 21), and shows a lapsed or rejected stored sign-in as refused with the time until signed in again. A typed identifier the list lacks is a warning that names it, and a provider whose list was not read in this process says so.Provider slots(provider-slots) checks that every engine family either reads configured or names one of its unavailable codes (no-account:,no-api-key:,no-credential:,not-configured:,no-server:and the like), and that the Anthropic classes resolve to their own family's models. When a fresh client has read a newer model list than a running daemon's snapshot,daemon-sign-insgrades the difference asinfo. The 1-hour prompt-cache gate row names the condition that holds and reads live even while off, and a daemon-hosted session's requests are reported from its worker. - Web search: In AUTH, reports the search cascade available to the session's model, including native provider search, Brave or Tavily keys, the official APIs, configured SearXNG instances, and keyless DuckDuckGo page scraping. When no search source is available for the model, the row reads
infoand namesBRAVE_API_KEY(orTAVILY_API_KEY) and/configto turn DuckDuckGo page scraping back on. - Transcript store and State cleanup: In DURABILITY,
Transcript storeprobes the live session's own transcript file when one exists (opened for read and append without writing) and names the file and any refusal; when no session file exists yet, it probes the folder and states that the folder is writable.State cleanupreports<config-home>/file-historyusage against its500 MBlimit alongside the configured retention window (Sessions). - Managed policy: Warns, with its fix, on an invalid lock value, an unknown surface name or an unreadable policy file.
- Mercury constitution: In IDENTITY, reports the size of the short constitution that opens every session, headless run, crewmate and coordinator, with the sizes of the coordinator and crewmate contracts beside it.
- Hidden characters: In SETTINGS & FLAGS, scans instruction files, skills and settings files for characters you cannot see but a model reads, such as zero-width characters and direction overrides, and names each file and line that carries one. Mercury loads the files as written and changes nothing; the fix is to delete what you did not write. A hidden character in an MCP tool definition is stripped when Mercury discovers the tool, and the row names the tool.
- Crewmates & workflows: Reads the two delegation switches with their sources, as
/crewmatesand/workflowsshow them. - Mercury processes: In CREW & DAEMONS, lists Mercury's own local processes and classes each one as running, stale, cannot end or not Mercury's, by Mercury's own facts: a live terminal, a live session, a live window behind a daemon. Its remedy shows the stale ones with their pid, terminal, age and reason and ends them only after asking; the boot ends nothing, and a process in a kernel wait reads as needing a reboot. The bounded wait before the kill signal is
MERCURY_PROCESS_SWEEP_WAIT_MS. Headless,mercury health processesprints the same listing as JSON and--end-staleends the stale ones it lists. - Computer use, Voice input and Samples: In INTERFACE, name the desktop driver with its grants and access type, the voice backend with its transcriber and permission words, and which way the Samples switch stands.
AUTH's Anthropic row checks the claude.ai sign-in before it answers, and
the OpenAI row does the same for a ChatGPT subscription: a sign-in whose
access token has not reached its expiry is read locally and makes no request;
one past its expiry is renewed through its refresh grant, the one request the
check makes, and the row reads renewed on this check; a grant the provider
refuses marks the sign-in expired, the row warns with sign-in expired and
its fix is the same line the chat shows (/logins <family> reconnects). The
same check runs once when Mercury opens, so an expired sign-in shows on the
boot screen's Logins row (<Family> sign-in expired) before a first prompt is
sent. When a prompt does meet an expired sign-in, its words come back to the
composer under the error line and are sent again on their own once /logins
lands a credential (or /model moves the session to a family that is signed
in) while the composer still holds them unchanged.
Fix reported problems
Run mercury health --fix to apply the safe remedies and re-probe each one; the outcome shown is the re-probe's result.
A destructive remedy needs --yes on the command line: mercury health --fix --yes applies the process sweep's remedy like any other. In the interactive panel a fix goes through a consent card, and a destructive remedy renders its warning. A remedy is offered only for fail, warn and stale rows. Every applied fix writes an evolution-ledger row.
The health JSON
mercury health --json prints the certificate as one JSON document (certSchema 2) carrying verdict, ranAt, version, durationMs and depth; head, the repository state at issue time; nodeRuntime, the runtime contract with its verdict; sections[], each with its checks and their evidence, evidenceAt and status; and readiness[], the capability-readiness rows for tools, MCP servers, lanes, engines, extensions and skills.
Artifacts and switches
Certificate files live beside the project's transcripts under <config home>/projects/<project>/, in the health store. MERCURY_HEALTH_STATE_DIR selects the project root used to resolve the store.
health/last-cert.json: The summary written after each certificate. The certificate chip in the session chrome reads it, and a summary older than a day reads stale.health/last-preflight.json: The boot preflight's summary. The preflight runs a cheap subset of/healthafter the interface mounts, notifies only on a fault, and writes no certificate.gate/verdict.json: Written by the local check pool. The PROOFS section reads it as evidence and reports itstalewhen it predates the current HEAD.MERCURY_HEALTH_CERT=0: Restores a plain install-diagnostics screen with no certificate and no artifact writes.MERCURY_HEALTH_FIX=0: Makes/healthdiagnose-only.MERCURY_BOOT_PREFLIGHT=0: Skips the boot preflight.