Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.getnao.io/llms.txt

Use this file to discover all available pages before exploring further.

Stories turn a chat analysis into a persistent, shareable document — with live charts, tables, and narrative text — that you can revisit, refine, and distribute to your team.

Creating a Story

Stories are created directly from a chat conversation. Simply ask the agent to write one:
“Write a story about our new user growth since the last release.” “Create a story summarizing MRR trends over the past quarter.”
The agent will:
  1. Run the relevant queries against your data.
  2. Compose a structured document with narrative text, charts, and tables embedded inline.
  3. Open the story in a side panel next to the chat thread.
Story example with charts

Editing a Story

Once a story is open in the side panel, click the pencil icon to switch to edit mode. The editor is Notion-style: every block (text, chart, table) can be dragged and reordered using the grip handle on the left. You can edit text in rich markdown, rearrange sections, and remove blocks you don’t need. When you’re done, click Save — this creates a new version of the story. To discard your changes, click Cancel.

Versions

Every time you save a story, nao creates a new version. Use the version navigator in the story header (v1 / v2 / ...) to browse previous versions.
  • ← / → arrows step through versions.
  • When viewing an older version, a Restore button lets you roll back to that version (creating a new version from it).
Recipients who receive a shared link always see the latest version automatically.

Editing Charts

After a chart is generated, you can tweak its configuration without re-running the query. In a chat thread: click the pencil icon next to the chart’s download button. This opens an edit dialog where you can change:
  • Chart title
  • Chart type (bar, line, area, pie, etc.)
  • X-axis key and type
  • Per-series settings: data key, label, and color
Click Save to persist the changes. The updated chart config is written back to the database, and any cached chart image (used for Slack/Teams/WhatsApp previews) is regenerated on next request. In a story: hover over any chart block and click the pencil icon in the top-right corner. The same edit dialog opens. Saving creates a new story version with the updated chart tag, following the same versioning flow as text edits. Chart editing is only available to the chat or story owner. The edit button is hidden while the agent is running, on archived stories, in shared/read-only views, and when viewing older story versions.

Editing the Story Code

The story side panel has a Code view that shows the raw markdown behind the story. This view is now editable: you can modify text, chart tags, table tags, and grid blocks directly. The editor validates your changes in real-time:
  • Missing required chart attributes (query_id, chart_type, x_axis_key)
  • Invalid chart type or axis type values
  • Malformed or empty series definitions
  • Missing query_id on table blocks
  • Unterminated or unclosed tags
  • Out-of-range cols on grid blocks
Validation errors appear as red markers in the editor and a banner above it. The Save button is disabled until all errors are resolved. Press Cmd+S (or Ctrl+S) as a shortcut to save. Saving creates a new story version, just like editing in the visual editor. The code view is read-only on shared stories.

Adding a Chart from the Thread

When the agent produces a chart in the chat thread, you can embed it directly into a story:
  1. Open the story side panel.
  2. Ask the agent to add the chart: “Add this chart to the story.”
The chart is embedded as a live block — it renders with the same query data and can be repositioned in the editor like any other block.

Sharing a Story

Click the share icon in the story header to open sharing settings. You can share with:

Entire project

All members of your nao project can view the story via the shared link.

Specific people

Search by name or email and select individual team members.
Clicking Share & copy link copies the URL to your clipboard. Recipients open the story in their browser — they always see the latest version. When you share with your full project or with specific people, nao also sends an email notification to recipients. Managing an existing share Once a story is shared, the share icon turns green. Click it again to:
  • Copy link - grab the URL again.
  • Update access - add or remove specific people (for specific-person shares).
  • Unshare - revoke access and disable the link entirely.

Sharing, forking, and text selection

