Docs
Surfaces

Support

Reach OXYGEN support through the web, CLI, MCP, or Slack, with native workspace chat available on enabled dev.

In production, Plain is OXYGEN's support system of record. In-app Chat, CLI, MCP, and connected customer Slack channels all create or continue Plain Threads; they are not separate ticket queues. One queue is not automatic issue-level deduplication: Retry connection reconnects the same in-app Chat, while a distinct CLI, MCP, or feedback filing can create another Thread.

On dev with native chat enabled, the corner chat bubble and oxygen feedback (oxygen_feedback on MCP) use a native workspace conversation instead of Plain. List existing conversations with oxygen chat threads list --json (MCP oxygen_chat_threads_list) or follow up through the returned native thread ID. The list works with read-only credentials. See Native support chat for file sharing, message history and the independent None/Dev/Prod release status. The rest of this page describes the Plain support experience. The support commands continue to operate on Plain Threads.

In the app

Select Support at the bottom of the sidebar, on any page, to open the support chat. It opens in the bottom-right corner, straight into your conversation with its history, so there is nothing to choose or fill in before writing the first message. The chat's own header collapses it again and can also grow it to a larger reading size.

/support opens that same chat. There is one support surface, in one place, on every screen, and the Support row carries a count when support has replied and you have not read it yet.

Past conversations are all there: the Back arrow in the chat header leaves the current conversation and lists every one you have had with us, open and closed, newest first. Select one to reopen it, or start a new one from the same screen.

If the secure connection fails, the Support row says so and opens Support chat is offline: Retry connection reconnects the same conversation, and the panel also gives the support email address and oxygen support file. Retrying never creates another ticket.

If Retry keeps failing, continue through the CLI section below without blindly starting again: list open Plain Threads first, continue the same conversation when it already exists, and start one only when no matching Thread exists. This stays in the same Plain queue; it does not introduce a fallback support system.

Chat is bound to your signed-in user and active OXYGEN organization. Every chat conversation reaches support as a question; the team re-classifies bugs and feature requests during triage, and oxygen support chat --category sets the type exactly when you would rather say it yourself.

CLI

Check existing conversations so the same issue is not reported twice:

oxygen support list --status open --json

Start a conversation with one message. Plain still needs an internal Thread title, but OXYGEN derives it from the first non-empty line instead of asking you to write ticket metadata:

oxygen support chat \
  --message "The dedicated IP is not being assigned. Here is what I observed…" \
  --category bug \
  --json

Continue the returned Thread without creating a separate titled filing:

oxygen support chat <thread-id> --message "Here is the additional evidence." --json

oxygen support reply <thread-id> --body ... remains an equivalent explicit reply command. Use the structured filing command only when an explicit subject and operation/run metadata materially help triage:

oxygen support file \
  --subject "In-app support chat will not open" \
  --body "What happened, what you expected, and what you already tried." \
  --category bug \
  --severity normal \
  --json

Both commands are real writes to Plain immediately. They cost zero credits but have no preview mode, so review the message or structured subject, body, category, and severity before running one. --category takes question, bug, feature_request, billing, security_data, configuration, agency_directory, or other; --severity takes low, normal, or high. With native chat disabled, including production, oxygen feedback creates the same canonical Plain Thread — do not submit one issue through both paths. Sharing the Plain queue does not merge different filings automatically; continue the existing chat when the issue already has a Thread.

Every new CLI or MCP support ticket needs an opening message. A subject alone is rejected, so the team receives the issue description in the Plain conversation. For a structured CLI report, you may explicitly attach a local agent transcript with --transcript-file <path>, --session-id <id>, or --include-transcript (most recent session). The CLI sends a bounded, best-effort redacted copy; review the session before sharing because it may include other private context. A selected file can be UTF-8 text or JSONL; the CLI does not validate JSONL. It keeps up to the last 2 MB of the file, drops older content, and redacts common credential patterns before uploading. Redaction cannot catch every secret. To share only a passage you pick, pass it as --transcript-text <text> (1–200,000 bytes, redacted the same way) on oxygen support file, or on oxygen support chat when it starts a new conversation; --no-transcript sends none. The hosted MCP tools cannot read a local file. With your approval, oxygen_feedback and oxygen_support_ticket_create can attach only a selected conversation excerpt through transcript_text (up to 200,000 UTF-8 bytes).

Track or continue the returned Thread with:

oxygen support get <thread-id> --json
oxygen support reply <thread-id> --body "Additional context" --json

OXYGEN-created conversations are regular Plain Chat Threads, including requests filed from the CLI or MCP. Support replies in that same conversation. How you hear about a reply depends on where the conversation started:

  • In-app chat: if you have not read the reply after five minutes, Plain emails your verified address. The email's Reply button returns to https://www.oxygen-sales.com/support.
  • CLI, MCP, the web form or oxygen feedback: Plain sends no email for these, so OXYGEN emails you each reply as soon as it is sent. The email links the conversation at https://www.oxygen-sales.com/support/<thread-ref>, where you read and answer it; oxygen support reply works too. Answering the email itself still reaches support, but as a separate conversation.

If a CLI/MCP attempt returns plain_headless_portal_unavailable, its error includes the Plain Thread ID and reference because the shell already exists but the message did not arrive. Do not file it again. Continue in the in-app chat or email [email protected] and include that Thread reference so support can reconcile the fallback. A direct email is correlated recovery; it does not claim to append itself to the empty Chat shell.

OXYGEN emails only about replies Plain does not email about itself, so no reply is announced twice.

State-changing responses return the oxygen-agent.com/support/<thread-id> deep-link. Plain remains authoritative for status, priority, assignment, messages, notes, and resolution.

MCP and Slack

oxygen_support_ticket_create, oxygen_support_tickets_list, oxygen_support_ticket_get, and oxygen_support_ticket_reply call the same contract as the CLI. An assistant must show the exact filing payload and obtain confirmation before creating the zero-credit Thread. Connected customer Slack channels remain native Slack conversations in Plain. A mapped channel uses its exact OXYGEN Tenant and ingestion policy. An enabled channel that is not mapped still reaches the support team for manual triage, but OXYGEN does not guess its organization or run org-aware automation until the exact route is mapped.

For a product failure, include the operation or error code and any relevant run IDs, table IDs, or OXYGEN deep-links (--operation, --error-code, --run-ids, --table-ids, --deep-links). Never include API keys, secrets, or raw credentials.

On this page