# Tool Catalog (Agent-Callable) Tool contracts are defined primarily in `services/router/tool_manager.py` and filtered by `services/router/agent_tools_config.py`. ## Tools | Tool | Contract location | Execution path | AuthZ scope | Timeout/Retry | Logging | |---|---|---|---|---|---| | `memory_search` | `services/router/tool_manager.py` (`TOOL_DEFINITIONS`) | `_memory_search` to memory API | per-agent via `is_tool_allowed` | router HTTP client default 60s | router logger | | `graph_query` | same | `_graph_query` (graph backend) | per-agent | API-call bounded | router logger | | `web_search` | same | `_web_search` (search backend) | per-agent | varies, httpx | router logger | | `web_extract` | same | `_web_extract` | per-agent | varies | router logger | | `crawl4ai_scrape` | same | `_crawl4ai_scrape` (crawl4ai endpoint) | per-agent | external call timeout | router logger | | `remember_fact` | same | `_remember_fact` (memory write) | per-agent | API-call bounded | router logger | | `image_generate` | same | `_image_generate` (swapper image API) | per-agent | 120-300s paths in router/tool manager | router logger | | `comfy_generate_image` | same | `_comfy_generate_image` + poll | per-agent specialized | `timeout_s` default 180 | router logger | | `comfy_generate_video` | same | `_comfy_generate_video` + poll | per-agent specialized | `timeout_s` default 300 | router logger | | `tts_speak` | same | `_tts_speak` (swapper TTS API) | per-agent | API timeout bounded | router logger | | `presentation_create` | same | `_presentation_create` via artifact-registry | per-agent | async job pattern | router logger | | `presentation_status` | same | `_presentation_status` | per-agent | short HTTP call | router logger | | `presentation_download` | same | `_presentation_download` | per-agent | short HTTP call | router logger | | `file_tool` | same | `_file_tool` action multiplexer | per-agent | per-action (`timeout_sec` bounded for djvu/pdf ops) | router logger | | `market_data` | same | `_market_data` reads market service + senpai consumer | senpai specialized (+others if granted) | short HTTP calls (8-10s) | router logger | ## Authorization Model - Tool exposure is allowlist-based per agent in `services/router/agent_tools_config.py`. - `FULL_STANDARD_STACK` applies to all top-level agents. - Specialized tools (e.g., `market_data`, `comfy_generate_*`) are attached by agent ID. ## Known Risk/Gap - Tool manager config loader reads hardcoded `helion` section for endpoint extraction (`_load_tools_config`) and may not reflect all agent-specific endpoint overrides. ## Source pointers - `services/router/tool_manager.py` - `services/router/agent_tools_config.py` - `services/router/main.py` - `config/agent_registry.yml`