Skip to content

CLI reference: Engagement

6 commands. Every command runs on your own computer; nothing is sent to a social network unless a publishing command is run by the owner with its live switches.

READ-ONLY fetch of public replies (and, with –quotes, Bluesky quote posts) to your published Bluesky/Mastodon posts into an engagement-triage export; plan only unless –online; never replies

Terminal window
reachweaver engagement-fetch [-h] [--online] [--out OUT] [--account ACCOUNT]
[--post-id POST_ID] [--max-posts MAX_POSTS]
[--depth DEPTH] [--max-replies MAX_REPLIES] [--quotes]
[--max-quotes MAX_QUOTES]
Option Description
--online Allow unauthenticated read-only GET requests (needs –out)
--out OUT NEW owner-only (0600) engagement export JSON; never overwritten
--account ACCOUNT Only this bluesky/mastodon account id
--post-id POST_ID Only this local published post
--max-posts MAX_POSTS Posts fetched per run (1..200, default 50)
--depth DEPTH Reply levels below each post (1..20, default 6)
--max-replies MAX_REPLIES Replies kept per post (1..500, default 100)
--quotes Also read Bluesky quote posts of each post (app.bsky.feed.getQuotes, public AppView, unauthenticated, cursor pages); kind quote_post; network only with –online
--max-quotes MAX_QUOTES Quote posts kept per Bluesky post with –quotes (1..500, default 100, at most 5 pages)

Offline comment/mention triage + reply/issue DRAFTS; no send path

Terminal window
reachweaver engagement-triage [-h] [--docs-map DOCS_MAP] [--out OUT]
[--issues-dir ISSUES_DIR] [--json] [--optout OPTOUT]
input
Option Description
input Owner-exported normalized engagement JSON
--docs-map DOCS_MAP Owner docs map: topic keywords -> HTTPS docs URL
--out OUT New .json or .md file for the triage + drafts; never overwritten
--issues-dir ISSUES_DIR Write bug/feature GitHub issue DRAFTS here; never filed
--json Print the full machine-readable report
--optout OPTOUT Opt-out list JSON (default $REACHWEAVER_OPTOUT or config/optout.json if present); listed authors get no draft

Offline aging/SLA review queue over an engagement export; read-only, no send path

Terminal window
reachweaver engagement-queue [-h] [--docs-map DOCS_MAP] [--optout OPTOUT] [--now NOW]
[--sla LABEL=HOURS] [--json]
input
Option Description
input Owner-exported normalized engagement JSON
--docs-map DOCS_MAP Owner docs map, as for engagement-triage
--optout OPTOUT Opt-out list JSON (default $REACHWEAVER_OPTOUT or config/optout.json if present); listed authors are never queued
--now NOW ISO 8601 time with timezone for the age calculation (default: current UTC time)
--sla LABEL=HOURS Override one label’s overdue target in hours; repeatable
--json Print the full machine-readable queue

Read-only: when a published post’s exact metric crosses an owner-set threshold, suggest a follow-up for human review (brief + next commands); never likes, replies, DMs, reposts, drafts or sends

Terminal window
reachweaver followup-suggest [-h] [--rules FILE] [--account ID] [--since DATE]
[--state FILE] [--record] [--optout OPTOUT] [--now NOW]
[--json]
Option Description
--rules FILE Owner rules JSON (see examples/followup-rules.example.json). Default: one ‘took off’ rule per account derived from your own results (2 x your median likes + replies + reposts at about 7 days, at least 10 posts with a result)
--account ID Only posts of this account
--since DATE Only posts published at or after this ISO 8601 time with timezone (e.g. 2026-10-01T00:00:00Z)
--state FILE Private dedupe file of post/rule pairs already suggested (read if present; skipped pairs are not suggested again)
--record With –state: record this run’s suggestions in that file (atomic, mode 0600; ids only)
--optout OPTOUT Opt-out list JSON (default $REACHWEAVER_OPTOUT or config/optout.json if present); listed handles are never named in a suggestion
--now NOW ISO 8601 time with timezone for snapshot ages (default: current UTC time)
--json Machine-readable report

Ranked daily shortlist of conversations to join in your own words, with an angle per item; never posts, replies, likes or follows; network only with –online

Terminal window
reachweaver engage-scout [-h] --config FILE [--input FILE] [--online] [--platform P]
[--limit N] [--state FILE] [--record STATE] [--optout OPTOUT]
[--now NOW] [--json]
Option Description
--config FILE Owner scout config JSON (see examples/engage-scout.example.json)
--input FILE Owner candidates file (reachweaver.engage-candidates, e.g. pasted X/LinkedIn/Threads/Reddit/YouTube/Stack Overflow links); repeatable
--online Also run the read-only public searches (Bluesky, Mastodon hashtag, GitHub issues): GET only, no credential, bounded, stops on a rate limit
--platform P Only these platforms (repeatable or comma-separated)
--limit N Shortlist at most N items (1..50; also capped by the config’s daily_cap)
--state FILE Private state file to read for dedupe (items already shown or marked are dropped)
--record STATE Read and update this private state file (atomic, mode 0600; ids only) so items are not shown again
--optout OPTOUT Opt-out list JSON (default $REACHWEAVER_OPTOUT or config/optout.json if present)
--now NOW ISO 8601 time with timezone for ages (default: current UTC time)
--json Machine-readable report

Record which engage-scout items you replied to or skipped, or print a weekly correlational readout; writes only the private state file

Terminal window
reachweaver engage-log [-h] --state FILE [--mark ID] [--replied | --skipped]
[--with-link] [--at AT] [--readout] [--outcomes FILE]
[--weeks N] [--now NOW] [--json]
Option Description
--state FILE The engage-scout –record state file
--mark ID Shortlist id to mark (from engage-scout)
--replied With –mark: you replied yourself
--skipped With –mark: you decided not to reply
--with-link With –replied: your reply included your project link
--at AT ISO 8601 time of the reply (default: now)
--readout Weekly readout of replies next to outcomes (correlational)
--outcomes FILE With –readout: owner-recorded follower/star/visit snapshots (reachweaver.engage-outcomes)
--weeks N With –readout: weeks to show (1..26, default 4)
--now NOW ISO 8601 time with timezone (default: current UTC time)
--json Machine-readable output