III · Tool Use & EnvironmentExperimental·

Synthetic Filesystem Overlay

also known as Virtual Filesystem for Agents, Unified-Tree Data Surface, FS-as-Tool-API

Project heterogeneous enterprise data sources into a single Unix-like tree exposed through filesystem primitives so the agent reuses path semantics it already knows instead of learning a bespoke API per source.

This pattern helps complete certain larger patterns —

  • specialisesAgent-Computer InterfaceDesign the tool surface for an LLM agent specifically, with affordances different from human-facing CLIs.

Context

A team is building an enterprise agent that has to read across many heterogeneous internal systems: Notion, Slack, Google Drive, GitHub, Linear, Jira, email, plus internal databases. Each source has its own authentication, pagination, search dialect, and result shape, and cross-source tasks (a Slack thread plus the linked Notion doc plus the related pull request) are the norm rather than the exception.

Problem

Designing one agent-friendly tool API per source does not scale: every new connector adds a fresh vocabulary the model has to learn, and the tool count climbs past the point where the agent can choose well between them. Flattening everything into a vector store of chunks loses structure and makes cross-source joins impossible. Meanwhile the model has very strong priors for Unix-like filesystem navigation (list, find, cat, grep) from training data, but no native enterprise source matches those semantics — observations from production logs show agents inventing file-path syntax against APIs where no filesystem actually exists.

Forces

  • Each source has unique semantics, but a unified surface must hide them.
  • The agent's strongest navigation priors are filesystem operations, not REST.
  • Cross-source joins (a Slack thread plus its linked Notion doc plus the related PR) require traversal, not separate tool calls.
  • Auth, rate limits, and pagination must remain per-source even when the surface is unified.
  • Lazy enumeration matters: listing all of Slack as a directory cannot fetch every message eagerly.

Example

An on-call engineer asks the assistant to summarize last week's incident. The agent runs find /slack -name '*incident*' -newer 2026-05-12, cats the matching channel transcripts, searches /notion for the linked postmortem template, and lists /github/infra/prs filtered by date. Three sources, one navigation idiom, no per-source SDK calls. The same agent on a new connector (Linear) needs only a new subtree under /linear/ — no new tools, no new prompts.

Diagram

Solution

Therefore:

Mount each connector under a deterministic path: /slack/<workspace>/<channel>/<date>/<message>.md, /notion/<workspace>/<page-path>.md, /github/<org>/<repo>/.... Expose five primitives: list (enumerate children, paginated), find (path-pattern matching), cat (fetch a node's content), search (full-text query, optionally scoped to a subtree), and locate_in_tree (resolve an opaque ID to its path). Each primitive translates into source-specific API calls on demand; nodes are virtual until cat. The agent navigates with shell-like idioms — list /slack/eng/, find /notion -name '*onboarding*', search 'incident 2026-05' /slack/eng — and joins results by paths rather than per-source identifiers.

What this pattern forbids. The agent must access enterprise data only through the five primitives — direct per-source API calls are forbidden once the overlay is mounted. It must treat paths as the canonical identifier and not invent paths that locate_in_tree has not validated.

And the patterns that stand alongside it, or against it —

  • alternative-toModel Context Protocol★★Standardise how agents discover and call tools so that a tool written once is usable by any conformant agent.
  • alternative-toTool DiscoveryLet the agent discover available tools at runtime rather than hardcoding the tool list at agent build time.
  • alternative-toKnowledge Graph MemoryPersist agent memory as entities and relations in a structured graph so symbolic queries (path, neighbour, type) become possible.
  • alternative-toNaive-RAG-FirstAnti-pattern: reach for naive RAG before checking whether the knowledge actually needs retrieval.

Neighbourhood

Click any neighbour to follow the language. Scroll to zoom, drag to pan.