Step eight. Money is in dialogues, not in likes (Module 5). Three modes that work independently:
| Mode | What it does | Cadence |
|---|---|---|
--mode=targets |
strategy → 4 audiences → boolean queries → live profile list | once + weekly refresh |
--mode=radar (default) |
fresh target posts → selection → comment drafts → digest | 1–2×/day |
--mode=log |
what was actually posted + replies → dedupe, mix, signals into research | in the evening / on Friday |
Drafts only — you post MANUALLY. Auto-comments = ban risk + LinkedIn's AI classifier cuts the account's distribution.
Normative doc: ${CLAUDE_PLUGIN_ROOT}/reference/engage-playbook.md — audiences, boolean, selection gates, comment types, quality gate, state schema. Read BEFORE any mode.
Additionally: methodology.md §4 (distribution), Section 2 of the strategy (audiences), Section 6 (voice).
Input: $ARGUMENTS — client (default — the only active one) + optional flags.
State: engage-state.json in the client's working folder (not in the plugin repo). If missing — create it.
Mode A · --mode=targets — build a list of whom to comment on
This is what was missing: the list isn't pulled out of thin air and doesn't wait for a manual CSV.
A1 · Retrieve the four audiences
Read Section 2 of the strategy (Notion 🧭 {Client} · Strategy) — the block "four audiences:
ICP / peers / co-pilots / thought leaders". Extract for each: who they are, examples, geo, size.
- Section 2 is incomplete or there is no strategy → don't block: build a draft of buckets from what exists (author profile, website, ICP doc, GTM strategy), mark each line [ASSUMPTION] and put at the end a "Confirm or correct" block — 4 short questions, not a questionnaire.
A2 · Audience → targeting card
For each bucket, build a card per §2 of the playbook: titles · keywords · exclude · geo ·
company_size · language · seed_profiles (3–5 live profiles) · target_count.
From this — two boolean strings per bucket: one for title, one for keywords.
Show the requests to the user BEFORE searching — editing a line is cheaper than re-sifting the results.
A3 · Find profiles (channel ladder, §3 of the playbook)
The order is strict, top to bottom, up to the set target_count:
- Sales Nav → notifications "Suggested lead … shared a post" — people already selected with a fresh post.
- Sales Nav → Lead search: boolean у Title/Keywords + Spotlights → Posted on LinkedIn
(past 30 days) + geo/size. Save as Saved Search + Lead List per bucket
(
ENG · ICP,ENG · Peers,ENG · Co-pilots,ENG · TL). - LinkedIn → Posts → keywords → Latest — search by content, not by people; catches authors outside the lists.
- Own network: who liked/commented on the author's posts over the month.
- Second circle: who constantly comments under the posts of seed profiles.
- Apify (no-cookie) — when a batch/cron is needed:
apimaestro/linkedin-posts-search-scraper-no-cookiesorharvestapi/linkedin-post-search.
Engine: --engine=chrome (default) — the user's live session via browser tools; we scrape nothing
bypassing the login, li_at is not needed. --engine=apify — headless batch for cron/n8n.
In chrome mode: read and navigation only. No connects, likes, messages, saves
without direct permission in the chat.
A4 · Hard filter
A profile with no posts in 30 days does not make the list — there is nothing to comment on under it,
no matter how ideal the ICP. Record cadence (how much they post per week) — then it drives the frequency.
A5 · Output
Write to engage-state.json → targets + (if Notion is connected) a sub-page
"🎯 {Client} · Engage Targets" with a table: Name · Bucket · Profile · Why them · Post cadence ·
Source · Last comment. Summary: how many in each bucket, where there is a shortfall, which requests produced junk.
Mode B · --mode=radar — comment drafts (default)
B1 · Collect fresh posts
Sources by priority: Sales Nav notifications for the slot → posts of targets (chrome: feed/profiles;
apify: apimaestro/linkedin-profile-posts as a batch) → search by keywords Latest for selection.
Slot window: morning ~9:00, midday ~15:00 in the target audience's timezone; without --slot — both.
B2 · Selection gates (§4 of the playbook)
Freshness ≤ 3 h (TL — ≤ 60 min) · in the topic cluster · not an ad/vacancy/repost-without-a-thought · there is a thesis or a number to latch onto · this author has not been commented on for 7 days · the opinion has not yet been said in the top comments (check BEFORE drafting) · this same opinion has not been left under another post this week.
B3 · Queue and mix
Rank = свіжість × вага бакета × сила зачіпки. Volume 5–15 drafts/day.
Mix 20% ICP / 50% peers / 15% co-pilots / 15% TL is measured by week, not by day: first fill in the
bucket that is underfilled for the week (count by log).
B4 · Write a comment
Read the entire post (not the headline) + top comments. Choose a type from §5 of the playbook (experience-addendum · counter-example · mechanics · clarification-probe · translation to another audience · number from the field · outright disagreement). Write in the voice of Section 6 of the strategy; comment language = post language. 25–60 words, one block, specifics (number / case without a name / tool / threshold).
B5 · Quality gate (§6 of the playbook) — strict
Run every draft through anticopywriting-ai. Discard and rewrite if there is: "great post"
in any form · retelling of the post · "not X, but Y" · triads · dash constructions · pitch/link/service name
· a compliment longer than half a sentence · a generality without a number · >1 emoji · client names.
Final check: would the author reply to this. No — rewrite, do not soften.
B6 · Output — digest
For each draft: author + bucket + link to the post + age of the post + why this post + comment type + ready text in one block for copying. Order = priority; on top is what expires first. Channel: chat (default) → Notion page of the slot → Telegram, if the channel is configured in the client's config. At the end: the current mix of the week and what is missing.
Mode C · --mode=log — close the loop
- Ask/accept what of the drafts was actually posted and what was replied.
- Add to
engage-state.json → log: date · slot · author · bucket · comment type · posted · reply. - Comment mining: recurring questions, objections and pains from posts and threads → into
minedand further into03-researchasSource = comment-mining. - Weekly summary: actual mix vs 20/50/15/15 · which types of comments gave answers · which of the targets have been silent for 3+ weeks (candidate for removal) · where to add more profiles.
Definition of Done
- targets: 4 buckets have boolean queries and a live list of profiles (each — with posts for 30 days), recorded in the state; the shortfall per buckets is named out loud.
- radar: the drafts passed the selection gates AND the quality gate; the mix of the week is accounted for; each draft — with a link, a reason and ready text for copy-paste.
- log: what was posted is recorded, dedupe works, signals are handed over to
03-research. - No action in the LinkedIn account without permission — only reading and drafts.