User SettingsFile Store

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 — and in future it will also hold Canvas artifacts and eventually link to OneDrive and SharePoint.

Infrastructure is in place and actively used by the Skills Python sandbox. A dedicated browse/manage UI is not yet released — files are accessed via download links returned in the chat for now.

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:

  1. Written inside the code execution sandbox at /workspace/ or /tmp/
  2. Detected automatically by PebbleChat’s python_run tool (based on file extension)
  3. Uploaded to your user file store at tenants/{partnerId}/{orgId}/user-files/{yourUserId}/sandbox-output/
  4. Returned to you as a download link in the chat response

The link looks like /api/v1/pebblechat/user-files/{yourUserId}/{fileId}/{filename} — the fileId is a 128-bit UUID capability URL, so only you (and anyone you share the link with) can reach the file, and only after authenticating as yourself.

Supported file extensions today:

.pdf, .docx, .xlsx, .pptx, .csv, .tsv, .json, .png, .jpg, .jpeg, .gif, .svg, .html, .txt, .md

Anything a Skill’s Python code writes with one of those extensions lands in your file store automatically. 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/
      ├── {fileId-1}.pdf
      ├── {fileId-2}.xlsx
      ├── {fileId-3}.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

Today there is no dedicated browse UI — this is the honest current state. You access files via the download links that PebbleChat returns in chat responses. 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

Since the links are in the chat messages, you can always find a past-generated file by:

  1. Going to PebbleChat
  2. Finding the conversation where the file was generated (search the sidebar if needed)
  3. Scrolling to the message with the download link
  4. Clicking it

This works reliably today but isn’t ideal — which is why the browse UI is on the roadmap below.

What’s coming

The file store is explicitly positioned as a foundation for larger work. Three things are planned on top of the current infrastructure:

1. A browse and manage UI

A dedicated page under User Settings that lets you:

  • See every file currently in your store, organised by date and source
  • Filter by file type (PDFs, spreadsheets, images, etc.)
  • See which skill or chat produced each file
  • Delete files you no longer need
  • Rename, tag, and organise

This is in the backlog but not yet scheduled. For now, files accumulate silently — there are no retention policies forcing you to clean up, but also no easy way to audit what’s there.

2. Indexing over time for context

Files in your file store are candidates for indexing into your personal memory / ambient context over time. Stuart framed it this way in an internal discussion:

“Think indexing that over time so that in three months time you’ve got the context of all of the files that have been created as part of your process. There’s a lot of intel there.”

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.

3. 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 once the file store browse UI is in place.

Limits and caveats

  • No explicit per-user quota today. Storage limits are enforced at organisation level via your deployment’s license-based quotas (LICENSE_QUOTAS.STORAGE_LIMIT). Individual users don’t see a quota, but if your organisation hits its storage limit, new sandbox outputs will start failing.
  • Retention is indefinite. Files stay until deleted. There is no automatic cleanup, which is convenient but means the space grows unbounded.
  • 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. The UUID 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:

StorageWhat it holdsScopeHow you access it
User file store (this page)Skill output files, future Canvas artifactsPer user per orgDownload links in chat
Document stores (@Mentions)Curated document collections for RAGPer workspace / orgVia @mention or auto-discovery in PebbleChat
PebbleChat image attachmentsImages you attach to a chat messagePer user per org, inside the conversationVia the chat attachment picker
Credentials (User Settings → Credentials)API keys and secretsPer user / workspace / orgVia credential picker in flows and tools
Variables (User Settings → Variables)Named configuration valuesPer user / workspace / orgVia {{$vars.NAME}} in flows

The user file store is specifically for artifacts produced by AI on your behalf — outputs, not inputs. Inputs live elsewhere.