Skip to content
Dashboard

We removed 80% of our agent’s tools

Chief of Software, Vercel

Link to headingWhat is d0

d0 enables anyone to make data-driven decisions by asking it questions in Slackd0 enables anyone to make data-driven decisions by asking it questions in Slack
d0 enables anyone to make data-driven decisions by asking it questions in Slack

Link to headingGetting out of the model's way

ai-sdk@6.0.0-beta.160 ToolLoopAgent
import { ToolLoopAgent } from 'ai';
import { GetEntityJoins, LoadCatalog, /*...*/ } from '@/lib/tools'
const agent = new ToolLoopAgent({
model: "anthropic/claude-opus-4.5",
instructions: "",
tools: {
GetEntityJoins, LoadCatalog, RecallContext, LoadEntityDetails,
SearchCatalog, ClarifyIntent, SearchSchema, GenerateAnalysisPlan,
FinalizeQueryPlan, FinalizeNoData, JoinPathFinder, SyntaxValidator,
FinalizeBuild, ExecuteSQL, FormatResults, VisualizeData, ExplainResults
},
});

Link to headingA new idea, what if we just… stopped?

Link to headingv2: The file system is the agent

ai-sdk@6.0.0 ToolLoopAgent
import { Sandbox } from "@vercel/sandbox";
import { files } from './semantic-catalog'
import { tool, ToolLoopAgent } from "ai";
import { ExecuteSQL } from "@/lib/tools";}
const sandbox = await Sandbox.create();
await sandbox.writeFiles(files);
const executeCommandTool(sandbox: Sandbox) {
return tool({
/* ... */
execute: async ({ command }) => {
const result = await sandbox.exec(command);
return { /* */ };
}
})
}
const agent = new ToolLoopAgent({
model: "anthropic/claude-opus-4.5",
instructions: "",
tools: {
ExecuteCommand: executeCommandTool(sandbox),
ExecuteSQL,
},
})

Link to heading3.5x faster, 37% fewer tokens, 100% success rate

Link to headingLessons learned

Link to headingWhat this means for agent builders

Build an agent with Vercel and Slack

Start creating your own Slack Agent using the Bolt for JavaScript and Nitro template. Deploy it on Vercel to get a live, production-ready setup in minutes.

Deploy the template