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.

  • →memory — Curated knowledge stored in a silo (the only stored shape).
  • →message — Communications — chat and email, merged.
  • →file — Opaque assets — PDF, image, sheet, binary.
  • →note — Structured written content — pages and docs.
  • →task — Work items — issues, PRs, tickets, cards.
  • →event — Calendar events.
  • →transaction — Financial events.
  • →account — Standing accounts and balances.
  • →contact — People.
  • →code — Source code — files and pull requests.
  • →space — Collaborative 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.