Skip to content
Apothem
Referencia

Especificación del esquema de artefactos

Esquema canónico de frontmatter YAML y campos obligatorios para todos los tipos de artefacto del árbol de fuentes de Apothem, con plantillas por clase y reglas de validación.

Plantillas de frontmatter YAML por clase y campos obligatorios para todos los artefactos del ecosistema Apothem.

Fuente de verdad. El contrato legible por máquina y aplicado por la puerta lo forman los JSON Schemas por clase bajo src/apothem/schemas/ (agent.schema.json, command.schema.json, skill.schema.json, …). Los esquemas de skill y de comando declaran additionalProperties: false, así que rechazan las claves desconocidas; los esquemas de agente, de output-style y de plan declaran additionalProperties: true. Esta página y frontmatter-schema.mdx son las dos proyecciones legibles por humanos de esos esquemas: esta página lleva las plantillas y los ejemplos desarrollados por clase, y frontmatter-schema, el índice conciso de claves obligatorias. Cuando una página discrepa de los JSON Schemas, prevalecen los esquemas.

Visión general

Todos los artefactos del árbol de fuentes de Apothem (bajo src/apothem/ y la superficie de configuración raíz) deben incluir un bloque de frontmatter YAML (entre delimitadores ---) con campos obligatorios y opcionales específicos de su tipo de artefacto. Este documento define el esquema canónico de cada tipo.

Reglas universales:

  • El frontmatter cumple con YAML 1.2
  • Todos los valores de cadena usan comillas dobles, y una cadena vacía se escribe ""
  • Orden de los campos: primero los obligatorios; los opcionales, agrupados por relevancia
  • Los comentarios en el frontmatter usan # seguido de un espacio: # comment
  • Los valores de ruta deben ser relativos (sin / inicial) y usar barras diagonales (/) para la compatibilidad multiplataforma

Convención de versionado (clases de artefacto versionadas: comandos, ayudantes, skills, CLAUDE.md):

  • version es semántica (MAJOR.MINOR.PATCH). Incrementa MAJOR para los cambios incompatibles de esquema o de contrato; MINOR para los cambios aditivos compatibles (nuevos campos opcionales, secciones adicionales, antipatrones adicionales); PATCH para un cambio de comportamiento que corrige una directiva existente sin romper el contrato.
  • Las correcciones de erratas y de enlaces, el formato y las ediciones que solo tocan comentarios o documentación dejan version sin cambios. Solo un cambio de comportamiento la incrementa.
  • updated es la fecha ISO 8601 (YYYY-MM-DD) de la edición más reciente. Debe cambiar con cada incremento de version, y también cambia con una corrección de erratas o de enlaces que no incrementa la versión.
  • Los artefactos nuevos comienzan en v0.Y.Z. La promoción a vX.Y.Z indica que el contrato del artefacto es lo bastante estable como para ser un compromiso público.
  • Las suites de plan quedan fuera de esta convención. Una corrección de erratas en una suite de plan incrementa el número PATCH de la versión de la suite (vX.Y.Z a vX.Y.(Z+1)) y añade una fila al Historial de revisiones. La guía para desarrolladores describe la regla de las suites de plan en su sección de revisiones de suites de plan.

Esquema: reglas

