Silo

Concept

Data model

Silo is a provider-blind control plane. The LLM queries data SHAPES, gets back normalized SLICES addressed by opaque HANDLES, and never learns which underlying service a result came from. One read verb covers both the user's stored memory and their connected live data.

Shapes

A shape is the kind of data you query — the scope argument to silo_recall. Shapes replace provider-named scopes: you ask for message, not "Gmail" or "Slack". Call get_scope to see which shapes a connection actually has.

  • memoryCurated knowledge stored in a silo (the only stored shape).
  • messageCommunications — chat and email, merged.
  • fileOpaque assets — PDF, image, sheet, binary.
  • noteStructured written content — pages and docs.
  • taskWork items — issues, PRs, tickets, cards.
  • eventCalendar events.
  • transactionFinancial events.
  • accountStanding accounts and balances.
  • contactPeople.
  • codeSource code — files and pull requests.
  • spaceCollaborative boundaries — channels, repos, teamspaces.

memory is stored — it needs a silo_id (or "default"). Every other shape is live and federated across connected services.

Slices

A read returns a slice: a normalized list of items for one shape, with no source attribution. Each item carries a small set of neutral fields plus an opaque handle. Raw provider payloads, provider URLs/IDs, and source names are never included.

Handles

A handle (slc_…) is an opaque, encrypted reference to one item, bound to your connection. Pass it back to silo_recall(handle, facet) to open the item or expand a heavy facet (.content, .comments, .diff), or to silo_remember(handle) to persist it into a silo. Handles cannot be decoded by the client and reveal nothing about the underlying service.

Filter dimensions

Each shape advertises filter dimensions you can pass in filters to narrow a recall — e.g. date, source, space, folder, participant, status. get_scope lists the dimensions available per shape.