Oxagen Docs

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

FormatVendorSpec typeCapability prefixPage
DocumentGoogle DocsDocumentSpecdocs.*Document generation
SpreadsheetGoogle SheetsSheetSpecsheets.*Spreadsheets
Slide deckGoogle SlidesSlideDeckSpecslides.*Slides
PDFGeneric (LibreOffice / Gotenberg)pdf.* / *.export_pdfPDF 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 declares kind='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 structured 409 with the missing connection rather than a vendor-flavoured 500.
  • Idempotency keys. Pass an Idempotency-Key header (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.event with action='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 from user_upload and external_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.

FamilyCapabilityWhat it does
Documentsdocs.create_from_spec · docs.append · docs.replace_placeholders · docs.share · docs.export_pdfCompose, mutate, share, and export Google Docs.
Spreadsheetssheets.create_from_spec · sheets.append_rows · sheets.write_range · sheets.insert_chart · sheets.share · sheets.export_pdfCompose Google Sheets, write cell ranges, insert charts.
Slidesslides.create_from_spec · slides.append_slide · slides.replace_placeholders · slides.share · slides.export_pdfCompose Google Slides decks, append slides, swap placeholders.
PDFpdf.convertConvert any office-format document already in app.documents to PDF via LibreOffice.
Brandingbranding.list_kits · branding.get_active_kit · branding.set_active_kitRead and switch the active brand kit.

Where to go next


Get started free · Agent Tools · API Reference

On this page