Artifacts
How Oxagen agents author documents, spreadsheets, slides, and PDFs — and where every generated artifact gets stored, branded, and audited.
The Oxagen agent does not just answer questions about the workspace graph. It produces deliverables — typed, branded, workspace-scoped artifacts that land in the same documents surface a human upload would. This page is the rollup; each format has its own page below with the typed spec, capability surface, and operational details.
What the agent can produce
| Format | Vendor | Spec type | Capability prefix | Page |
|---|---|---|---|---|
| Document | Google Docs | DocumentSpec | docs.* | Document generation |
| Spreadsheet | Google Sheets | SheetSpec | sheets.* | Spreadsheets |
| Slide deck | Google Slides | SlideDeckSpec | slides.* | Slides |
| Generic (LibreOffice / Gotenberg) | — | pdf.* / *.export_pdf | PDF generation |
Every generator runs through the same vendor-neutral abstraction in
packages/oxagen/oxagen/documents/. The provider is resolved per
call from the workspace's preferred_office_suite column; the
agent never imports a vendor SDK and never sees raw OAuth
credentials.
The same four guarantees
Every artifact capability respects the same four registry guarantees the rest of the agent surface respects (see Agent Tools — Capability platform):
- Typed
kind. Every artifact tool declareskind='generate'. Adapters render confirmation cards in the chat UI; the audit log routes the call into the generation channel rather than the read or write channel. - Connection-scope binding. Google-backed artifact tools bind
to
connection_kind="google_workspace". A workspace that has not connected Google receives a structured409with the missing connection rather than a vendor-flavoured 500. - Idempotency keys. Pass an
Idempotency-Keyheader (or the equivalent MCP argument). A retried artifact call returns the cached(doc_url, external_id)for 24 hours instead of creating a duplicate doc. - Audit chain. Each generation writes a row to
audit.eventwithaction='document.created' | 'sheet.created' | …, the workspace + tenant chain it belongs to, and the hash linking it to the previous row. See Events, triggers, and audits.
Branding, automatically
Every workspace can hold many BrandKit rows (palette, typography,
spacing, logo, favicon, watermark, voice doc, footer) with at most
one marked is_default = true. The active kit is read on every
generation call and mapped to the vendor's style primitives — the
deck the agent produces comes out looking like your company's
brand, not Oxagen's. See Brand kits.
Where artifacts land
Generated artifacts are first-class workspace documents. The same
unified app.documents table that holds uploaded PDFs and in-product
markdown notes also holds the agent's output, with three extra
columns on the row:
source = 'agent_generated'— discriminates fromuser_uploadandexternal_import.generated_by_run_id— back-pointer to the agent run that produced this artifact.provider+external_id+external_url— the vendor reference (Google Drive file id, viewer URL, etc.) so a click through opens the live doc in the vendor's UI.
A documents browser scoped to source = 'agent_generated' answers
the CIO question — "what did the agent ship last week?" — without
a separate dashboard. See Artifact storage.
Capability inventory
The artifact surface adds the following capabilities to the
Agent Tools catalog. Every entry below is
available on app, mcp, and api; credit costs and
confirmation policies match the rows in the main catalog.
| Family | Capability | What it does |
|---|---|---|
| Documents | docs.create_from_spec · docs.append · docs.replace_placeholders · docs.share · docs.export_pdf | Compose, mutate, share, and export Google Docs. |
| Spreadsheets | sheets.create_from_spec · sheets.append_rows · sheets.write_range · sheets.insert_chart · sheets.share · sheets.export_pdf | Compose Google Sheets, write cell ranges, insert charts. |
| Slides | slides.create_from_spec · slides.append_slide · slides.replace_placeholders · slides.share · slides.export_pdf | Compose Google Slides decks, append slides, swap placeholders. |
pdf.convert | Convert any office-format document already in app.documents to PDF via LibreOffice. | |
| Branding | branding.list_kits · branding.get_active_kit · branding.set_active_kit | Read and switch the active brand kit. |
Where to go next
- Document generation
- Spreadsheets
- Slides
- PDF generation
- Brand kits
- Artifact storage
- Events, triggers, and audits
Agent Memory
How Oxagen's agent memory layer works — durable, self-improving memory built into the workspace graph so agents stop repeating mistakes and get measurably better over time.
Document generation
How Oxagen agents author long-form documents through a vendor-neutral DocumentSpec — composing Google Docs from typed blocks, replacing placeholders, exporting PDF, and sharing with named users.