Patrón de ruta: src/apothem/rules/*.md

Propósito: Mandatos de comportamiento y directivas operativas.

Campos obligatorios

---
name: "kebab-case-identifier"
description: "One-line description"
pathFilter: "**/*.py, **/*.toml"
alwaysApply: true | false
---
CampoTipoPropósitoEjemplo
namestringIdentificador legible por máquina"operational-mandates"
descriptionstringDescripción de una línea para los registros"Operational mandates CM-1–10"
pathFilterstringLista de globs separados por comas que acota una regla filtrada por ruta; la cadena vacía ("") en las reglas siempre activas"**/*.py, **/*.toml"
alwaysApplybooleantrue para las reglas siempre activas (cargadas en todas partes); false para las reglas filtradas por ruta (cargadas cuando pathFilter coincide)true

Campos opcionales

Las reglas no llevan campos de frontmatter opcionales y, a diferencia de otras clases de artefacto, tampoco llevan los campos version / updated / scope / portability. Los cuatro campos obligatorios anteriores son el contrato completo de frontmatter de las reglas que aplica frontmatter_grep.

Ejemplo

---
name: "operational-mandates"
description: "Behavioral definitions for CM-1 through CM-10: violation indicators and recovery actions"
pathFilter: ""
alwaysApply: true
---

# Rule: Operational Mandates
...

Esquema: comandos

Patrón de ruta: src/apothem/commands/*.md

Propósito: Definiciones de comandos de barra (/plan-execute, /freshify, etc.).

Campos obligatorios

---
name: "command-name"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "What this command does"
argument-hint: "[argument-pattern]"
disable-model-invocation: true | false
portability: "universal"
allowed-tools: "Read, Glob, Grep"
---
CampoTipoPropósitoEjemplo
namestringNombre del comando (sin el / inicial)"plan-execute"
versionstringVersión semántica"X.Y.Z"
updatedstring (ISO 8601)Fecha de la última actualización"2026-04-20"
descriptionstringDescripción breve"Executes a phase with quality gates"
argument-hintstringPatrón de uso, o "[args...]" si no hay ninguno"[path/to/plan] [phase-id]"
disable-model-invocationbooleanSi es true, solo el operador inicia el comando; el modelo nunca lo invoca por su cuentatrue
portabilitystringClasificación de portabilidad entre los adaptadores de entorno"universal"
allowed-toolsstringHerramientas preaprobadas mientras se ejecuta el comando: herramientas de solo lectura y, además, herramientas con efectos secundarios solo como reglas acotadas, como Bash(git log *). El comodín "*" aislado se rechaza"Read, Glob, Grep"

Campos opcionales

Los comandos no llevan campos de frontmatter opcionales: los ocho campos obligatorios anteriores son el contrato completo de frontmatter de los comandos que aplica command.schema.json (additionalProperties: false).

Ejemplo

---
name: "plan-execute"
version: "X.Y.Z"
updated: "2026-04-20"
description: "Executes a specific phase from a Master Plan Suite with conformity checking and quality gates"
argument-hint: "[path/to/plan-suite/] [phase-id] [--dry-run]"
disable-model-invocation: true
portability: "universal"
allowed-tools: "Read, Glob, Grep"
---

# /plan-execute — Execute a Specific Phase
...

Esquema: ayudantes

Patrón de ruta:

src/apothem/agents/*.md

Propósito: Definiciones persistentes de ayudantes (también llamados trabajadores delegados) para la exploración en paralelo, la auditoría y las puertas de calidad.

Campos obligatorios

---
name: "agent-name"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "What this agent specializes in"
tools: "Tool1, Tool2, Tool3"
disallowedTools: "Write, Edit"
maxTurns: 20
effort: "high" | "medium" | "low"
---
CampoTipoPropósitoEjemplo
namestringIdentificador del ayudante"codebase-explorer"
versionstringVersión semántica"X.Y.Z"
updatedstring (ISO 8601)Fecha de la última actualización"2026-04-20"
descriptionstringDescripción de la especialización"Deep codebase exploration"
toolsstring (separado por comas)Herramientas permitidas"Read, Glob, Grep, Bash"
disallowedToolsstring (separado por comas)Herramientas prohibidas"Write, Edit, TodoWrite"
maxTurnsintegerNúmero máximo de turnos de conversación (típicamente 5–20; los valores superiores a 20 requieren un comentario de justificación en línea)20
effortenumAlcance computacional"high"

Campos opcionales

permissionMode: "default"       # Permission handling
memory: user | project | local  # Persistent-memory scope; omit for none
pattern: "Research" | "Audit" | "Implementation" | "Quality"  # Agent team pattern
portability: "universal"

Ejemplo

---
name: "codebase-explorer"
version: "X.Y.Z"
updated: "2026-04-20"
description: "Deep codebase exploration — find patterns, trace dependencies, discover conventions, map architecture"
tools: "Read, Glob, Grep, Bash"
disallowedTools: "Write, Edit, TodoWrite"
maxTurns: 20
effort: "high"
permissionMode: "default"
portability: "universal"
---

You are a codebase exploration specialist...

Esquema: skills

Patrón de ruta: src/apothem/skills/*/SKILL.md

Propósito: Definiciones de técnicas reutilizables con señales de detección y procedimientos de ejecución.

Campos obligatorios

