最佳实践
构建健壮智能体的推荐模式。
智能体设计
1. 明确目的
{
"name": "code-reviewer",
"description": "Automated code review focusing on security and style",
"tags": ["security", "code-review", "linting"]
}
2. 聚焦系统提示
You are a code review specialist.
Focus on:
1. Security vulnerabilities
2. Code style consistency
3. Best practices
Do not:
- Rewrite working code unnecessarily
- Focus on subjective preferences
3. 合适的权限模式
{
"settings": {
"permissionMode": "acceptEdits", // Auto-approve edits for speed
"allowedTools": ["Read", "Grep", "Edit"] // Limit to safe tools
}
}
钩子模式
1. 安全失败
export async function PreToolUse(input: PreToolUseHookInput) {
try {
// Your logic
return { decision: 'approve' };
} catch (error) {
console.error('Hook error:', error);
// Fail open: allow operation
return { decision: 'approve' };
}
}
2. 保持钩子快速
// ✓ Good: Fast local check
export async function PreToolUse(input: PreToolUseHookInput) {
const blacklist = ['rm -rf', 'dd if='];
const cmd = input.tool_input?.command || '';
return {
decision: blacklist.some(b => cmd.includes(b)) ? 'deny' : 'approve'
};
}
// ✗ Bad: Slow external call
export async function PreToolUse(input: PreToolUseHookInput) {
const response = await fetch('https://api.example.com/check');
// Adds latency to every tool call!
}
3. 合理记录日志
export async function PreToolUse(input: PreToolUseHookInput) {
// ✓ Structured logging
console.log('[PreToolUse]', {
tool: input.tool_name,
timestamp: Date.now()
});
// ✗ Don't log sensitive data
console.log('[PreToolUse]', input.tool_input); // May contain secrets!
}
配置
1. 设置 maxTurns
{
"maxTurns": 50 // Prevent infinite loops
}
2. 使用工具允许列表
{
"settings": {
"allowedTools": ["Read", "Grep", "Edit"] // Security-sensitive agents
}
}
3. 提供备用模型
{
"model": "claude-sonnet-4.5-20250929",
"fallbackModel": "claude-3-5-sonnet-20241022" // Availability
}
安全
- 验证输入 : 在钩子中检查工具参数
- 限制权限 : 使用严格的权限模式
- 审计操作 : 使用 PostToolUse 记录所有操作
- 阻止危险命令 :实现 PreToolUse 防护
- 不要提交秘密 :将.env 文件加入.gitignore
性能
- 保持钩子快速 (通常小于 1 秒)
- 限制 maxTurns 以防止失控执行
- 使用高效工具 :优先选择 Read 而非 Bash cat
- 在钩子中缓存昂贵的操作
- 在热点路径中尽量减少外部 API 调用
文档
- 全面的 README: 解释代理的目的和使用方法
- 文档钩子 : 解释自定义行为
- 提供示例 : 展示实际应用
- 保持更新 : 与代码变更同步文档
版本控制
# .gitignore
node_modules/
.env
*.log
dist/ # Optional: can commit for convenience
提交:
- 源代码
- 配置
- 文档
- 测试
不要提交:
- 依赖项
- 构建工件(可选)
- 秘密
- 日志