OXYGENOxygen/ Docs
Workspace

Workspace context

The typed company profile and typed assets every AI action resolves against, and the purposes that require each section.

Workspace context is the typed half of the Knowledge Graph: a structured company profile plus typed assets. Assets and wiki pages are the same rows in the same store — oxygen context assets upsert and oxygen knowledge page upsert are two names for one write, and /context redirects to /knowledge.

Profile sections

Sections are merged independently, so an update touching only icp leaves the rest alone.

SectionFields
companyname, domain, category, geography
offeringproducts, value propositions, use cases
icptarget accounts, personas, disqualifiers
marketcompetitors, alternatives, segments
gtm_stackCRM, outbound tools, channels
customtone, user preferences, constraints

Asset types

Type defaults to other on create.

Asset kindPurpose
playbookOperational guides for a GTM motion
strategyHigh-level GTM approach
campaignCampaign brief, target segment, offers, and copy direction
positioningMessaging, differentiators, objections, and proof points
brandBrand guidelines; the canonical one is injected into AI copy generation
voiceHow you sound; the canonical one is injected into AI copy generation
personaBuyer or user profile
competitorNotes on a market rival
message_playbookOutreach message patterns; the canonical one backs live outreach
research_noteAd-hoc research output (e.g. from onboarding)
otherFlexible supporting context

--default (and oxygen context assets set-default) pins an asset as the canonical instance of its type, and canonical brand, voice, and positioning are injected into AI copy generation. The canonical instance of voice, brand, positioning, playbook, or message_playbook is live copy, so it changes only through an approved proposal, whether the asset is a file-backed page or not. Editing, retyping or archiving it does not save — it files an approval proposal and fails with knowledge_approval_required. --default on one of those types saves the asset unpinned and returns pin.ok: false with the proposal_id to approve (oxygen knowledge proposals approve <id>); set-default files the same pin proposal. Other types pin at once. See the approval gate. Unpinned drafts of those types edit freely.

Resolving

oxygen context resolve --purpose general --require-ready --json

The resolver returns a task-specific, revision-pinned bundle. Each purpose requires different sections, and --require-ready turns a gap into a conflict error instead of a partial bundle:

--purposeRequired sections
onboardingnone; returns available research and current context
generalcompany, offering, icp, market, gtm_stack
lead_sourcingcompany, offering, icp, market, gtm_stack
workflow_designcompany, offering, icp, gtm_stack
outbound_copycompany, offering, icp
qualificationoffering, icp, market

It also carries up to --max-assets assets (default 10, hard cap 50). If it returns context_missing or reports missing_required_context, fill the named sections before resuming the work that needed them.

With --purpose onboarding, the result also includes workspace, a read-only snapshot of what already runs and what is connected. campaigns counts sequences (and how many are active), workflows (and how many are enabled), signal sources, posts and agents; data counts tables, CRM records and objects, and wiki pages; access counts LinkedIn accounts that are not disconnected and sending mailboxes, and names connected integrations. It contains counts and integration names only and spends no credits. A count Oxygen could not read is null and is listed in workspace.degraded, so it is never shown as zero. It also includes plays: workspace, blank when nothing is connected or running yet (the agent then skips the warm-lead reads) and has_sources otherwise; leads, the free reads that find your warmest leads in order (open deals, unanswered interested replies, recent visitors, viewers, engagers and followers, your captured LinkedIn network, people posting about the problem, then net-new ICP matches), each with its CLI command and MCP call; the featured plays from the Recipe catalog; and the ranked catalog search.

The onboarding block holds the research brief, the GTM hypotheses (ICP, offers and opportunities, or research_note when the research page lists hypotheses without sorting them), unknowns and the cited evidence. With no hypotheses, hypothesesReason says why: no research yet, a later profile change took precedence, or the research stated none. A brief that is too long is shortened between words and ends by naming where the full text is: the company profile or the company-research Knowledge page. context.available gives each brand, positioning and voice page a state of canonical, draft or active; only canonical copy grounds AI-written copy, and context.missing names each type that has none. In the ChatGPT app, assets carry each page's summary instead of its body, and plays keeps only the hint and the featured plays.

Bootstrapping

The company domain entered at workspace creation starts one background research pass, funded by Oxygen. A company with no website enters its LinkedIn company page instead, and the pass starts from that page. It gathers LinkedIn company and website evidence, attempts a bounded match for the signup creator, and saves company facts with a cited research note. Suggested ICPs, offers, and opportunities remain separate hypotheses. Unresolved person matches do not block company research.

Your agent uses this context like a GTM consultant and takes you to a launched campaign. It first tells you in a few lines what the research found about your company, drafts your ICP and asks what you want to build first. Then it guides the Get started steps one at a time: your first leads (from your warmest people when you have connected sources, such as customers, open deals, unanswered replies, your network and engagers, or else from free searches of your ICP or a list you already have), a first sequence, the LinkedIn account or mailbox it sends from, and the launch. In a new workspace with nothing connected it skips the warm-lead search and answers in a few lines. Plays come after, to keep your list full. You can correct its assumptions as you work; corrections update durable context and take precedence over research. The oxygen-onboarding skill guides this conversation, while oxygen-knowledge carries the deeper context-bootstrap procedure.

oxygen skills install --agents codex claude-code cursor --skill '*' --json
oxygen context resolve --purpose onboarding --json
oxygen knowledge bootstrap status --json

For an explicit company-research rerun, oxygen knowledge bootstrap previews the provider plan, costs, and writes without spending. Manual execution requires --live --max-credits <credits> and uses workspace credits; an existing marker also requires --force. It writes company facts and separate hypotheses, preserves the offering, ICP, and market profile sections, and does not repeat the automatic creator lookup. Research does not authorize outreach or execute a suggested play.

Working with context

oxygen context profile get --json
oxygen context profile update \
  --data-json '{"icp":{"segments":["B2B SaaS at $1M-$20M ARR"],"personas":["Founder","Revenue leader"]}}' \
  --summary "Refine ICP" \
  --json
oxygen context assets list --type playbook --json
oxygen context assets search --query "objection handling" --json
oxygen context assets upsert --type playbook --title "Outbound Q1" --body "..." --json
oxygen context assets archive <asset-id> --json

None of these spend credits or call a provider.

  • Knowledge Graph — the same store as wiki pages, with revisions, search, the link graph, and the proposal queue.
  • Blueprints — a blueprint declares the context keys it expects (required_context_keys), reported by blueprints preflight.

On this page