---
name: "skill-name"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "What this skill teaches"
archetype: "workflow-template"
userInvocable: true | false
disable-model-invocation: true | false
allowed-tools: "Read, Glob, Grep"
---
CampoTipoPropósitoEjemplo
namestringIdentificador de la skill"plan-suite"
versionstringVersión semántica"X.Y.Z"
updatedstring (ISO 8601)Fecha de la última actualización"2026-04-20"
descriptionstringLo que proporciona la skill"Master Plan Suite template"
archetypestringClase de forma: un identificador kebab-case <class>-template"workflow-template"
userInvocablebooleanSi es true, el usuario puede solicitar explícitamente esta skillfalse
disable-model-invocationbooleanSi es true, la skill solo se alcanza mediante invocación explícitatrue
allowed-toolsstringHerramientas preaprobadas mientras se ejecuta la skill: herramientas de solo lectura y, además, herramientas con efectos secundarios solo como reglas acotadas, como Bash(git log *). El comodín "*" aislado se rechaza"Read, Glob, Grep"

Campos opcionales

argument-hint: "[args...]"                           # Usage pattern if userInvocable

Ejemplo

---
name: "ecosystem-audit"
version: "X.Y.Z"
updated: "2026-04-20"
description: "Comprehensive blind audit of the apothem ecosystem"
archetype: "audit-template"
userInvocable: true
disable-model-invocation: false
allowed-tools: "Read, Glob, Grep, Agent, TodoWrite"
argument-hint: "[--focus area] [--fix]"
---

## Purpose
...

Esquema: hooks

Patrón de ruta: el bloque hooks de settings.json más las implementaciones de Python bajo src/apothem/hooks/.

Propósito: Declarar validadores activados por eventos y manejadores de gestión de estado que el host invoca en puntos bien definidos del ciclo de vida.

Esquema del archivo de ajustes

La clave de nivel superior hooks asigna nombres de evento a arreglos de bloques matcher:

"hooks": {
  "<EventName>": [
    {
      "matcher": "<pattern>",
      "hooks": [
        {
          "type": "command",
          "command": "${PYTHON_BIN}",
          "args": ["${HARNESS_ROOT}/.apothem/support/hooks/dispatch.py", "<EventName>", "<message-name>"],
          "timeout": <seconds>,
          "statusMessage": "<short human-readable label>"
        }
      ]
    }
  ]
}

La forma -m apothem.hooks.dispatch sirve para desarrollar desde un checkout del código fuente con PYTHONPATH=src.

CampoTipoPropósitoEjemplo
matcherstringPatrón de nombre de herramienta (o "*" para los eventos independientes de la herramienta)"Write"
hooks[].typeliteral "command"El único tipo de manejador de hook admitido actualmente"command"
hooks[].commandstringComando ejecutable; Apothem usa el marcador ${PYTHON_BIN}, que se resuelve en la instalación"${PYTHON_BIN}"
hooks[].argsarreglo de stringsArgumentos en forma exec: una ruta de script bajo ${HARNESS_ROOT}/.apothem/support/ y después sus argumentos["${HARNESS_ROOT}/.apothem/support/hooks/dispatch.py", "SessionStart"]
hooks[].timeoutentero en segundosTiempo máximo de ejecución antes de que el host termine el hook30
hooks[].statusMessagestringEtiqueta breve que se muestra en la interfaz del host"Session start"

Eventos obligatorios

La plantilla de Claude Code registra cuatro eventos: SessionStart, PreToolUse, PostToolUse y Stop. scripts/dev/validate_hooks.py comprueba en settings.json los cinco eventos de la tabla siguiente, que son un conjunto distinto, e informa de cada uno que no encuentra como un aviso, no como un fallo. PostToolUse está registrado, pero no es uno de los cinco. PreCompact y PostCompact figuran entre los cinco, pero no se registran en Claude Code (referencia de hooks), por lo que en ese caso el verificador emite un aviso por ambos.

Los valores de tiempo de espera reflejan los presupuestos canónicos de los eventos de hook: la tabla siguiente los reproduce para comodidad del lector; la fuente canónica prevalece.

EventoTiempo de espera típicoPropósito
SessionStart30 segundosLeer la memoria, comprobar el estado del plan, informar de la disponibilidad
PreToolUse10 segundosValidar las escrituras según las políticas de aislamiento de contenido + el frontmatter
PreCompact30 segundosVerificar que el estado se haya externalizado antes de la compactación del contexto
PostCompact30 segundosRestaurar el estado de trabajo tras la compactación del contexto
Stop60 segundosExternalización al final de la sesión: estado de reanudación, salidas, decisiones

dispatch.py también acepta UserPromptSubmit y Notification en su lista de eventos permitidos, por compatibilidad futura; ninguno de los dos está conectado en las plantillas distribuidas. Para habilitarlos, agrega un bloque matcher con el mismo patrón en forma exec.

