User File Store
Your user file store is a personal, per-organisation space where files produced by PebbleAI on your behalf are stored durably. Today it holds the output files from Skills that run Python — PDFs, Word docs, Excel spreadsheets, images, charts — along with artifacts from Canvas, and in future it will link to OneDrive and SharePoint.
Your file store has a dedicated home: the Files page, reached via Files in the sidebar (URL:
/user-files). Download links returned in chat responses remain a second route to the same files.
What’s in it today
Every time you run a Skill that produces a file — the pdf skill that generates a polished PDF, the xlsx skill that assembles a spreadsheet, the frontend-design skill that emits a mockup — the output file is:
- Written inside the code execution sandbox at
/workspace/or/tmp/ - Detected automatically by PebbleChat’s
python_runtool (based on file extension) - Uploaded to your user file store at
tenants/{partnerId}/{orgId}/user-files/{yourUserId}/sandbox-output/ - Returned to you as a download link in the chat response
The link looks like /api/v1/pebblechat/user-files/{yourUserId}/{filename} — links are authenticated and user-scoped, so only you can reach your files, and only after authenticating as yourself.
Supported file extensions today:
.pdf, .docx, .xlsx, .pptx, .csv, .tsv, .json, .geojson, .czml, .png, .jpg, .jpeg, .gif, .svg, .html, .txt, .md, .zip — plus code files (.py, .js, .ts, .jsx, .tsx, .sh, .sql, .yaml, .yml) when you’ve asked the skill to produce them.
Deliverables a Skill writes to its output location with one of those extensions are captured automatically. Temporary working byproducts left loose in /workspace — intermediate images, scratch .txt or .json files — are no longer promoted to your file store. Other file types can still be produced but won’t be auto-captured — the skill author needs to convert them or handle them directly.
Storage structure
Your files are stored in an S3-backed per-user namespace inside your organisation’s bucket:
s3://pebble-storage/tenants/{partnerId}/{orgId}/user-files/{yourUserId}/
└── sandbox-output/
├── Q1-2026-Report.pdf
├── budget-breakdown.xlsx
├── campaign-chart.png
└── ...This builds on the same multi-tenant S3 persistent storage that handles PebbleChat image attachments. Three key properties:
- Per-user isolation — you cannot read another user’s files, and they cannot read yours, even if they somehow guessed the filename
- Per-organisation scoping — your files belong to the organisation you were in when the file was created. If you’re a member of multiple organisations, each has its own file store namespace for you
- Durable — files persist beyond any single session, chat, or pod lifetime. They’re in S3, not in the sandbox’s ephemeral storage
Accessing your files
The Files page — click Files in the sidebar (URL: /user-files) — is your file store’s home. It gives you:
- A three-pane browser: folder tree, file list, and a preview pane with inline previews
- Upload, download, rename, delete, copy and move actions
- A storage-usage meter showing how much of the available space you’ve used
- Open in Canvas and Chat about this file actions, so you can carry a file straight into a conversation
Download links in chat remain the quickest route back to a file you’ve just generated. A typical skill response looks something like:
I’ve generated your quarterly report as a PDF. Download it here: Q1-2026-Report.pdf
Click the link and the file downloads. The link stays valid as long as you’re authenticated and the file exists.
Finding a file from an earlier chat
The Files page is the quickest way — browse or search for the file directly. If you’d rather retrace your steps, the download link is still in the original conversation:
- Go to PebbleChat
- Find the conversation where the file was generated (search the sidebar if needed)
- Scroll to the message with the download link
- Click it
What’s coming
The file store is explicitly positioned as a foundation for larger work. Two things are planned on top of the current infrastructure:
1. Indexing over time for context
Over time, files in your file store are candidates for indexing into your personal memory / ambient context. The vision is that a user who has been using PebbleAI for three months has accumulated a rich corpus of their own work — reports, analyses, drafts, charts — and PebbleChat can draw on that corpus at query time. “What were we saying about the Q2 campaign last month?” could retrieve from your file store the same way it retrieves from document stores today.
2. OneDrive and SharePoint linking
The final step is linking your file store to OneDrive and SharePoint, so files flow both ways:
- Files you generate in PebbleAI appear in your OneDrive automatically
- Files you already have in OneDrive become searchable in PebbleChat
- One indexed space spans everything you produce and everything you already have
This builds on the existing Microsoft 365 integration (see PebbleFlows → Integrations for how the MS365 MCP works today) and is a natural extension of the Files page and the file store beneath it.
Limits and caveats
- Quotas are organisation-level. The Files page shows your storage usage against the available total, but the underlying limit is enforced at organisation level via your deployment’s license-based quotas (
LICENSE_QUOTAS.STORAGE_LIMIT). If your organisation hits its storage limit, new sandbox outputs will start failing. - Retention is indefinite. Files stay until you delete them — there is no automatic cleanup, which is convenient but means the space grows unless you prune it from the Files page.
- Files are per-organisation. Switching workspaces within the same organisation does not change which files you can see. Switching organisations (multi-org users) does.
- Download links require authentication. Knowing the link alone isn’t enough — the API verifies that the authenticated user matches the user ID in the URL path before returning the file.
- Skill output detection is pattern-based. If a skill writes a file with an extension not in the supported list, it won’t be auto-captured. This is a Skill-author consideration, not a user one.
How it relates to other storage
PebbleAI has several distinct storage surfaces and it’s worth being clear about which one is which:
| Storage | What it holds | Scope | How you access it |
|---|---|---|---|
| User file store (this page) | Skill output files and Canvas artifacts | Per user per org | Files page (/user-files) or download links in chat |
| Document stores (@Mentions) | Curated document collections for RAG | Per workspace / org | Via @mention or auto-discovery in PebbleChat |
| PebbleChat image attachments | Images you attach to a chat message | Per user per org, inside the conversation | Via the chat attachment picker |
| Credentials (User Settings → Credentials) | API keys and secrets | Per user / workspace / org | Via credential picker in flows and tools |
| Variables (User Settings → Variables) | Named configuration values | Per user / workspace / org | Via {{$vars.NAME}} in flows |
The user file store is specifically for artifacts produced by AI on your behalf — outputs, not inputs. Inputs live elsewhere.
Related
- PebbleChat → Skills — the feature that produces most files in your store today
- Code Execution Sandbox — the infrastructure that actually runs the code that writes the files
- User Settings → Capabilities — personal view of skills and integrations that can write to your file store
- PebbleFlows → Integrations — future OneDrive / SharePoint linking will build on this integration surface