name: "gmail" version: "1.0.0" description: "Gestiona correos electrónicos mediante Gmail API" category: "communication" author: "HIX Team" requires_permission: true dangerous: false
Gmail Skill
Overview
Esta skill permite a HIX interactuar con Gmail para enviar, leer, buscar y gestionar correos electrónicos. Requiere autenticación OAuth2 y permisos explícitos del usuario.
Capabilities
- Enviar correos electrónicos
- Leer correos (inbox, sent, drafts)
- Buscar correos por remitente, asunto, fecha
- Marcar como leído/no leído
- Archivar o eliminar correos
- Gestionar etiquetas
- Responder o reenviar correos
Parameters
Required
action(string): La acción a realizar (send,read,search,delete, etc.)credentials(object): Credenciales OAuth2 de Gmail
Optional
to(string): Destinatario del correo (parasend)subject(string): Asunto del correo (parasend)body(string): Cuerpo del mensaje (parasend)query(string): Consulta de búsqueda (parasearch)limit(number): Límite de resultados, default:10unread_only(boolean): Solo no leídos, default:false
Usage Examples
Example 1: Enviar Email Simple
User Intent: "Envía un email a juan@example.com diciéndole que la reunión es mañana a las 3pm"
HIX Understanding:
{
"skill": "gmail",
"action": "send",
"parameters": {
"to": "juan@example.com",
"subject": "Recordatorio: Reunión mañana",
"body": "Hola Juan,\n\nTe recuerdo que tenemos reunión mañana a las 3pm.\n\nSaludos"
}
}
HIX Asks Permission:
📧 Permiso requerido
Voy a enviar un email a juan@example.com con el asunto "Recordatorio: Reunión mañana"
¿Procedo? (sí/no)
Expected Output: ✓ Email enviado correctamente
Example 2: Leer Correos No Leídos
User Intent: "¿Tengo correos nuevos?"
HIX Understanding:
{
"skill": "gmail",
"action": "read",
"parameters": {
"unread_only": true,
"limit": 5
}
}
Expected Output:
📬 Tienes 3 correos nuevos:
1. De: Maria Lopez <maria@example.com>
Asunto: Propuesta de proyecto
Fecha: Hoy, 10:30 AM
2. De: LinkedIn <noreply@linkedin.com>
Asunto: Tienes 5 nuevas notificaciones
Fecha: Hoy, 9:15 AM
3. De: Carlos Ruiz <carlos@example.com>
Asunto: Re: Presupuesto Q1
Fecha: Ayer, 6:45 PM
Example 3: Buscar Emails
User Intent: "Busca todos los emails de Antonio de la última semana"
HIX Understanding:
{
"skill": "gmail",
"action": "search",
"parameters": {
"query": "from:antonio after:2026/02/08",
"limit": 10
}
}
Actions
send
Description: Envía un correo electrónico
Parameters:
to(required): Email del destinatariosubject(required): Asunto del mensajebody(required): Contenido del mensajecc(optional): Copiabcc(optional): Copia ocultaattachments(optional): Array de archivos a adjuntar
Returns: Confirmation message con mensaje ID
Requires Permission: ✓ Siempre
read
Description: Lee correos del inbox
Parameters:
unread_only(optional): Solo no leídoslimit(optional): Número máximo de emailslabel(optional): Filtrar por etiqueta
Returns: Lista de correos con remitente, asunto, fecha
Requires Permission: ✗ No destructivo
search
Description: Busca correos usando sintaxis de Gmail
Parameters:
query(required): Query de búsqueda (Gmail syntax)limit(optional): Máximo de resultados
Returns: Lista de correos que coinciden
Requires Permission: ✗ No destructivo
delete
Description: Elimina correos (mueve a papelera)
Parameters:
message_id(required): ID del mensaje a eliminar
Returns: Confirmation message
Requires Permission: ✓ Acción destructiva
archive
Description: Archiva correos
Parameters:
message_id(required): ID del mensaje
Returns: Confirmation message
Requires Permission: ✗ Reversible
Safety & Permissions
When to Ask Permission
- send: SIEMPRE - Muestra a quién se envía y el asunto
- delete: SIEMPRE - Acción destructiva
- modify: SIEMPRE - Al cambiar etiquetas importantes
- read/search: NO - Solo lectura, no destructivo
Safety Checks
- Validar formato de email antes de enviar
- Confirmar múltiples destinatarios (>3)
- Advertir si hay archivos adjuntos grandes (>10MB)
- Prevenir envío a listas de distribución sin confirmación
Error Handling
Common Errors
- AUTH_FAILED: Credenciales inválidas → Reautenticar
- QUOTA_EXCEEDED: Límite de envío alcanzado → Esperar o notificar
- INVALID_EMAIL: Formato de email inválido → Validar y corregir
- ATTACHMENT_TOO_LARGE: Adjunto excede límite → Usar Google Drive
- NETWORK_ERROR: Sin conexión → Reintentar con backoff
Implementation Notes
Dependencies
google-api-python-client>= 2.0google-auth>= 2.0google-auth-oauthlib>= 1.0
Configuration
{
"gmail": {
"client_id": "YOUR_CLIENT_ID.apps.googleusercontent.com",
"client_secret": "YOUR_CLIENT_SECRET",
"scopes": [
"https://www.googleapis.com/auth/gmail.send",
"https://www.googleapis.com/auth/gmail.readonly",
"https://www.googleapis.com/auth/gmail.modify"
],
"token_path": ".credentials/gmail_token.json"
}
}
File Structure
skills/gmail/
├── SKILL.md # Este archivo
├── gmail_api.py # Implementación principal
├── auth.py # Manejo de OAuth2
├── config.json # Configuración
└── test_gmail.prg # Test en Harbour (ejecutar vía HIX)
Testing
Manual Test
Ejecutar: http://localhost/skills/gmail/test_gmail.prg
El test verifica:
- Que la skill está cargada correctamente
- Metadata (nombre, versión, categoría)
- Sistema de permisos configurado
- Simulación de escenarios de uso
Test desde HIX
# Test individual
http://localhost/skills/gmail/test_gmail.prg
# Test de todas las skills
http://localhost/skills/test_all_skills.prg
Changelog
v1.0.0 (2026-02-15)
- Envío de emails básico
- Lectura de inbox
- Búsqueda de correos
- Gestión de permisos
Related Skills
calendar: Para agendar reuniones mencionadas en emailswhatsapp: Para notificar sobre emails importantesfilesystem: Para guardar adjuntos