CLI reference: Audit profiles and content
15 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 profile-audit
Section titled “reachweaver profile-audit”Offline owner-snapshot, per-platform profile readiness and fix list; no network
reachweaver profile-audit [-h] --file FILE [--platform PLATFORM] [--json]| Option | Description |
|---|---|
--file FILE |
Local JSON snapshot, or a profile .csv (platform,account_id,handle,profile_kind,keywords,field,value); no account login or network |
--platform PLATFORM |
Only this platform from the profile-audit registry |
--json |
Detailed machine-readable checklist with evidence and coverage |
reachweaver post-audit
Section titled “reachweaver post-audit”Offline platform-specific creative checks and comparable-age outcome summaries
reachweaver post-audit [-h] [--metrics-csv METRICS_CSV] [--owner-authorized] --file FILE [--platform PLATFORM] [--age-hours AGE_HOURS] [--tolerance-hours TOLERANCE_HOURS] [--min-posts MIN_POSTS] [--json]| Option | Description |
|---|---|
--metrics-csv METRICS_CSV |
Optional normalized owner-exported post observations; no DB/network writes |
--owner-authorized |
Confirm the CSV is your own authorized export |
--file FILE |
Same owner-supplied profile/post snapshot |
--platform PLATFORM |
Limit to one registered platform |
--age-hours AGE_HOURS |
Native metric post age 24..720 hours (default 168) |
--tolerance-hours TOLERANCE_HOURS |
Observation age tolerance 1..168 hours |
--min-posts MIN_POSTS |
Minimum matched-age posts per format cohort 3..30 |
--json |
Detailed no-write JSON results |
reachweaver seo-destinations
Section titled “reachweaver seo-destinations”Offline canonical landing page + competing-message check
reachweaver seo-destinations [-h] --briefs BRIEFS --type {release,paper,product,docs} [--project PROJECT] [--platform PLATFORM] [--campaign CAMPAIGN] [--suggest-for PLATFORM]| Option | Description |
|---|---|
--briefs BRIEFS |
Local SEO briefs JSON (docs/SEO-INTEGRATION.md) |
--type TYPE |
One of: release, paper, product, docs. |
--project PROJECT |
Restrict to briefs for this project |
--platform PLATFORM |
With –campaign: also emit a UTM link for the destination |
--campaign CAMPAIGN |
With –platform or –suggest-for: utm_campaign for the destination link |
--suggest-for PLATFORM |
Also suggest, per platform, how a post points at the destination: link and where to put it, length, keyword, tags, alt text; each with its basis (official/unverified/repo_policy/hypothesis). Repeat for several platforms |
reachweaver seo-content-check
Section titled “reachweaver seo-content-check”Discoverability checks on owner-supplied post texts (length, alt text, hashtags, UTM links, name spelling, cross-platform duplicates); offline unless –online link previews; read-only, never publishes
reachweaver seo-content-check [-h] [--name NAME] [--online] [--allow-origin ORIGIN] [--json] file| Option | Description |
|---|---|
file |
Local JSON: {“items”: [{id, platform, text, alt_text?, media_count?, link?, keywords?}], “names”?: […]} |
--name NAME |
Canonical spelling of your project/brand name; variants are flagged; repeat |
--online |
Also check each item’s link preview (Open Graph) and liveness: robots.txt first, one GET per distinct page |
--allow-origin ORIGIN |
With –online: also follow redirects to this https origin; repeat |
--json |
Full machine-readable report |
reachweaver landing-check
Section titled “reachweaver landing-check”SEO brief + campaign CTA landing-page checks; offline unless –online (GET own pages, robots.txt honoured, redirects inspected); never publishes
reachweaver landing-check [-h] --briefs BRIEFS [--campaign CAMPAIGN] [--online] [--allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]] [--json]| Option | Description |
|---|---|
--briefs BRIEFS |
Local SEO briefs JSON (docs/SEO-INTEGRATION.md) |
--campaign CAMPAIGN |
Campaign JSON whose CTAs and grounded claim phrases are checked |
--online |
Explicit GET of each canonical page: status, redirects, rel=canonical, title, Open Graph, noindex, lang, lexical claim phrases |
--allow-origin ALLOW_ORIGIN |
https origins a redirect may move to outside the brief’s registrable domain |
--json |
Machine-readable report |
reachweaver ai-visibility
Section titled “reachweaver ai-visibility”AI answer-engine and search visibility of your own pages: robots.txt per crawler (search, training, user fetch), noindex/nosnippet, canonical, JSON-LD, fediverse:creator, llms.txt as info; offline unless –online; never publishes
reachweaver ai-visibility [-h] [--briefs BRIEFS] [--page-id PAGE_ID [PAGE_ID ...]] [--url URL] [--html HTML] [--robots ROBOTS] [--online] [--allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]] [--json]| Option | Description |
|---|---|
--briefs BRIEFS |
Local SEO briefs JSON; –online checks only their canonical_url pages |
--page-id PAGE_ID |
Brief page_id(s) to check (offline: exactly one) |
--url URL |
Offline only: the address of the saved page (instead of –briefs) |
--html HTML |
Offline: saved HTML of the page |
--robots ROBOTS |
Offline: saved robots.txt of the site |
--online |
Explicit GET of each brief page, its robots.txt and /llms.txt (robots.txt honoured, redirects inspected) |
--allow-origin ALLOW_ORIGIN |
https origins a redirect may move to outside the brief’s registrable domain |
--json |
Machine-readable report |
reachweaver utm-link
Section titled “reachweaver utm-link”Offline canonical UTM-tagged destination URL; no network
reachweaver utm-link [-h] --platform PLATFORM --campaign CAMPAIGN [--content CONTENT] [--term TERM] [--allow-origin ALLOW_ORIGIN [ALLOW_ORIGIN ...]] [--sources CONFIG] url| Option | Description |
|---|---|
url |
|
--platform PLATFORM |
utm_source; a ReachWeaver platform id |
--campaign CAMPAIGN |
utm_campaign; slugged campaign id |
--content CONTENT |
utm_content; post id or campaign variant id |
--term TERM |
Optional utm_term |
--allow-origin ALLOW_ORIGIN |
Reject destinations outside these https origins |
--sources CONFIG |
sources-scan config; refuse a destination inside any visibility:private repository |
reachweaver creative-preflight
Section titled “reachweaver creative-preflight”Offline editorial checklist for 1-6 draft posts; not a reach prediction, never publishes (docs/CREATIVE-PREFLIGHT.md)
reachweaver creative-preflight [-h] --file FILE [--voice-profile PROFILE] [--json]| Option | Description |
|---|---|
--file FILE |
Owner-controlled JSON brief (reachweaver.creative-preflight.v1), at most 256 KB |
--voice-profile PROFILE |
Also add advisory voice-check findings per draft from a voice-profile file (docs/VOICE-CHECK.md) |
--json |
Machine-readable checklist, findings and limitations |
reachweaver voice-profile
Section titled “reachweaver voice-profile”Statistics of how you write, from your own past posts; writes one NEW private file, stores no post text (docs/VOICE-CHECK.md)
Offline. Reads posts you supply (–from FILE: .json, .csv, or text with posts separated by a line holding only —) or your published posts in the local database (–from-db, opened read-only) and writes a NEW 0600 JSON profile of plain statistics. Needs at least 10 posts; with fewer it reports insufficient_sample, writes nothing and exits 1.
reachweaver voice-profile [-h] (--from FILE | --from-db) [--account ACCOUNT] [--platform PLATFORM] --out NEW_FILE [--json]| Option | Description |
|---|---|
--from FILE |
Local file of your own posts |
--from-db |
Your published posts in the local database (read-only) |
--account ACCOUNT |
With –from-db: only this account’s posts |
--platform PLATFORM |
Only posts for this platform (unlabelled file posts count as this platform) |
--out NEW_FILE |
NEW profile file (mode 600); refused if it exists |
--json |
Print the profile as JSON |
reachweaver voice-check
Section titled “reachweaver voice-check”Advisory: compare a draft with your voice profile and a heuristic list of stock AI-style phrases; never blocks (docs/VOICE-CHECK.md)
Offline and advisory. Flags features of a draft outside the usual range of your own posts and phrases or patterns from a heuristic style list (not an AI detector). Findings are info or warn; it never blocks approval or publishing and exits 0 after a check. Without –profile only the tell list and generic checks run.
reachweaver voice-check [-h] [--profile PROFILE] (--text TEXT | --post-id POST_ID | --file FILE) [--platform PLATFORM] [--json]| Option | Description |
|---|---|
--profile PROFILE |
Profile written by voice-profile (optional) |
--text TEXT |
Draft text |
--post-id POST_ID |
A stored post (read-only database access) |
--file FILE |
UTF-8 text file with the draft |
--platform PLATFORM |
Compare with this platform’s length statistics (default: the stored post’s platform) |
--json |
Machine-readable findings |
reachweaver ai-label-check
Section titled “reachweaver ai-label-check”Advisory: which AI-content label each target platform asks for (sourced rules, EU AI Act Art. 50 note); never blocks (docs/AI-CONTENT-LABELS.md)
Offline and advisory. Reads a draft’s authorship (human, ai_assisted, ai_generated) and its media flags (realistic_synthetic, provenance.created_by) and prints, per target platform, label required / recommended / not required / unknown, what to tick in the platform’s own composer and the cited source. Exits 0 after a check, 2 on an input error. Not legal advice; rules change, re-verify the cited page.
reachweaver ai-label-check [-h] (--post-id POST_ID | --file FILE) [--platform ID] [--media MEDIA] [--authorship {human,ai_assisted,ai_generated}] [--eu] [--public-interest {yes,no}] [--editorial-review {yes,no}] [--json]| Option | Description |
|---|---|
--post-id POST_ID |
A stored post (read-only database access) |
--file FILE |
Draft, variant or campaign JSON (authorship and platform read from it) |
--platform ID |
Target platform(s), e.g. youtube,instagram; replaces the draft’s own platform; repeat or comma-separate |
--media MEDIA |
Media manifest JSON (realistic_synthetic and provenance per asset) |
--authorship AUTHORSHIP |
Who wrote the text (overrides the file; a stored post has none recorded) One of: human, ai_assisted, ai_generated. |
--eu |
Also check EU AI Act Art. 50 (you publish from, or for an audience in, the EU); secondary-sourced, not legal advice |
--public-interest PUBLIC_INTEREST |
With –eu: does the text inform the public on matters of public interest? One of: yes, no. |
--editorial-review EDITORIAL_REVIEW |
With –eu: did a person review or edit the AI text and hold editorial responsibility for it? One of: yes, no. |
--json |
Machine-readable advice |
reachweaver eu-review-evidence
Section titled “reachweaver eu-review-evidence”Read-only: who approved each published post, when, the approved hash, ledger line and authorship (EU AI Act Art. 50(4) human-review evidence; not legal advice)
reachweaver eu-review-evidence [-h] [--since WHEN] [--account ID] [--platform PLATFORM] [--post-id ID] [--limit LIMIT] [--format {text,json,markdown}] [--json] [--now NOW]| Option | Description |
|---|---|
--since WHEN |
Only posts published since 30d (days ago), YYYY-MM-DD or an ISO time |
--account ID |
Only this account |
--platform PLATFORM |
Only this platform id |
--post-id ID |
Only this post; repeat |
--limit LIMIT |
Newest published posts listed, 1..5000 (default 500) |
--format FORMAT |
text (default), json or markdown One of: text, json, markdown. |
--json |
Same as –format json |
--now NOW |
Reference time for –since 30d (ISO 8601 with timezone; default now) |
reachweaver media-check
Section titled “reachweaver media-check”Offline media manifest checks: headers, platform limits, alt text, captions, rights; never uploads
reachweaver media-check [-h] [--json] manifest| Option | Description |
|---|---|
manifest |
Media manifest JSON; asset paths are relative to it |
--json |
Machine-readable errors/warnings report |
reachweaver media-storyboard
Section titled “reachweaver media-storyboard”Offline: campaign brief -> vertical-video storyboard, SRT skeleton, alt-text placeholders, image specs, media manifest, safe-area check; generates no media
reachweaver media-storyboard [-h] [--campaign CAMPAIGN] [--out OUT] [--check STORYBOARD] [--duration DURATION] [--aspect ASPECT] [--video-targets VIDEO_TARGETS [VIDEO_TARGETS ...]] [--image-targets IMAGE_TARGETS [IMAGE_TARGETS ...]] [--locale LOCALE] [--fit {cover,contain}] [--safe-zones SAFE_ZONES] [--json]| Option | Description |
|---|---|
--campaign CAMPAIGN |
Campaign JSON (campaign contract or signal-brief scaffold) |
--out OUT |
NEW output folder (0700, files 0600); refuses existing output |
--check STORYBOARD |
Re-check an edited storyboard.json: safe areas, subtitle timing and unresolved placeholders |
--duration DURATION |
Video length in seconds, 10..180 (default 30) |
--aspect ASPECT |
Frame aspect W:H (default 9:16) |
--video-targets VIDEO_TARGETS |
|
--image-targets IMAGE_TARGETS |
|
--locale LOCALE |
BCP-47 subtitle/alt-text locale (default en) |
--fit FIT |
Assumed player fit for non-9:16 frames: centered crop (default) or letterbox One of: cover, contain. |
--safe-zones SAFE_ZONES |
Owner UI-overlay zones JSON overriding the built-ins (sourced from paid-ad specs, accessed 2026-10-09) |
--json |
Machine-readable result |
reachweaver media-cutlist
Section titled “reachweaver media-cutlist”Offline: one master video -> per-platform cut list (segments that fit each platform’s sourced duration limit, crop to the target aspect, subtitle format, a suggested ffmpeg command); opens and edits no media
reachweaver media-cutlist [-h] [--json] plan| Option | Description |
|---|---|
plan |
Cut-list JSON (docs/MEDIA-ASSETS.md#cut-list-media-cutlist) |
--json |
Machine-readable cut list |
