# 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`
