跳到主要内容

自定义工具

自定义工具

自定义工具以工作区特有的操作扩展 Agent,并通过与钩子相同的受约束 API 运行。

声明工具

创建 +<lower_snake_case>.tssrc/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.query.products.findFirst({
				where: { id: { eq: productId } }
			});
			return product ?? null;
		})
});

受约束,而非特权

自定义工具不是后门——它以 与钩子相同的受约束 API 运行:策略、钩子与审计适用于它所做的一切。

保留名称

内置工具名归平台所有——与这些名称相同的编写工具永远不会运行,因为平台调用优先按名称匹配。参见 内置工具