From a450bb4b8b9889512bcefba55878879c0e65837e Mon Sep 17 00:00:00 2001 From: Anton Bogdanovich <27antonb@gmail.com> Date: Sat, 9 May 2026 12:37:52 -0700 Subject: [PATCH] fix(agent): enforce frontmatter policy for runtime tools --- pkg/agent/agent_init.go | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/pkg/agent/agent_init.go b/pkg/agent/agent_init.go index 8420cd101..08933eb75 100644 --- a/pkg/agent/agent_init.go +++ b/pkg/agent/agent_init.go @@ -114,7 +114,7 @@ func registerSharedTools( if err != nil { logger.ErrorCF("agent", "Failed to create web search tool", map[string]any{"error": err.Error()}) } else if searchTool != nil { - agent.Tools.Register(searchTool) + registerToolIfAllowed(agent, searchTool) } } if cfg.Tools.IsToolEnabled("web_fetch") { @@ -127,19 +127,19 @@ func registerSharedTools( if err != nil { logger.ErrorCF("agent", "Failed to create web fetch tool", map[string]any{"error": err.Error()}) } else { - agent.Tools.Register(fetchTool) + registerToolIfAllowed(agent, fetchTool) } } // Hardware tools (I2C, SPI) - Linux only, returns error on other platforms if cfg.Tools.IsToolEnabled("i2c") { - agent.Tools.Register(tools.NewI2CTool()) + registerToolIfAllowed(agent, tools.NewI2CTool()) } if cfg.Tools.IsToolEnabled("spi") { - agent.Tools.Register(tools.NewSPITool()) + registerToolIfAllowed(agent, tools.NewSPITool()) } if cfg.Tools.IsToolEnabled("serial") { - agent.Tools.Register(tools.NewSerialTool()) + registerToolIfAllowed(agent, tools.NewSerialTool()) } // Message tool @@ -166,7 +166,7 @@ func registerSharedTools( ReplyToMessageID: replyToMessageID, }) }) - agent.Tools.Register(messageTool) + registerToolIfAllowed(agent, messageTool) } if cfg.Tools.IsToolEnabled("reaction") { reactionTool := tools.NewReactionTool() @@ -185,7 +185,7 @@ func registerSharedTools( _, err := rc.ReactToMessage(ctx, chatID, messageID) return err }) - agent.Tools.Register(reactionTool) + registerToolIfAllowed(agent, reactionTool) } // Send file tool (outbound media via MediaStore — store injected later by SetMediaStore) @@ -197,11 +197,11 @@ func registerSharedTools( nil, allowReadPaths, ) - agent.Tools.Register(sendFileTool) + registerToolIfAllowed(agent, sendFileTool) } if ttsProvider != nil { - agent.Tools.Register(tools.NewSendTTSTool(ttsProvider, nil)) + registerToolIfAllowed(agent, tools.NewSendTTSTool(ttsProvider, nil)) } if cfg.Tools.IsToolEnabled("load_image") { @@ -212,7 +212,7 @@ func registerSharedTools( nil, allowReadPaths, ) - agent.Tools.Register(loadImageTool) + registerToolIfAllowed(agent, loadImageTool) } // Skill discovery and installation tools @@ -227,11 +227,11 @@ func registerSharedTools( cfg.Tools.Skills.SearchCache.MaxSize, time.Duration(cfg.Tools.Skills.SearchCache.TTLSeconds)*time.Second, ) - agent.Tools.Register(tools.NewFindSkillsTool(registryMgr, searchCache)) + registerToolIfAllowed(agent, tools.NewFindSkillsTool(registryMgr, searchCache)) } if install_skills_enable { - agent.Tools.Register(tools.NewInstallSkillTool(registryMgr, agent.Workspace)) + registerToolIfAllowed(agent, tools.NewInstallSkillTool(registryMgr, agent.Workspace)) } } @@ -324,15 +324,15 @@ func registerSharedTools( return registry.CanSpawnSubagent(currentAgentID, targetAgentID) }) - agent.Tools.Register(spawnTool) + registerToolIfAllowed(agent, spawnTool) // Also register the synchronous subagent tool subagentTool := tools.NewSubagentTool(subagentManager) subagentTool.SetSpawner(NewSubTurnSpawner(al)) - agent.Tools.Register(subagentTool) + registerToolIfAllowed(agent, subagentTool) } if spawnStatusEnabled { - agent.Tools.Register(tools.NewSpawnStatusTool(subagentManager)) + registerToolIfAllowed(agent, tools.NewSpawnStatusTool(subagentManager)) } } else if (spawnEnabled || spawnStatusEnabled) && !cfg.Tools.IsToolEnabled("subagent") { logger.WarnCF("agent", "spawn/spawn_status tools require subagent to be enabled", nil) @@ -350,7 +350,7 @@ func registerSharedTools( delegateTool.SetAllowlistChecker(func(targetAgentID string) bool { return registry.CanSpawnSubagent(currentAgentID, targetAgentID) }) - agent.Tools.Register(delegateTool) + registerToolIfAllowed(agent, delegateTool) } warnOnUnknownAgentToolDeclarations(agentID, agent.Workspace, agent.Definition, agent.Tools)