Owner directive · 2026-07-22 PM · document preparation only
Everything Collins needs to run the four engines while Akash goes full-time sales · prepared July 22, 2026 · local record — not sent, not deployed
The complete builder handoff: every rail, surface, credential name, open gate, and the first-two-weeks operating rhythm for the person who will operate the machine.
Akash is going full-time sales. Collins is reinstated as the builder who manages Sales, Marketing, Delivery, and Client-Experience engines. Victor is the AI agent on the team.
Collins updates Akash over Slack; Akash answers questions. Collins runs the dailies, keeps drafts fresh, and ships the daily ad pack through Akash's approval gate.
"All of the infrastructure skeletons should be built out. I need to wrap everything and hand it all off to Collins."
Companion: Akash's own Sprint 5 sell-four-build-one operating system (his week) — this pack is the builder's-eye view of the same machine. Read that for the mode-discipline logic; read this to operate the rails.
Every rail below is already live. "Trigger story" = what makes it run. The self-running spine is the backbone; each engine hangs its surfaces off it.
These fire on their own, in this order, every morning. The builder does not run them by hand unless the watchdog says one is stale. Times mix ET (n8n cloud) and local Mac time (launchd) — both are real.
| Time | Rail | Trigger | What it does (plain English) |
|---|---|---|---|
| 06:10 ET | Meta ads insights sync | n8n H45syuMzdlOi61Z9 | Pulls yesterday's Meta ad numbers for the SP account into the database so every dashboard reads fresh spend. |
| 06:15 ET | Plaid finance sync | n8n 4u7hGwpzvX4HtuLu | Pulls bank balances + transactions, rebuilds the finance tables, writes a "success" row that the Finance Room trusts as its freshness gate. |
| 06:15 local | Scoreboard companions | launchd com.stpierre.sp-scoreboard-companions | Side calcs that feed the funnel scoreboard. |
| 06:30 ET | PostHog events sync | n8n aZ6srqBLQ4EC2f6f | Pulls website behavior (page views, funnel steps) into the database for attribution. |
| 06:31 local | Daily huddle + weekly scorecard | launchd com.stpierre.scorecard-huddle | Renders the daily huddle and the predicted-vs-actual weekly scorecard. |
| 06:45 local | Finance / cockpit / sales render chain | launchd com.stpierre.finance-room-render | Bakes the local finance.html, cockpit inject, and sales.html off fresh bank data (runs 30 min after the Plaid sync). |
| 07:00 local Sun | Storage auto-archive | launchd com.stpierre.storage-auto-archive | Weekly disk cleanup so the Mac never fills up. |
| 07:30 ET wkdays | Daily sales call sheet | launchd com.stpierre.sp-call-sheet | Renders the ranked call list for the day (no Sat/Sun run). |
| 07:30 local | Ads decision engine | launchd com.stpierre.sp-ads-decision-engine | Scores ad performance and queues promote/pause recommendations (recommend-only — never auto-acts on spend). |
| 07:50 ET | n8n fleet watchdog | n8n 5QBacqMo3GZYEJtR | Watches the whole n8n workflow fleet for failures. |
| 09:00 ET | Rail watchdog | n8n YLv1YuQ8IX2Cvs51 | Checks every monitored surface is fresh, writes any breach into ops_alerts → surfaces in the cockpit briefing. This is the builder's morning red-light panel. |
| 06:07 / 12:07 / 17:07 ET | Command Center board sweep (3×/day) | Claude scheduled task command-center-sweep | Keeps the brain's board of blockers and next-actions true; writes the cockpit briefing. |
| 06:00 local | Host git snapshot | launchd com.stpierre.codex-git-snapshot | The sole daily git committer for the workspace (single-committer rule). |
| 23:30 local | Nightly snapshots | launchd com.stpierre.nightly-snapshots | End-of-day state snapshots for the Command Center. |
| every 60s | Qualified-lead iMessage watcher | launchd ai.stpierre.qualified-lead-imessage | Watches for newly qualified leads to draft an iMessage. Manual-mode now: draft-only, no auto-send. |
| every 30 min | DFW messenger canary | launchd com.stpierre.dfw-messenger-canary-72h | Keeps the DFW Messenger bot warm during the App-Review canary window (see §3). |
brain.surface_registry table (12 monitored surfaces) is the source of truth for what should be fresh and where its heartbeat lands. Query it before assuming a rail is dead. The stale markdown .codex/references/scheduled-task-registry.md is not current — trust the registry table and the launchd list, not that file.Collins operates · Akash sells The sales engine is people + conversations. The rails prepare the work; the human does the talking. Manual mode is on (Jul 22): every outbound message goes out by hand from the approve-to-send queue — no scripted auto-sends until Akash lifts the directive.
| Surface / rail | Where | What it is |
|---|---|---|
| Sales Command Center | 01-Projects/CommandCenter/sales.html (local, baked 06:45) | The truthful pipeline in 30 seconds: safety, briefing, do-next, scoreboard, table, history. Hero stays RED until a signed+paid client exists. |
| Daily call sheet | St_Pierre_Digital/sales-engine/call-sheet-today.html (07:30 ET wkdays) | Ranked worklist for the day with scripts + pre-call packets. |
| Dialing Cockpit | http://127.0.0.1:8765 (localhost only) | The dialing worklist + disposition logging. Note: localhost-only, which blocks clean delegation off Akash's Mac. |
| Sales CRM (GHL) | sales.stpierre.ai | People, conversations, 15-stage pipeline, next actions. The operating surface for relationship truth. 15-min sweep + milestone checklist + inbox draft engine. |
| Inbox reco engine | brain sp_sales_ai_outputs → composer | Drafts 2 next-message options + exec summary per lead. Composer sends via a guarded rail — but manual mode = draft-only right now. |
| Qualified-lead iMessage | launchd, every 60s | Drafts an iMessage the moment a lead qualifies. Draft-only in manual mode. |
| Typeform + Calendly | Form j4wHbfWD (the ONE app form) · Calendly = booking truth | Application intake and booking. Hidden niche field skips the trade question; never clone per-niche forms. |
| Stripe / payment path | Stripe (live key in vault) | Payment state + collection. The $1-start funnel is retired; use the current no-deposit booking path. |
RUNBOOK: 01-Projects/CommandCenter/sales-room-build/RUNBOOK.md (+ METRIC-CONTRACT.md, ANALYST-VERIFICATION.md). Sales-engine rail notes in memory sp-sales-engine-rail / sp-sales-crm-rail / sp-inbox-reco-engine.
Collins builds the packs · Akash approves before launch Marketing produces creative and ships new ad-set "packs." Two audiences: B2B = SP's own contractor acquisition; B2C = the product run for clients. Always label which side.
| Surface / rail | Where | What it is |
|---|---|---|
| Marketing Command Center | StPierre-GTM/marketing-command-center/index.html + Marketing Room hub CommandCenter/marketing.html | Meta-reported vs tracked traffic, behavior, attribution. Specialist surface, not the daily front door. |
| Ads decision engine | launchd 07:30 → brain ads-autopilot signals | Scores live ads spend-first, queues promote/pause actions. Recommend-only. |
| Meta ads insights sync | n8n H45syuMzdlOi61Z9, 06:10 ET | Feeds daily spend into sp_ad_metrics_daily for the whole account act_1096498922089551. |
| PostHog behavior sync | n8n aZ6srqBLQ4EC2f6f, 06:30 ET | Website funnel behavior for project 493312. PostHog is the data layer only — reporting lives as own HTML. |
| Creative canon (guardrail) | .codex/references/creative-canon/ — CANON.md + canon.json + check_creatives.py | The one place for canonical creative rules (handle, CTA, offer, bolding, niche economics). Mandatory pre-deploy check — every build/repair/clone runs check_creatives.py before any Meta write. |
| Canonical templates | transcript-to-statics templates / stpierre-static-expander | All statics render from canonical template renderers — never ad-hoc Pillow scripts. |
| Preflight skills | meta-creative-preflight → creative-campaign-builder | Freeze approved copy + selected rows, require an offline contact sheet before Meta is touched, block edits to any spent ad set, prove the paused readback matches the plan. |
| Creative generation | creative-generation-router → Higgsfield (default) / Arcads (fallback) | Router picks the provider, enforces a live-schema check + credit cost gate before every paid job. |
| Meta write path | Pipeboard token → real Graph token (v24.0) → scripted calls; Pipeboard bulk edit preferred | Clone creative + swap image hash only. Every Creative × Caption × Headline combo is its own ad unless Akash says collapse. |
| Publish rail (organic) | Scheduled/sp-organic-publisher (codex-publisher token) | Organic publishing engine. Note: meta-bm token is API-blocked; codex-publisher token is the working one. |
Gotchas bible: .codex/references/meta-write-path-gotchas.md — assume every quirk in it; do not rediscover. Creative-canon rail notes: memory sp-creative-canon-rail, canonical-static-templates-only.
Collins operates Delivery = running the actual ad + funnel product for signed clients (the B2C side). The beachhead niches are the same four home-service trades.
| Surface / rail | Where | What it is |
|---|---|---|
| Delivery Board (fulfillment room) | StPierre-GTM/fulfillment/delivery-board/index.html (manual rebuild via build_delivery_board.py) | Fulfillment status per client. No auto-schedule — rebuilt on demand. |
| Client GHL sub-accounts (PITs) | ~24 client PITs in the vault (see §4) | Each client's GHL location + private integration token. Niche-tagged (CL/CF/CS/FR). |
| Demo bot rail | stpierre-demo-bot.pages.dev/{slug} | Proxies a prospect's site + injects the intake bot. New prospect = 1 config JSON + build/deploy. Live end-to-end since Jul 16. |
| DFW Messenger bot | App e08a123c, canary via launchd | The live client Messenger bot. In App-Review canary until Jul 25 (§3). The client chatbot line is untouchable — see the rules. |
| Client dashboards | per-client Pages projects (86 dashboards indexed in brain.dashboards) | Reporting surfaces per client. All own-HTML; PostHog is data-layer only. |
| Onboarding | new-client-onboarding skill + #client-onboarding Slack | New-client setup flow. |
Niche tickets (per-niche standard): CL $3K · CF $2K · CS $10K · FR $15K; CPL ≈ 5% of ticket; unknown ticket = "unknown", never a house default. Source of truth: brain.niche_economics.
Collins operates · Akash relationship-owns CX = keeping clients informed, responded-to, and retained. It rides the same CRM + Slack rails as Sales but points at existing clients.
| Surface / rail | Where | What it is |
|---|---|---|
| Slack (operating surface) | 5 channels via MCP connector | #client-onboarding · #call-ins · #daily-reports · #notes · #documents. Channel posts approved; DMs to humans as Akash are ask-first. |
| GHL conversations | ghl-convo-audit skill (never raw API for reads) | Conversation history, direction-tagged. Retention/checkpoint tracking. |
| Retention checkpoints | .codex/references/retention-checkpoints.md | The cadence for touching each client so none goes dark. |
| Fathom / Granola | auto-ingest via n8n webhook | Call transcripts → brain meetings → task extraction. Real meeting transcripts must be saved before any other work. |
Suppression / DND is sacred: suppression = CRM overlap + brain STOP/DND + clients + GHL only. The old EyeFly "eyefly" exclude file is not a global do-not-contact source.
.codex/references/brain.py helpers only — never inline SQL drivers. Full map in brain-patterns.md. Never read a *credentials* file; use brain.get_credential().~/brain.py is a generated bootstrap copy. If it grows past ~10 KB, a stale DB row clobbered the shim — the canonical file is .codex/references/brain.py.[ready] task. Flagged-and-forgotten is a violation.change_ledger row via brain.log_change — surface, target, action, why, before/after, rollback, verification. Spec: activity-ledger.md.--branch=main — a bare wrangler pages deploy lands on preview branch master and the custom domain never updates.resources/ tree or the router clobbers /resources routes.*.stpierre.ai subdomains: use the Worker-proxy helper .codex/references/cf_page_domain.py, never a hand-run wrangler custom-domain route (it 401s — our token has account Workers perms but no Zone:DNS:Edit, and the rotation rule says don't change the token).?v=timestamp) — Pages serves max-age=3600.url-directory.json AND persistent-dashboards.md, and INSERT into brain.dashboards.v_dash view, never anon policies.YLv1YuQ8IX2Cvs51) checks every monitored surface in brain.surface_registry against its expected_max_age_hours. Any breach is written to ops_alerts and shows in the cockpit briefing. The n8n fleet watchdog (5QBacqMo3GZYEJtR, 07:50 ET) watches the workflows themselves.fleet-health signals in the brain (e.g. today: bg_stuck=5, stale=[sp_funnel_daily], n8n_failing_24h=6).brain.background_tasks (heartbeat protocol) — read that table, never poll PIDs or log files.| Symptom | Open this |
|---|---|
| Finance Room stale / Plaid sync failed / numbers look wrong | 01-Projects/CommandCenter/finance-room-build/RUNBOOK.md — full failure-mode + rollback table |
| Sales Command Center stale / call sheet missing / pipeline totals conflict | 01-Projects/CommandCenter/sales-room-build/RUNBOOK.md |
| Any Meta write erroring / token / dynamic-creative / image-hash / page ad-limit issue | .codex/references/meta-write-path-gotchas.md — assume, don't rediscover |
| "How does this dashboard/surface work / what am I looking at" | The dashboard guide: stpierre-dashboard-guide.pages.dev |
| Creative fails the gate / offer or handle wrong | .codex/references/creative-canon/CANON.md — the rule + the fix |
| Nightly snapshots / hygiene broke | 01-Projects/CommandCenter/nightly-snapshots-runbook-2026-07-20.md |
| # | Rule | Why |
|---|---|---|
| 1 | Approval gate before activation. | Nothing activates on Meta without Akash first getting a contact sheet + LP/ad screenshots. He re-pauses anything unapproved on sight. Two unattributed activations have already been caught and re-paused. |
| 2 | Never edit a spent Meta object. | Launched ad sets are immutable. New creative always ships as a NEW ad-set "pack" in the same campaign — never edit/add to an ad set that has spend. Respect Meta's 50-ads-per-ad-set cap. |
| 3 | EyeFly is off-limits. | EyeFly exited Jun 15. Never touch its systems, never resurface its invoice, never mix its 733 historical appointments into St. Pierre numbers. SP account = act_1096498922089551; EyeFly ids are not SP. |
| 4 | The client chatbot line is untouched. | The live DFW Messenger bot serves a real client. Do not alter its production line without a tested rollback; App-Review submit is Akash-only. |
| 5 | Suppression / DND respected. | STOP/DND/quiet-hours are hard stops. Suppression = CRM overlap + brain STOP/DND + clients + GHL only. Live tests only ever send to Akash's owned test phone ending 5477. |
| 6 | Single-committer git rule. | Individual sessions never git add/commit the workspace repo — the 06:00 host snapshot is the sole committer. (Separate product/builder repos use normal branch-and-PR flow.) |
| 7 | Activity Ledger + rollback for every external write. | Every change outside the local workspace gets a change_ledger row with a concrete rollback before/at the change. Money, credentials, account permissions, human sends, legal, and un-reversible launches still STOP for Akash. |
| Item | State | Owner / unblock |
|---|---|---|
| CP1 · Ad delivery restored | SP B2B spend fell $109→$59→$0/day, delivered nothing since Jul 21. Root cause traced to the one delivering campaign ("SP R2 One-CBO $100/day"). All B2B moves + R4 activation wait on this. | Diagnosis agent ran; Akash unblock likely small once cause is confirmed. |
| R4 relight decision | 27 ads / 9 niches built + verified, PAUSED. Double-gated: (1) delivery restored, (2) five nurture gates below. | Akash — after CP1 + gates. |
| R4's 5 nurture gates | G-1 email-domain warmup check · G-2 SMS ladder approval · G-3 Todd/John texts (drafted, ready) · G-5 LLC status · G-6 deck link (held pending deck rewrite). | Akash approvals. |
| R2 relight decision | Whether to relight Round-2 packs sits behind the same delivery question. | Akash. |
| CP2 · Facebook dataset fix | Dataset creation mid-way; needed to re-credit + resend 3 lost DFW leads. Back-credit window closes in days. | Akash finishing dataset; deadline-sensitive. |
| CP5 · Meta App Review | Submit before Jul 25 (canary ends). Needs Akash's Chrome + passcode + Submit; n8n server-country check outstanding. | Akash-only (reviewer passcode + Submit). |
| CP3 · Dan day-7 proof pack | Dan's 7-day trial → day-7 conversion call ~Jul 28–29 (SP's first paying account). Leads-delivered proof pack (DFW concrete-leveling, lead Richard) must be built before the call. | Build now; Akash runs the call. |
ad_account_registry.)auto_send=FALSE, reco drafts refreshed to draft-only (ledger: sp_sales_ai_outputs refresh_reco_draft_manual_mode ×N; app.js manual_mode_surface_copy_fix; wrangler.toml stage_worker_emergency_stops_manual_mode).secrets_scan.py to nightly-hygiene; removed inline Supabase DSN from contactsdb-sync (ledger rows present).close-attribution-drifts, brain.drift_log close).scorecard/predictions).Google Drive Backups/Codex Offloaded/2026-07).H45syuMzdlOi61Z9); PostHog sync heartbeat added so the watchdog can see it.Re-render D loops under v2 contract + VSL banner QA · finish the unpublished GHL weekly nurture draft (4 SMS + 3 waits, auto_send FALSE) · pick first 2 Batch-001 static ads to test · publish-scope for "Fire Your Lead Vendor v2" deck · rebuild ad-creatives-daily-sync + marketing-blank2-daily-sync clean in n8n after fleet is green · convert 6 static dashboards to live. Full list lives in brain.tasks (status ready/blocked).
service / scope / label. Access is retrieved at runtime through brain.get_credential(service, scope, label) — the value never lands in a document. Granting a human real access is Akash's action, done in each platform's own admin, not by copying tokens.| Service | Vault pointer (service / scope / label) | Used for |
|---|---|---|
| Meta scripted write path | pipeboard / agency / pipeboard_api_token → exchanged for real Graph token | All bulk ad writes (the normal path). meta-bm system-user token is API-blocked — don't rely on it. |
| Meta system users | meta-system-user / stpierre / codex-publisher-system-user · … / sp-messenger-system-user | Organic publish (codex-publisher works) · Messenger bot. |
| Meta BM | meta-bm / agency / system-user-token | Business-Manager ops (currently API-blocked for reads — noted). |
| n8n | n8n / agency / rest-api-cowork-claude (+ relay/webhook secrets) | Workflow orchestration + the sync rails. |
| Cloudflare | cloudflare / stpierre / full-account · … / r2-s3 · … / sp-dollar-start-lead-ingest-secret | Pages/Workers deploys · R2 storage · lead-ingest worker. |
| Supabase / Postgres (brain) | supabase / agency / secret_key · … / publishable_key · brain / builder_ops / codespaces-scoped-db | Brain DB. Publishable key is RLS-restricted by design. |
| GHL | ghl-pit / stpierre / SP GHL Private Integration Token + ~24 per-client ghl-pit location tokens | CRM + client sub-accounts. Never recreate the PIT registry. |
| PostHog | posthog / stpierre / personal-api-key-read · … / project-493312-public-token | Behavior/attribution reads (data layer only). |
| R2 storage | cloudflare / stpierre / r2-s3 | Creative asset hosting (presigned URLs expire in 1h). |
| Stripe | stripe / stpierre / Live secret key | Payment path. Handle read-only; money moves are Akash-only. |
| Typeform / Calendly | typeform / stpierre / SP Typeform PAT · calendly / stpierre / Calendly API PAT | Application intake + booking truth. Never drive the live form j4wHbfWD. |
| Plaid | plaid / personal-finance / * (client-id, production-secret, per-item) | Finance sync. Read-only data; money is Akash-only. |
| Slack | MCP connector (5 channels) · slack / agency / akash_user_token (vault token revoked; brain helpers no-op) | Team operating surface. |
| Creative providers | Higgsfield / Arcads (via router) · gemini / agency / default-api-key · fal / stpierre / veed-api | Image/video generation (cost-gated). |
sp-sales-crm / stpierre / meta-reviewer-passcode, … / owner-passcode are Akash-held; a human never gets these pasted from the vault.#call-ins; hit any due retention checkpoint.check_creatives.py + meta-creative-preflight, produce the offline contact sheet + screenshots, and send that to Akash. Nothing activates until he approves. Label B2B vs B2C.| When | Do |
|---|---|
| Monday — review + predictions | One lightweight pass: re-rank the board against the sprint OKR; set the week's predictions in the weekly scorecard (scorecard_predictions). Weeks run Monday–Sunday. Confirm the four dailies are green heading into the week. |
| Through the week | Run the daily loop. Builder repos use normal branch-and-PR flow (3–8 small pushes/day is healthy); never work directly in Akash's local workspace repo. |
| Friday — close | Clear every overdue follow-up and delivery task; log predicted-vs-actual into the weekly scorecard; write change notes to scorecard_change_log. Confirm nothing is left mid-activation without Akash's sign-off. |
| Weekly brief | Produce the wife-readable weekly brief (the canonical weekly-planning output) — plain English, the week's numbers, the one thing that must move. Cross-reference, don't duplicate, Akash's Sprint 5 operating system. |
This file: 01-Projects/Planning/builder-handoff-pack-2026-07-22.html — local only, git-tracked by the daily host snapshot. Not deployed to any public URL (it contains operational detail). The resource-doc rail publishes to public *.pages.dev and is not access-controlled, so it was deliberately not used.
.codex/references/scheduled-task-registry.md, last real update 2026-06-27) — it predates the entire cc-self-running spine. The live truth is brain.surface_registry + the launchd list. Worth regenerating.meta-write-path-gotchas.md + creative-canon + the dashboard guide, which is thinner than a true failure-mode table.127.0.0.1:8765) — it cannot be handed to a builder off Akash's Mac without hosting work. Flagged in Akash's own plan too.sp_sales_* and legacy GHL tables.bg_stuck=5, sp_funnel_daily stale, 6 n8n workflows failing in 24h — a builder inheriting this should clear these first.Prepared as document-only. Nothing was sent to Collins or anyone else. No Meta writes, no external sends, no EyeFly changes, no secrets in this file. Awaiting Akash's review + delivery decision.