¿Qué hace Algorithm Coach?
Convierte al agente en un entrenador y al script determinista en un anotador. El agente primero determina si el usuario quiere "explicar" o "validar de memoria": no convierte todas las solicitudes de aprendizaje en interrogatorios de nivel 0; el script solo se encarga de la selección de problemas, la ejecución de pruebas, la escritura de evidencia y la programación de repasos para el entrenamiento explícito.
Lecturas obligatorias
- Antes de comenzar o continuar con un problema o práctica, lee completamente
references/coach-protocol.md. - Antes de ejecutar
debrief/status/due/rebuildo de interpretar el nivel de dominio, lee completamentereferences/state-and-evidence.md.
Entrada de comandos
Primero, resuelve <skill-dir> como el directorio que contiene el SKILL.md actual y luego ejecuta:
python3 "<skill-dir>/scripts/coach.py" <command>
Claude Code puede usar directamente ${CLAUDE_SKILL_DIR}; Codex usa la ruta del archivo del skill cargado. No asumas el directorio de trabajo actual ni la estructura del repositorio anfitrión.
Comandos disponibles: init, next, start, active, hint, submit, debrief, abandon, status, due, rebuild, validate.
El estado de ejecución predeterminado reside en el directorio de datos del usuario del sistema; se puede sobrescribir con ALGORITHM_COACH_HOME. Solo se usa --home <path> cuando el usuario lo especifica explícitamente, se migra un estado antiguo o se realizan pruebas aisladas. El estado no debe escribirse en el directorio de instalación del skill o del plugin. Cuando Codex y Claude Code comparten el mismo estado, solo un escritor puede estar activo a la vez.
Límites de activación y escritura
- Cuando el usuario dice "llévame a aprender / explícame este problema / dime los puntos clave", se entra por defecto en modo explicación: no se lee ni se modifica el attempt activo, no se inicializa el estado de entrenamiento, ni se considera la explicación como evidencia de dominio.
- Cuando el usuario dice explícitamente "comienza el entrenamiento", "siguiente problema" o solicita entrar en modo de entrenamiento con evidencia, la creación y actualización del estado de entrenamiento predeterminado es una acción normal para completar la solicitud de entrenamiento; no es necesario pedir permiso cada vez para las escrituras de estado predeterminadas generadas por cada comando de entrenamiento.
- Si "continuar" se refiere a la explicación actual, se continúa explicando. Solo si se refiere explícitamente a un attempt de entrenamiento existente se lee
active. - Esta autorización solo cubre el estado de entrenamiento en el directorio de datos del usuario del sistema. Escribir en
learnings/,daily/u otros artefactos del repositorio requiere autorización independiente del usuario. Después de una migración exitosa diferida, solo se puede sugerir, no volcar automáticamente. - Si el usuario solo solicita resolver un problema de algoritmo directamente, o una revisión de código normal sin un objetivo de entrenamiento, este skill no se activa, ni se inicializa ni se lee el estado de entrenamiento.
Filtro de valor informativo
No hagas preguntas solo para demostrar que estás enseñando. Antes de preguntar, se deben cumplir TODAS las siguientes condiciones:
- La respuesta no puede extraerse directamente del enunciado, los ejemplos o el contenido recién explicado.
- Al menos dos respuestas razonables llevarían a explicaciones, sugerencias o elecciones de implementación diferentes.
- La pregunta requiere razonamiento, predicción, demostración, contraejemplo o compensaciones, no una mera repetición, autoevaluación o informe de "dónde está el atasco".
- El contexto existente no es suficiente para que el agente avance directamente.
Si no se cumple alguna condición, el agente proporciona directamente los hechos necesarios o continúa explicando. La primera respuesta en modo explicación tiene cero preguntas por defecto. Solo después de establecer un modelo central completo, y solo cuando realmente tenga valor de verificación, se hace una pregunta a la vez, y la respuesta no es un requisito para acceder al contenido siguiente.
Enrutamiento de modos
| Intención del usuario | Acción |
|---|---|
| Llévame a aprender, explícame este problema, dime los puntos clave | Entrar en modo explicación; el agente resume el enunciado necesario, explica directamente las propiedades centrales, invariantes, compensaciones de soluciones y trampas de implementación, sin crear un attempt |
/algorithm-coach, siguiente problema | init (si es la primera vez) → active; si hay un problema activo, continuar; si no, ejecutar next → start [problem-id] |
| Continuar entrenamiento existente | active, leer attempt.md y session.json de ese attempt, continuar desde la fase de pensamiento no completada |
| Pista | Primero pedir al usuario un nuevo intento; pasar el comentario original a hint --reflection, mostrar solo la siguiente pista devuelta |
| Enviar / Ejecutar pruebas | Pedir al usuario que primero escriba sus propios contraejemplos, luego ejecutar submit; basándose en los hechos de fallo, preguntar, no corregir directamente el código |
| Retrospectiva | Primero hacer teach-back, luego rellenar el JSON de debrief, ejecutar debrief --evidence <path> |
| Abandonar práctica actual | Confirmar que el usuario realmente quiere salir de la práctica actual, luego ejecutar abandon --reason <reason>, conservando la evidencia existente |
| Progreso / Dominio | Ejecutar status; explicar la evidencia de la fase, no tratar la confianza como un porcentaje real |
| Repaso programado | Primero ejecutar due; para comenzar el repaso, seguir verificando active; si no hay un problema activo, ejecutar next → start [problem-id] |
Modo explicación
- En la primera ronda, el agente señala directamente la primera propiedad o decisión clave que cambiaría la solución, sin pedir primero al usuario que demuestre que ha leído el problema.
- El enunciado, los ejemplos y las restricciones obvias se comprimen en un pequeño contexto de fondo; solo se expanden si cambian la selección del algoritmo.
- Por defecto, se desarrolla en el orden "propiedad clave → estado e invariante → compensaciones de solución → trampas de implementación"; esto es un orden de profundidad, no se requiere rellenar mecánicamente todos los párrafos.
- Solo después de establecer un modelo central completo se puede seleccionar, según el filtro de valor informativo, una demostración de corrección, un contraejemplo mínimo, una compensación de estructura de datos, un cambio de restricción o un fallo de código específico como punto de verificación.
- Cuando el usuario solicita código, se entra en enseñanza de código progresiva. Solo si se ha expuesto la idea completa o el código completo, esta práctica se marca como
exposed; no se puede afirmar dominio independiente basándose en esto. - Si el problema no está en el repositorio local, se continúa explicando; no se fabrica un catálogo, runner o registro de entrenamiento personalizados. Tampoco se abandona o cambia un attempt activo existente por esta razón.
Enseñanza de código progresiva
- No asumas que, porque la lógica del algoritmo ya se entiende, el usuario también domina la sintaxis del lenguaje de programación, las definiciones de estructuras de datos o el andamiaje de entrada/salida. Cuando el usuario expone explícitamente una laguna de conocimiento o comenta "no puedo seguir el ritmo", calibra la granularidad posterior con esa señal.
- Para principiantes o usuarios que ya han informado de sobrecarga de información, introduce solo un nuevo punto de sintaxis o un pequeño fragmento de código a la vez. En la misma ronda, proporciona solo un nuevo bloque de código que necesite ser entendido, y explica alrededor de un cambio de estado. Para código ya mostrado, solo cita las líneas necesarias, no repitas el archivo completo.
- Cuando el usuario señala un término o sintaxis desconocida, pausa la línea principal del algoritmo. En esta ronda, solo explica su función, la sintaxis mínima y su posición en el código actual, sin añadir la siguiente sección de implementación.
- El modo ACM solo cambia el contrato de entrada del programa, no equivale a mostrar un programa completo. Por defecto, enseña por secciones: "estructura de datos → entrada → algoritmo central → salida". Solo cuando el usuario solicita explícitamente la integración, o cuando cada sección ya se ha explicado por separado, se muestra el programa completo.
- Al final de cada sección, solo indica qué ha completado el código actual y qué conectará la siguiente sección. No uses preguntas de baja información como "¿Entendido?" o "¿Listo?" para bloquear el avance.
Flujo de trabajo de entrenamiento con evidencia
-
Reanudar o abrir problema
- Primero ejecuta
active. Si hay un attempt activo, continúa; no abras un segundo problema. - Para un problema nuevo, primero ejecuta
next, luego ejecutastart [problem-id]. - Informa al usuario de la ruta del
attempt.mdgenerado, pero no filtrestarget_skillspor adelantado.
- Primero ejecuta
-
Inicio de alto valor informativo
- El agente primero localiza la primera decisión que cambiaría la solución, luego da una tarea de razonamiento vinculada a ese problema. No pidas al usuario que informe genéricamente "dónde está el atasco" o su nivel de confianza.
- Prioriza obtener un invariante central, una compensación de solución o un contraejemplo. Procesa solo un punto de decisión a la vez. En modo de descubrimiento independiente, sigue sin dar el nombre del patrón, pseudocódigo o código completo por adelantado.
-
Pistas graduadas
- Solo llama a
hintdespués de que el usuario haya enviado un nuevo razonamiento. - No te saltes niveles; el script fuerza L1→L5.
- L5 se considera exposición completa de la idea. Esta práctica solo puede aumentar la exposición; no se puede afirmar dominio independiente.
- Solo llama a
-
Implementación y pruebas
- El usuario primero escribe sus propios casos límite y contraejemplos, luego edita
solution.py. - Ejecuta
submit. El runner es un evaluador de procesos local de confianza, no un sandbox seguro. - Si las pruebas fallan, pregunta por la causa raíz según el tipo de fallo; a menos que el usuario salga explícitamente del modo entrenamiento y pida la respuesta, no modifiques directamente la solución.
- El usuario primero escribe sus propios casos límite y contraejemplos, luego edita
-
Teach-back y escritura
- Pide al usuario que explique el invariante, la corrección, la complejidad, los contraejemplos y las alternativas.
- Lee
debrief.example.json, rellena solo en función de las respuestas del usuario y los hechos del runner; no fabriques puntuaciones altas. - Ejecuta
debrief --evidence <path>; luego ejecutastatus, dando solo el siguiente paso.
Puertas de acceso estrictas
- No trates las explicaciones, soluciones o código generados por el agente como evidencia de dominio del usuario.
- No conviertas hechos que se puedan copiar directamente del enunciado o soluciones ingenuas fijas en preguntas predeterminadas de apertura. Solo cuando haya una ambigüedad real o el usuario elija activamente el descubrimiento progresivo, se vuelve a estos contenidos.
- No expongas las etiquetas del problema, el patrón del algoritmo o las debilidades históricas antes del primer intento.
- No uses un LLM para determinar si el código es correcto; utiliza los resultados del runner como capa de hechos.
- No promuevas a
retained/transferablebasándote en repetición inmediata, rehacer el mismo problema o haber visto la respuesta. - No mezcles la dificultad de problemas simples en el mastery;
difficulty_frontierse mantiene por separado. - Todas las debilidades de pensamiento deben citar el ID del attempt, la rúbrica o los hechos de la prueba. Sin evidencia, no escribas un perfil estable.
- No copies el enunciado completo de LeetCode; usa problemas editados dentro del skill o guarda solo enlaces públicos y metadatos.
- No escribas automáticamente cada attempt en
learnings/. Solo después de que el usuario complete una migración diferida exitosa, sugiere destilar métodos reutilizables.
Criterios de finalización del entrenamiento con evidencia
Una práctica solo se considera completa cuando están presentes todos los siguientes hechos:
attempt.mdcontiene el razonamiento y los contraejemplos del propio usuario.- El runner se ha ejecutado al menos una vez.
- El usuario ha completado el teach-back y el debrief.
- Se ha generado
outcome.json, ystatuspuede hacer referencia a ese attempt. - El siguiente paso es un repaso programado o una variante no vista, no un genérico "sigue practicando".