{"collectionById":{"ff6b1f6f-5f96-4713-b069-1faa55ca2e89":{"id":"ff6b1f6f-5f96-4713-b069-1faa55ca2e89","name":"Blogs","fieldSchemas":[{"id":"d00795a3-16ce-49db-ad5d-6e9f50a91a33","name":"Title","type":"plain_text","role":"primary"},{"id":"99385d98-0790-404b-9ba4-bed3e4b36a6c","name":"Slug","type":"slug","role":"slug"},{"id":"322f4107-3445-4e38-813d-9676feec2baa","name":"Article Content","type":"rich_text"},{"id":"7961c158-d2f0-4ee6-8285-2cb215aaac38","name":"Summary","type":"plain_text"},{"id":"8f394baa-7d59-44e7-a548-49c17160e0c9","name":"Thumbnail","type":"image"},{"id":"ee8bb003-b65d-4f06-aeef-858996d6c243","name":"Author Name","type":"plain_text"},{"id":"e6e85e65-7f29-4eed-bc73-f678eeedbe30","name":"Publish Date","type":"date"},{"id":"8cb706da-36de-4fa0-9619-a6f62ff0688a","name":"YouTube Link","type":"link"}],"itemById":{"e503ea33-94b4-4c13-b00c-0e54f94056f0":{"id":"e503ea33-94b4-4c13-b00c-0e54f94056f0","index":"!$O","collectionId":"ff6b1f6f-5f96-4713-b069-1faa55ca2e89","fields":[{"id":"6b8b64ea-60c1-4318-a12c-d39740f101b7","value":"The Filesystem Is the Product","itemId":"e503ea33-94b4-4c13-b00c-0e54f94056f0","fieldSchemaId":"d00795a3-16ce-49db-ad5d-6e9f50a91a33"},{"id":"d615ab3e-7964-4a73-88de-a5685650cd5f","value":"2026-06-02","itemId":"e503ea33-94b4-4c13-b00c-0e54f94056f0","fieldSchemaId":"e6e85e65-7f29-4eed-bc73-f678eeedbe30"},{"id":"ff98a935-7de3-4f67-8760-2fa6bba9d58a","value":"How a virtual ﬁlesystem became the shared surface for our agents, our team, and our customers.","itemId":"e503ea33-94b4-4c13-b00c-0e54f94056f0","fieldSchemaId":"7961c158-d2f0-4ee6-8285-2cb215aaac38"},{"id":"1972b9f6-3bc3-4fe3-b813-d6e23895b323","value":"Chris Lock","itemId":"e503ea33-94b4-4c13-b00c-0e54f94056f0","fieldSchemaId":"ee8bb003-b65d-4f06-aeef-858996d6c243"},{"id":"953fc0b3-760e-42ab-a845-6d7dd21c575f","value":"{\"root\":{\"children\":[{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Our AI Chief Marketing Oﬃcer has to know everything about an SMB: brand assets, voice and tone, prior campaigns, current website, Google Business Proﬁle, ad accounts on Meta and Google, customer lists, performance data, the policies the owner has set about what the business will and will not say. None of this lives in one place. It lives in a dozen SaaS APIs, plus customer uploads, plus things the agent itself has learned and written down.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"We started where most teams start. Every capability became a tool, and every integration shipped with its own set. We hit forty before we noticed the problem.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Three things were wrong, and they were the same thing wearing three faces.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The Tool Bloat Trap\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The agent got worse, not better. Latency climbed because every tool call costs another inference, and an agent reaching for more tools per task pays that cost more times in serial. Tool selection is also probabilistic: the same task on two diﬀerent turns could pick two diﬀerent tools, or skip a needed one entirely. We were not just slower; we were inconsistent. Choosing among forty tools is a diﬀerent problem than choosing among ﬁve.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"There is also a soft ceiling on how many tools a model will reach for in a single turn before its decision quality collapses. You cannot see this ceiling in the API. It shows up as the model getting lazy, skipping necessary calls, or hallucinating answers it should have looked up. Call it \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Tool Budget Blindness\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". We were paying a cost we could not measure for a capability surface we kept growing.\",\"type\":\"text\",\"version\":1},{\"type\":\"linebreak\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The Specialist Routing Problem\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"We tried to ﬁx this the obvious way. We split the agent into specialists: a Competitive Research Analyst, a Review Research Analyst, an Image Producer, a Blog Producer.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This solved one problem and created another.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Routing got hard. Which agent handles a request to write a blog post about a product launch that needs a hero image? What happens when the Blog Producer needs to ask the Competitive Research Analyst whether a positioning claim is defensible mid-draft?\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Handoﬀs became a source of bugs. Tasks that should have been one decision became three.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Worse, the agents stopped agreeing with each other on the things that mattered most: voice, tone, and brand requirements. The Blog Producer would write a post in a register the Image Producer's captions did not match. Two agents working on the same campaign would interpret \\\"professional but warm\\\" two different ways. Branding guidelines that one agent was strict about, another would relax. Each agent had its own copy of the rules in its own prompt, and the copies drifted. The customer saw the inconsistency before we did.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This is the same problem every multi-team organization has: the right hand does not know what the left hand is doing. People in different departments make commitments their colleagues cannot keep. Policies drift. Nobody knows who owns what. Human orgs have hierarchy, written policy, and meetings to manage this. None of it transfers to a multi-agent system. You cannot run an all-hands for your agents.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Comprehension Debt\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The third face of the problem was not in the system: it was in the team.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Prompt writers needed to know which tools existed to write prompts that used them. PMs writing feature specs had to understand both. Every conversation about \\\"can the agent do X\\\" required pulling up code.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"It went deeper than tool names. Our color palette taught us this. A brand's colors are simple to describe in one sentence. In our data model they were scattered across multiple entities, nested several levels deep, stored under names that did not always include the words \\\"color\\\" or \\\"palette.\\\" The agent struggled to ﬁnd them. When it did, it often updated the wrong one. The engineer who built the schema knew where the real palette lived. The prompt writer did not. The PM thought \\\"the brand's colors\\\" referred to a single object. So did the customer. The agent thought there were ﬁve and was guessing which one the user meant. None ofthose pictures matched, and there was no shared ontology that would have let them.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This is \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Comprehension Debt\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". The interface had become inscrutable to the people who were supposed to be designing on top of it.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"What a ﬁlesystem already gives you\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"LLMs are ﬂuent in ﬁlesystems. Every model has been trained on millions of READMEs, shell sessions, and code repositories. \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"ls\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"cat\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"grep\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"find\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" are not vocabulary you have to teach. You inherit ﬂuency from the corpus. Filesystems also compose. The agent can grep across \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"/campaigns/2026/\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", diﬀ two versions of a brand voice doc, and do things you did not anticipate, all without you writing tools for them.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This part of the argument is not new. Anthropic has written about code execution as an alternative to MCP tool sprawl. Box has pitched ﬁlesystem semantics over their content platform. Turso's AgentFS argues for SQLite as the agent's ﬁlesystem. The pattern is in the air. We are not claiming we invented it. We are claiming something different, which is what happened to our team after we adopted it.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The Shared Surface Principle\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"We expected the agent to get better, and it did. What we did not expect was the team getting better at their jobs.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Prompt writers \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"stopped memorizing tool names. The system prompt got shorter. Instructions became things like \\\"the brand guidelines live in \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"/brand/guidelines.md\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". Read them before writing customer-facing copy.\\\"\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"PMs started speccing features against the tree. \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A request that used to read \\\"the agent should be able to refresh GBP reviews and incorporate them into reporting\\\" became \\\"add a \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"/integrations/gbp/reviews\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\" mount and update the weekly report skill to reference it.\\\" That is a different conversation. It is designable.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Customer success could explain the agent. \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"\\\"Your agent can see everything in these folders. It can write to these. It cannot touch these.\\\" A trust conversation that used to require analogies now had a concrete artifact to point at.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Then there was a fourth audience we had not been thinking about. The agent could ﬁnally see what the customer already saw. Customers had always been able to browse the asset library where their generated images and videos for posts ended up. The agent could not. It would generate an image, hand it back, and lose track of where it went. Customers found this confusing: they assumed the agent had the same view of their library that the app did. It did not. The agent was creating into a void it could not look back into.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Putting the asset library in the ﬁlesystem closed the gap. The customer's library and the agent's ﬁlesystem became the same library. The agent could now reference the work it had made yesterday, build on a video from last week, find an image to repurpose. The shared surface was not new for the customer. It was new for the agent.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This is the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Shared Surface Principle\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\". The ﬁlesystem was the ﬁrst artifact in our system that every audience could reason about together: engineers, PMs, CS, customers, and the agent itself. The same artifact serves all of them. If your abstraction does not clear that bar, you have a private interface dressed up as a product surface.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Skills replaced our specialist agents\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Once the ﬁlesystem existed, our specialist agents stopped looking like agents. They were patterns of ﬁlesystem access. The Story Writer was: read the brand voice doc, read the rules for this story type, read past examples, write the story to a ﬁle. It did not need to be an agent. It needed to be a skill the main agent could load when relevant.\",\"type\":\"text\",\"version\":1},{\"type\":\"linebreak\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This was the example that convinced us. The Story Writer started life as its own agent, with detailed rules for structure, voice, brand alignment, and compliance constraints per business type. The rules were good. The agent encoding them was thorough. It did not get used. The main agent thought it could write stories on its own, because ofcourse it can write stories, every model can write stories. It skipped the Story Writer more often than it invoked it. Rules went unheeded. Stories shipped that violated structural requirements or brand voice.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"We ported it to a skill: \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"/skills/story-writer/SKILL.md\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\", with progressive disclosure underneath. Story types as subdirectories, rules per type loaded on demand. The model started reaching for the skill readily, because reading a ﬁle does not feel like asking for help in the way invoking a separate agent does. There is no \\\"do I need this, or can I handle this myself\\\" gate. There is just \\\"I am about to write a story, let me read the playbook.\\\" Rules got followed at the moment ofuse.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The deeper ﬁx for the multi-agent cohesion problem turned out to be the same ﬁx. Not \\\"one agent in charge.\\\" \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"One document in charge. \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A shared tree, with shared rules, that any agent doing any task reads from at the moment of use. Specialist agents are a delegation interface. Skills are a prose interface. Models are better at reading prose than at deciding when to delegate.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"PMs started writing skills\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The thing we did not expect: PMs started writing skills. Not because we trained them to. Because a skill was a markdown ﬁle with a procedure that referenced paths. The paths matched the entities they had been thinking and writing about all along. Brand. Campaigns. Audiences. Assets. The ﬁlesystem made the agent's view and the PM's view the same view. Once the gap between \\\"spec a feature\\\" and \\\"ship a skill\\\" collapsed to \\\"write a markdown ﬁle and put it in the right folder,\\\" the gap closed. Some skills shipped with no engineering changes.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This is the \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Authoring Surface \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"point. When the contribution interface for agent capabilities is prose against a shared tree, more people can contribute. The locus of agent design moves from code to writing. Writing is something a much larger fraction ofyour team can do.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"What we are still ﬁguring out\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The Shared Surface Principle is not a solved problem, and the ﬁlesystem is not a complete solution. We have four open tensions.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"State versus action. \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The ﬁlesystem shines for state: things the agent and the team and the customer can read, write, browse, and reason about together. It falters for actions: transactional writes, real-time events, calls whose whole point is the side eﬀect on a third party. Those still belong as tools, and we still build them as tools. The ﬁlesystem is a unifying surface, not a universal one. We are still working out the boundary cases where an action has enough state-shaped output to deserve a path of its own.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"How much of the internals to surface to SMBs. \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The Shared Surface Principle says the customer should be able to reason against the same tree the agent works in. The customer is a small business owner, not an engineer. Showing them every internal mount overwhelms; hiding too much defeats the legibility argument. We are still working out which paths are customer-facing entities, which are agent-only, and how to draw that line on a principle rather than a case-by-case taste call.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Canonical knowledge in a graph and in the ﬁlesystem at the same time. \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Some ofwhat the agent needs to know is genuinely relational: which campaign used which assets, which audiences overlap, which content references which sources. That data wants to live in a graph. The ﬁlesystem is a hierarchy and a hierarchy is a poor model for a graph. We are ﬁguring out where to keep the canonical truth, how to project it into the ﬁlesystem in a useful way, and how to keep the two from drifting.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Markdown for humans and LLMs, JSON for the application. \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Markdown is what the agent reads ﬂuently and what humans write naturally. JSON is what deterministic application code wants to consume: typed, validated, parseable. The same artifact often needs to serve both. Frontmatter helps. Generated views help. Neither is a complete answer, and we have not yet committed to a single pattern across the system.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":1,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Most agent abstractions are built for the agent. The best ones are built for everyone who needs to reason about the agent.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"A virtual ﬁlesystem is the most legible abstraction we have found that works simultaneously for a language model, a builder, and a customer with no technical background. It happens to also be the abstraction LLMs are most ﬂuent in. That alignment is not an accident.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"The ﬁlesystem is not a clever abstraction layer. It is the product.\",\"type\":\"text\",\"version\":1},{\"type\":\"linebreak\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Reading and prior art\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"This pattern is being explored by several teams in parallel. A few worth reading:\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Anthropic, \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":3,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Code execution with MCP\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": the foundational argument that ﬁlesystem-and-code beats tool sprawl for context eﬃciency. \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":8,\"mode\":\"normal\",\"style\":\"\",\"text\":\"anthropic.com/engineering/code-execution-with-mcp\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"textFormat\":8,\"rel\":null,\"target\":null,\"title\":null,\"url\":\"https://www.anthropic.com/engineering/code-execution-with-mcp\"}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"listitem\",\"version\":1,\"textFormat\":8,\"value\":1},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Box, \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":3,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Deep Agents virtual ﬁlesystem example\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": ﬁlesystem semantics over enterprise content, including the \\\"interface contract, not literal ﬁles on disk\\\" framing. \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"g\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":8,\"mode\":\"normal\",\"style\":\"\",\"text\":\"ithub.com/box-community/deepagents-ﬁlesystem-example\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"rel\":null,\"target\":null,\"title\":null,\"url\":\"https://github.com/box-community/deepagents-filesystem-example\"}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"listitem\",\"version\":1,\"value\":2},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Turso, \",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":3,\"mode\":\"normal\",\"style\":\"\",\"text\":\"AgentFS\",\"type\":\"text\",\"version\":1},{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\": SQLite-backed ﬁlesystem for agent state, with auditability and snapshotting baked in. \",\"type\":\"text\",\"version\":1},{\"children\":[{\"detail\":0,\"format\":8,\"mode\":\"normal\",\"style\":\"\",\"text\":\"turso.tech/blog/agentfs\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"link\",\"version\":1,\"textFormat\":8,\"rel\":null,\"target\":null,\"title\":null,\"url\":\"https://turso.tech/blog/agentfs\"}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"listitem\",\"version\":1,\"textFormat\":8,\"value\":3}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"list\",\"version\":1,\"textFormat\":8,\"listType\":\"bullet\",\"start\":1,\"tag\":\"ul\"},{\"children\":[],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":1,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Acknowledgments\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"heading\",\"version\":1,\"textFormat\":1,\"tag\":\"h2\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"Thanks to the Omada engineering team and the PMs who started writing skills before we asked them to. The shared surface only becomes a shared surface when the people around it are willing to write to it.\",\"type\":\"text\",\"version\":1},{\"type\":\"linebreak\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"},{\"children\":[{\"detail\":0,\"format\":0,\"mode\":\"normal\",\"style\":\"\",\"text\":\"If you are working on this, we would like to hear from you.\",\"type\":\"text\",\"version\":1}],\"direction\":\"ltr\",\"format\":\"left\",\"indent\":0,\"type\":\"paragraph\",\"version\":1,\"textFormat\":0,\"textStyle\":\"\"}],\"direction\":\"ltr\",\"format\":\"\",\"indent\":0,\"type\":\"root\",\"version\":1}}","itemId":"e503ea33-94b4-4c13-b00c-0e54f94056f0","fieldSchemaId":"322f4107-3445-4e38-813d-9676feec2baa"},{"id":"7867ce83-2b3d-4453-81bd-bedf613ecd1f","value":"{\"image\":\"c1d92f3f8cdd9d3ae35ca23022f460e55a93cdfc\",\"imageThumbnail\":\"6c8740b7f97c3d81535400a8ebf0ca87f82a28fc\",\"originalImageHeight\":1080,\"originalImageWidth\":1920,\"altText\":\"\",\"fileName\":\"Blog - The Filesystem Is the Product.png\"}","itemId":"e503ea33-94b4-4c13-b00c-0e54f94056f0","fieldSchemaId":"8f394baa-7d59-44e7-a548-49c17160e0c9"}]}}}},"slugByItemId":{"e503ea33-94b4-4c13-b00c-0e54f94056f0":"the-filesystem-is-the-product","be29b77b-0387-4904-8858-00b895c2a377":"inside-omada-2","90f57376-fb2e-4275-929b-54bb02a61b8e":"inside-omada-1","0f312f5e-82dd-457c-9034-13dcb2f870c2":"restaurant-marketing","bb723ba9-7c19-4554-b0f7-3bdcb834fe05":"restaurant-back-office-software","c2db4658-538b-49e7-ab2f-7772f1fd3e1f":"increase-restaurant-revenue","cff6da2d-a0fc-4114-86a1-1b148e7830a8":"2026-restaurant-trends","8d051033-1c4b-4d9d-b7a5-ee51f57324d0":"restaurant-marketing-tools"}}