🧬 Identidad y personalidad
SOUL.md, AGENTS.md, USER.md, sistema AIEOS para exportar la personalidad y perfiles intercambiables según el contexto.
SOUL.md es el archivo más importante de workspace/. Define el nombre, los pronombres, el tono de voz (formal/casual), los valores éticos, el estilo de respuesta, las preferencias técnicas e incluso el sentido del humor del asistente.
Un SOUL.md bien escrito transforma a Jarvis de un chatbot genérico en un compañero con personalidad coherente. Es la diferencia entre «¿Cómo puedo ayudarte?» y «Directo al punto: ¿qué está bloqueado?»
Diseño de personalidad, inyección de system prompt, tono consistente, valores como guardrails, estilo de comunicación.
AGENTS.md contiene reglas explícitas de comportamiento: siempre pedir confirmación antes de eliminar archivos, nunca ejecutar código sin revisión en modo autónomo, priorizar la seguridad sobre la velocidad.
Las reglas explícitas son más confiables que esperar que el LLM «entienda» lo que quieres. AGENTS.md es tu contrato de uso con el asistente.
Reglas positivas (SIEMPRE), reglas negativas (NUNCA), prioridades de tareas, escalamiento a una persona.
USER.md contiene información sobre su creador: nombre, stack técnico favorito, empresa, zona horaria y proyectos en curso. Jarvis usa esta información para personalizar todas las respuestas.
Sin USER.md, el asistente responde de forma genérica. Con USER.md bien completado, sugiere Python cuando lo prefieres y sabe que usas Vim, no VS Code.
Perfil del usuario, preferencias técnicas, contexto profesional, personalización de respuestas.
AIEOS es el formato de exportación de identidad de INTELECTO. Permite serializar la personalidad completa (SOUL + AGENTS + USER) en un único archivo portable.
Puedes tener varios Jarvis con personalidades distintas —uno para el trabajo y otro para tus proyectos personales— y alternar entre ellos al instante.
Serialización de identidad, perfiles intercambiables, importación/exportación de personalidad, multi-persona.
INTELECTO admite varios perfiles de SOUL.md. Puedes tener "Atlas-Dev" para programación (directo, técnico), "Atlas-Meeting" para el contexto corporativo (formal, diplomático) y alternar entre ellos con un comando.
Los distintos contextos requieren tonos diferentes. Un asistente que solo habla de una manera es limitado. Los perfiles intercambiables ofrecen flexibilidad real.
Cambio de perfil, personalidad adaptada al contexto, perfiles de espacio de trabajo, cambio de identidad en caliente.
Escribir el SOUL.md es un proceso iterativo. Escribes, pruebas con preguntas reales, observas respuestas inesperadas y refinas las instrucciones hasta que el comportamiento sea coherente con lo que quieres.
Ningún SOUL.md queda perfecto en la primera versión. El proceso de refinamiento es la habilidad de ingeniería de prompts más importante para los asistentes personales.
Ingeniería de prompts iterativa, casos límite de personalidad, pruebas de consistencia, calibración del tono.
💬 Canales de comunicación
Telegram como canal principal, WhatsApp, Discord, Slack, correo electrónico IMAP e implementación de BaseChannel.
Telegram ofrece una API robusta, polling o webhooks, envío de archivos, botones inline y grupos. Es el canal más fácil de configurar y el más confiable para un uso personal intensivo.
La mayoría de las demos y los casos reales de asistentes personales usan Telegram. Dominar primero este canal acelera todos los demás: el patrón BaseChannel es el mismo.
BotFather, polling vs. webhook, teclados en línea, chat_id, usuarios permitidos, tipos de mensajes.
BaseChannel define 3 métodos abstractos: start(), que inicializa la conexión; send(user_id, message), que entrega la respuesta; y stop(), que cierra de forma ordenada. Cualquier plataforma que implemente estos 3 métodos es un canal válido.
El Agent nunca sabe qué canal está usando: solo llama a send(). Esta abstracción permite cambiar Telegram por Discord en minutos sin modificar el Agent.
Interfaz abstracta, patrón adapter, agente independiente del canal, apagado ordenado.
WhatsApp vía Meta Business API requiere aprobación, pero es el canal más usado en Brasil. INTELECTO implementa WhatsAppChannel, que usa webhooks de Meta para recibir mensajes y la API para enviarlos.
Para uso profesional en Brasil, WhatsApp es insustituible. Tener un Jarvis que responde por WhatsApp es una ventaja competitiva para freelancers y empresas.
Meta Business API, verificación de webhook, ID del número de teléfono, mensajes de plantilla, límites de tasa.
Discord y Slack son canales ideales para equipos. DiscordChannel usa discord.py y admite slash commands. SlackChannel usa la Events API con OAuth para espacios de trabajo empresariales.
Un asistente que está en el Discord/Slack del equipo responde las preguntas de todo el equipo, automatiza flujos de trabajo y elimina reuniones innecesarias.
Permisos del bot, comandos slash, suscripciones a eventos, permisos del workspace, gestión de menciones.
EmailChannel usa IMAP para monitorear una bandeja de entrada y SMTP para enviar respuestas. Jarvis puede responder correos automáticamente o generar borradores para revisión humana.
La clasificación automática de correos electrónicos es uno de los casos de uso con mayor ROI. Un Jarvis que categoriza, prioriza y responde correos rutinarios ahorra horas por semana.
IMAP polling, MIME parsing, thread tracking, auto-reply vs draft, spam filtering.
VoiceChannel usa Whisper para la transcripción en tiempo real. Cuando detecta la palabra de activación configurada (por ejemplo, "Atlas"), envía el texto transcrito al Agent y sintetiza la respuesta con TTS.
La voz es el canal más natural para interactuar mientras trabajas. Un Jarvis que escucha y responde por voz transforma el flujo de trabajo en manos libres.
Detección de wake word, Whisper STT, síntesis de TTS, VAD (detección de actividad de voz), latencia de respuesta.
🧠 Memoria y conocimiento
SQLite FTS5 + BM25, sistema de 2 capas (MEMORY.md + memory.db), categorías y compactación automática.
FTS5 es el módulo de búsqueda de texto completo de SQLite. Sin dependencias externas, sin servidor, sin costo: solo SQLite con índices de búsqueda de texto altamente optimizados.
La memoria de Jarvis debe poder buscarse rápidamente. FTS5 indexa automáticamente todo el contenido y permite hacer búsquedas en milisegundos en miles de registros.
Tabla virtual FTS5, tokenización, índice invertido, búsqueda por prefijo y coincidencia de frases.
BM25 es el algoritmo de clasificación por relevancia que usa FTS5. Cuando Jarvis busca recuerdos relacionados con tu mensaje, BM25 garantiza que los más relevantes aparezcan primero, no solo los más recientes.
Sin un ranking de relevancia, la memoria devuelve resultados aleatorios. BM25 es lo que hace inteligente la memoria de Jarvis, en lugar de ser solo una lista de hechos.
Frecuencia de términos, frecuencia inversa de documentos, pesos de campos, función bm25() en SQLite.
Capa 1: MEMORY.md en workspace/ — hechos estáticos de inicio que siempre están en el system prompt. Capa 2: memory.db — hechos dinámicos extraídos de conversaciones y buscados por relevancia cuando es necesario.
No se puede poner toda la memoria en el system prompt (es caro y lento). La arquitectura de 2 capas lo resuelve: lo esencial está siempre presente y el historial se busca cuando hace falta.
Context window management, RAG (retrieval augmented generation), bootstrap facts, dynamic retrieval.
Cada entrada en memory.db tiene una categoría: fact (hecho sobre el usuario o el mundo), conversation (fragmento importante de una conversación anterior), solution (cómo se resolvió un problema, muy útil para evitar rehacer trabajo).
Las categorías permiten hacer búsquedas más específicas. Cuando reportas un error, Jarvis busca solo category='solution' para comprobar si ya resolvió algo parecido.
Filtrado categórico, memoria de soluciones, hilos de conversación, extracción automática de hechos.
Antes de guardar un dato nuevo, store.py busca datos similares con BM25. Si la similitud es alta, actualiza el dato existente en vez de crear un duplicado. Así evita que la memoria crezca con información redundante.
Sin deduplicación, la memoria se llena de variaciones del mismo hecho. "El usuario usa Python" y "El usuario prefiere Python" serían entradas separadas; la deduplicación las une.
Umbral de similitud, patrón upsert, alternativa de similitud coseno, fusión de hechos.
Cuando la base de memoria supera un límite configurado, un job de compactación resume las entradas antiguas en hechos más densos. Mantiene la memoria relevante sin crecer indefinidamente.
La memoria sin límites es un problema. La compactación automática resuelve la tensión entre «recordarlo todo» y «mantener la búsqueda eficiente».
Compactación de Memory, resumen, TTL de memorias, pruning estratégico, decaimiento de relevancia.