Package Exports
- @agentskit/tools
Readme
@agentskit/tools
Give your agents real-world capabilities without writing a single integration.
Tags: ai · agents · llm · agentskit · ai-agents · function-calling · tool-use · mcp · web-search · filesystem
Why tools
- Save days of integration work — web search, filesystem read/write, shell execution, and directory listing are ready to drop in; no wiring required
- Safe by default — filesystem tools are sandboxed to a
basePath, shell commands require an explicit allowlist, so agents can't escape their boundaries - Composable with any runtime — tools are just objects with a schema; they work with
@agentskit/runtime,useChat, or any custom ReAct loop - Extend without friction — author custom tools with
@agentskit/templatesand register them the same way as built-ins
Install
npm install @agentskit/toolsQuick example
import { createRuntime } from '@agentskit/runtime'
import { openai } from '@agentskit/adapters'
import { webSearch, filesystem, shell } from '@agentskit/tools'
const runtime = createRuntime({
adapter: openai({ apiKey: process.env.OPENAI_API_KEY, model: 'gpt-4o' }),
tools: [
webSearch(),
...filesystem({ basePath: './workspace' }),
shell({ timeout: 10_000, allowed: ['ls', 'cat', 'grep'] }),
],
})
const result = await runtime.run('Find the README and summarize it')
console.log(result.content)With useChat (browser)
Tools are plain ToolDefinition values — register them in useChat the same way as in createRuntime.
Authoring tools with defineZodTool
If you use Zod, @agentskit/tools ships defineZodTool — a factory that:
- Types
executeargs from a Zod schema (full TypeScript inference) - Validates args at runtime via
schema.parsebefore calling your function - Converts the Zod schema to JSON Schema for the adapter via a user-supplied
toJsonSchemacallback
Zod and zod-to-json-schema are not bundled — install them as peer dependencies.
npm install zod zod-to-json-schemaimport { z } from 'zod'
import { zodToJsonSchema } from 'zod-to-json-schema'
import { defineZodTool } from '@agentskit/tools'
import type { JSONSchema7 } from 'json-schema'
const lookupUser = defineZodTool({
name: 'lookup_user',
description: 'Look up a user by ID.',
schema: z.object({
userId: z.string().uuid(),
includeProfile: z.boolean().optional(),
}),
toJsonSchema: (s) => zodToJsonSchema(s) as JSONSchema7,
async execute(args) {
// args.userId → string (UUID-validated by Zod at runtime)
// args.includeProfile → boolean | undefined
return await db.users.findById(args.userId, { profile: args.includeProfile })
},
})For tools without Zod, use defineTool from @agentskit/core with a JSON Schema as const.
Features
webSearch()— live web search for agentsfilesystem({ basePath })— sandboxed read, write, list, deleteshell({ allowed })— shell execution with command allowlistdefineZodTool— Zod-based tool factory with runtime validation and type inference- All tools follow
ToolDefinitioncontract (ADR 0002) — parallel tool calling supported - Works in
@agentskit/runtime,useChat, or any custom loop
Ecosystem
| Package | Role |
|---|---|
| @agentskit/core | ToolDefinition contract |
| @agentskit/runtime | createRuntime({ tools }) |
| @agentskit/react | useChat + tools in the UI |
| @agentskit/templates | Scaffold new tools |
Contributors
License
MIT — see LICENSE.