Rol de la Capa
Innate es auxiliar — nunca debe bloquear la tarea principal. Todas las operaciones de innate son de mejor esfuerzo. Ante cualquier error de herramienta: reintentar una vez con una llamada corregida, luego abandonar y continuar.
Cuándo Recordar
Recordar al inicio de una tarea solo si la tarea es:
- De un dominio con patrones recurrentes conocidos (p. ej., un código base, framework o protocolo específico)
- Sobre depuración o corrección de algo que pueda haberse encontrado antes
- Arquitectónica/de diseño — las decisiones previas importan
Omitir recordar para: tareas rápidas de una línea, preguntas con respuestas claras, tareas que el usuario haya delimitado como territorio completamente nuevo sin contexto previo.
Formulación de Consultas
Utiliza intención canónica, no las palabras literales del usuario. Mantén las consultas consistentes entre sesiones — la misma clase de problema siempre debe usar la misma forma canónica, porque Innate acumula estadísticas de contexto por patrón de consulta.
| El usuario dice | Buena consulta | Mala consulta |
|---|---|---|
| "¿por qué falla esto al iniciar?" | fallo inicio sqlite init | "¿por qué falla esto al iniciar" |
| "refactoriza el flujo de autenticación" | flujo auth manejo token sesión | refactorizar flujo auth |
| "añade limitación de tasa a la API" | patrón middleware limitación tasa | añadir limitación tasa |
| "depura la prueba inestable" | prueba inestable condición carrera sincronización | depurar prueba inestable |
Llamar: innate_recall(query=<intención_canónica>, budget=4000, source="mcp")
Inyecta los fragmentos recuperados en tu contexto de trabajo. Menciona al usuario cuál (si hay) conocimiento previo relevante fue encontrado — una frase es suficiente.
Gancho de Recuperación Automática
Cuando Innate está instalado con ganchos, un gancho UserPromptSubmit puede inyectar automáticamente un bloque <innate-recall> en la conversación — ya ejecutó una recuperación filtrada por relevancia para el prompt y lleva un trace_id. Cuando veas ese bloque:
- Reutiliza su
trace_idpara elinnate_recordde cierre — no llamesinnate_recallde nuevo para la misma tarea (eso crearía un rastro duplicado y colgante). - Trata sus fragmentos exactamente como si los hubieras recuperado tú mismo: aplica lo que ayude, luego cierra con un veredicto por fragmento (ver más abajo).
- Si el bloque está ausente y la tarea lo justifica, recupera manualmente como se indicó.
El gancho está filtrado por relevancia, por lo que su silencio significa "nada obtuvo una puntuación suficientemente alta" — no "no existe conocimiento". Recupera manualmente si sospechas que hay conocimiento relevante que la puerta pudo haber pasado por alto.
Cuándo Registrar
Registrar después de una tarea que produjo un resultado real (éxito o fracaso). Omitir registro para:
- Intercambios exploratorios sin resultado definitivo
- Tareas donde el usuario interrumpió antes de completar
- Recuperación pura (el usuario solo hizo una pregunta, no se construyó ni cambió nada)
Reglas de Resultado
| Situación | resultado |
|---|---|
| Tarea completada, usuario confirmó o aceptó el resultado | ok |
| Tarea fallida, el enfoque fue incorrecto, el usuario tuvo que corregir el rumbo | fail |
| Sesión interrumpida, resultado poco claro | unknown |
Veredicto por Fragmento — Obligatorio
Este es el contrato más importante en Innate: la clasificación de confianza solo es tan buena como la precisión de lo que informes aquí. Cada recuperación que generó fragmentos (manual o inyectada por gancho) debe cerrarse con un veredicto por fragmento. Para cada fragmento que se puso frente a ti, cae exactamente en uno de tres cubos:
| Veredicto | Qué significa | Dónde va |
|---|---|---|
| Usado + ayudó | Lo aplicaste y ahorró tiempo / evitó un error | used=[id] y feedback_up=[id] |
| Usado + engañó | Lo aplicaste pero era incorrecto o te llevó por mal camino | used=[id] y feedback_down=[id] |
| No usado | Recuperado pero nunca lo aplicaste | omitir por completo (no lo incluyas en used) |
Reglas que mantienen la señal limpia:
usedlista solo fragmentos que referenciaste activamente en tu razonamiento o salida — típicamente de uno a tres. Nunca lo rellenes con fragmentos meramente recuperados.- Si no aplicaste nada, esa es una señal real y valiosa: establece
used=[]explícitamente (conocido-ninguno). No omitas el registro — el silencio no es lo mismo que "nada ayudó". - Un fragmento que
usastecasi siempre debe llevar también una señal positiva o negativa. Un fragmento usado sin veredicto desperdicia la entrada de clasificación más fuerte que puedes dar. - Sé honesto con
feedback_down. Un fragmento incorrecto que marcas como negativo se revisa y archiva; un fragmento incorrecto que dejas sin marcar sigue engañando a futuras sesiones.
Resumen de Salida — Formato Estructurado
Escribe una oración autocontenida que un agente futuro pueda usar sin contexto. Usa esta estructura:
<lo que se hizo o aprendió> — <restricción o método clave> — <cuándo aplica esto>
Ejemplos buenos:
Corregida la detección del modo WAL de SQLite verificando la respuesta de PRAGMA journal_mode en lugar de asumir WAL — se activa en cualquier conexión nueva a la base de datos en configuraciones multiprocesoResuelta prueba de autenticación inestable inyectando un mock de reloj — el tiempo real del sistema causa condiciones de carrera en la verificación de caducidad del tokenLa limitación de tasa debe aplicarse antes del middleware de autenticación, no después — de lo contrario, las solicitudes no autenticadas evitan el limitador
Ejemplos malos (demasiado vagos para reutilizar):
Corregí el errorAyudé al usuario con la autenticaciónEl problema era la sincronización
El output_summary se convierte en el fragmento de conocimiento reutilizable. Si se lee como una historia, reescríbelo como un principio. Prefiere la forma general y transferible — elimina nombres de repositorios/archivos/funciones e identificadores únicos, y reformula la lección para que ayude también en el próximo proyecto; conserva detalles específicos del proyecto solo cuando la lección no se pueda generalizar sin perder su significado. Si no puedes escribir un resumen útil, establece output="unknown" y omite el registro.
Llamar: innate_record(trace_id=<id>, outcome=<ok|fail|unknown>, used=[<id_fragmentos>], output_summary=<oración>)
Retroalimentación Explícita — Por Qué Importa
Las listas feedback_up / feedback_down de la tabla de veredictos son la señal más rápida para la calidad del conocimiento, y dirigen directamente la clasificación y el ciclo de vida: dos señales negativas en el mismo fragmento desencadenan una revisión de gobernanza; cinco desencadenan archivo automático. Por el contrario, used + feedback_up repetido es lo que promueve un fragmento pending a active. Omitir la retroalimentación congela la base de conocimiento; darla es cómo el buen conocimiento sube y el mal conocimiento cae.
Nominación — Rara, Explícita
Usa el campo nomination solo para lecciones genuinamente generalizables — patrones que ahorrarán tiempo significativo la próxima vez que aparezca este tipo de problema. Raro. No para cada tarea.
Formato para nominación (principio autocontenido):
<principio> — <cuándo aplica> — <qué evitar>
Ejemplo:
innate_record(..., nomination="El índice ÚNICO de SQLite en una cláusula WHERE parcial requiere una coincidencia exacta de WHERE en ON CONFLICT — aplica a todos los patrones upsert; ON CONFLICT sin WHERE omitirá silenciosamente el upsert")
Referencia de Herramientas MCP
| Herramienta | Uso | Notas |
|---|---|---|
innate_recall | Inicio de tarea (cuando sea relevante) | Usa forma de consulta canónica — la redacción consistente acumula estadísticas de contexto |
innate_record | Fin de tarea (cuando exista un resultado real) | output_summary estructurado + IDs de usado precisos |
innate_add | Capturar conocimiento confirmado | Siempre source="mcp"; va a pendiente, espera revisión |
innate_spark | Idea rápida para después | Forma breve destilada; sin necesidad de revisión |
innate_evolve | Fin de sesión | trigger="manual"; destila registros + cura la base de conocimiento |
innate_inspect | Verificación de salud | conteos de fragmentos, ratio de deuda, cola de reconstrucción |
innate_appraise | Verificación rápida antes de un paso arriesgado | Señal de referencia solamente — intuición, NO una respuesta precisa. Pésalo como una entrada; nunca permitas que anule tu propio análisis. abstained=true significa sin base — eso es correcto, no un fallo |
Nunca llamar sin solicitud explícita del usuario: innate_approve, innate_archive,
innate_invalidate, innate_restore, innate_mature_spark, innate_promote_spark,
innate_drop_spark.
Decisión de Escritura
Antes de finalizar una sesión larga, ejecuta esta lista de verificación silenciosamente:
- ¿Se encontró una solución no obvia? (solución alternativa, restricción oculta, patrón de error sutil)
- ¿Se identificó una habilidad, método o técnica general y transferible? (prefiere estas — abstrae las lecciones específicas del proyecto a una forma reutilizable; mantén una regla específica del proyecto solo cuando genuinamente no se pueda generalizar)
- ¿Corrigió el usuario una suposición incorrecta mía que probablemente repetiría?
- ¿Se alcanzó una idea difícilmente ganada después de múltiples intentos fallidos?
- ¿Ayudó activamente un fragmento recuperado? (registrar feedback_up)
- ¿Engañó un fragmento recuperado? (registrar feedback_down)
Si cualquiera de 1-4 → proponer al usuario:
"Esta sesión descubrió [descripción de una línea]. ¿Quieres que lo guarde en Innate?"
Solo llama a innate_spark o innate_add después de la confirmación del usuario. Nunca escribas silenciosamente.
Regla Anti-Verbatim
El texto de conversación en bruto nunca debe almacenarse. Siempre destilar a la forma de principio reutilizable:
<principio> — <contexto desencadenante> — <qué evitar>
| ❌ Verbatim | ✅ Destilado |
|---|---|
| "El usuario me dijo que usara el modo WAL y lo arreglé cambiando la pragma" | "El modo WAL de SQLite debe verificarse mediante la respuesta de PRAGMA, no asumirse — se activa en cualquier apertura de base de datos en configuraciones multiproceso con mucha escritura" |
| "Pasamos 2 horas depurando autenticación debido a desviación del reloj" | "La validación de JWT debe tener en cuenta la tolerancia a la desviación del reloj (≥30s) — se activa en autenticación distribuida entre servicios con relojes de sistema independientes" |
Preferir General sobre Específico del Proyecto
Innate está sesgado hacia habilidades, métodos y técnicas generales y transferibles — conocimiento que da frutos en todos los proyectos, no solo en el código base actual. Cuando una lección es específica del proyecto:
- Intenta abstraerla — elimina nombres de repositorios/archivos/funciones e identificadores únicos, y reformúlala como un principio que el próximo proyecto pueda reutilizar.
- Guarda la forma abstraída. Conserva detalles concretos específicos del proyecto solo cuando la lección genuinamente no se pueda generalizar sin perder su significado.
| ❌ Vinculado al proyecto | ✅ Generalizado |
|---|---|
"En este repositorio, record() debe ejecutarse dentro de BEGIN IMMEDIATE" | "Las mutaciones de estado de múltiples pasos que deben ser atómicas pertenecen a una transacción exclusiva, no a confirmaciones por paso — aplica a cualquier escritor SQLite con procesos concurrentes" |
"Establece recall.budget=4000 en la tabla meta" | "Expone el presupuesto de recuperación como un parámetro ajustable en lugar de codificarlo — permite que la recuperación escale con la ventana de contexto sin cambios de código" |
Chispas vs. Notas
Usar innate_spark | Usar innate_add |
|---|---|
| Idea rápida, intuición a medio formar | Principio reutilizable confirmado |
| Aún no validado | Validado en esta sesión |
| El usuario dice "anota esto para después" | El usuario dice "recuerda esta regla" |
Fallback CLI (si MCP no está configurado)
# Recuperar
innate recall "<intención_canónica>" --top 5 --format json --source cli
# Registrar con resumen estructurado
innate record <trace_id> --outcome ok \
--used <id1>,<id2> \
--output-summary "Corregí X haciendo Y — aplica cuando Z" \
--feedback up # o down
# Capturar conocimiento
innate add "<principio> — <desencadenante> — <qué evitar>" \
--trigger "<contexto de 2-5 palabras>" \
--source agent
# Chispa rápida
innate spark "<idea destilada en 1-2 oraciones>"
# Fin de sesión
innate evolve --trigger manual
innate inspect
Comandos
Los comandos de barra inclinada a continuación se instalan automáticamente en ~/.claude/commands/ mediante innate install y se actualizan en cada re-ejecución de innate install. Cada bloque command define un comando: metadatos antes de ---, cuerpo (el prompt del agente) después de ---.
name: innate-recall
description: Recuperar conocimiento previo de Innate para el contexto de la tarea actual
---
Ejecuta innate_recall para el contexto de la tarea actual e inyecta el resultado en esta conversación.
Si el usuario proporcionó una consulta después del comando, usa esa como la consulta de recuperación exactamente.
Si no se proporcionó consulta ($ARGUMENTS está vacío), infiere la consulta del mensaje de usuario más reciente
o de la intención de la tarea actual — usa la **intención canónica** (p. ej., `sqlite wal mode init`,
no `por qué falla esto`). Mantén la forma de la consulta consistente con cómo formularías la misma
clase de problema en el futuro.
Pasos:
1. Formula la cadena de consulta canónica (de $ARGUMENTS o intención inferida).
2. Llama a `innate_recall` con `query=<consulta>`, `budget=4000`, `source="mcp"`.
3. Si se devuelve conocimiento: resume en una oración lo que se encontró, luego inyecta los
fragmentos relevantes en el contexto.
4. Si está vacío: di "No se encontró conocimiento previo para: <consulta>" — no inventes.
5. Guarda el `trace_id` para usarlo en `/innate-record` más tarde.
name: innate-record
description: Cerrar el rastro Innate actual con un resultado y resumen estructurado
---
Cerrar el rastro Innate actual con un resultado y resumen.
Analiza $ARGUMENTS en busca de:
- outcome: uno de `ok`, `fail`, `unknown` (por defecto: `ok` si no se especifica)
- Cualquier texto restante se convierte en la anulación del output_summary
Pasos:
1. Identifica el trace_id activo de la llamada más reciente a `innate_recall` en esta sesión.
Si no hay trace_id disponible, di "No hay rastro activo — ejecuta /innate-recall primero."
2. Determina qué IDs de fragmentos recuperados fueron **realmente usados** en la respuesta final (no
solo candidatos recuperados). Sé preciso — los fragmentos recuperados no usados NO deben listarse.
3. Escribe un output_summary estructurado para un agente futuro que lea sin contexto:
Formato: `<lo que se hizo> — <restricción/método clave> — <cuándo aplica esto>`
Si el usuario proporcionó texto de resumen en $ARGUMENTS, usa eso.
4. Evalúa la retroalimentación:
- Si algún fragmento fue directamente útil → incluye `feedback_up=[id_fragmento]`
- Si algún fragmento fue incorrecto/engañoso → incluye `feedback_down=[id_fragmento]`
5. Llama a `innate_record` con `trace_id`, `outcome`, `used=[<id_fragmentos>]`,
`output_summary` y retroalimentación si aplica.
6. Confirma: "Registrado el rastro <trace_id> como <outcome>."
name: innate-save
description: Guardar un conocimiento confirmado en Innate como un fragmento pendiente
---
Guardar un conocimiento confirmado en Innate como un fragmento pendiente.
$ARGUMENTS es el texto del conocimiento a guardar (obligatorio). Si está vacío, pregunta: "¿Qué conocimiento
quieres guardar?"
Pasos:
1. Analiza $ARGUMENTS como el contenido del conocimiento.
2. Destila a la forma de principio: `<principio> — <contexto desencadenante> — <qué evitar>`
3. Llama a `innate_add` con el principio destilado.
4. Confirma: "Guardado en Innate como fragmento pendiente."
name: innate-spark
description: Guardar una chispa rápida (idea no confirmada) en Innate
---
Guardar una chispa rápida (idea no confirmada) en Innate.
$ARGUMENTS es el texto de la idea (obligatorio). Si está vacío, pregunta: "¿Qué idea
quieres guardar?"
Pasos:
1. Analiza $ARGUMENTS como el texto de la chispa.
2. Destila a 1-2 oraciones si es necesario.
3. Llama a `innate_spark` con el texto destilado.
4. Confirma: "Chispa guardada en Innate."
name: innate-evolve
description: Ejecutar evolución de Innate al final de la sesión
---
Ejecutar evolución de Innate al final de la sesión.
Sin argumentos. Pasos:
1. Llama a `innate_evolve` con `trigger="manual"`.
2. Reporta el resultado.
name: innate-inspect
description: Verificar el estado actual de la base de conocimiento de Innate
---
Verificar el estado actual de la base de conocimiento de Innate.
Sin argumentos. Pasos:
1. Llama a `innate_inspect`.
2. Presenta la información al usuario en un formato legible.