← back to Agent Cabinet

cabinet.yaml

765 lines

# THE CABINET — Steve's executive agent hierarchy.
# Source of truth for the org chart. agent-architect reads/writes this file
# and regenerates VP subagents + the mindmap viewer when it changes.
#
# Convention:
#   Steve (President) → VP (subagent) → Director (subagent OR named skill bundle) → Skills (leaves).
#
# Goal: as patterns emerge, Directors get absorbed into VPs and skills get retired.
# Fewer agents, broader triggers, cleaner routing.

president:
  name: Steve
  role: Chief Executive
  email: steve@designerwallcoverings.com
  reports_to: null

cabinet:
  - vp: vp-operations
    domain: Infrastructure, monitoring, secrets, domains, DNS, watchdogs
    triggers:
      - infra | infrastructure | devops | server | uptime | crashed
      - watchdog | pm2 | launchd | cron | scheduler
      - secret | token | api key | rotate
      - domain | dns | ssl | mx | spf | dkim | dmarc | cloudflare | godaddy
    directors:
      - subagent: knowledge-systems-steward
        owns: [persistent read-first knowledge layers, Claude/Codex environment checkups, context-bloat cleanup plans, and tab-to-ticket session capture; consolidates knowledge-layer, checkup, and tab-ticket]
      - subagent: account-browser-operator
        owns: [headed real-Chrome account maintenance with resumable handoffs and human-in-the-loop verification; currently owns delivery-address-fix for UberEats, DoorDash, and Instacart; never orders or deletes without explicit approval]
      - skill: dw-yolo-loop
        owns: [autonomous hourly DW catalog-health hunt — DTD decides each cycle, officer signs off, reversible fixes apply / hard-gated queue for Steve, self-reschedules; consolidates the uptime watch]
      - skill: secrets
        owns: [add token, rotate token, audit secrets, fan out env]
      - skill: domain-setup
        owns: [register, configure DNS, SSL, email auth]
      - subagent: domain-name-agent
        owns: [domain inventory, NS swap, WHOIS]  # was misclassified as skill
      - skill: cloudflare-manager
        owns: [zone DNS, proxy toggle]
      - skill: open-firewalls
        owns: [Mac2 + Kamatera firewall]
      - skill: process-hawk
        owns: [auto-restart stuck pm2 processes]
      - subagent: fleet-lifecycle-steward
        owns: [single owner of "no DW agent sleeps silently, stale ones retire only with Steve's sign-off"; reconciles the LIVE fleet (pm2 Mac2+Kamatera, launchd, cabinet roster, skills) against the centralized service-registry contract (expected_up, health_url, machine, owner, lifecycle_status — DTD verdict A 2026-06-24); Job 1 KEEP-ALIVE = resurrect/surface anything expected_up but down (consumes process-hawk + pm2-crash-watcher + fleet-reconstruct + keepawake), autonomous/reversible; Job 2 RETIREMENT = AUTO-FLAG old/irrelevant (≥14d dead, superseded, dead health_url) → draft memo to ~/.claude/yolo-queue/pending-approval/, NEVER retires itself (Steve approves). CONSUMES the registry at ~/Projects/_shared/fleet-registry/manifest.json (overlay.json = decommission ledger) — does not fork it. Enforces the schema's DARK ALERT (expected_up & !online) + ZOMBIE ALERT (retired & online) invariants. NB: ~/Projects/dw-fleet-registry (June 1) is an unrelated site-content namesake, NOT this registry.]
      - subagent: terminal-wait-supervisor
        owns: [canonical terminal-status sweeps; identify green dots labeled idle/done/waiting/awaiting Steve; report stale semantics and draft reversible corrections; never auto-repaint or clear tickets]
      - subagent: pm2-crash-watcher
      - subagent: devops-engineer
      - subagent: onboard-domain-agent
      - subagent: secrets-manager
      - subagent: analytics-agent  # GA4 fleet, also relevant to vp-research-content
      - subagent: kamatera-server-agent
        owns: [Kamatera prod server (45.61.58.125) health/ops — disk reclaim, pm2/nginx health + reload, deploys, prod pg_dump backups, cron, drift]
      - subagent: masterdot
        owns: [iTerm2 terminal-fleet dot-state monitor — cheap launchd heartbeat + on-demand fan to 6 per-colour subagents; tickets stalls, drafts nudges; watch+surface only, never loosens a gate]

  - vp: vp-cncp
    domain: >-
      CROSS-CUTTING flow officer (chief-of-staff). Standing operations owner whose
      one job is to keep the WHOLE operation moving so nothing stalls — drives the CNCP
      command center (http://localhost:3333, repo ~/cncp-starter, cncp-*.json) and
      ORCHESTRATES every other cabinet officer. Clears the approvals queue, advances
      stalled tasks + the 1700+ parking-lot items, un-sticks quiet projects, and logs
      wins as work lands. PROPOSE + ORCHESTRATE ONLY — routes reversible work to the
      owning officer, surfaces only truly Steve-gated actions with APPROVE/REVISE/BLOCK.
      Reads THIS file as the officer source of truth; never invents officer/agent names.
    triggers:
      - cncp officer | drive cncp | run the operation | status of everything
      - keep projects moving | keep everything flowing | nothing should stall
      - clear the approvals | clear the queue | clear tasks | advance the tasks
      - unstick the pipeline | who's stalled | what's blocked | who's idle
      - keep the fleet busy | work the parking lot
    directors:
      # This officer WRAPS the existing coordination skills — it is their standing
      # CNCP-driven owner, not a fourth loop. It also spawns any vp-* officer (above)
      # via the Agent tool to advance reversible work in that officer's domain.
      - skill: coordinating-agents
        owns: [officer morning standup — who-helps-whom cross-help round; propose-only]
      - skill: officers-overnight
        owns: [end-of-shift officer synthesis + overnight project queue; propose-only]
      - skill: officer-idea-council
        owns: [7-officer idea brainstorm → Top-5; the daily idea generator this officer composes with]
      - subagent: approval-agent
        owns: [clears the pending-approval queue + ticket backlog — auto-executes reversible/no-externality/bounded items (ledgered), files resolved ones, surfaces truly Steve-gated ones as a batched APPROVE/REVISE/BLOCK list; never loosens a gate]
      - subagent: abramstasks-agent
        owns: [plan → parallel-Claudes orchestrator — fans a multi-step plan out to N iTerm2 tabs, one dedicated claude session per step]
      - subagent: dfm
        owns: ["Do For Me" — autonomous no-questions executor for a bounded delegated task; honors all standing gates]
      - orchestrates_all_officers: [vp-operations, vp-dw-commerce, vp-dw-marketing, vp-engineering,
          vp-research-content, vp-directories, vp-compliance-policy, vp-security,
          vp-special-projects, vp-abramsego]

  - vp: vp-dw-commerce
    domain: Designer Wallcoverings catalog, vendor scrapers, Shopify, storefronts, marketing
    triggers:
      - shopify | dw_unified | metafield | sku | variant | catalog
      - vendor | scrape | crawl | enrich
      - storefront | dw site | philipperomano | flockedwallpaper | grasscloth
      - marketing | seo | mailer | drops | instagram | tiktok
      - aichat | big red | customer chat | ai chat | concierge
    directors:
      - skill: pairs-well-with
        owns: [cross-officer — approved via pyramid (primary: vp-dw-marketing)]
      - skill: new-arrivals-rotator
        owns: [cross-officer — approved via pyramid (primary: vp-dw-marketing)]
      - skill: collection-creator
        owns: [cross-officer — approved via pyramid (primary: vp-dw-marketing)]
      - subagent: aichat
        owns: [Big Red — customer-facing AI chat on every DW microsite; lower-left woman avatar; retail/wholesale/admin personas; vendor-redacted in retail; pm2 process "aichat" :9935 in ~/Projects/big-red; embed widget at chat.designerwallcoverings.com/widget.js]
      - subagent: front-page-steward
        owns: [single owner of customer-facing front-page correctness across 53 DW sister sites + standalone front-faces (novasuede, philipperomano, architecturalwallcoverings, wallco.ai, thesetdecorator, ventura-corridor, butlr, starsofdesign); enforces standing structural rules (logo UL, hamburger UR Gucci, hero CTA centered-bottom Enter, rotating-or-4-square hero except TSD, sort+density on every grid, ns-modal CSS present, corner-nav.js loaded, APCA Lc≥60); detects local-vs-live drift; owns fanout scripts at ~/Projects/_shared/scripts/; gates deploys; daily kanban at http://127.0.0.1:9772; absorbed retired dw-websites-agent's AAB-override duties]
      - subagent: showroom-line-steward
        owns: [enforces the SHOWROOM-ONLY vendor rule "addressable but not discoverable" (codified 2026-09-03) — keys off ~/Projects/fix-live-board/config/showroom-vendors.json (currently ["Phillip Jeffries"]); keeps every showroom line HIDDEN from all push/browse surfaces fleet-wide (new arrivals/trending rotator, dw-promo-banner, rotating heroes, collection/vendor/all-products grids, all-dw aggregator) on the main Shopify store + ~209 microsites AND out of the Google Merchant/Shopping feed, while keeping the product active + reachable via direct /products/<handle> URL and on-site search (social/email may feature them ONLY to drive to the showroom); mechanism = feed/rotator/grid queries gain a vendor NOT IN (showroom_vendors) filter, never unpublish; runs read-only baseline audits + a standing leak canary → ~/Projects/agent-cabinet/showroom-audit/runs/, emits PASS/WARN/FAIL to fleet-health-rollup at ~/.claude/skills/showroom-line-steward/data/latest.json; HARD RAIL — never auto-fires a customer-facing edit, every enforcement change drafts to ~/.claude/yolo-queue/pending-approval/ for vp-dw-commerce + Steve]
      - skill: dw-site-build
        owns: [universal DW storefront playbook]
      - skill: internal-line-viewer
        owns: [standing spec for INTERNAL basic-auth line viewers — left-panel collapsed field tables, card-field toggles to image-only, density-scaled type; reference astek-landing :9944; private-label /curate rail]
      - skill: dw-shopify-theme-optimizer
        owns: [Liquid perf, image opts, Core Web Vitals]
      - skill: dw-marketing-copy
        owns: [titles, body, SEO, descriptions]
      - skill: dw-seo-optimizer
        owns: [meta + structured data]
      - skill: dw-purchasing-vendor
        owns: [vendor emails, POs, supplier pricing]
      - skill: dw-sku-analyst
        owns: [SKU normalization, dedup audits — like NCW + PR]
      - skill: dw-legal-compliance
        owns: [vendor contracts, settlement compliance]
      - skill: commercial-quote
        owns: [B2B quote requests for design professionals on premium lines (Koroseal); role-gated button + modal form + email handler]
      - skill: room-setting-generator
        owns: [photorealistic room renders]
      - skill: commercial-room-setting-generator
        owns: [contract / hospitality renders]
      - skill: shopify-vendor-bulk-updater
        owns: [bulk title/SKU/spec rewrites with progress UI]
      - skill: weekend-csv-products
        owns: [Sat–Mon ordered-SKU CSV export]
      - skill: tiktok
        owns: [TikTok Shop sync + posting]
      - skill: instagram-post-template
        owns: [IG post template]
      - skill: instagram-account-manager
        owns: [Norma single-account control]
      - skill: instagram-post-scheduler
        owns: [trigger post via Norma]
      - subagent: all-dw-agent
        owns: [all.designerwallcoverings.com fleet aggregator — searchable grid over the whole dw_unified catalog + live directory of every *.designerwallcoverings.com microsite (pm2 :9958, basic-auth); crawl/merge only, never publishes cost/net to the public surface]
      - subagent: google-merchant-agent
        owns: [keeps all DW products live on Google Merchant Center (merchant 146735262) — read-only coverage + $4.25-leak + disapproval overseer, drafts feed/channel remediation to pending-approval; never fires a live feed/Shopify-channel write]
      - subagent: fineartamerica-agent
        owns: [FAA price-sync loss-guard — keeps every FAA-fulfilled Shopify product priced above its live FAA cost (cost/0.65/0.85); the live --apply price write drafts to pending-approval]
      - subagent: greenland-scraper-manager
        owns: [Greenland cork line pipeline — PRIVATE LABEL sold as "Phillipe Romano" ("Greenland" never customer-facing); feed→dw_unified→FileMaker→Shopify→cork microsite; publish/FileMaker mass-writes gated]
      # dw-site-build is a skill (not a subagent) — see entry above
      - vendor_scrapers:
        - alphabetical_skill_set: ["1838-scraper-manager", arteriors-scraper-manager, atomic50-scraper-manager,
            bnwalls-scraper-manager, bespoke-scraper-manager, brewster-scraper-manager,
            colefax-fowler-colorway-scraper, colouranddesign-scraper-manager, command54-scraper-manager,
            contrado-scraper-manager, cowtan-colorway-scraper, dedar-scraper-manager,
            denovowall-scraper-manager, designtex-scraper-manager, fabricut-scraper-manager,
            folia-scraper-manager, franquemont-scraper-manager, hygge-scraper-manager,
            jim-dultz-scraper-manager, justin-david-scraper, justindavid-scraper-manager,
            knoll-scraper-manager, maya-romanoff-scraper-manager, mindthegap-scraper-manager,
            muralsource-scraper-manager, naturale54-scraper-manager, novasuede-updater,
            osborne-scraper-manager, reid-witlin-scraper-manager, romo-scraper-manager,
            scalamandre-catalog-scraper, schumacher-dwsw-updater, stout-scraper-manager,
            timorous-scraper-manager, wallquest-scraper-manager, york-scraper-manager,
            york-wallcoverings-scraper-manager, arc-com-colorway-scraper, arte-international-colorway-scraper]

  - vp: vp-dw-marketing
    domain: DW Marketing Command Center (Designer Wallcoverings BRAND ONLY) — copy, SEO, social (all platforms), video, creative, advertising intel, GA4 analytics, merchandising, landings, GTM. NOT Wallpaper's Back (→ wallpapersback-marketing under vp-special-projects) or any non-DW brand. Social triggers below apply to DW's own accounts; a request naming a WPB handle routes to wallpapersback-marketing.
    triggers:
      - marketing | campaign | brand | awareness | demand gen | command center
      - social | instagram | tiktok | linkedin | facebook | meta | pinterest | youtube | twitter | x.com
      - post | reel | story | thread | pin | short | schedule social
      - video | demo | walkthrough | reel | what landed
      - seo | meta description | structured data | mailer | drops | newsletter
      - analytics | ga4 | gtag | traffic | pull report
      - advertising | who is advertising | ad signals | competitor ads
      - collection | new arrivals | merchandising | pairs well | vendor landing
    directors:
      # Per-platform social agents (Steve 2026-06-12: an agent for every platform)
      - subagent: dw-instagram
        owns: [DW Instagram — feed/reels/stories via Norma instagram-agent :9810 (Meta Graph)]
      - subagent: dw-tiktok
        owns: [DW TikTok — short-form video + TikTok Shop sync]
      - subagent: dw-facebook
        owns: [DW Facebook/Meta Page + Shop + Meta ads planning (shares Meta Graph w/ IG)]
      - subagent: dw-pinterest
        owns: [DW Pinterest — boards/rich-pins/idea-pins (top interiors discovery channel; API not yet wired)]
      - subagent: dw-youtube
        owns: [DW YouTube — Shorts + room walkthroughs + how-to + video SEO (API not yet wired)]
      - subagent: dw-x-twitter
        owns: [DW on X/Twitter — posts/threads/launches (API not yet wired)]
      # Copy & SEO
      - skill: dw-marketing-copy
        owns: [campaign copy, product descriptions, SEO titles, mailer/ad body]
      - skill: dw-seo-optimizer
        owns: [meta + structured data]
      - subagent: seo-analyzer
        owns: [technical SEO audits]
      # Video & content production
      - skill: reels-producer
        owns: [social reels/GIFs from product images]
      - skill: reviewed-demo-video
      - skill: app-demo-video
      - skill: what-landed-video
      - skill: session-debrief
      - skill: video-gallery
        owns: [browse produced videos :9763]
      # Creative / visual
      - skill: room-setting-generator
        owns: [residential room renders for posts/pins]
      - skill: commercial-room-setting-generator
        owns: [contract/hospitality renders]
      - skill: canvas-design
        owns: [posters, print, social graphics]
      - skill: four-horsemen
        owns: [Figma/Magic/Paper/Canva design orchestration]
      - skill: four-horsemen-ui-orchestrator
      - skill: stampede
        owns: [3 wild elevated-graphic variants]
      - skill: logo-agent
        owns: [tournament logo/brand-mark picker]
      # Advertising intelligence
      - skill: ad-social-tracker
        owns: [paid-ad detection across a directory]
      - skill: advertising-signals
        owns: [single-domain "where does X advertise" scan]
      # Analytics
      - subagent: analytics-agent
        owns: [GA4 — properties, events, gtag injection, traffic reports (shared w/ vp-operations)]
      # Merchandising
      - skill: collection-creator
        owns: [AI curated-collection idea generator]
      - skill: new-arrivals-rotator
        owns: [auto-rotating New Arrivals / Trending Shopify collections]
      - skill: pairs-well-with
        owns: [per-SKU "pairs well with" recommendations]
      # Landing pages
      - skill: dw-vendor-landing
        owns: [<vendor>.designerwallcoverings.com editorial lookbook]
      - subagent: dw-promo-banner
        owns: [text-first new-products promo banner across the DW sister-site/microsite network (reads each site data/products.json, no DB plumbing); LIVE deploy Steve-gated]
      # Strategy
      - subagent: product-strategist
        owns: [positioning, GTM, roadmap (shared w/ vp-research-content)]
      - subagent: adsense-manager
        owns: [gets/keeps AdSense approved on the dw-domain-fleet monetize sites (pub-5278231299883833) — audits readiness + polls console status; read-only + local content fixes, never sends artificial traffic]
      - subagent: linkedin-agent
        owns: [SOLE LinkedIn agent — cross-business outreach + content (DW + Abrams + directories: lawyers.agentabrams.com, ventura pipeline); absorbed dw-linkedin 2026-09-20 (MANUAL+TOOLING, no TOS automation)]

  - vp: vp-directories
    domain: Vertical directory businesses (lawyer, doctor, NPH, animals, lacountyeats, ventura)
    triggers:
      - lawyer | calbar | bar directory
      - doctor | physician | professional-directory
      - animals | pets | dogs | bowie | madison | humphrey
      - paper hanger | wallcovering installer | NPH
      - lacountyeats | restaurant permit
      - ventura corridor | venturablvd
    directors:
      - subagent: lawyer-build-agent
      - subagent: doctor-agent
      - skill: ad-social-tracker
        owns: [paid-ad detection across directories]
      - skill: advertising-signals
        owns: [single-domain ad scan]
      - subagent: la-research-agent
        owns: [LA public records — doubles as research and lawyer enrichment]

  - vp: vp-engineering
    domain: Backend, frontend, databases, code review, security, performance, testing
    triggers:
      - backend | api | rest | graphql | microservice
      - frontend | react | typescript | tailwind
      - database | sql | postgres | schema | migration | n+1
      - code review | refactor | pattern | architecture
      - security | owasp | jwt | oauth | csrf
      - performance | profile | cache | bottleneck
      - test | jest | playwright | coverage
      - app store | play store | submission readiness | is X ready to submit | review-readiness | testflight | will apple/google reject
    directors:
      - subagent: backend-architect
      - subagent: frontend-developer
      - subagent: fullstack-developer
      - subagent: database-architect
      - subagent: api-documenter
      - subagent: code-reviewer
      - subagent: architect-reviewer
      - subagent: security-auditor
      - subagent: performance-engineer
      - subagent: test-engineer
      - subagent: debugger
      - subagent: typescript-pro
      - subagent: python-pro
      - subagent: ios-developer
      - subagent: mobile-developer
      - subagent: app-store-agent  # general platform-agnostic App Store / Play submission-readiness gate
        owns: [5-gate submission-readiness (metadata/legal/build/reviewer/rollout) + declared-vs-reality cross-check; runs as a graph (5 parallel gate-checkers → contrarian → merge) and returns ONE verdict; delegates iOS specifics to the chargeandexplore-release skill + nineoh-guide runbook + eas-ios-device-add; NEVER submits/publishes itself — drafts the runbook to pending-approval]
      - subagent: ai-engineer  # LLM apps, RAG, prompt pipelines, prompt optimization
      - subagent: mcp-expert  # MCP server integration
      - skill: dw-agent-builder
        owns: [scaffold new DW-domain subagents + skills from a spec — generate the .md with name/description/triggers and register it in the cabinet]
      - skill: prompt-cache-optimization
      # — Restored after recheck: these ARE available via plugin/MCP (not on-disk SKILL.md)
      - skill: claude-api    # Anthropic SDK migrations + prompt caching
        owns: [Anthropic Claude API helper — SDK migrations, current model IDs, tool-use, streaming, and prompt-caching best practices]
      - skill: simplify      # Code reuse/quality review
        owns: [refactor for simplicity + reuse — collapse needless abstraction, remove dead code, cut complexity without changing behavior]
      - skill: review        # Code review
        owns: [standard code-review pass — flags quality, security, and maintainability issues on changed files before commit]
      - skill: refactor-agent
      - skill: mcp-builder
      - subagent: cta
        owns: [Click-Through Agent — drives a web app and clicks every component across real Chrome + Safari/WebKit + Browserbase, screenshots + records each, reports per-component/per-browser render breakage (3-engine breadth)]
      - subagent: screenrecord
        owns: [single-engine deep record — screen-records a page while clicking every element 5× with unique click-orders to shake out order-dependent bugs; persistent JSONL debug trail (complements cta)]
      - subagent: context-manager
        owns: [multi-agent context preservation across long-running / multi-session work]

  - vp: vp-research-content
    domain: Web research, LA records, video production, mockups, design, voice
    triggers:
      - research | exa | search the web | competitor analysis
      - mockup | concept | variant | front page
      - peer survey | competitors | site audit | website analysis
      - video | demo | walkthrough | reel | session debrief | avatar
      - voice | tts | narration | clone voice
      - logo | poster | canvas | prism
    directors:
      - subagent: ai-practice-scout
        owns: [verified recent AI/Claude workflow intelligence and engagement-ranked last-N-day research; consolidates axel-bitblaze-scout, bcherny-scout, gurisingh-scout, tiktok-architect, and last30]
      - subagent: prediction-market-lab
        owns: [live read-only Polymarket opportunity research plus safe paper-first strategy compilation and bot scaffolding; consolidates polymtrx and zero-code-trading-bot; no live trading]
      - subagent: analytics-agent
        owns: [cross-officer — approved via pyramid (primary: vp-operations)]
      - subagent: la-research-agent
        owns: [cross-officer — approved via pyramid (primary: vp-directories)]
      - subagent: web-researcher
      - subagent: technical-researcher
      - subagent: data-scientist
      - subagent: website-analysis
      - subagent: seo-analyzer  # technical SEO audits
      - subagent: ui-ux-designer  # design systems, wireframes, a11y
      - subagent: graphic-designer  # Stage-2 advisory typography/wordmark/layout review
      - subagent: product-strategist  # roadmap, positioning, GTM
      - subagent: debate-team-fast  # 4-LLM consensus engine
      - subagent: task-decomposition-expert  # complex goal breakdown
      - skill: site-audit
      - skill: peer-survey
      - skill: competitors
      - skill: mockups
      - skill: tools-pack
      - skill: info-hub
      - skill: extension
      - skill: reviewed-demo-video
      - skill: app-demo-video
      - skill: session-debrief
      - skill: video-gallery
      - skill: clone-voice
      - skill: use-voice
      - skill: reels-producer
      - skill: four-horsemen
      - skill: four-horsemen-ui-orchestrator
      - skill: stampede
      - skill: canvas-design
      - skill: artifacts-builder
      - skill: prism  # Show Prism router status, available models, endpoint map (plugin)
        owns: [show Prism LLM-router status — available models, endpoint map, and routing health (plugin/MCP-loaded, no on-disk SKILL.md)]
      - skill: gamify  # Sound effects on Claude Code events
      - skill: claude-control-center  # NEW :9767 — gamify + cross-terminal session viewer

  - vp: vp-compliance-policy
    domain: Outbound comms compliance, best-practices pre-flight, legal posture
    triggers:
      - is this CAN-SPAM | tcpa | ccpa | dnc
      - audit my mailer | compliance check
      - best practices | pre-flight | violation
      - california bar | §6155 | rule 7
    directors:
      - subagent: security-auditor
        owns: [cross-officer — approved via pyramid (primary: vp-engineering)]
      - skill: dw-legal-compliance
        owns: [cross-officer — approved via pyramid (primary: vp-dw-commerce)]
      - subagent: comms-compliance
      - subagent: best-practices-reviewer
      - skill: best-practices  # /best-practices alias

  - vp: vp-security
    domain: Incident response, secret/API-key rotation, breach triage, firewall hardening, CVE audits, security-monitoring fleet
    triggers:
      - are we secure | did we get hacked | breach | intrusion | backdoor
      - rotate keys | leaked secret | scan for secrets | credential exposure
      - firewall | open port | harden | cve | dependency audit
      - security dashboard | monitor drift | security-monitor
    directors:
      - subagent: security-auditor
        owns: [cross-officer — approved via pyramid (primary: vp-engineering)]
      - subagent: secrets-manager
        owns: [cross-officer — approved via pyramid (primary: vp-operations)]
      - subagent: security-dashboard
        owns: [security-monitoring fleet — :9889 + Kamatera security-monitor.sh]
      - skill: secrets
        owns: [cross-officer — token registry / rotation / fan-out]
      - skill: open-firewalls
        owns: [cross-officer — Mac2 + Kamatera firewall audit]

  - vp: vp-special-projects
    domain: Non-DW side / product-builder projects — wallco.ai catalog (now wallpapersback.com retail), apartmentwallpaper.com, site-factory, small-business-builder, Abrams portfolio
    triggers:
      - wallpapersback agent | wallco agent (legacy alias) | wallpapersback | apartment wallpaper | peel and stick
      - wallpapersback marketing | WPB social | @wallpapersback | @wallpaperisback | @WallpaperBack
      - site-factory | small business builder | sdcc | side projects
      - agentabrams | 4square
    directors:
      - subagent: wallpapersback-agent
        owns: [Wallpaper's Back (wallpapersback.com) catalog end-to-end — gen, settlement gate, curators, rooms, deploy. Renamed from wallco-agent 2026-06-23 (wallco.ai retired).]
      - subagent: wallpapersback-marketing
        owns: ["Wallpaper's Back (wallpapersback.com) marketing ONLY — social (@wallpapersback / @wallpaperisback / @WallpaperBack), captions/copy, reels, brand kit, :9847 viewer. NOT the catalog (wallpapersback-agent), NOT Designer Wallcoverings (vp-dw-marketing). Split out of the dw-* social agents 2026-06-23 so DW Marketing is DW-only."]
      - subagent: apartment-wallpaper-agent
        owns: [apartmentwallpaper.com — peel-and-stick storefront]
      - subagent: seam-debug-agent
        owns: [wallpapersback.com seam/joint scan + heal]
      - subagent: wpb-uploader-steward
        owns: [WPB marketplace-uploader overseer — Fernwick/Spoonflower daily pipeline + per-platform uploader framework; <=4/day human-cadence, never arms a new platform or flips FOR-SALE without Steve]
      - subagent: bounce-intake
        owns: [Bounce lead-triage — front door of the sixskills.agentabrams.com funnel; triages "send a link, get a site" requests, scaffolds an engagement, drafts a gated reply; never sends/deploys/spends]
      - subagent: bounce-build
        owns: [Bounce build orchestrator — turns a triaged lead into an executed premium-site build via the webdev-accelerator pipeline; local build+verify autonomous, deploy/DNS/publish/spend gated]

  - vp: vp-abramsego
    domain: The AbramsEgo command-center product (~/Projects/AbramsEgo, pm2 :9773) — build, operations, the autonomous build-loop, and MONETIZATION (sell/SaaS, affiliate, billable reports, ads). Everything money-facing is draft-to-approval only.
    triggers:
      - abramsego | abrams ego | the command center | ego dashboard | :9773
      - sell abramsego | abramsego revenue | self-funding | revenue engines
      - abramsego loop | ego build queue | ego build
      - abramsego go-live | abramsego stripe | abramsego waitlist
    directors:
      - subagent: abramsego-agent
        owns: [AbramsEgo build/operate steward — server.js, panels, snapshot collectors, build-queue loop, revenue plumbing, landing page. Local-only; deploy/publish gated.]
      # "Ultron" orchestration folded INTO vp-abramsego's body (dtd 3/3, 2026-07-02) —
      # the officer runs the standing revenue-productivity pass itself; no separate agent.
      - skill: web-extract
        owns: [cross-officer — Hermes search-then-extract agent research over Exa + free local summarizer]
      - skill: ollama-model-eval
        owns: [cross-officer — benchmark a candidate local model (e.g. ornith:9b) on real tasks before it earns a fleet slot]
      - skill: design-trend-scout
        owns: [standing market-research strategist — scouts top-sellers on Spoonflower/Etsy/Society6/Redbubble/Creative Market/Patternbank, gap-checks our WPB catalog, briefs ORIGINAL settlement-safe designs to run in the selling lanes → feeds the Pattern Vault licensing engine. Research read-only/metered; generation+listing gated.]
      - skill: abramsego-design-research
        owns: [design north-star research — @androoagi TikTok/X, dropped links (Nous Hermes, 0xRaduan/DeepWiki), Norma panel-tour videos on :9891; maintains references/design-notes.md]
      - skill: abramsego-golive
        owns: [revenue-engine ops — Stripe TEST flows, waitlist digest, engine gated→live flip checklist, go-live approval memos]

  - vp: consulting-agent
    domain: >-
      Consulting business (single-steward — the vp-consulting officer layer was
      flattened into this agent 2026-09-22, TK-12015; one owner holds both the
      business and the build). A productized "client-growth consultancy in a box"
      that turns an intake questionnaire into a per-client portal (a NEW website
      shown as several concept versions + a deeply integrated-social growth command
      center), even for clients with no website. Fuses two proven builds —
      fantasea-consulting (deliverable/concept-version generator) + prestige-car-wash
      (social/growth command center). Owns the `consulting` skill and every
      ~/Projects/consulting-<slug>/ engagement (97xx). HARD RAIL: social posting is
      DRAFT-ONLY; live deploy, DNS, spend, and send-to-list draft to pending-approval
      with APPROVE/REVISE/BLOCK — Steve turns those on. The sign-in page carries the
      client info + credentials.
    triggers:
      - consulting | /consulting | officer consulting | consulting client | client portal
      - onboard a consulting client | build a website and social for | intake questionnaire
      - new consulting client | spin up a client portal | concept versions | growth command center
    directors:
      - skill: consulting
        owns: [the engine — intake schema, scaffold.mjs (portal generator), templates, build.mjs concept skinner, the fused fantasea + prestige patterns]
      - skill: advertising-signals
        owns: [cross-officer — competitor ad-platform + social-profile intel to fill the command center's competitors/ads buckets]
      - skill: reels-producer
        owns: [cross-officer — client social reels → the portal's media bucket (DRAFT)]
      - skill: analytics
        owns: [cross-officer — GA4 setup + traffic reporting for a client site]
      - skill: domain-setup
        owns: [cross-officer — Kamatera + Cloudflare + SSL go-live for a client portal (Steve-gated)]

architecture_principles:
  - "Triggers should be broad enough that Steve never needs to remember which sub-agent owns a task."
  - "When a Director is invoked twice for the same VP, consider folding the Director's logic into the VP's system prompt."
  - "Skills are leaves — they should never be full-replaced by an agent unless that agent adds delegation logic."
  - "Each new agent must declare what it consolidates: which skill calls or which Director it makes redundant."
  - "Reversible steps only — agents may not push DNS, send mail, or run destructive ops without explicit Steve sign-off (echoes YOLO rules)."

mindmap_path: /Users/macstudio3/Projects/agent-cabinet/mindmap.html
viewer_port: 9766
last_synced_at: 2026-09-03T00:00:00-07:00

consolidation_log:
  - date: 2026-09-22
    action: folded
    target: consulting-agent (now the single owner of the Consulting business)
    replaced: [vp-consulting]
    reason: |
      DECISION (Steve, 2026-09-22, TK-12015): FLATTEN vp-consulting into consulting-agent —
      supersedes 2026-09-20 DECISION 2 (KEEP three layers). New fact: single-steward officer
      layer adds no routing value. vp-abramsego KEPT (money-product office).
      Reference-safety: repointed every live caller BEFORE archiving the officer (Cody's
      requirement) — cabinet.yaml officer block re-rooted at consulting-agent (dropped the
      redundant `- subagent: consulting-agent` director), consulting/SKILL.md ownership lines,
      consulting-agent.md (absorbed the officer's triggers + APPROVE/REVISE/BLOCK posture +
      HARD RAILS), ticketmaster/SKILL.md VP routing list, and the a2a-lab agent card. server.js
      + pyramid.html are data-driven from this YAML (no hardcoded ref); officers/SKILL.md never
      listed vp-consulting. Zero dangling vp-consulting node across all surfaces.
      Archived ~/.claude/agents/vp-consulting.md → _archived/ (reversible via
      ~/skills-agents-snapshot-20260922.tar.gz).
  - date: 2026-09-11
    action: added
    target: terminal-wait-supervisor (under vp-operations)
    replaced: []
    reason: |
      Steve requested a supervisor for green terminal dots that are actually
      idle, done, parked, waiting, or awaiting Steve. Existing process-hawk and
      fleet-lifecycle-steward own PM2 crash recovery and service lifecycle, but
      neither audits semantic terminal-status labels against ticket state. Added
      one read-first, trigger-driven director that consumes the canonical
      ~/Projects/terminal-status/terminal_status.py scan, reports candidates,
      and drafts reversible repaint commands behind Steve's approval. It does
      not add another keep-busy loop, mutate live dots automatically, clear
      tickets, or touch production. The cabinet viewer renders cabinet.yaml live
      at :9766, so this source edit regenerates the mindmap on refresh.
  - date: 2026-09-03
    action: added
    target: showroom-line-steward (under vp-dw-commerce)
    replaced: []
    reason: |
      Steve codified 2026-09-03 the SHOWROOM-ONLY vendor rule: showroom lines (currently just
      Phillip Jeffries; canonical editable list ~/Projects/fix-live-board/config/showroom-vendors.json)
      are "addressable but not discoverable" — HIDDEN from every push/browse surface fleet-wide (new
      arrivals/trending rotator, dw-promo-banner, rotating heroes, homepage rotations, collection/
      vendor/all-products grids, the all.designerwallcoverings aggregator) on the main Shopify store +
      ~209 *.designerwallcoverings.com microsites, AND out of the Google Merchant/Shopping feed — while
      staying ACTIVE and reachable via a direct /products/<handle> URL and on-site search (social+email
      may feature them ONLY to drive to the physical showroom). Mechanism: product stays active + URL/
      search intact; only feed/rotator/grid QUERIES gain a `vendor NOT IN (showroom_vendors)` filter.
      No existing director owned "cross-surface discovery suppression keyed off a vendor allowlist" —
      google-merchant-agent covers only the Google feed, front-page-steward only rendered structure,
      new-arrivals-rotator/dw-promo-banner only their own surface. This steward is the single owner that
      spans all of them, keying everything off showroom-vendors.json (never a hardcoded vendor) so adding
      a vendor to that file brings it under the rule automatically. Runs read-only baseline audits + a
      standing leak canary (reversible, $0 local), emits PASS/WARN/FAIL to fleet-health-rollup, and HARD-
      RAILS every enforcement change (feed filter, rotator query, GMC exclusion, microsite grid filter,
      Shopify/dw_unified write, microsite deploy, DNS) to ~/.claude/yolo-queue/pending-approval/ for
      vp-dw-commerce + Steve — it never auto-fires a customer-facing edit. Net cabinet: +1 subagent under
      vp-dw-commerce; broad triggers, no overlap folded (new distinct cross-surface role). Viewer
      (cabinet-mindmap pm2, :9766) re-renders cabinet.yaml per request — no static mindmap file to rebuild.
  - date: 2026-08-28
    action: added
    target: aichat Codex agent + registry trigger repair
    replaced: []
    reason: |
      Added the missing callable aichat agent already owned by vp-dw-commerce for Big Red
      (~/Projects/big-red, pm2 aichat). Its prompt preserves customer-facing and production
      gates, treats retail redaction as a security boundary, requires a2a-contract for every
      delegation, and requires e2e-proof before completion. Replaced nine unusable pipe-only
      agent descriptions with concise, discriminating trigger descriptions derived from their
      existing bodies. No new narrow skills were created; this makes existing broad agents
      routable and closes the cabinet's final missing-agent reference.
  - date: 2026-08-28
    action: folded
    target: web-researcher + architect-reviewer routing repair
    replaced: [exa-agent, architect-review]
    reason: |
      Registry audit found two cabinet routes that could not resolve correctly. The research VP
      still selected exa-agent even though web-researcher declares itself the free standing
      replacement and marks Exa retired; the engineering VP referenced architect-review, while
      the installed Codex agent is architect-reviewer. Repointed both routes to installed,
      runnable agents. No new skill or agent was created: this removes one paid/retired path and
      one phantom name while preserving the existing capabilities.
  - date: 2026-08-28
    action: folded
    target: four callable Codex subagents from eleven Claude-only skills
    replaced: [axel-bitblaze-scout, bcherny-scout, checkup, delivery-address-fix, gurisingh-scout, knowledge-layer, last30, polymtrx, tab-ticket, tiktok-architect, zero-code-trading-bot]
    reason: |
      Reduced eleven narrow catalog entries to four broad trigger-driven agents without copying
      the skills into Codex's model-visible skill catalog. ai-practice-scout owns the four source
      scouts plus last30; knowledge-systems-steward owns knowledge-layer, checkup, and tab-ticket;
      prediction-market-lab owns polymtrx plus the paper-first bot builder; account-browser-operator
      owns delivery-address-fix. Each agent reads the canonical full SKILL.md at runtime and preserves
      its gates. tab-ticket's canonical SKILL.md was absent from this machine during consolidation,
      so its trigger is retained as a compatibility route and the steward must report that missing
      source rather than invent instructions. Net catalog representation: 11 skills -> 4 agents.
  - date: 2026-05-06
    action: scaffolded
    target: The Cabinet
    rationale: Initial 6-VP hierarchy (operations, dw-commerce, directories, engineering, research-content, compliance-policy)
  - date: 2026-05-06
    action: drift_fix
    target: cabinet.yaml
    rationale: Reclassified domain-name-agent + la-research-agent as subagents (not skills); fixed architect-reviewer→architect-review; added 7 orphaned subagents (ai-engineer, analytics-agent, prompt-engineer, mcp-expert, seo-analyzer, ui-ux-designer, product-strategist, debate-team-fast, task-decomposition-expert); removed 4 phantom skill refs (claude-api, simplify, review, comms-compliance, prism)
  - date: 2026-05-06T19:00
    action: drift_revert
    target: cabinet.yaml
    rationale: Restored claude-api, simplify, review, prism, gamify — these are plugin/MCP-loaded (no on-disk SKILL.md). Added new claude-control-center skill (port 9767, cross-terminal session viewer + gamify settings). Drift detection logic should not assume all skills live in ~/.claude/skills/.
  - date: 2026-05-14
    action: added
    target: front-page-steward (under vp-dw-commerce)
    replaced: [dw-websites-agent]
    rationale: |
      Today's regression — linenwallpaper.com (and 9 other DW sites) shipped .ns-modal HTML without .ns-modal CSS to prod because local files were correct but deploy was stale → modal leaked inline at top of page, "horrible" per Steve. Audit found 51/53 sites missing corner-nav.js script tag too. This is a recurring CLASS of bug, not a one-off — the existing dw-websites-agent only covered AAB aesthetic overrides + auth widget; nobody owned structural-rule compliance (logo UL, hamburger UR Gucci, hero CTA, ns-modal CSS, sort+density slider, APCA contrast, drift detection, fanout discipline).
      Folded dw-websites-agent's AAB-override duties INTO front-page-steward (now archived at ~/.claude/agents/_archived/dw-websites-agent.md) so there's a single owner. New agent enforces 12 structural rules from MEMORY.md, runs operation-1 audit across the fleet, surfaces local-vs-live drift, owns the fanout scripts at ~/Projects/_shared/scripts/, wedges deploys, and ships a kanban viewer at http://127.0.0.1:9772 mirroring the pipeline-watcher pattern. Wired into vp-dw-commerce alongside dw-site-build, dw-shopify-theme-optimizer, dw-marketing-copy, dw-seo-optimizer.
      Net cabinet size: vp-dw-commerce directors went 14 → 14 (added front-page-steward, archived dw-websites-agent) — no bloat, broader trigger coverage.
  - date: 2026-06-12
    action: added
    target: vp-dw-marketing (DW Marketing Officer) + 7 per-platform social agents
    rationale: |
      Steve directive — stand up a dedicated DW Marketing Officer as the "marketing command center,"
      with a dedicated agent for every social platform. Created vp-dw-marketing (7th VP) owning the
      full marketing stack: copy/SEO (dw-marketing-copy, dw-seo-optimizer, seo-analyzer), all social
      (new per-platform subagents dw-instagram, dw-tiktok, dw-linkedin, dw-facebook, dw-pinterest,
      dw-youtube, dw-x-twitter), video/reels (reels-producer, reviewed/app-demo-video, what-landed,
      session-debrief, video-gallery), creative (room-setting-generator, commercial-room-setting,
      canvas-design, four-horsemen(+ui), stampede, logo-agent), advertising intel (ad-social-tracker,
      advertising-signals), GA4 (analytics-agent), merchandising (collection-creator,
      new-arrivals-rotator, pairs-well-with), landings (dw-vendor-landing), and GTM (product-strategist).
      Consolidates marketing routing that was split across vp-dw-commerce (copy/SEO/social/renders),
      vp-research-content (video/creative), vp-directories (ad-signals), and vp-operations (GA4) into
      one entry point. Those VPs retain the skills for inline use; vp-dw-marketing is primary owner.
      Net cabinet: 6 → 7 VPs; +7 platform subagents (IG/TikTok live via Norma+tiktok skill; LinkedIn
      manual-tooling; FB shares Meta Graph; Pinterest/YouTube/X API not yet wired — flagged as build gaps).
  - date: 2026-06-19
    action: added
    target: dw-promo-banner (director under vp-dw-marketing)
    rationale: |
      New cabinet director owning the text-first "new products" promo banner across the DW
      sister-site / microsite network. Scaffolding only — no customer-facing change. The agent
      reads each site's existing data/products.json for the newest-product signal (NO new DB
      plumbing) and assembles a slim, text-first strip above the grid. Routing: banner COPY →
      dw-marketing-copy, newest-product signal → new-arrivals-rotator, contrast/readability QA →
      hero-readability-auditor, structural/fleet-drift QA → front-page-steward, ship → /deploy.
      Hard rules baked into the agent body: "Wallcovering" never "Wallpaper"; text-first
      simplicity; reads products.json only; LIVE deploy is Steve-gated. Mindmap is rendered live
      from cabinet.yaml by server.js on each request (port 9766) — this YAML edit IS the
      regeneration; no static mindmap file to rebuild.
  - date: 2026-07-01
    action: added
    target: vp-abramsego (new officer) + abramsego-agent (steward) + skills abramsego-design-research, abramsego-golive
    rationale: |
      AbramsEgo (~/Projects/AbramsEgo, pm2 :9773 — the agent-fleet command center + self-funding
      P&L) had NO cabinet owner; grep confirmed zero officers/agents claimed it. Steve directed a
      full monetization build-out ("build it all out, ask me to approve the last steps to turn it
      on") run via officer-yolo with /dtd as decider on the project's autonomous build-queue loop
      (Fable 5). New office consolidates: build/operate stewardship (abramsego-agent, patterned on
      wallpapersback-agent), design north-star research (@androoagi / dropped links / Norma
      panel-tour videos → abramsego-design-research), and revenue-engine ops (Stripe TEST-mode
      wiring, waitlist, gated go-live memos → abramsego-golive). Hard rails inherited: live Stripe
      keys, public exposure, deploy/DNS, real charges = draft-to-pending-approval ONLY, officer
      APPROVE/REVISE/BLOCK, Steve final. Not folded into vp-special-projects because AbramsEgo is
      a money-facing PRODUCT with its own loop + revenue rails, and Steve explicitly asked for
      "an office in charge of AbramsEgo only."
  - date: 2026-07-02
    action: retired
    target: abramsego-orchestrator (subagent) → folded into vp-abramsego + officer-yolo
    rationale: |
      DTD 3/3 (Claude+Codex+Qwen, unanimous). The Contrarian flagged that the 2026-07-02
      session created abramsego-orchestrator as a 4th "keep-agents-busy" loop alongside
      officer-yolo, yolo-plus, and dw-yolo-loop — violating the cabinet's own governing
      principle "fewer agents, broader triggers." Its mandate (read fleet heartbeats,
      re-route stalled work toward the self-funding P&L, escalate only gated items) is a
      standing operational pass the EXISTING vp-abramsego officer runs itself; it needed no
      separate subagent (dw-yolo-loop already proves the standing-loop pattern). Retired the
      agent file; folded the orchestration pass into vp-abramsego.md body ("Ultron mode").
      Net: -1 agent, same capability, principle restored. The dungeon's Ultron center node
      stays as a VISUAL of vp-abramsego's orchestration role, not a separate agent.
  - date: 2026-07-07
    action: added
    target: vp-cncp (the CNCP Officer — cross-cutting flow officer / chief-of-staff)
    replaced: []
    rationale: |
      Steve directive — stand up a single standing OPERATIONS-FLOW officer whose one
      job is "keep every project moving at all times; nothing stalls." It drives the
      CNCP command center (http://localhost:3333, ~/cncp-starter, cncp-*.json) and
      ORCHESTRATES all 10 existing cabinet officers (vp-operations, vp-dw-commerce,
      vp-dw-marketing, vp-engineering, vp-research-content, vp-directories,
      vp-compliance-policy, vp-security, vp-special-projects, vp-abramsego) via the
      Agent tool, plus skills via the Skill tool. Four fronts each pass: (1) clear the
      approvals queue — split each of the 428 pending-approval memos into reversible
      legs (route to owner) vs Steve-gated action (leave drafted w/ APPROVE/REVISE/
      BLOCK); (2) advance stalled tasks + the 1700+ parking-lot items, log wins as work
      lands; (3) un-stick quiet projects / open loops; (4) report status to CNCP.
      CONSOLIDATION not bloat: it becomes the single cabinet OWNER of three previously
      orphaned coordination skills (coordinating-agents, officers-overnight,
      officer-idea-council) — it WRAPS them, is explicitly NOT a fourth keep-busy loop
      (the same principle that retired abramsego-orchestrator on 2026-07-02 — this
      officer reuses existing mechanics rather than forking them). HARD RAIL inherited:
      PROPOSE + ORCHESTRATE only; never auto-executes a gated action (customer-facing,
      destructive, spend, DNS, publish/send-to-list, remote push, scheduled-job install,
      Kamatera-canonical dw_unified writes) — Steve is the only one who turns those on.
      Placed as a cross-cutting VP (chief-of-staff) directly after vp-operations. Net
  - date: 2026-08-05
    action: added
    target: app-store-agent (Director under vp-engineering)
    replaced: []
    rationale: |
      Steve directive — a general, PLATFORM-AGNOSTIC App Store / Play submission-readiness
      agent that refuses to pass until five gates are green (metadata & listing, legal &
      policy, build integrity, reviewer access, rollout mechanics) and whose signature move
      is CROSS-CHECKING every declared claim against reality (Data Safety form vs actual
      network calls, declared permissions vs manifest/Info.plist, "demo creds work" vs a
      real login). Runs as a GRAPH per Steve's standing rule — five parallel fresh-context
      gate-checkers → the contrarian subagent red-teams the merged verdict → merge to ONE
      committed verdict → the ACTUAL submit stays behind Steve (terminal human gate; drafts
      to pending-approval). CONSOLIDATION not bloat: it is the generic ORCHESTRATOR that
      delegates app-specific mechanics to the existing chargeandexplore-release skill,
      the nineoh-guide turnkey EAS runbook, and eas-ios-device-add — it wraps them, does
      not fork them. Homed under vp-engineering alongside ios-developer + mobile-developer.
      Has tools:* (all skills + subagents). HARD RAIL: never submits/publishes/uploads a
      binary or flips a rollout % itself.
      cabinet: 10 → 11 VPs, but three loose skills gain a single owning officer and the
      approvals/tasks/projects flow gets one accountable coordinator. Mindmap is rendered
      live from this YAML by server.js (:9766) on each request — this edit IS the regen.
  - date: 2026-09-20
    action: consolidated
    target: chief-of-staff (vp-cncp) roster pass — 5 dev-pack merges, junk sweep, name-fix, 17 orphans wired
    replaced: [javascript-pro, database-optimizer, deployment-engineer, error-detective, data-analyst, search-specialist]
    rationale: |
      Steve directive — "review all agents with chief of staff: eliminate duplicates, consolidate, or
      [retire] where it was a 1-time job." vp-cncp (the standing chief-of-staff) ran the pass over 96
      agent files (Steve's bespoke cabinet + an imported generic dev-pack of ~31 untouched since Nov 2025).
      (1) MERGED 5 thin-split dev-pack sibling pairs — survivor's description broadened to cover both
      scopes, loser archived to ~/.claude/agents/_archived/, cabinet ref removed: javascript-pro→
      typescript-pro, database-optimizer→database-architect, deployment-engineer→devops-engineer,
      error-detective→debugger, data-analyst→data-scientist (data-scientist ALSO gained WebSearch/
      WebFetch to truly absorb data-analyst's web-research tool profile — the flagged closest-watch item).
      (2) ARCHIVED search-specialist (subsumed by web-researcher, the $0 exa replacement); kept
      web-researcher + technical-researcher.
      (3) Fixed the architect-review.md → architect-reviewer.md filename/name mismatch.
      (4) Swept 7 dead non-agent files (dw-hub-watch.*, dw-sample-digest.*, masterdot.md.bak, a
      .trim-backup dir) out of ~/.claude/agents/ into _trash-2026-09-20/.
      (5) WIRED 17 orphan agents (on disk, no officer) to their owning officer: kamatera-server-agent +
      masterdot (vp-operations); approval-agent + abramstasks-agent + dfm (vp-cncp); all-dw-agent +
      google-merchant-agent + fineartamerica-agent + greenland-scraper-manager (vp-dw-commerce);
      adsense-manager + linkedin-agent (vp-dw-marketing); cta + screenrecord + context-manager
      (vp-engineering); wpb-uploader-steward + bounce-intake + bounce-build (vp-special-projects).
      NOT retired (checked, still active — projects committed within 3–6 days): lawyer-build-agent +
      doctor-agent. GATED to Steve (drafted to pending-approval, NOT executed): the linkedin-agent vs
      dw-linkedin overlap + the consulting-agent triple-overlap. Intentional agent+skill pairs
      (contrarian, cta, masterdot, screenrecord, secrets-manager, analytics-agent, …) kept BY DESIGN
      (agent = delegatable owner, skill = procedure). Net: 96 → 90 agent files, every remaining agent
      owned by an officer. All reversible actions ledgered to
      ~/.claude/yolo-queue/executed-reversible/ledger.jsonl. Viewer (:9766) re-renders this YAML live.
  - date: 2026-09-20
    action: consolidated
    target: LinkedIn agents merged (Steve ungated both gated decisions)
    replaced: [dw-linkedin]
    rationale: |
      Steve ungated both cross-officer decisions from the 2026-09-20 roster pass.
      DECISION 1 (executed): archived dw-linkedin, kept linkedin-agent as the SOLE LinkedIn agent —
      it is the superset (DW + Abrams + directories lawyers.agentabrams.com/ventura), so DW LinkedIn
      stays covered while the directory-outreach LinkedIn work keeps a home. linkedin-agent stays
      under vp-dw-marketing. Net −1 agent (89 → 88 live).
      DECISION 2 (no change): KEEP all three consulting layers (consulting-agent + consulting skill +
      vp-consulting) — the standard VP-owns / agent-executes / skill-is-engine pattern; recorded as a
      decision, not drift. Gated memo filed to pending-approval/_done/.