OXYGENOxygen/ Docs
Workspace

Tags

One label vocabulary across sequences, tables, workflows, wiki pages, recipes, posts, inbox conversations, CRM records, sending identities, domains, projects, sender profiles, and phone numbers.

Tags link a campaign's parts across primitives. Tag the sequence, its lead table, the workflow feeding it, the inbound conversations it produces, the target-account records, and its learnings wiki page with the same label, and one read returns the whole footprint. Tags are the campaign handle — there is no separate campaign object.

Tags are normalized (lowercase, trimmed, deduplicated, up to 50 per item) and have no registry — a tag exists exactly as long as something carries it. Chip colors derive from the label, so the same tag looks the same everywhere.

Browse

oxygen tags list           # every tag with per-primitive counts, most-used first
oxygen tags get q3-outbound  # everything carrying the tag, deep-linked

The web view lives at /tags; each tag page groups its items by kind. Tag chips filter the sequencer, publishing queue, and unibox lists; ?tag= deep-links into a pre-filtered view.

Write

Tags are written on each primitive's own surface:

oxygen sequences create ... --tags q3-outbound,saas-founders
oxygen sequences update <sequence> --tags q3-outbound   # replaces the set; "" clears
oxygen tables tag <table> --tags q3-outbound
oxygen workflows tag <workflow> --tags q3-outbound      # org metadata; no new revision
oxygen knowledge page upsert <slug> --tags q3-outbound ...
oxygen publishing tags set <post> --add q3-outbound     # add/remove deltas
oxygen inbox tag <conversation> --add q3-outbound       # add/remove deltas; --channel linkedin/whatsapp for DMs
oxygen crm tag companies <record> --add tier-1          # add/remove deltas (run `oxygen crm setup` once to add the attribute)
oxygen mailboxes tag <mailbox> --tags q3-pool           # pool sending identities under a campaign
oxygen senders tag <sender> --tags q3-pool
oxygen blueprints tag <blueprint> --tags q3-outbound    # retag a saved recipe
oxygen domains tag acme.com --tags q3-pool             # sending domains (survives `domains sync`)
oxygen projects tag outbound --tags q3-outbound        # table projects
oxygen senders profiles tag <id> --tags q3-pool        # a whole sending identity in one edit
oxygen voice numbers tag +14155550142 --tags q3-pool   # dialing numbers

Feeds carry no tags of their own: a live table's capture is part of the table, so oxygen tables tag is where a feed joins a campaign.

Most list commands accept --tag to filter: sequences, publishing posts, tables, workflows, inbox, messages, and blueprints — plus every sending-identity list, so you can scope a whole pool to one campaign:

oxygen mailboxes list --tag q3-pool
oxygen domains list --tag q3-pool
oxygen senders list --tag q3-pool
oxygen senders profiles list --tag q3-pool
oxygen voice numbers list --tag q3-pool

--tag takes a comma-separated list and matches any of them, not all.

One special case: an archived sequence still accepts a tags-only update. Finished campaigns are exactly the learnings corpus tags exist to link — tag them freely.

In the web app

Anywhere tags appear there is a small + — including on items with no tags yet. It opens a picker listing the tags your workspace already uses (with how often each is used), filtered as you type. Pick any number of them; if what you type doesn't exist yet, choose Create "…" and it's added on save. On list rows, clicking an existing tag chip still filters the list; the + is what edits.

Your changes save when you close the picker. If someone (or the AI Inbox Tagger) adds a tag while you have it open, that tag is kept — the picker only applies what you actually changed.

Filtering the sending pool

On Sequencer → Accounts, every tab (Senders, LinkedIn, Email, WhatsApp, Phone numbers) has a Tags dropdown next to its search box. Pick one or more tags to narrow the list to anything carrying any of them; clicking a tag chip on a row does the same thing, and clicking it again removes it.

The Email tab lists inboxes under their domains, and both can be tagged. Tagging the domain is the shortcut: filter to that tag and the domain shows up with all of its inboxes, so you don't have to tag twenty inboxes one at a time. Combine the tag filter with another filter (say Provider) and it narrows to inboxes proper — a tagged domain with no matching inbox drops out.

Auto-tagging inbound conversations

The AI Inbox Tagger (one of the workspace agents on /agents) classifies every new inbound conversation against a tag allowlist you configure and applies the matches automatically — riding the same analysis call that already categorizes replies, so it adds no model cost. It only ever adds tags, and it never re-adds a tag you removed from a conversation.

oxygen inbox auto-tagger set --enabled --tags "pricing-question,partnership,support-request"
oxygen agent get inbox-auto-tagger    # state + recent tag applications

Rename a tag everywhere

oxygen tags rename q3-outbound q3-founder-launch          # preview: per-kind counts, no writes
oxygen tags rename q3-outbound q3-founder-launch --apply  # execute

Rename touches every carrier — archived items included, so an un-archive never resurfaces the old name — and is safe to re-run.

Semantics worth knowing

  • Whole-set vs delta is per-surface, and the flag names it: --tags replaces every tag on the item (--tags "" clears them) with no preview step, so read the current tags first when you mean to edit rather than overwrite. Exactly three surfaces take --add/--remove deltas instead — publishing posts, inbox conversations, and CRM records — so the auto-tagger and your edits merge instead of clobbering each other. Every other surface is whole-set, projects, sending domains, sender profiles and phone numbers included.
  • Archived tables, wiki pages, recipes, and conversations drop out of the tag index; archived sequences stay in. Disabled mailboxes, disconnected senders, archived sender profiles and released phone numbers drop out too.
  • The unibox's warmup/DMARC/bounced markers are system badges — derived state, not tags.
  • Tags carry no approvals and spend no credits — they are workspace metadata.

On this page