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
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.
[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]
linkedhelper_automation.py, linkedhelper_ghl_bridge.py, linkedhelper_gsheets_sync.py, supabase_to_linkedhelper.py, egp_a4_linkedhelper_500_build.py.feedback_persistent_autonomous_off_hours_operation_canonical_2026_05_18.md).[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]
| 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.
| 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 |
is_customer=true or having open opportunities.01-strategy/strategy/2026-04-28-EGP-Linked-Helper-Status-Relaunch/ (relaunch spec)tools/linkedhelper_automation.py, linkedhelper_ghl_bridge.py, linkedhelper_gsheets_sync.py, supabase_to_linkedhelper.py, egp_a4_linkedhelper_500_build.pyfeedback_persistent_autonomous_off_hours_operation_canonical_2026_05_18.md (50/day, 50-100/day caps, off-hours)feedback_job_tracker_dup_handling_strikethrough_yellow_2026_05_18.md (dup-handling canonical)feedback_clarissa_distinct_persona_local_llm_large_2026_05_15.md (Cody persona)