Plan C: PPMO+ plus GHL plus OpenAI Codex (Cody) Autonomously Controlling Linked-Helper

Authors: ExCom+ Unified (Betty chair, Willemena, Sade, Gemma, Vesta) with Clarise and Claudia review Marc-directive: 2026-05-18 PM, "How do we extend all thing EGP PPMO+ into EGP GHL + OpenAI Codex fully controlling Linked-Helper" Status: Draft v1, awaiting Marc ratify Date: 2026-05-18 Jira candidate epic: SWAT-PPMO-CODEX-LH-01

1. Executive Summary

Linked-Helper is the canonical LinkedIn automation engine for PPMO-LH (50/day saved-jobs cadence; 110 recruiter touches; Sales Nav weekly sweep). Marc wants Cody (PPMO-OA, OpenAI Codex) to take directive input and execute Linked-Helper campaigns autonomously, with GHL as the data plane (lead lists in, conversation captures back). The recommendation is Path D (Hybrid): keep Linked-Helper as the LinkedIn-action engine for the workflows it already handles well (connection requests, drip messages, profile visits, Sales Nav exports) and add custom Playwright for residual cases Linked-Helper does not cover (saved-jobs sweep capped at 50/day, job-tracker dup handling, custom InMail variants). Cody orchestrates both via a unified directive interface and writes lead and conversation data to GHL. Estimated runbook 30 working days, 4 sprints, with first autonomous campaign live by day 9.

2. Current State

[Marc directive in chat]
        |
        v
[Manual: Marc opens Chrome, launches Linked-Helper]
        |
        v
[Linked-Helper extension runs] --- CSV in/out --- [tools/linkedhelper_*.py]
        |
        v
[Google Sheets job tracker (1Bk_…)] --- [tools/linkedhelper_ghl_bridge.py] --- [GHL]

3. Target State

[Marc directive (chat or Directive Capture widget)]
        |
        v
[Cody Intake API (shared with Plan B)]
        |
        v
[Linked-Helper Action Router]
        |              \
        v               v
[Linked-Helper local REST API]    [Playwright on Linked-Helper UI + LinkedIn]
              \                  /
               \                /
                v              v
              [Lead + conversation capture]
                       |
                       v
              [GHL contacts + opportunities + Conversations]
                       |
                       v
              [Memory + Confluence + ship report to Marc]

4. Runbook

Task Owner Effort (days) Dependencies Definition of Done
T-01 Audit current Linked-Helper config, workflows, queues, daily caps Willemena 1 none Audit doc in 04-operations
T-02 Enable and validate Linked-Helper local REST API (port 9080) Vesta 1 T-01 /api/workflows returns 200
T-03 Wrap Linked-Helper REST in Python client (egp_linkedhelper_api_client.py) Sade 2 T-02 12 methods callable
T-04 Playwright executor for non-API Linked-Helper actions (start/stop campaign, edit message template) Sade 3 T-02 6 actions automated
T-05 Cody Intake integration (shared with Plan B Cody service) Cody + Claudia 1 Plan B T-01 Linked-Helper directives routed to LH router
T-06 Directive intent labels for Linked-Helper (connect, message, search, export, audit) Claudia 2 T-05 50-directive labelled set, 95 percent accuracy
T-07 Lead-list provisioning: GHL smart-list -> Linked-Helper queue Willemena 2 T-03 110-recruiter list provisioned end to end
T-08 Conversation capture: Linked-Helper replies -> GHL Conversations tab Willemena 2 T-03 Reply visible in CRM within 60s
T-09 Saved-jobs custom Playwright bot (Linked-Helper does not cover this well) Sade 3 T-04 50/day cap honored, dup handler fires
T-10 Daily-cap enforcement: persistent counters at .tmp/linkedhelper_daily_counter.json Clarise 1 T-03 Counter persists across restarts
T-11 Pre-action guardrails (no message to existing customers, no duplicate connect within 90 days, em-dash lint on message text) Betty 2 T-03 HARD-FAIL on violation
T-12 Audit log + ship report (campaign-level + per-action) Clarise 1 T-03 JSONL + daily email to Marc
T-13 Off-hours scheduling integration (existing launchd plists) Vesta 1 T-10 LH campaigns continue when Marc OOO
T-14 Telemetry dashboard pane (campaigns active, leads contacted, response rate) Gemma 2 T-12, Plan A Pane live in Command Center
T-15 Approval gate for new message templates and new campaign creation Betty + Sasha (Skeptic) 1 T-11 Approval flow tested
T-16 Acceptance test (Marc directive -> live campaign in under 10 min) Betty 1 all 3 directives shipped end to end
T-17 Hardening: Chrome restart, extension reload, LinkedIn challenge handler Sade 3 T-16 Chaos test passes
T-18 Cutover and runbook Willemena 1 T-17 Confluence runbook live
Slack n/a 2 n/a reserved

Total: 30 working days, 4 two-week sprints.

5. SWOT

Strengths Weaknesses
Linked-Helper already running, known workflows, persistent off-hours Linked-Helper local API requires Chrome running and extension active
50/day cadence + dup handling already canonical Some LH actions only exposed via UI (need Playwright)
GHL bridge already exists LinkedIn challenge or 2FA can pause campaigns
Daily counter pattern already battle-tested Cody not yet a long-running service (depends on Plan B T-01)
Opportunities Threats
Removes Marc from manual campaign launch LinkedIn ToS and account restrict risk
Unlocks 5x to 10x saved-jobs volume Linked-Helper vendor sunset risk
Pattern reusable for Sales Nav + Recruiter Chrome auto-update breaking extension

6. Five Solution Paths

Path A: Cody controls Linked-Helper via its native REST API

Path B: Cody invokes Linked-Helper via Playwright (controlling the extension UI)

Path C: Replace Linked-Helper with a custom Playwright bot

Path E: Decompose to GHL workflows where possible, Linked-Helper for residual

7. Top-3 Risks (Path D)

  1. LinkedIn account restriction. Mitigation: respect 50/day cap (already canonical), warm cadence on new actions, 2FA challenge handler at T-17, daily reputation check.
  2. Linked-Helper extension breaks. Mitigation: pinned Chrome version, pinned extension version, weekly synthetic test, fallback to Playwright bot for the affected workflow.
  3. Customer in a connect list. Mitigation: T-11 guardrail cross-references GHL customer table and excludes anyone marked is_customer=true or having open opportunities.

8. Jira Recommendation

9. Where We Left Off

10. Persona Attribution