diff --git a/agents/yolo.json b/agents/yolo.json new file mode 100644 index 0000000..3e8c5f5 --- /dev/null +++ b/agents/yolo.json @@ -0,0 +1,10 @@ +{ + "prompt": "To discover skills, use discover_skill.sh to search skill descriptions. Once a skill is identified, load it using load_skill.sh .", + "mcpServers": {}, + "trustedTools": ["file_read", "file_write"], + "hooks": { + "agentSpawn": "true", + "userPromptSubmit": "true", + "stop": "true" + } +} diff --git a/config/config.go b/config/config.go index 42f8991..3e5c339 100644 --- a/config/config.go +++ b/config/config.go @@ -6,9 +6,10 @@ import ( ) type Config struct { - MCPServers map[string]ServerConfig `json:"mcpServers,omitempty"` - Hooks map[string]string `json:"hooks,omitempty"` - Prompt string `json:"prompt,omitempty"` + MCPServers map[string]ServerConfig `json:"mcpServers,omitempty"` + Hooks map[string]string `json:"hooks,omitempty"` + Prompt string `json:"prompt,omitempty"` + TrustedTools []string `json:"trustedTools,omitempty"` } type ServerConfig struct { diff --git a/main.go b/main.go index 3e9c5fa..4c84f2a 100644 --- a/main.go +++ b/main.go @@ -279,11 +279,15 @@ func buildAgentEnv(cfg *config.Config, builtinExec *execpkg.Executor) agentEnv { hooks := map[string]string{} agentPrompt := "" + trustedTools := map[string]struct{}{} if cfg != nil { if cfg.Hooks != nil { hooks = cfg.Hooks } agentPrompt = cfg.Prompt + for _, t := range cfg.TrustedTools { + trustedTools[t] = struct{}{} + } } sp := systemPrompt(allTools) @@ -313,7 +317,11 @@ func buildAgentEnv(cfg *config.Config, builtinExec *execpkg.Executor) agentEnv { return extractMCPText(raw), nil } if _, ok := builtinNames[name]; ok { - return dispatchBuiltinExec(ctx, name, builtinExec, *confirmPtr, args) + var cfn agent.ConfirmFn + if _, trusted := trustedTools[name]; !trusted { + cfn = *confirmPtr + } + return dispatchBuiltinExec(ctx, name, builtinExec, cfn, args) } return "", fmt.Errorf("unknown tool: %s", name) }