{
  "schemaVersion": 1,
  "_doc": "Power Claude's registry of stamped IDE surfaces. Every PC surface that injects UI MUST have a row here. Mechanism lives in @hurc/brand-stamp; this is the consumer-owned data side. Enforced by hurc-harness/scripts/hooks/branding/stamp-coverage.sh (Phase 5).",
  "features": {
    "pc-your-request-banner": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "webview/index.js",
      "anchorSelector": "#pc-request-anchor",
      "anchorTarget": "self",
      "variant": "compact",
      "label": "Your Request Banner",
      "description": "DOM-injected banner in each Claude Code conversation showing the session's first user message. SVG bolt badge with tooltip only — zero LLM tokens consumed.",
      "settingKey": "powerClaude.yourRequestBanner.enabled",
      "configureCommand": "powerClaude.toggleYourRequestBanner",
      "sourceFiles": [
        "src/core/requestAnchorPatch.ts",
        "scripts/lib/vscode-request-anchor/patch.sh"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-05-28"
    },
    "pc-auto-resume": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "webview/index.js",
      "anchorSelector": "[data-pc-autoresume]",
      "anchorTarget": "self",
      "variant": "compact",
      "label": "Auto-Resume Badge",
      "description": "Brands EVERY auto-resume notice in the chat — both the Stop-hook nudge (render-reinject.sh) AND the rate-limit RECOVERY (inject/pending-recovery.sh), which now both post a '⚡ Power Claude auto-resumed this turn' systemMessage (shown in the CLI too). In the VS Code webview this patcher finds that line by its stable brand phrase and upgrades it to the Power Claude bolt-logo badge with a purple accent, plus an accessible hover tooltip (native title + a CSS ::after bubble) explaining what happened and the running auto-resume count — attribute + CSS ::before/::after + title only, never a structural DOM mutation. Each resume is also tallied to a durable per-type counter (auto-resume-tally.json) for queryable visible-value data.",
      "settingKey": "powerClaude.autoNudge.brandBadge",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/core/autoResumeBadgePatch.ts",
        "scripts/lib/vscode-autoresume-badge/patch.sh",
        "scripts/lib/nudges/render-reinject.sh",
        "scripts/hooks/rate-limit/inject/pending-recovery.sh",
        "scripts/lib/auto-resume-tally.sh"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-06-13"
    },
    "pc-objective-mode": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "webview/index.js",
      "anchorSelector": "[data-pc-autoresume]",
      "anchorTarget": "self",
      "variant": "compact",
      "label": "Objective Mode",
      "description": "Our harness-controllable equivalent of Claude Code's /goal. When on, a multi-step request is auto-promoted to a standing objective; the UserPromptSubmit hook injects it as context so the model works toward it, and the Stop hook keeps the session going (Haiku assessor per stop) until the objective is verifiably met. Surfaces branded '⚡ Power Claude' chat notices: the auto-resume continuation line (decorated by the shared bolt-logo badge) and the 'objective complete' / time-cap notices. Opt-in; all existing auto-resume safety (hard-veto parks, turn/time caps) stays in force.",
      "settingKey": "powerClaude.autoNudge.objectiveMode",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "scripts/hooks/lifecycle/objective-inject.sh",
        "scripts/hooks/lifecycle/auto-nudge.sh",
        "scripts/lib/objective/state.sh",
        "scripts/lib/objective/assess.sh",
        "scripts/lib/objective/set.sh"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-06-15"
    },
    "pc-warm-compact-statusline": {
      "surface": "vscode-statusbar",
      "owner": "power-claude",
      "label": "Warm Compacting",
      "description": "Brand-stamped (⚡) statusline/dashboard chip that surfaces when Warm Compacting is working — so users credit Power Claude for skipping the compaction wait. Wording is honest per mode (measure phase shows 'calibrating'; live phase claims it skipped the wait). Renders in both the pc statusline CLI and the VS Code dashboard from one source.",
      "settingKey": "powerClaude.warmCompacting.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/shared/statusline/pcStatusConfig.ts"
      ],
      "introducedAt": "2026-06-03"
    },
    "pc-session-trail-codelens": {
      "surface": "vscode-codelens",
      "owner": "power-claude",
      "label": "Session Trail",
      "description": "Shows AI-edit attribution above each function.",
      "settingKey": "powerClaude.sessionTrail.codeLens",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/extension/extension.ts",
        "src/extension/sessionTrail/CodeLensProvider.ts"
      ],
      "introducedAt": "2026-05-21"
    },
    "pc-session-trail-gutter": {
      "surface": "vscode-gutter",
      "owner": "power-claude",
      "label": "Session Trail Gutter",
      "description": "Gutter markers on lines edited by AI in the current file.",
      "settingKey": "powerClaude.sessionTrail.gutter",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/extension/sessionTrail/GutterDecorator.ts"
      ],
      "introducedAt": "2026-05-21"
    },
    "pc-statusbar-rotation": {
      "surface": "vscode-statusbar",
      "owner": "power-claude",
      "label": "Rotation Status",
      "description": "Shows the current rate-limit rotation account in the status bar.",
      "settingKey": "powerClaude.statusBar",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/extension/extension.ts",
        "src/extension/statusBar.ts"
      ],
      "introducedAt": "2026-05-21"
    },
    "pc-statusbar-file-session": {
      "surface": "vscode-statusbar",
      "owner": "power-claude",
      "label": "File Session",
      "description": "Shows session count and last AI edit for the active file.",
      "settingKey": "powerClaude.fileStats.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/extension/fileSessionStatusBar.ts"
      ],
      "introducedAt": "2026-05-21"
    },
    "pc-statusbar-tab-state-legend": {
      "surface": "vscode-statusbar",
      "owner": "power-claude",
      "label": "Tab State Legend",
      "description": "Shows the focused Claude session tab's state (running / incomplete / complete / idle) with educational explanation. Click to open the legend.",
      "settingKey": "powerClaude.tabIcon.statusBar.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/extension/tabStateLegendStatusBar.ts"
      ],
      "introducedAt": "2026-05-28"
    },
    "pc-tree-files-touched": {
      "surface": "vscode-tree",
      "owner": "power-claude",
      "label": "Files Touched",
      "description": "Session-explorer view listing files touched per session.",
      "settingKey": null,
      "configureCommand": null,
      "sourceFiles": [
        "src/extension/sessionExplorer/FilesTouchedProvider.ts"
      ],
      "introducedAt": "2026-05-21"
    },
    "pc-webview-session-explorer": {
      "surface": "vscode-webview-extension",
      "owner": "power-claude",
      "label": "Session Detail",
      "description": "Webview showing full session details, diff, and prompts.",
      "settingKey": null,
      "configureCommand": null,
      "sourceFiles": [
        "src/extension/extension.ts",
        "src/extension/sessionExplorer/SessionDetailWebview.ts"
      ],
      "introducedAt": "2026-05-21"
    },
    "pc-webview-dashboard": {
      "surface": "vscode-webview-extension",
      "owner": "power-claude",
      "label": "Power Claude Dashboard",
      "description": "Activity-bar dashboard with rotation, sessions, and tooling status.",
      "settingKey": null,
      "configureCommand": null,
      "sourceFiles": [
        "src/extension/extension.ts",
        "src/extension/webviewView.ts"
      ],
      "introducedAt": "2026-05-21"
    },
    "pc-foreign-preserve-focus": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "out/extension.js",
      "anchorSelector": "[data-claude-code-panel-header]",
      "variant": "compact",
      "label": "Preserve Focus",
      "description": "Patches Claude Code so the editor keeps focus when chat updates.",
      "settingKey": "powerClaude.preserveFocusFix.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/extension/preserveFocusFix.ts",
        "scripts/vscode-fixes/preserve-focus.sh"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-05-21"
    },
    "vscode-chip-default-off": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "webview/index.js",
      "anchorSelector": "button[title*='current file selection' i]",
      "anchorTarget": "self",
      "variant": "compact",
      "label": "Chip Default Off",
      "description": "Defaults the Claude Code active-editor-file chip to OFF.",
      "settingKey": "powerClaude.chipDefaultOff.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/core/chipDefaultOff.ts"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-05-20"
    },
    "pc-msg-time-badge": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "webview/index.js",
      "anchorSelector": ".pc-msg-meta",
      "all": true,
      "anchorTarget": "self",
      "variant": "compact",
      "label": "Message Timestamps",
      "description": "Co-locates the Power Claude badge with the per-message timestamp in the chat.",
      "settingKey": "powerClaude.messageTimestamps.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/core/messageTimestamps.ts",
        "scripts/lib/vscode-message-time/patch.sh"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-05-27"
    },
    "pc-session-list-badge": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "webview/index.js",
      "anchorSelector": "[class*='segmented_']",
      "anchorTarget": "self",
      "variant": "compact",
      "label": "Session State Badges",
      "description": "Decorates each row in the clock-icon session-history dropdown with a live state pill (running/incomplete/complete/idle) and attributes the decoration via a Power Claude badge in the popup header.",
      "settingKey": "powerClaude.sessionList.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/core/sessionListPatch.ts",
        "scripts/lib/vscode-session-list/patch.sh"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-05-28"
    },
    "pc-response-summary": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "webview/index.js",
      "anchorSelector": "pre",
      "anchorTarget": "self",
      "variant": "panel",
      "label": "Response Summary Strips",
      "description": "Renders Claude's token-free pc-rs/v1 marker as branded, canonically-colored end-of-response status strips (Landed / Complete / Remaining / Optional), hiding the raw block, and attributes the panel via a ⚡ Power Claude header. The panel also carries a distinct 'Session:' status-override control below the strips that defaults to the live derived state and, on change, writes the manual override through the ONE validated writer (SessionTagStore.setUserStatus) via POST /v1/sessions/<id>/status — the same single write path every other surface uses.",
      "settingKey": "powerClaude.responseSummary.render",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/core/responseSummaryRenderPatch.ts",
        "scripts/lib/vscode-response-summary/patch.sh",
        "src/engine/v2/integration/localRoutes.ts"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-07-06"
    },
    "pc-tab-state-icon": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "extension.js",
      "anchorSelector": "this.panelTab.iconPath=",
      "anchorTarget": "self",
      "variant": "icon-replace",
      "label": "Tab State Icons",
      "description": "Replaces Claude Code's 3-state native editor-tab icon (pending/done/default) with a 4-state Power Claude bolt (running/incomplete/complete/idle) so each open session's state is readable from the tab strip without clicking in. Matches the .pc-sl-badge palette used in the session-history dropdown. Requires powerClaude.branding.enabled (master) AND powerClaude.tabState.enabled.",
      "settingKey": "powerClaude.tabState.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/core/extensionTabPatch.ts",
        "scripts/lib/vscode-extension-tab/patch.sh"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-05-28"
    },
    "pc-open-tab-search": {
      "surface": "vscode-quickpick",
      "owner": "power-claude",
      "label": "Search Open Session Tabs",
      "description": "Full-text search across the CONTENT of open Claude session tabs (the conversation bodies, not just titles), with the matching turn previewed and one click to reveal the matching tab. Available as a keybindable QuickPick and in the dashboard Sessions list.",
      "settingKey": "powerClaude.openTabSearch.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/shared/session/search/ContentSearcher.ts",
        "src/shared/session/search/OpenTabResolver.ts",
        "src/extension/extension.ts",
        "src/extension/webviewView.ts"
      ],
      "introducedAt": "2026-06-02"
    },
    "pc-session-actions-heal": {
      "surface": "vscode-webview-bundle",
      "owner": "power-claude",
      "extension": "anthropic.claude-code-*",
      "bundle": "webview/index.js",
      "anchorSelector": "[data-pc-sa-done]",
      "anchorTarget": "next-sibling",
      "variant": "compact",
      "label": "Session Actions — Heal",
      "description": "Inline Heal button on context-overflow chat lines; trims & resumes the session.",
      "settingKey": "powerClaude.sessionActions.heal.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "scripts/lib/vscode-session-actions/patch.sh",
        "src/core/sessionActionsPatch.ts"
      ],
      "lastVerifiedExtensionVersion": null,
      "introducedAt": "2026-06-20"
    },
    "pc-wake-actuator": {
      "surface": "vscode-extension",
      "owner": "power-claude",
      "label": "⚡ Wake Actuator",
      "description": "PC-side consumer of the harness cross-session wake-request bus. Watches .wake/requests/<sessionId>.json (written by the harness after 8 fail-closed anti-runaway layers) and re-invokes the parked session via the Claude Code editor API. Safety: leader-elected (one window actuates per event), per-target 30s cooldown, restart-safe msgId dedup, chainDepth cap, own-uid + symlink rejection, emergency-off honored. Resume prompt is the constant 'Continue from where you left off.' — never the request file's content.",
      "settingKey": "powerClaude.wakeActuator.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/extension/wakeRequestWatcher.ts",
        "src/shared/crossSession/wakeReader.ts",
        "src/extension/extension.ts"
      ],
      "introducedAt": "2026-07-03"
    },
    "pc-inbound-messages": {
      "surface": "vscode-extension",
      "owner": "power-claude",
      "label": "⚡ Inbound Messages",
      "description": "Surfaces cross-session messages received by this session to the human: a non-focus-stealing status-bar cue on arrival, plus a branded, script-free ⚡ Power Claude webview panel showing sender, kind, timestamp, subject, and body. Message text is UNTRUSTED — every field is HTML-escaped, enableScripts is false, and javascript:/data: prefixes are stripped. Mirrors the VS Code ChatResponseStream part vocabulary (markdown body / sender anchor / Reply button) for chat-participant compatibility.",
      "settingKey": "powerClaude.inboundMessages.enabled",
      "configureCommand": "powerClaude.openSetting",
      "sourceFiles": [
        "src/extension/inboundMessageWatcher.ts",
        "src/extension/messageInboxView.ts",
        "src/shared/crossSession/inboxReader.ts"
      ],
      "introducedAt": "2026-07-03"
    },
    "pc-account-groups": {
      "surface": "vscode-webview",
      "owner": "power-claude",
      "label": "Account Groups",
      "description": "Named groups (Work / Personal / client) that partition Claude accounts with optional isolated projects/memory trees. Dashboard Profiles panel + pc scope CLI: create/use/move members, drag-and-drop, isolation toggle. Credentials stay private per account; only session context is scoped.",
      "settingKey": null,
      "configureCommand": "powerClaude.openDashboard",
      "sourceFiles": [
        "src/shared/account/scopes.ts",
        "src/shared/account/applyScopeLayout.ts",
        "src/cli/commands/scope.ts",
        "src/extension/webviewView.ts",
        "media/dashboard.js",
        "docs/features/account-scopes.md"
      ],
      "introducedAt": "2026-07-14"
    }
  }
}

