SKILL.md
OXYGEN Sequencer
Sequences own outreach initiation and cadence, including sender binding, pacing, suppression, reply-stop, retries, provider IDs, and provenance.
Boundary
- New LinkedIn conversation, even one person/one message: Sequence. The one-step gateway is
sequences send/oxygensequencessend. - Multi-recipient or multistep email, LinkedIn, WhatsApp, call, or CRM-task outreach: Sequence.
- Reply in an existing email/LinkedIn/WhatsApp thread: Messages/Unibox.
- New direct email with no cadence: Messages via
email send. - Deterministic automation around a campaign: Workflow outside, Sequence inside. Workflows may enroll any Sequence status; draft/paused recipients stay pending. They never send raw provider messages.
Confirm this route with oxygen capabilities search "<outreach goal>" --json, then hydrate the selected command with oxygen commands get or MCP schema discovery.
Objects to inspect
- Sender pool: accounts/mailboxes, health, warmup, channel limits, and stable person-to-sender binding. Prefer sender profiles (one person's accounts/inboxes, name, and photo), so each lead hears from the same human across channels. Profiles also supply the durable identity for
managed-inboxes --sender; never guess names or use a temporary photo (oxygen-email-infra). - Definition/version: ordered steps, delays, variants, conditions, tracking, send windows, and channel fallbacks.
- Enrollment: recipient identity, mapped variables, exclusions, suppressions, prior-contact rules, and tags.
- Dispatch policy: caps, ramp, rotation/failover, ESP matching, bounce/reply-stop, and the visible footer.
includeunsubscribelinkis opt-in; absent means off. - Run state: previews, sends, skips, failures, replies, costs, and reconciliation evidence.
pause/resume is reversible. Permanently retire only a paused Sequence: delete previews; repeat with --approved. CLI creates no archive; legacy archived rows stay readable/taggable.
HubSpot saved-list enrollment
For recurring HubSpot segment enrollment use sequences hubspot-list-import lists|configure (MCP oxygensequenceshubspotlists / ...hubspotlistimport). Preview first; live needs approval plus its fingerprint. The Workflow applies complete DNC before enrollment and keeps draft/paused recipients pending. Never recreate paging, storage, DNC, or enrollment locally — use the HubSpot runbook.
Performance attribution
Native-email campaign facts:
sequences analytics --range 30d --json: all campaigns plusanalytics.emailAttribution.byMailbox,.byDomain, and.unattributed.sequences analytics --sequence <sequence> --json: sender/copy performance; unattributed replies stay in campaign totals.sequences contacts <sequence> --contact-state <stage> --json: variables, sender, status, and highest engagement stage.sequences variants <sequence> --json: generic action/base rollup, not copy-only performance.sequences events <sequence> --json: per-lead ledger withmailboxEmail/sendingDomainwhen preserved.
Mailbox/domain rows report sent, replied, positive, bounced, failed, rates, reply types, and campaign counts. Facts without preserved sender identity stay unattributed; never infer a mailbox from the configured pool.
This is narrower than Messages: messages stats covers Unibox conversations; mailboxes get/domains get|list cover infrastructure. Direct or provider-owned sends gain campaign/mailbox attribution only after telemetry reaches Oxygen's native action/message ledgers, not merely when an integration is connected.
Safe run loop
- Inspect channel and sender readiness; do not treat “connected” as “safe to send.”
- Create or revise the hosted Sequence definition.
- Preview enrollment and dispatch with the exact recipient scope, sender pool, exclusions, credit estimate, and
includeunsubscribelinkposture (absent = off). - Show both ceilings — the Sequence's lifetime budget and the current live-run cap; neither substitutes for the other.
- Obtain explicit approval for the external write and bounded spend.
- Enroll, then start. Keep the returned run and Sequence deep-links.
- Monitor failures, stops, and sender health. Reconcile ambiguous effects; use
sequences recover-capacityonly for its previewed, definitive no-effect scope.
Stale scheduling deferrals: pause, preview sequences retry-deferred, apply with --approved, then resume. Email actions refresh their saved window; recovery sends nothing or bypasses window, spacing, quota, suppression, or cap checks.
Never bypass Sequences with raw LinkedIn chat/provider actions, local loops, or a generic integration action. Never resend an ambiguous LinkedIn action until reconciliation proves the provider did not accept it.