# Skills Directory Context > Auto-generated by OpenCode elite setup | Updated: 2026-04-10 ## Purpose Modular skill implementations that extend Legion's capabilities. Skills are discovered via `skills/manifest.json` and routed by `core/skill_registry.py`. ## Key Files - `manifest.json` — Index of all available skills (name, description, keywords, file path) - `web_search.py` — DuckDuckGo + SerpAPI web search, async, Telegram HTML formatted - `geo_intelligence.py` — Location-aware restaurant/hotel/nearby recommendations - `database_agent.py` — Natural language to SQL for Supabase (read-only SELECT) ## Rules - All async I/O operations use asyncio/await - Skills return Telegram HTML formatted strings for user-facing output - Never hardcode API keys — use os.getenv() - Skills are discovered dynamically via manifest.json (no hardcoded imports in routing) - Database agent only allows SELECT queries (safety validated before execution) ## Skill Naming Convention - File name matches class name: `web_search.py` → `WebSearch` - Each skill has a single public async `execute()` or named method - Error messages are user-friendly and HTML formatted ## Test Command ```bash pytest tests/ -x --asyncio-mode=auto -q ```