An articulated arm with a small lens at its elbow reaching through a port into a sealed round housing, its blue-lit fingertip pressing one lever on a running gear train.
Creative

Interceptor

Real Chrome plus macOS Computer Use from inside the browser, real sessions; mandatory for visual deploy verification

19
Workflows
12
Tools
01
Reference
15
Triggers

The Problem

Headless browsers leave fingerprints. Selenium, Playwright, CDP-based tools all set flags that bot detection identifies immediately — and even if they sneak through, they're not logged into anything, so they can't verify your actual deployed app in your actual authenticated state. Meanwhile, raw OS tools like screencapture and osascript pull focus, disturb the operator's working window, and are trivially blocked on modern macOS. You end up with verification that either doesn't pass bot detection, can't reach authenticated surfaces, or actively disrupts the human running it.

How This Skill Approaches It

Interceptor is a Chrome extension that controls the real browser from inside — no debugger, no CDP, no automation flags. It passes BrowserScan, Pixelscan, CreepJS, and Fingerprint.com because it IS Chrome. It stays logged in because it's the operator's actual profile. A mandatory Preflight Isolation Gate runs before every browser workflow: it checks that the binary is >=0.15.0 and that the dedicated interceptor-test profile is connected — if either fails, the workflow stops rather than falling back to the operator's Default window. Background-first by contract means routine automation never moves focus. The optional macOS bridge extends the same control surface to native apps, OS-level trusted input (bypassing isTrusted checks), VM lifecycle, AX tree reads, ScreenCaptureKit capture, Vision OCR, and Apple Events — all without the raw OS tools that are explicitly forbidden. Compound commands (open, read, act, inspect) collapse multi-step flows into single invocations.

Not for pixel-only GUI work (ComputerUse), crawling (BrightData), scraping

In Action

What you say to your DA, and what the Interceptor skill actually does.

  • You say "verify the deploy looks right"
    Runs VerifyDeploy: checks preflight isolation gate, opens the URL in the interceptor-test Chrome profile via --context interceptor-test, does a structured read plus screenshot, checks for console errors and network failures, and returns evidence of the actual deployed state — logged in, real browser, zero bot detection.
  • You say "reproduce this bug i'm seeing on the checkout page"
    Runs Reproduce: opens the affected page before touching any code, captures console errors and network 404s via interceptor inspect, screenshots the broken state — so you have real evidence of what's actually wrong before you start guessing.
  • You say "record this flow so i can replay it as a regression check"
    Runs RecordFlow via monitor start, captures every browser action as AX events, then exports a deterministic plan script via monitor export --plan that ReplayFlow can execute step-by-step to verify nothing regressed.

Inside the Skill

The thinking, frameworks, and architecture that distinguish this skill from a generic version of the same task.

