OXYGENOxygen/ Docs
Knowledge

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 when it is provisioned: a start-here guide, a conventions page, and nineteen draft stub hubs covering who you sell to (icp, personas, customers), what you say (positioning, voice, brand, messaging, objections), what you sell (offers, competitors), how you run it (playbooks, playbook-outbound, playbook-inbound, playbook-nurture, qualification), and what you learn (campaign-learnings, metrics, research, decisions) — all wikilinked. Stubs ship as drafts, so they never ground AI copy until you fill them and set status: active. Re-run it any time — it never overwrites your edits.

oxygen knowledge seed

In the web app

Open Knowledge under Data in the sidebar, at /knowledge. No beta opt-in is required.

RouteWhat it is
/knowledgeFolder and file explorer on the left; the knowledge graph opens by default
/knowledge/pages/newCreate a knowledge file with a title, folder, and Markdown content
/knowledge/pages/<slug>Read and edit the file with automatic saving; deleted files show their deleted state
/knowledge/graphThe force-directed graph
/knowledge/logActivity history grouped by day, with affected files and older activity
/knowledge/proposalsThe approval queue

Expand folders with their arrows to browse nested folders and files. Select a folder to see its contents, or a file to read and edit it on the right; the graph is hidden while viewing content. Choose Knowledge graph in the explorer to return to the graph. New folder and New file create persistent workspace items, including empty folders. Drag files or folders onto another folder to move them; hold over a collapsed folder to expand it. Drop on Files to move to the root. The row menu also offers Move to. For keyboard drag-and-drop, focus the drag handle, press Space, choose a destination with the arrow keys, then press Space to move or Escape to cancel.

Files open in a continuous rich text editor. Select text to format it, or type / to insert headings, lists, tasks, tables, quotes, code, and dividers. Edit the title directly and select tags beneath it. Changes save automatically; the save status shows when they are safe. Canonical copy instead offers Propose changes. A failed save keeps your draft in the current browser tab for recovery. Advanced Markdown that cannot be represented safely stays available as Markdown source.

Choose Delete file on an open file and confirm its deletion to remove it from active browsing. Wait for edits to finish saving first; unsaved changes block deletion. Oxygen archives the file and retains its content and revision history. Deleting canonical copy files a proposal and leaves the file in place until approved. Knowledge files no longer show a comments panel; existing threads remain accessible through their direct links and the collaboration commands.

Slug auto-fills from the title until you type your own. The slug new is reserved for the creation screen; use a different slug such as new-file. Files are knowledge pages: folders organize them without changing stable slugs, URLs, or [[wikilinks]].

Open Activity log from the top breadcrumb bar. Changes appear in a history grouped by UTC date, with an action, summary, recorded actor kind, timestamp, and affected file link. Details appears only when the entry has additional meaningful metadata. Older activity continues through the workspace history; Latest activity returns to recent changes. Proposals are not listed in the Knowledge explorer; the approval queue remains available at /knowledge/proposals and through approval links.

The graph starts in 2D, with pastel colors identifying file types. Choose 3D to rotate the same connections in space: drag to rotate and scroll to zoom. Switch back to 2D at any time. Browsers without 3D support automatically keep the 2D view.

Use Find a connection… to centre either view on a file. Filters opens label visibility, tags, file types, and Include unlinked files; Fit graph to view resets the camera. In 3D, On hover shows labels for the file under your pointer and the focused file; More labels shows up to 50, prioritizing those files. The footer shows file and connection counts. It loads 500 pages by default and caps at 2,000; when more pages exist, the Load up to … files picker changes that limit. Clicking a node opens its file. Missing linked files appear as dashed nodes in 2D or gray nodes in 3D; select one and choose Create linked file to create it.

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 canonicals

Plain-language search can combine keyword matches with semantic passages when semantic indexing is enabled for the workspace. The response reports match_type and semantic_status; the Knowledge index shows indexing coverage. Disabled, empty, or unavailable semantic indexing falls back to keyword search. Quoted phrases, OR, and exclusions retain strict keyword semantics. Results retain page revisions and relevant excerpts so you can open and verify the source.

Page writes spend no credits. In enabled workspaces they queue background embedding updates funded by OXYGEN's budgeted search infrastructure:

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.

Organize folders and files

oxygen knowledge folders list --json
oxygen knowledge folders create --name "Research" --json
oxygen knowledge folders create --name "Competitors" --parent <folder_id> --json
oxygen knowledge folders move <folder_id> --parent <destination_folder_id> --json
oxygen knowledge folders move <folder_id> --parent root --json
oxygen knowledge page upsert --title "Competitor notes" --folder <folder_id> --create-only --json
oxygen knowledge page upsert --slug competitor-notes --folder root --json

Use the returned folder UUID for --parent and --folder. Omit --folder on an edit to preserve placement; --folder root moves a file out of its folder. --create-only prevents an existing page from being overwritten. Folder listing includes page locations and a truncated flag when its page limit is reached. Folders are workspace organization, not separate permissions or graph links.

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 proposal

Retrieval 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 read

Unattended 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 — folders (oxygen_knowledge_folders_list, oxygen_knowledge_folders_create, oxygen_knowledge_folders_move), 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.

On this page