OXYGENOxygen/ Docs
Surfaces

Support

Reach OXYGEN support through the web, CLI, MCP, or Slack in one Plain queue and avoid duplicate filings.

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 reconnects the same in-app Chat, while a distinct CLI, MCP, or feedback filing can create another Thread.

In the app

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

Settings → Support and /support expand that same widget. There is one support surface, in one place, on every screen, and the control 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 corner control says so and Retry is the only recovery control. It returns after each failed connection attempt and reconnects the same conversation; it never creates a fallback ticket or sends the request through a second system.

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. 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.

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. Your support team replies to that same conversation from Plain Inbox or the staff support CLI; the reply appears in the embedded Chat immediately. If the customer has not read it after five minutes, Plain sends its native unread-message email to the customer's verified address. The email's Reply button returns to https://oxygen-agent.com/support.

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 priority@oxygen-agent.com 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.

The shared priority@oxygen-agent.com Plain Email channel must also be enabled. It is separate from Tim's tim@oxygen-agent.com teammate login and lets a customer reply directly to the notification email without creating or losing a second conversation: Plain appends that email response to the existing Thread. OXYGEN does not send a duplicate custom email for the same Chat reply.

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