Once a chat or story is shared, recipients can branch from it or ask targeted follow-ups without breaking the original. The same selection-based “Ask” flow also works on your own (non-shared) chats and stories. Continue chat On a shared chat, Continue chat opens a new forked chat that contains the full shared history. Each click creates a fresh fork, so the original conversation is never modified. Discuss story On a shared story, Discuss story opens a new chat with the story embedded at the top in editable form, ready to be questioned or refined. Ask about a selection Select any text inside a chat or a story and an Ask button appears above the selection. Clicking it opens an inline frame where you can quote the selection and ask a follow-up about that specific passage:
  • The quoted text shows up as a pending citation in the input until you send the question, so you can see exactly what the agent will see.
  • Once sent, the answer keeps a Go to original selection link that jumps back to the exact passage in the source chat or story.
  • The frame leaves a small persistent indicator when collapsed so you can reopen it later.
Selection-based asks work in four places:
  • Your own chats
  • Your own stories
  • Shared chats and stories you have received
  • The admin Chats replay view (asking about a past chat for debugging or follow-up)
All “Continue chat”, “Discuss story”, and “Ask” actions create new conversations under the current user’s account, so the original content stays untouched.

Exporting stories

Stories can be exported to PDF or HTML from the download button in the story header. Export works on your own stories and on shared stories, and you can pick any existing version from the version navigator before exporting. PDF
  • A4 page size, formatted for printing.
  • Charts are rendered as vector SVG so they stay sharp at any zoom level.
  • Tables are included up to 10 rows per table to keep the document readable; longer tables are truncated in the PDF (the full dataset is still available in the HTML export and in the live story).
HTML
  • Self-contained single file: no external assets, works offline.
  • Interactive chart tooltips are preserved, so recipients can hover data points in their browser.
  • Styled for print, so File -> Print in the browser produces a clean printed copy without separate theming.
Use PDF when you need a fixed-layout report to attach to an email or a doc. Use HTML when you want the story to stay interactive and portable.

Live Stories

By default, a story is a snapshot: charts and tables freeze the data that was returned when the story was created. Live stories keep the story connected to the underlying queries so the numbers refresh on a schedule (or on demand) without anyone having to rebuild the report.

Enabling live mode

  1. Open the story in the side panel.
  2. Click the settings icon in the story header.
  3. Toggle Live mode on.
  4. Pick a refresh strategy (see below).
  5. Save.
A green Live badge appears in the story header once it’s enabled, along with a “last refreshed” timestamp. Anyone who opens the shared link sees the most recently refreshed version.

Refresh strategies

When live mode is on, choose how freshness should work:
  • Manual refresh only - the story keeps its last refreshed values until someone clicks the refresh button in the header.
  • No cache (always fresh) - queries re-run every time the story is opened. Best for low-volume stories where you always want live numbers; avoid on expensive queries.
  • Scheduled refresh presets - every 5 minutes, hourly, daily, weekly, or monthly.
  • Custom schedule - type a schedule in plain English (e.g. “every weekday at 8am”, “first Monday of the month”) and nao converts it to cron, or paste a raw cron expression directly.
Each refresh re-runs every query block in the story against your connected warehouse, then updates the cached results that recipients see.

Refreshing the narrative

For live stories, you can also enable Regenerate the narrative in the same settings panel. When turned on, nao rewrites the text blocks with the updated numbers while keeping the layout intact:
  • Section titles stay in place.
  • Charts and tables stay embedded in the same positions.
  • Only the prose around them is rewritten so the commentary matches the new data.
This is what turns a live story into a real recurring report - the agent doesn’t just refresh the numbers, it explains them.

Access and refresh on shared stories

Live refresh respects the same access rules as the share itself:
  • For project-wide shares, any project member can trigger a manual refresh.
  • For specific-people shares, only the people on the access list can refresh.
  • Scheduled refreshes always run with the story owner’s permissions, so the data the recipients see is the data the owner is allowed to query.
If a query underlying a live story starts failing (schema change, permissions, etc.), the story keeps showing the last successful refresh and surfaces an error indicator in the header so you can investigate.

Stories Library

The Stories Library is your central hub for all stories. Access it by clicking Stories in the left sidebar. Stories Library The library shows:
  • My Stories — stories you created.
  • Shared with me — stories other team members have shared with you.
You can switch between a grid view (thumbnail cards) and a list view, search by title, and group stories by ownership, date, or author.