Ideal State

  • Every browser action ran in the pinned isolated test context, only after that run's preflight gate exited 0; the operator's Default profile, windows and focus are untouched, and a gate failure ends the run instead of falling back.
  • Browser work the operator would otherwise do by hand (open, click, fill, log in) was driven by the agent, up to the single step that needs a secret it does not hold or an OAuth or consent screen, where the operator sees the client, scopes and account and approves.
  • Every "verified", "works" or "fixed" claim cites evidence from the real page or app: a structured read, console and network state, and a Tools/Capture.sh screenshot that was read; motion and lifecycle claims come from Tools/VerifyViewport.ts or a ScrubFlow gallery.
  • A capture request gets one screenshot per width it names (usually 1440 and 390), each read back and confirmed to be the requested page, not another tab's or session's, and every element the request names is reported present or absent.
  • A page called verified or live was judged as a whole at each width: overlapping, clipped or misplaced layout (cards over the header, a cut-off top) fails the claim even when the requested element is present.
  • A fine-detail claim (logo, glyph, icon, a figure's limbs, hands and grip) rests on a Tools/Zoom.ts crop of the full-resolution capture, so an extra arm cannot pass on a downscaled view.
  • When Interceptor could not deliver evidence, the report says verification was not captured; it never substitutes screencapture, osascript or file existence for visual evidence.
  • Native-app work leaves the frontmost app unchanged, shown by frontmost before and after, and the tabs a run opened in the test profile are closed when it ends.

Intent Routing

Before an intent runs, load its bundle: bun "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/LIFEOS/TOOLS/ContextLoad.ts" Interceptor load BUNDLE

Follow every requirement it returns; guide paths are relative to the skill root. Reload after compaction or a source change. Any truncation warning means the load failed, even if the END CONTEXTLOAD marker survived.

list shows sections and bundles; search "query" searches the indexed source; a failed search proves nothing (broaden it or load full). If the loader fails, read References/CompleteGuide.md and the relevant intent directly; never proceed on a partial load.

Task Bundle
Browser reads, interaction, or screenshot verification verify
Motion, responsive behavior, or hidden-tab issues motion
Native macOS application operations native
Installation, platform troubleshooting, delegation, or a task no bundle fits or you are unsure of full
Intent Trigger File
LaunchTestProfile "test profile", "launch test profile", "isolated browser", "separate Chrome window", "start interceptor-test" Intents/LaunchTestProfile.md
VerifyDeploy "verify deploy", "check deploy", "confirm deploy", "deploy verification" Intents/VerifyDeploy.md
ScrubFlow "scrub flow", "record flow to video", "motion bug", "animation jank", "transition stutter", "flicker", "flow gallery", "catch motion a screenshot misses" Intents/ScrubFlow.md
Reproduce "reproduce", "reproduce bug", "debug page", "check page", "blank screen" Intents/Reproduce.md
ReadAndExtract "extract value", "read page", "pull a fact", "SPA state" Intents/ReadAndExtract.md
DriveRichEditor "drive Canva", "drive Docs", "drive Slides", "rich editor", "scene", "scene graph", "canvas-rendered" Intents/DriveRichEditor.md
OverrideXhr "override request", "request override", "force 500", "rewrite response", "mutate XHR" Intents/OverrideXhr.md
ScreenshotForVlm "screenshot for VLM", "VLM screenshot", "agent screenshot", "WebP 1568" Intents/ScreenshotForVlm.md
MultiPageCompare "compare pages", "multi-page compare", "facts across N pages", "designed by X vs Y" Intents/MultiPageCompare.md
CaptureBackgroundedApp "screenshot of Brave / Signal / Mail / X", "capture backgrounded app", "capture occluded window" Intents/CaptureBackgroundedApp.md
DriveBackgroundedApp "scroll Mail / type into TextEdit", "drive backgrounded app", "click without focus" Intents/DriveBackgroundedApp.md
DispatchAppleEvent "open URL in Brave", "Apple Event", "intent dispatch", "named app open" Intents/DispatchAppleEvent.md
ReadAxTree "AX tree", "accessibility tree", "what's in Cursor / Slack", "find a button in app" Intents/ReadAxTree.md
TrustedInputGate "trusted input", "OS-level input", "isTrusted", "site rejects synthetic input", "HID-source state" Intents/TrustedInputGate.md
VmLifecycle "create VM", "VM lifecycle", "linux VM", "macos VM", "gold image", "clone VM", "snapshot VM" Intents/VmLifecycle.md
RecordFlow "record flow", "record workflow", "capture flow", "monitor start" Intents/RecordFlow.md
RecordAndReplayMacFlow "record mac flow", "record native flow", "watch me do X in Cursor/Mail/Finder" Intents/RecordAndReplayMacFlow.md
ReplayFlow "replay flow", "replay", "regression check", "run flow" Intents/ReplayFlow.md
TestForm "test form", "fill form", "form test", "check form" Intents/TestForm.md
Update "update", "check version", "rebuild", "install bridge", "enable computer use" Intents/Update.md
File Read when
References/CompleteGuide.md the doctrine behind every bundle: prohibitions, isolation and lifecycle gates, install modes, compound commands, key rules, delegation, gotchas
References/CommandReference.md the per-verb CLI listing
References/UpdateRecovery.md an Update (Path B) step fails its check, or the bridge is being uninstalled
Setup.md first-time setup: the program install, the test Chrome profile and extension, and preferences.env
Flows/ saving a recorded browser flow (RecordFlow) or replaying one (ReplayFlow)

Data & Config

User customizations live at <configRoot>/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Interceptor/ ($CLAUDE_CONFIG_DIR or ~/.claude); anything there overrides the defaults, and its preferences.env (template preferences.env.example) sets INTERCEPTOR_TEST_CONTEXT_ID, the pinned test context. Secrets stay outside this skill.

First-time setup: Setup.md.

Gotchas

Every browser intent starts with this preflight (exit codes: References/CompleteGuide.md § Preflight Isolation Gate):

source "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/Interceptor/preferences.env"
bash "${CLAUDE_CONFIG_DIR:-$HOME/.claude}/skills/Interceptor/Tools/EnsureTestProfile.sh"

A non-zero exit ends the run; surface its message verbatim. Never fall back to raw screenshots or focus-changing OS commands. InterceptorContextGuard denies a browser verb unless --context is the pinned id (literal, or $INTERCEPTOR_TEST_CONTEXT_ID once that command sources preferences.env) and never runs the preflight (CompleteGuide § Isolation Doctrine).

Examples

User: "Verify http://localhost:31337/review renders at 1440 and 390 widths"
→ VerifyDeploy, after `ContextLoad.ts Interceptor load verify` and the preflight
→ One read-back screenshot per width plus page state; every verb carried `--context <id>`
User: "The nav animation stalls when I resize"
→ ScrubFlow, after loading `motion`
→ Evidence from VerifyViewport or a flow gallery, never a hidden-tab measurement

Workflows & Routing · 19

Each workflow is one job the skill runs. The trigger phrases route your request to the right one — this is the skill's routing table.

  1. 01
    `Intents/VerifyDeploy.md` **VerifyDeploy**

    verify deploy, check deploy, confirm deploy, deploy verification

  2. 02
    `Intents/ScrubFlow.md` **ScrubFlow**

    scrub flow, record flow to video, motion bug, animation jank, transition stutter, flicker, flow gallery, catch motion a screenshot misses

  3. 03
    `Intents/Reproduce.md` **Reproduce**

    reproduce, reproduce bug, debug page, check page, blank screen

  4. 04
    `Intents/ReadAndExtract.md` **ReadAndExtract**

    extract value, read page, pull a fact, SPA state

  5. 05
    `Intents/DriveRichEditor.md` **DriveRichEditor**

    drive Canva, drive Docs, drive Slides, rich editor, scene, scene graph, canvas-rendered

  6. 06
    `Intents/OverrideXhr.md` **OverrideXhr**

    override request, request override, force 500, rewrite response, mutate XHR

  7. 07
    `Intents/ScreenshotForVlm.md` **ScreenshotForVlm**

    screenshot for VLM, VLM screenshot, agent screenshot, WebP 1568

  8. 08
    `Intents/MultiPageCompare.md` **MultiPageCompare**

    compare pages, multi-page compare, facts across N pages, designed by X vs Y

  9. 09
    `Intents/CaptureBackgroundedApp.md` **CaptureBackgroundedApp**

    screenshot of Brave / Signal / Mail / X, capture backgrounded app, capture occluded window

  10. 10
    `Intents/DriveBackgroundedApp.md` **DriveBackgroundedApp**

    scroll Mail / type into TextEdit, drive backgrounded app, click without focus

  11. 11
    `Intents/DispatchAppleEvent.md` **DispatchAppleEvent**

    open URL in Brave, Apple Event, intent dispatch, named app open

  12. 12
    `Intents/ReadAxTree.md` **ReadAxTree**

    AX tree, accessibility tree, whats in Cursor / Slack, find a button in app

  13. 13
    `Intents/TrustedInputGate.md` **TrustedInputGate**

    trusted input, OS-level input, isTrusted, site rejects synthetic input, HID-source state

  14. 14
    `Intents/VmLifecycle.md` **VmLifecycle**

    create VM, VM lifecycle, linux VM, macos VM, gold image, clone VM, snapshot VM

  15. 15
    `Intents/RecordFlow.md` **RecordFlow**

    record flow, record workflow, capture flow, monitor start

  16. 16
    `Intents/RecordAndReplayMacFlow.md` **RecordAndReplayMacFlow**

    record mac flow, record native flow, watch me do X in Cursor/Mail/Finder

  17. 17
    `Intents/ReplayFlow.md` **ReplayFlow**

    replay flow, replay, regression check, run flow

  18. 18
    `Intents/TestForm.md` **TestForm**

    test form, fill form, form test, check form

  19. 19
    `Intents/Update.md` **Update**

    update, check version, rebuild, install bridge, enable computer use

Tools · 12

Deterministic executables the workflows call — the code that does the real work, not prompt scaffolding.

  • Capture.sh
  • CleanupTabs.sh
  • EnsureTestProfile.sh
  • FrameScrub.ts
  • HealBridge.sh
  • LaunchTestProfile.sh
  • Pin.sh
  • PinTestWindow.sh
  • PreflightIsolation.sh
  • VerifyImageProbe.ts
  • VerifyViewport.ts
  • Zoom.ts

How to Invoke

Say any of these to your DA and LifeOS activates the Interceptor skill automatically:

  • "verify deploy"
  • "confirm UI"
  • "screenshot verification"
  • "debug web"
  • "visual check"
  • "animation bug"
  • "console errors"
  • "JS errors"
  • "network traffic"
  • "HAR export"
  • "blank-page debug"
  • "what is happening on the page"
  • "authenticated page"
  • "reproduce bug"

Or invoke explicitly:

Skill("Interceptor")

References · 1

Auxiliary files the skill loads at runtime — frameworks, guides, configs.

  • Setup

Want LifeOS to do this for you?

Install LifeOS on your machine — your DA gets the Interceptor skill plus 96 others, all hooked into one Life OS.