Skip to content
Dashboard

We removed 80% of our agent’s tools

Chief of Software, Vercel

Copy 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

Copy 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
},
});

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

Copy 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,
},
})

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

Copy link to headingLessons learned

Copy 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

Ready to deploy?