自定义工具
自定义工具
自定义工具以工作区特有的操作扩展 Agent,并通过与 transform 相同的受约束 API 运行。
声明工具
创建 +<lower_snake_case>.ts 于 src/capabilities/tools/ 。文件名即工具名,文件导出一个 defineAgentTool:
// src/capabilities/tools/+product_lookup.ts
import { defineAgentTool } from '@norbital-ai/bolt/authoring';
import { Effect, Schema } from 'effect';
export default defineAgentTool({
description: 'Returns one product by id, with its current stock level.',
input: Schema.Struct({ productId: Schema.String }),
run: (api, { productId }) =>
Effect.gen(function* () {
const product = yield* api.db.products.findFirst({
where: { id: { eq: productId } }
});
return product ?? null;
})
});
受约束,而非特权
自定义工具不是后门——它以 与 transform 相同的受约束 API 运行:策略、写入契约与审计适用于它所做的一切。声明一个工具并不等于提供它——主体持有的策略必须先在 capabilities.tools 下点名它,任何回合才能调用。
保留名称
内置工具名归平台所有——与这些名称相同的编写工具永远不会运行,因为平台调用优先按名称匹配。参见 内置工具 。