Verify Atlas
Drive a running Atlas desktop build over CDP: inspect the DOM, take screenshots, click, type, read the accessibility tree, evaluate JS, and manage checkout-isolated parallel instances.
node .cursor/skills/verify-atlas/control-atlas.mjs --help lists commands, flags, and examples. This sample documents usage only; the driver scripts are not included.
Pick a flow
test -f .git && echo checkout distinguishes an isolated checkout (.git is a file) from the main workspace (.git is a directory).
- Main workspace: the desktop build runs on CDP port 9222 with the shared user-data-dir. Drive it directly without
--checkout.
- Isolated checkout: every command takes
--checkout so the port and user-data-dir are derived for this tree. That keeps the run from fighting the user's main session or polluting auth.
From a checkout, a connect/launch command without --checkout (and without an explicit --cdp) is refused. Pass --checkout, or --cdp <endpoint> if you mean another instance on purpose.
Run doctor first when anything looks off. It reports checkout context, who owns the CDP port, watcher liveness, and build freshness.
Checkout quick start
# provision an isolated checkout, optionally seed auth, restart, then health-check
node .cursor/skills/verify-atlas/control-atlas.mjs checkout-setup --watch
node .cursor/skills/verify-atlas/control-atlas.mjs clone-userdata --force --overwrite # optional
node .cursor/skills/verify-atlas/control-atlas.mjs --checkout restart
node .cursor/skills/verify-atlas/control-atlas.mjs --checkout info
node .cursor/skills/verify-atlas/control-atlas.mjs doctor
node .cursor/skills/verify-atlas/control-atlas.mjs cleanup --remove-checkout
Main-workspace quick start
node .cursor/skills/verify-atlas/control-atlas.mjs info
node .cursor/skills/verify-atlas/control-atlas.mjs doctor
The desktop build must already be running with remote debugging enabled (default port 9222 in the Harbor Labs desktop launcher).
Command surface
--help is canonical. Categories:
- Inspection:
info, snapshot, screenshot, components
- Navigation:
home, new-session, select-project, select-runtime, scroll
- Interaction:
send, click, click-xy, aria-click, type, press, eval, upload-image, add-context, feature-flag
- Performance:
trace, profile, record, perf-metrics, wait-settle
- Streaming:
console, network-log, network-summary
- Health & cleanup:
doctor, cleanup, watch --restart
Examples:
# health
node .cursor/skills/verify-atlas/control-atlas.mjs doctor
# open a blank thread and send
node .cursor/skills/verify-atlas/control-atlas.mjs new-session
node .cursor/skills/verify-atlas/control-atlas.mjs send "list open tasks in this project"
# keyboard path
node .cursor/skills/verify-atlas/control-atlas.mjs press "Meta+KeyN"
# accessibility snapshot of the live UI
node .cursor/skills/verify-atlas/control-atlas.mjs snapshot
# screenshot for evidence
node .cursor/skills/verify-atlas/control-atlas.mjs screenshot /tmp/atlas-proof.png
# wait for streaming / layout to settle
node .cursor/skills/verify-atlas/control-atlas.mjs wait-settle
# flip a gated path for the session
node .cursor/skills/verify-atlas/control-atlas.mjs feature-flag rooms_v2 on
Proof bar
Do not submit "look, it opens" captures. A proof must exercise the production user path and show the observable result a skeptical reviewer would accept.
- Drive the running build through user-visible UI, registered keybindings, menus, and normal backend plumbing. Use
eval to inspect state after the user path ran, not to invoke internal handlers as the primary proof.
- Run
doctor first. A video against a stale bundle is not evidence.
- Read the relevant file under
references/features/. Exercise every reachable entry point, mode, enabled gated variant, and the success / cancel / error / empty / persistence paths the change can affect.
- For broad regression sweeps, walk
references/features/README.md top to bottom, then multi-surface-journeys.md.
- Show the trigger and the stable end state in the same recording.
- Verify side effects, not just pixels: DOM attributes, clipboard, network/RPC log, file contents, or a reload / switch-away round trip.
Driving conventions
- Prefer ARIA labels,
data-component, data-action-id, and data-message-* selectors. Class selectors are fallbacks.
- Streaming is non-deterministic. Wait on observable end states with
wait-settle, not fixed sleeps.
- Prefer
press with the registered chord over coordinate clicks.
- The command service is not on
window. Do not invoke atlas.* through eval.
- Use
feature-flag for gated paths. Reload when the feature file says the mounted tree needs it.
- Treat real OS file drops, native context menus, and system-browser auth as manual unless the driver has first-class support.
Feature map
The behavior inventory lives in references/features/. Each file uses the same four H2s: Sub-features, How to get to it (user POV), Driving it with control-atlas, Gotchas.
1---2name: verify-atlas3description: Drive the Atlas workspace UI in a running Harbor Labs desktop build via CDP. Use for screenshots, clicks, sending messages, accessibility-tree inspection, JS evaluation, or visual-state checks.4---56# Verify Atlas78Drive a running Atlas desktop build over CDP: inspect the DOM, take screenshots, click, type, read the accessibility tree, evaluate JS, and manage checkout-isolated parallel instances.910`node .cursor/skills/verify-atlas/control-atlas.mjs --help` lists commands, flags, and examples. This sample documents usage only; the driver scripts are not included.1112## Pick a flow1314`test -f .git && echo checkout` distinguishes an isolated checkout (`.git` is a file) from the main workspace (`.git` is a directory).1516- **Main workspace:** the desktop build runs on CDP port 9222 with the shared user-data-dir. Drive it directly without `--checkout`.17- **Isolated checkout:** every command takes `--checkout` so the port and user-data-dir are derived for this tree. That keeps the run from fighting the user's main session or polluting auth.1819From a checkout, a connect/launch command without `--checkout` (and without an explicit `--cdp`) is refused. Pass `--checkout`, or `--cdp <endpoint>` if you mean another instance on purpose.2021Run `doctor` first when anything looks off. It reports checkout context, who owns the CDP port, watcher liveness, and build freshness.2223## Checkout quick start2425```bash26# provision an isolated checkout, optionally seed auth, restart, then health-check27node .cursor/skills/verify-atlas/control-atlas.mjs checkout-setup --watch28node .cursor/skills/verify-atlas/control-atlas.mjs clone-userdata --force --overwrite # optional29node .cursor/skills/verify-atlas/control-atlas.mjs --checkout restart30node .cursor/skills/verify-atlas/control-atlas.mjs --checkout info31node .cursor/skills/verify-atlas/control-atlas.mjs doctor32node .cursor/skills/verify-atlas/control-atlas.mjs cleanup --remove-checkout33```3435## Main-workspace quick start3637```bash38node .cursor/skills/verify-atlas/control-atlas.mjs info39node .cursor/skills/verify-atlas/control-atlas.mjs doctor40```4142The desktop build must already be running with remote debugging enabled (default port 9222 in the Harbor Labs desktop launcher).4344## Command surface4546`--help` is canonical. Categories:4748- **Inspection:** `info`, `snapshot`, `screenshot`, `components`49- **Navigation:** `home`, `new-session`, `select-project`, `select-runtime`, `scroll`50- **Interaction:** `send`, `click`, `click-xy`, `aria-click`, `type`, `press`, `eval`, `upload-image`, `add-context`, `feature-flag`51- **Performance:** `trace`, `profile`, `record`, `perf-metrics`, `wait-settle`52- **Streaming:** `console`, `network-log`, `network-summary`53- **Health & cleanup:** `doctor`, `cleanup`, `watch --restart`5455Examples:5657```bash58# health59node .cursor/skills/verify-atlas/control-atlas.mjs doctor6061# open a blank thread and send62node .cursor/skills/verify-atlas/control-atlas.mjs new-session63node .cursor/skills/verify-atlas/control-atlas.mjs send "list open tasks in this project"6465# keyboard path66node .cursor/skills/verify-atlas/control-atlas.mjs press "Meta+KeyN"6768# accessibility snapshot of the live UI69node .cursor/skills/verify-atlas/control-atlas.mjs snapshot7071# screenshot for evidence72node .cursor/skills/verify-atlas/control-atlas.mjs screenshot /tmp/atlas-proof.png7374# wait for streaming / layout to settle75node .cursor/skills/verify-atlas/control-atlas.mjs wait-settle7677# flip a gated path for the session78node .cursor/skills/verify-atlas/control-atlas.mjs feature-flag rooms_v2 on79```8081## Proof bar8283Do not submit "look, it opens" captures. A proof must exercise the production user path and show the observable result a skeptical reviewer would accept.8485- Drive the running build through user-visible UI, registered keybindings, menus, and normal backend plumbing. Use `eval` to inspect state after the user path ran, not to invoke internal handlers as the primary proof.86- Run `doctor` first. A video against a stale bundle is not evidence.87- Read the relevant file under `references/features/`. Exercise every reachable entry point, mode, enabled gated variant, and the success / cancel / error / empty / persistence paths the change can affect.88- For broad regression sweeps, walk `references/features/README.md` top to bottom, then `multi-surface-journeys.md`.89- Show the trigger and the stable end state in the same recording.90- Verify side effects, not just pixels: DOM attributes, clipboard, network/RPC log, file contents, or a reload / switch-away round trip.9192## Driving conventions9394- Prefer ARIA labels, `data-component`, `data-action-id`, and `data-message-*` selectors. Class selectors are fallbacks.95- Streaming is non-deterministic. Wait on observable end states with `wait-settle`, not fixed sleeps.96- Prefer `press` with the registered chord over coordinate clicks.97- The command service is not on `window`. Do not invoke `atlas.*` through `eval`.98- Use `feature-flag` for gated paths. Reload when the feature file says the mounted tree needs it.99- Treat real OS file drops, native context menus, and system-browser auth as manual unless the driver has first-class support.100101## Feature map102103The behavior inventory lives in [`references/features/`](references/features/). Each file uses the same four H2s: `Sub-features`, `How to get to it (user POV)`, `Driving it with control-atlas`, `Gotchas`.