SKILL.md
OXYGEN LinkedIn Marketing
Route each part of “LinkedIn” to its owner instead of treating it as one generic tool: Posts, Signals, Publishing, Sequences, Tables, and the connected LinkedIn transport.
Motion map
- Draft or inspect a broadcast artifact: Posts.
- Schedule, review, approve, and dispatch a post: Publishing.
- Read comments/reactions on an owned post: Posts. Aggregate performance is free and local:
oxygen publishing analytics summary --channel linkedin --range 30d --json.
- Convert owned-account viewers, followers, connections, or post engagement into durable events: Signals.
- Capture profile viewers, followers, connections, or one watched post:
oxygen linkedin intent setup; idempotent and contacts nobody.
- Auto-enroll captured intent:
oxygen linkedin intent autoenroll --account <ref> --sequence <ref> --json; it previews by default and can provision rotating own_posts capture. Read [recipes/inbound-network-feed.md](recipes/inbound-network-feed.md) before approval.
- Start a new DM or run a capped follow-up program: Sequences.
- Reply in an existing LinkedIn conversation: Messages/Unibox.
- Mutual/shared connections with a profile:
oxygen tools get linkedin.users_get --json, then run a no-bill read with the sender account id and notify:false; unavailable is not zero. This is the connected-account exception.
- Research public/third-party profiles, companies, posts, comments, reactions, or engagers: native cookieless
scraper.* operations, not the connected account.
Use oxygen capabilities search "<motion>" --json, then hydrate its command. Known-post engagers use engagement harvest; other public research starts with oxygen tools search "public LinkedIn <intent>" --json, then exact tools get.
Public comments and replies
Public comments on owned posts are Posts data, not Messages/Unibox threads. Work the durable local queue — oxygen publishing comments list --view unanswered --json — and check emptyqueueiscurrent before trusting an empty one. Answering publicly is two steps: a no-call publishing comments reply preview, then publishing comments approve, the sole public write, bound to that preview's immutable action id and content hash. Never approve for the user or retry effectunknown. Queue rules and the exact command pair: [recipes/comment-to-dm-funnel.md](recipes/comment-to-dm-funnel.md).
Common composed motions — load only the relevant one
- [recipes/founder-posting.md](recipes/founder-posting.md) — grounded founder content and post analytics.
- [recipes/comment-to-dm-funnel.md](recipes/comment-to-dm-funnel.md) — owned-post engagers into a warm Sequence.
- [recipes/profile-viewers-outreach.md](recipes/profile-viewers-outreach.md) — WVMP signals and bounded outreach.
- [recipes/inbound-network-feed.md](recipes/inbound-network-feed.md) — captures, the standing auto-enroll grant, warm Sequence.
- [recipes/linkedin-research-pack.md](recipes/linkedin-research-pack.md) — cookieless personalization research.
- [recipes/competitor-engager-monitoring.md](recipes/competitor-engager-monitoring.md) — watchlist → engager harvest → ICP scoring.
Read [guides/safe-limits-doctrine.md](guides/safe-limits-doctrine.md) before any account action: sender readiness, daily caps, pacing, sender continuity, suppressions, and reply-stop are account safety rules, not prompt suggestions.
Execution posture
Public LinkedIn research is a paid read and needs a bounded preview/cap. Publishing and outreach are external writes: show the exact account, content/recipients, cadence, and credit ceiling before approval. Monitoring runs as hosted Workflows or signal subscriptions, never local cron. Return Post, Publishing, Signal/Table, Sequence, and run deep-links so the user can inspect every stage.