CLI reference: Publish and recover
11 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.
reachweaver publish
Section titled “reachweaver publish”Preview due work; –live + opt-in env flag required to send
reachweaver publish [-h] [--live] [--limit LIMIT] [--post-id POST_ID] [--max-per-24h MAX_PER_24H] [--min-gap-minutes MIN_GAP_MINUTES] [--scheduled-only] [--max-lateness-minutes MAX_LATENESS_MINUTES] [--optout OPTOUT] [--log-json] [--log-file PATH] [--json]| Option | Description |
|---|---|
--live |
Opt in to actual network publishing |
--limit LIMIT |
Maximum eligible posts (default 10, max 100) |
--post-id POST_ID |
Send or preview only this explicitly approved, due post ID (recommended for pilots) |
--max-per-24h MAX_PER_24H |
Live per-account rolling 24h send-attempt cap 1..10 (default 2) |
--min-gap-minutes MIN_GAP_MINUTES |
Live per-account minimum minutes between attempts 15..1440 (default 60) |
--scheduled-only |
Worker-safe mode: skip approved unscheduled posts; only send due scheduled items |
--max-lateness-minutes MAX_LATENESS_MINUTES |
With –scheduled-only, skip posts whose due time is >N min late (5..10080, default 180) |
--optout OPTOUT |
Opt-out list JSON (default $REACHWEAVER_OPTOUT or config/optout.json if present); loaded once per run, a mention is BLOCKED before any claim and the post stays approved |
--log-json |
Also emit one redacted JSON line per worker decision to stderr (dry run and live); observational only, never post text, handles, secrets or URL query strings |
--log-file PATH |
With –log-json: append the JSON lines to PATH instead (created 0600, owner-only); an unwritable PATH refuses the run before any account or claim |
--json |
Dry run only: the preview as JSON (due posts and what –live would skip); refused with –live |
reachweaver pause
Section titled “reachweaver pause”Emergency global stop for all live publishing
reachweaver pause [-h]No options.
reachweaver resume
Section titled “reachweaver resume”Explicitly lift the emergency stop
reachweaver resume [-h]No options.
reachweaver reconcile
Section titled “reachweaver reconcile”Human-confirm outcome of an uncertain send; do not blindly retry
reachweaver reconcile [-h] (--published | --not-published) [--remote-id REMOTE_ID] [--remote-url REMOTE_URL] [--force] post_id| Option | Description |
|---|---|
post_id |
|
--published |
|
--not-published |
|
--remote-id REMOTE_ID |
|
--remote-url REMOTE_URL |
|
--force |
Reconcile a post still in ‘sending’ that was claimed less than 15 minutes ago (a send may be in flight). Only after checking the native account yourself |
reachweaver approval-mode
Section titled “reachweaver approval-mode”Show or tighten approval safeguards: human confirmation (#7 D6) and keyed binding (D7); both opt-in
reachweaver approval-mode [-h] [--confirmation {tty_hash_prefix,off}] [--require-key] [--require-identity] [--max-age-hours N] [--json]| Option | Description |
|---|---|
--confirmation CONFIRMATION |
tty_hash_prefix: approve and publish –live need a terminal and the typed hash prefix; off needs the same ritual while it is on One of: tty_hash_prefix, off. |
--require-key |
Latch keyed approval mode (needs a usable REACHWEAVER_APPROVAL_SECRET here); no command removes the latch |
--require-identity |
Latch identity-bound approval (wave 9 item 2): approve needs –verify-identity –online and every send needs a stored identity; tighten-only, no command removes the latch |
--max-age-hours N |
Approval time-to-live (#39): an approval older than N hours (1..8760) is expired and the post must be re-approved before any send; tighten-only, only a lower value is accepted later |
--json |
Display the current mode as JSON; only without the options above, which stay text-only |
reachweaver calendar-plan
Section titled “reachweaver calendar-plan”Propose audience-local times; optional –apply queues approved posts locally only
reachweaver calendar-plan [-h] --account ACCOUNT --timezone TIMEZONE --start START [--days DAYS] [--spacing-hours SPACING_HOURS] [--post-id POST_ID] [--limit LIMIT] [--slot SLOT] [--blackout BLACKOUT] [--include-drafts] [--apply] [--audience-activity FILE] [--audience-top-hours N] [--audience-max-age-days N] [--explore-share FRACTION] [--explore-slot Wed@11:00] [--market MARKET]| Option | Description |
|---|---|
--account ACCOUNT |
One configured social account ID |
--timezone TIMEZONE |
Audience IANA zone, e.g. Europe/Rome; not necessarily operator zone |
--start START |
First eligible local day YYYY-MM-DD |
--days DAYS |
Window length 1..60 days (default 14) |
--spacing-hours SPACING_HOURS |
Minimum gap per account 1..168 hours |
--post-id POST_ID |
Select a post explicitly; repeat; default is all approved posts |
--limit LIMIT |
Maximum selected posts, at most 100 |
--slot SLOT |
Audience-local preferred slot Wed@16:00; repeat (required for some platforms) |
--blackout BLACKOUT |
Exclude day YYYY-MM-DD; repeat |
--include-drafts |
Preview draft and approved posts; cannot be applied |
--apply |
Explicitly queue already approved items in local SQLite; never publish |
--audience-activity FILE |
Owner-exported hour-of-week activity CSV (ReachWeaver interchange format, examples/audience-activity.example.csv); top hours become slots with provenance |
--audience-top-hours N |
With –audience-activity: top activity hours used, 1..24 (default 5) |
--audience-max-age-days N |
With –audience-activity: warn when as_of is older than N days (default 90) |
--explore-share FRACTION |
Send this share of the posts (above 0, at most 0.5; default 0 = off) to –explore-slot times, labelled role=explore; the rest stay on the exploit slots. Not randomized |
--explore-slot Wed@11:00 |
With –explore-share: an audience-local time to explore, distinct from the exploit slots; repeat |
--market MARKET |
Audience market for market-specific notices: US, global or PLATFORM@MARKET (tiktok@US); adds a sourced flag only, never changes the slots |
reachweaver calendar-gaps
Section titled “reachweaver calendar-gaps”Read-only: empty and overloaded slots per account from the local queue; never approves, schedules or publishes
reachweaver calendar-gaps [-h] --account ACCOUNT --timezone TIMEZONE [--start START] [--days DAYS] [--slot SLOT] [--blackout BLACKOUT] [--audience-activity FILE] [--audience-top-hours N] [--audience-max-age-days N] [--tolerance-minutes TOLERANCE_MINUTES] [--max-per-day MAX_PER_DAY] [--min-spacing-hours MIN_SPACING_HOURS] [--timing-source TIMING_SOURCE] [--timing-metric {views,impressions,likes,replies,reposts,saves,clicks,signups}] [--timing-denominator {views,impressions}] [--json]| Option | Description |
|---|---|
--account ACCOUNT |
One configured social account ID |
--timezone TIMEZONE |
Audience IANA zone, e.g. Europe/Rome |
--start START |
First local day YYYY-MM-DD (default: today in the audience zone) |
--days DAYS |
Window length 1..60 days (default 14) |
--slot SLOT |
Audience-local preferred slot Wed@16:00; repeat (as calendar-plan) |
--blackout BLACKOUT |
Exclude day YYYY-MM-DD; repeat |
--audience-activity FILE |
Owner-exported activity CSV; as calendar-plan |
--audience-top-hours N |
With –audience-activity: top hours used, 1..24 |
--audience-max-age-days N |
With –audience-activity: stale after N days |
--tolerance-minutes TOLERANCE_MINUTES |
A queued post within this many minutes fills a slot (1..720, default 90) |
--max-per-day MAX_PER_DAY |
More queued posts than this on one local day is overloaded (1..20, default 2) |
--min-spacing-hours MIN_SPACING_HOURS |
Queued posts closer than this are flagged (1..168, default 20) |
--timing-source TIMING_SOURCE |
Annotate empty slots with timing-evaluate evidence from this exact imported source |
--timing-metric TIMING_METRIC |
With –timing-source: goal numerator, e.g. clicks One of: views, impressions, likes, replies, reposts, saves, clicks, signups. |
--timing-denominator TIMING_DENOMINATOR |
With –timing-source One of: views, impressions. |
--json |
Machine-readable result |
reachweaver connect-check
Section titled “reachweaver connect-check”Explicit online, non-publishing account identity check
reachweaver connect-check [-h] --account ACCOUNT [--online]| Option | Description |
|---|---|
--account ACCOUNT |
One account id from local ignored config |
--online |
Required: allow authentication/read-only remote API requests |
reachweaver postiz-check
Section titled “reachweaver postiz-check”Explicit online, READ-ONLY Postiz integration listing/receipt lookup; never posts
reachweaver postiz-check [-h] --account ACCOUNT [--online] [--post-id POST_ID]| Option | Description |
|---|---|
--account ACCOUNT |
One account with “backend”: “postiz” in local ignored config |
--online |
Required: allow read-only GET requests to the Postiz API |
--post-id POST_ID |
Also look up this local post’s Postiz job state (backend-reported; never reconciles) |
reachweaver disconnect
Section titled “reachweaver disconnect”Stop publishing to one account on this installation (#38): tighten-only, local; lists the credential variable names and the steps to revoke at the provider; revokes nothing itself
reachweaver disconnect [-h] --account ACCOUNT| Option | Description |
|---|---|
--account ACCOUNT |
One account id from local ignored config |
reachweaver reconnect
Section titled “reachweaver reconnect”Lift a local disconnect (#38). Human-only: needs an interactive terminal and a fresh challenge typed on /dev/tty
reachweaver reconnect [-h] --account ACCOUNT| Option | Description |
|---|---|
--account ACCOUNT |
The disconnected account id |
