Knowledge Graph
Run the workspace wiki: write wikilinked pages, pin the canonical copy that grounds AI drafts, and clear the approval queue those pins create.
Each wiki page has a kebab-case slug (founder-voice), a type, tags, a Markdown body, and a revision number. [[wikilinks]] in the body become graph edges. Every create, edit, pin, and filing appends to a log. Search is full-text and accepts quoted phrases, OR, and -exclude.
Pages and context assets are the same rows in the same store: oxygen knowledge page upsert and oxygen context assets upsert write to it under two names, and /context redirects to /knowledge.
Seed it
A new workspace self-seeds a starter set on first touch: a start-here guide, a conventions page, and stub hubs (icp, positioning, offers, competitors, playbooks, campaign-learnings, decisions), all wikilinked. Re-run it any time — it never overwrites your edits.
oxygen knowledge seedIn the web app
Sidebar: Knowledge → Knowledge Graph, at /knowledge. The nav item is beta-gated — it only appears after an admin turns on Beta features in organization settings (/settings#/beta-features). Every route below works by direct URL whether or not that toggle is on.
| Route | What it is |
|---|---|
/knowledge | "Second brain": pages grouped by type, plus New page |
/knowledge/pages/new | Title, Slug, Type, Summary, Tags, Body → Create page |
/knowledge/pages/<slug> | The page. Click the body to edit; it commits on blur |
/knowledge/graph | The force-directed graph |
/knowledge/log | "Knowledge activity": every create, edit, seed, and agent filing |
/knowledge/proposals | The approval queue |
Slug auto-fills from the title until you type your own.
The graph has a Search pages… box that centres on a hit, a type legend and tag filter, Focus (collapse to the selection's neighbourhood), Orphans, and Fit. It loads 500 pages and caps at 2,000; when the wiki is bigger than the loaded budget a banner reads "Showing N of many pages." with a Show 250/500/1000/2000 picker. Clicking a node opens its page; dashed nodes are wikilinks with no page yet.
Read and write from the CLI
oxygen knowledge index # every slug, one-liner, tags, link degree
oxygen knowledge search "icp OR positioning" --limit 5
oxygen knowledge page get founder-voice
oxygen knowledge page list --type competitor --status active
oxygen knowledge lint # orphans, dead ends, unfilled stubs, missing canonicalsWrites spend no credits and call no provider:
oxygen knowledge page upsert \
--slug founder-voice --title "Founder voice" --type voice \
--summary "How we sound" --body "Short sentences. See [[positioning]]."Add --expected-revision <n> to fail the write if the page moved under you. oxygen knowledge page revisions <slug> lists history; oxygen knowledge page revision <slug> <n> reads one snapshot back.
The approval gate
Editing or pinning the canonical page of a sensitive type does not save your change. It files a proposal.
Sensitive types are voice, brand, positioning, playbook, and message_playbook. Only the pinned instance is gated — unpinned drafts of those same types edit freely, because nothing customer-facing reads them yet.
The CLI returns error code knowledge_approval_required carrying the proposal id. The web editor toasts "Change proposed — pending approval" and keeps your text. Clear the queue with:
oxygen knowledge proposals
oxygen knowledge proposals approve <id_or_slug> # --force if the page moved since
oxygen knowledge proposals reject <id_or_slug>Or at /knowledge/proposals, where each card shows the target page, the reason, the changed fields, and Approve / Reject.
--approved on page upsert and page pin does not bypass this gate. The flag is accepted for compatibility and ignored — the proposal is filed either way.
What grounds your AI copy
Pinned canonical voice, brand, and positioning pages are injected into AI copy generation — table AI columns, message drafts, reply drafting. That is what the gate is protecting.
oxygen knowledge page pin founder-voice # sensitive type → files a proposalRetrieval of the rest of the wiki alongside those pins is built but switched off in production pending review, so pinning is the live path today.
Synthesize (spends credits)
oxygen knowledge synthesize distills auto-filed outreach outcomes into a learnings page, or sent messages into a voice guide. It previews by default — but the preview is the AI call, so it spends credits and reports credits_used. --approved on its own runs the call a second time before writing; pass --body with the text you reviewed to save it verbatim and skip that second charge.
oxygen knowledge synthesize --kind campaign_learnings # preview + cost
oxygen knowledge synthesize --kind campaign_learnings --approved --body "…" # write what you readUnattended synthesis is off by default and spend-capped: oxygen knowledge agent set --enabled --cadence-hours 24 --max-credits-per-day 100. It only writes working learnings pages; canonical changes still queue as proposals.
Local mirror
Optional, for editing in your own editor. oxygen knowledge sync clones the pages as Markdown under your CLI config directory, push --dry-run shows what would go back, status reports staleness and quarantined conflicts, and purge deletes the mirror. Pushed edits to canonical pages become proposals, same as everywhere else.
For agents
oxygen_knowledge_index, _search, _page_get, _page_upsert, and _log_append ship in the default MCP tool set. Everything else — graph, lint, pin, seed, page and log listing, revisions, the agent config, and the proposal tools — needs a connection with ?toolset=knowledge. Per-tool detail: MCP tool reference.