OXYGENOxygen/ Docs
Data

LinkedIn posts and public comments

Read posting performance and operate the durable public-comment queue without confusing local state, live provider reads, or private inbox messages.

Oxygen stores posts published through its LinkedIn Publishing path as Posts data. Their latest cumulative metric snapshots power Publishing → Performance; their public comments flow into a durable, oldest-first queue at Publishing → Comments.

Public comments are not private LinkedIn inbox messages and are not workspace review notes. A public comment and its thread belong to Posts. A private DM becomes a Message in Unibox. Draft text, assignment, and notes attached to a public comment are local workspace state and are never posted by saving them.

Performance

oxygen publishing analytics summary --range 30d --json
oxygen publishing analytics post <post-id> --json

The summary covers LinkedIn posts published through Oxygen. Unsupported provider metrics remain null, not zero. Read the response's metric coverage and freshness before comparing totals; the current connected-account rail supplies reactions, comments, and reposts but not impressions, saves, or sends.

Durable comments queue

oxygen publishing comments list --status needs_reply --json
oxygen publishing comments get <comment-id> --json

Opening this queue is a local tenant-database read. It uses 0 Oxygen credits and makes no provider call. A background worker polls each eligible Oxygen-published post with a six-hour freshness target.

Every list response includes empty_queue_is_current beside the count and a freshness block:

FieldMeaning
statuscurrent, awaiting_first_sync, partial, stale, backing_off, or no_targets
sync_target_postsEligible Oxygen-published posts the worker should poll
completed_postsPosts that have completed at least one pass
current_postsPosts with a successful pass inside the six-hour target
failed_postsPosts whose latest pass failed and is waiting to retry
last_completed_atLatest successful pass, or null before the first success
next_sync_atNext scheduled attempt or retry
last_errorExact provider/quota failure when polling is backing off

If an empty response has empty_queue_is_current: false, do not conclude that LinkedIn has no comments. Wait for next_sync_at and inspect last_error. There is deliberately no manual sync button or retry command: a retry loop could consume the same LinkedIn account quota that caused the backoff.

Local queue versus live provider reads

oxygen posts get|comments|reactions are a separate low-level path for one known LinkedIn post. Each is a live provider read. It uses 0 Oxygen credits but consumes the connected sender's metered account-read allowance, and it does not populate or refresh the durable queue. Do not use that path when a task forbids provider calls.

Safe public reply flow

oxygen publishing comments update <comment-id> --draft "Exact reply" --json
oxygen publishing comments reply <comment-id> --text "Exact reply" --json
oxygen publishing comments approve <action-id> --content-hash <sha256> --approved --json

update saves only local workspace state. reply freezes an exact unsent preview and returns its immutable action id plus SHA-256 content hash; it makes no provider call. Only approve performs the public LinkedIn write, and only for the newest preview with the exact hash. Never retry an effect_unknown action automatically—open the returned comment deep-link and verify the public thread first.

The same provider-neutral contract powers CLI, MCP (oxygen_publishing_comments), its widget, and the web workspace. LinkedIn is the only admitted channel today; later channels must pass the same capability, pagination, freshness, idempotency, approval, and receipt contract before appearing.

  • Approvals — the external-write gate.
  • CLI and MCP — the two execution surfaces.
  • Sequences — private outreach after a commenter becomes a warm lead.

On this page