Capa de Python

Cada comando de hook pasa por el mismo despachador de Python:

ArchivoFunción
src/apothem/hooks/dispatch.pyEnruta SessionStart a session_start_bootstrap.main() y cada uno de los demás eventos permitidos a emit_hook_context.main(). Siempre sale con 0.
src/apothem/hooks/session_start_bootstrap.pyScript de hook de inicio de sesión: emite contexto con el resumen de la memoria y de la suite de plan.
src/apothem/hooks/emit_hook_context.pyEmisor de hook predeterminado: escribe un sobre válido que lleva la carga útil registrada de --context-file.
src/apothem/hooks/messages/*.mdCarga útil de contexto estática referenciada por --context-file.

Validación

scripts/dev/validate_hooks.py aplica el contrato de los hooks:

  • settings.json se analiza como JSON y declara cada uno de los cinco eventos de la tabla; que falte un evento es un aviso, no un fallo.
  • Los tres scripts de Python existen y se analizan como Python válido.
  • Todos los archivos de mensaje referenciados por argumentos --context-file existen.
  • No aparece ninguna ruta absoluta de usuario codificada de forma fija (C:\Users\..., etc.) en src/apothem/hooks/**.py.
  • Los artefactos de shell bajo src/apothem/hooks/ y scripts/ se limitan a los stubs aprobados de localizador / arranque.

Esquema: CLAUDE.md

Ruta: CLAUDE.md (raíz)

Propósito: Instrucciones de Claude Code acotadas al proyecto.

Frontmatter YAML obligatorio

---
name: "CLAUDE"
version: "MAJOR.MINOR.PATCH"
updated: "YYYY-MM-DD"
description: "Project-scoped Claude Code instructions for the Apothem source repository"
scope: "project"
portability: "project-local"
---

Secciones

CLAUDE.md se redacta en secciones de prosa, descritas en CLAUDE.md. Ningún validador exige una lista fija de secciones: scripts/dev/validate_ecosystem.py comprueba las claves de frontmatter anteriores.


Lista de verificación de validación

Cada artefacto debe superar estas comprobaciones:

Validación del frontmatter

  • El YAML es sintácticamente válido (sin errores de análisis)
  • Todos los campos obligatorios del tipo de artefacto están presentes
  • name sigue la convención kebab-case
  • version es semántica (MAJOR.MINOR.PATCH)
  • updated tiene formato de fecha ISO 8601 (YYYY-MM-DD)
  • description es una cadena no vacía, de una sola línea
  • Los campos opcionales coinciden con los valores de enumeración esperados (si aplica)
  • No hay erratas en los nombres de campo (usa los nombres canónicos del esquema)
  • No hay espacios en blanco sobrantes ni problemas de formato

Validación del contenido

  • El contenido comienza en una línea nueva después del --- de cierre; en los archivos de la familia Markdown, la línea de encabezado SPDX canónica es el primer contenido que le sigue
  • No hay referencias internas del plan (cumplimiento de CM-7)
  • Las referencias cruzadas se resuelven (si se listan otros artefactos)
  • Los enlaces usan rutas relativas con barras diagonales

Validación de la portabilidad

  • No hay rutas absolutas codificadas de forma fija (usa rutas relativas)
  • No hay sintaxis específica de Windows en los artefactos de alcance universal
  • Los separadores de ruta son barras diagonales
  • Las variables de entorno usan un formato independiente de la plataforma (${VAR} o nativo de la herramienta)

Notas

  • La coherencia como seguridad: El frontmatter canónico permite la validación automatizada, las herramientas y la verificación entre artefactos. Las desviaciones se acumulan rápidamente.
  • Declaración de portabilidad: No todos los artefactos pueden ser universales. Declara las restricciones explícitamente: es mejor documentar una salvedad que distribuir un fallo silencioso.
  • Kebab-case para los nombres: Fácil de usar en URL, scripts y contextos de línea de comandos. Evita los espacios, los guiones bajos y el camelCase en los nombres.
  • Higiene del incremento de versión: Cada edición que cambie el comportamiento debe incrementar version y updated a la vez. Las correcciones de erratas, de enlaces y de formato dejan la versión sin cambios; las nuevas secciones opcionales o los nuevos antipatrones incrementan MINOR; la reorganización estructural o los cambios de contrato incrementan MAJOR.

On this page