🔧 BaseTool — el contrato
BaseTool es la interfaz que hace extensible el sistema de herramientas. Cuatro atributos obligatorios y el LLM ya sabe cómo usar la herramienta.
📌 Interfaz BaseTool
- •name: str — identificador único ('google_calendar')
- •description: str — para que el LLM decida cuándo usarla
- •parameters: dict — JSON Schema de los argumentos
- •async execute(**kwargs) -> str — implementación
- •registry.py descubre tools automáticamente en tools/
💡 Consejo práctico
Escribe la description como si fuera para una persona inteligente. El LLM lee exactamente eso para decidir cuándo llamar a la tool.
🔍 Registry y descubrimiento automático
registry.py usa reflexión de Python para descubrir automáticamente todas las clases que extienden BaseTool. Cero código manual de registro.
📌 Cómo funciona el Auto-Discovery
- •Escanea todos los archivos en tools/*.py
- •Importa cada módulo con importlib.import_module()
- •Inspecciona clases con inspect.getmembers()
- •Filtra por subclases de BaseTool con issubclass()
- •Instancia y registra en el dict tool_registry
💡 Consejo práctico
Coloca una tool en tools/ y reinicia Jarvis. Aparecerá disponible automáticamente. Sin editar Agent ni modificar el registry manualmente.
📅 Google Workspace
La integración con Google Workspace conecta Jarvis con la infraestructura de productividad más común del mundo. Calendar, Drive, Gmail y Sheets en herramientas nativas.
📌 Tools de Google Workspace
- •GoogleCalendarTool: crear, listar, actualizar y cancelar eventos
- •GoogleDriveTool: subir, descargar, buscar y compartir archivos
- •GmailTool: leer, enviar, archivar y categorizar correos electrónicos
- •GoogleSheetsTool: leer y escribir en hojas de cálculo
- •Autenticación: OAuth2 con actualización automática del token
💡 Consejo práctico
Usa cuentas de servicio para automatizar sin interacción humana. Para uso personal, OAuth2 con un token guardado en .secrets es más sencillo.
🐙 Integración con GitHub
La GitHubTool convierte a Jarvis en un colaborador de desarrollo. Issues, PRs, commits y búsqueda de código vía API.
📌 Capacidades de GitHub
- •Listar y crear issues con labels y assignees
- •Revisar PRs: ver diffs, comentar, aprobar o solicitar cambios
- •Buscar código por defecto en un repositorio específico
- •Hacer commits simples (ej.: actualizar un archivo de configuración)
- •Verifica el estado de CI/CD en el último commit
💡 Consejo práctico
Configura GITHUB_TOKEN con el scope mínimo necesario. Para solo lectura, usa únicamente 'repo:read'. Para escribir, agrega 'repo' completo.
🌐 BrowserTool — Web Scraping
BrowserTool usa Playwright headless para darle a Jarvis acceso web en tiempo real. Investigar, extraer y navegar con la aprobación del usuario.
📌 Capacidades del browser
- •web_search(): busca en DuckDuckGo o Google con resultados estructurados
- •fetch_page(): extrae texto de cualquier URL (con detección de inyección)
- •take_screenshot(): captura visual de páginas para análisis
- •fill_form(): completa formularios con aprobación explícita
- •Todas las acciones pasan por el approval gate de nivel 2
💡 Consejo práctico
Siempre pasa el contenido de las páginas web por el escáner de inyección antes de agregarlo al contexto. Las páginas maliciosas pueden contener indirect injection.
⚡ Creación de Tools personalizadas
El modelo de extensión de INTELECTO es deliberadamente simple. Menos de 50 líneas para convertir cualquier API en una herramienta de Jarvis.
📌 Plantilla de tool en 5 pasos
- •1. Crear tools/minha_tool.py
- •2. from intelecto.tools.base import BaseTool
- •3. class MinhaTool(BaseTool):
- •4. Definir name, description, parameters (JSON Schema)
- •5. async def execute(**kwargs) -> str: # sua lógica
💡 Consejo práctico
El parámetro description es el más importante. Escríbelo como una docstring de función: qué hace, cuándo usarlo y qué devuelve. El LLM lo lee literalmente.
✅ Resumen del Módulo 4.2
Siguiente:
4.3 Automatización y webhooks