Skip to main content

Tool Manager

The ToolManager acts as a central registry and execution hub for all tools available to Penguin. Tools are defined with a name, description, and JSON input schema. Expensive components such as the NotebookExecutor or browser automation tools are loaded lazily only when first used, keeping startup times fast.

Responsibilities​

  • Registering and describing available tools
  • Providing a single execute_tool(name, params) entry point
  • Managing lazy initialization of optional subsystems (notebook, browser, etc.)
  • Offering helper methods like execute_code or perform_memory_search

Basic Usage​

from penguin.tools import ToolManager
from penguin.utils.log_error import log_error

config = {}
manager = ToolManager(config, log_error)

# Execute a grep search
result = manager.execute_tool("grep_search", {"pattern": "TODO"})
print(result)

The ToolManager is used throughout the core systems and by the ActionExecutor to run tools requested by the language model.

Lazy Loading Design​

ToolManager avoids importing heavy dependencies until they are actually needed. Properties such as notebook_executor, perplexity_provider, or the browser tools are initialized on first access. Each property checks an internal flag and constructs the component only once, keeping startup time and memory usage low.