Skip to content
Apothem
Referência

Especificação do schema de artefatos

Schema canônico de frontmatter YAML e campos obrigatórios para todos os tipos de artefato na árvore de código-fonte do Apothem, com templates por classe e regras de validação.

Templates de frontmatter YAML por classe e campos obrigatórios para todos os artefatos do ecossistema Apothem.

Fonte da verdade. O contrato legível por máquina, imposto pelo conformity gate, são os JSON Schemas por classe em src/apothem/schemas/ (agent.schema.json, command.schema.json, skill.schema.json, …). Os schemas de skill e de comando declaram additionalProperties: false, de modo que rejeitam chaves desconhecidas; os schemas de agente, de output-style e de plano declaram additionalProperties: true. Esta página e frontmatter-schema.mdx são as duas projeções legíveis por humanos desses schemas — esta página traz os templates e exemplos práticos por classe, e frontmatter-schema, o índice conciso de chaves obrigatórias. Quando uma página divergir dos JSON Schemas, os schemas prevalecem.

Visão geral

Todos os artefatos na árvore de código-fonte do Apothem (sob src/apothem/ e na superfície de configuração raiz) devem incluir um bloco de frontmatter YAML (entre delimitadores ---) com campos obrigatórios e opcionais específicos do seu tipo de artefato. Este documento define o schema canônico de cada tipo.

Regras universais:

  • O frontmatter está em conformidade com YAML 1.2
  • Todos os valores de string usam aspas duplas, e uma string vazia é escrita como ""
  • Ordem dos campos: campos obrigatórios primeiro, campos opcionais agrupados por relevância
  • Comentários no frontmatter usam # seguido de espaço: # comment
  • Valores de caminho devem ser relativos (sem / inicial) e usar barras normais (/) para compatibilidade entre plataformas

Convenção de versionamento (classes de artefato versionadas — comandos, auxiliares, skills, CLAUDE.md):

  • version é semântica (MAJOR.MINOR.PATCH). Incremente MAJOR para mudanças incompatíveis de schema ou de contrato; MINOR para mudanças aditivas compatíveis (novos campos opcionais, seções adicionais, antipadrões adicionais); PATCH para uma mudança de comportamento que corrige uma diretiva existente sem quebrar o contrato.
  • Correções de erro de digitação, correções de link, formatação e edições somente de comentário ou somente de documentação deixam version inalterada. Somente uma mudança de comportamento a incrementa.
  • updated é a data ISO 8601 (YYYY-MM-DD) da edição mais recente. Ela deve mudar a cada incremento de version, e também muda em uma correção de digitação ou de link que não incrementa a versão.
  • Artefatos novos começam em v0.Y.Z. A promoção para vX.Y.Z indica que o contrato do artefato é estável o bastante para ser um compromisso público.
  • As suítes de planejamento estão fora desta convenção. Uma correção de digitação em uma suíte de planejamento incrementa o número PATCH da versão da suíte (vX.Y.Z para vX.Y.(Z+1)) e acrescenta uma linha no Histórico de revisões. O guia do desenvolvedor descreve a regra das suítes de planejamento na sua seção de revisões da suíte de planejamento.

Schema: regras

Padrão de caminho: src/apothem/rules/*.md

Propósito: Mandatos comportamentais e diretivas operacionais.

Campos obrigatórios

---
name: "kebab-case-identifier"
description: "One-line description"
pathFilter: "**/*.py, **/*.toml"
alwaysApply: true | false
---
CampoTipoPropósitoExemplo
namestringIdentificador legível por máquina"operational-mandates"
descriptionstringDescrição de uma linha para os registros"Operational mandates CM-1–10"
pathFilterstringLista de globs separados por vírgula que delimita o escopo de uma regra filtrada por caminho; a string vazia ("") nas regras sempre ativas"**/*.py, **/*.toml"
alwaysApplybooleantrue para regras sempre ativas (carregadas em todo lugar); false para regras filtradas por caminho (carregadas quando pathFilter corresponde)true

Campos opcionais

As regras não têm campos opcionais de frontmatter e — ao contrário das outras classes de artefato — também não têm os campos version / updated / scope / portability. Os quatro campos obrigatórios acima são o contrato completo de frontmatter de regras imposto por frontmatter_grep.

Exemplo

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

# Rule: Operational Mandates
...

Schema: comandos

Padrão de caminho: src/apothem/commands/*.md

Propósito: Definições de comandos de barra (/plan-execute, /freshify etc.).

Campos obrigatórios

---
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ósitoExemplo
namestringNome do comando (sem / inicial)"plan-execute"
versionstringVersão semântica"X.Y.Z"
updatedstring (ISO 8601)Data da última atualização"2026-04-20"
descriptionstringDescrição curta"Executes a phase with quality gates"
argument-hintstringPadrão de uso, ou "[args...]" se não houver nenhum"[path/to/plan] [phase-id]"
disable-model-invocationbooleanSe true, somente o operador inicia o comando; o modelo nunca o invoca por conta própriatrue
portabilitystringClassificação de portabilidade entre adaptadores de harness"universal"
allowed-toolsstringFerramentas pré-aprovadas enquanto o comando é executado: ferramentas somente leitura, mais ferramentas com efeitos colaterais apenas como regras com escopo, como Bash(git log *). O curinga "*" isolado é rejeitado"Read, Glob, Grep"

Campos opcionais

Os comandos não têm campos opcionais de frontmatter — os oito campos obrigatórios acima são o contrato completo de frontmatter de comandos imposto por command.schema.json (additionalProperties: false).

Exemplo

---
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
...

Schema: auxiliares

Padrão de caminho:

src/apothem/agents/*.md

Propósito: Definições persistentes de auxiliares (também chamados de trabalhadores delegados) para exploração paralela, auditoria e portões de qualidade.

Campos obrigatórios

---
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ósitoExemplo
namestringIdentificador do auxiliar"codebase-explorer"
versionstringVersão semântica"X.Y.Z"
updatedstring (ISO 8601)Data da última atualização"2026-04-20"
descriptionstringDescrição da especialização"Deep codebase exploration"
toolsstring (separada por vírgulas)Ferramentas permitidas"Read, Glob, Grep, Bash"
disallowedToolsstring (separada por vírgulas)Ferramentas proibidas"Write, Edit, TodoWrite"
maxTurnsintegerNúmero máximo de turnos de conversa (tipicamente 5–20; valores acima de 20 exigem um comentário de justificativa em linha)20
effortenumEscopo computacional"high"

Campos opcionais

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

Exemplo

---
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...

Schema: skills

Padrão de caminho: src/apothem/skills/*/SKILL.md

Propósito: Definições de técnicas reutilizáveis com sinais de detecção e procedimentos de execução.

Campos obrigatórios

---
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ósitoExemplo
namestringIdentificador da skill"plan-suite"
versionstringVersão semântica"X.Y.Z"
updatedstring (ISO 8601)Data da última atualização"2026-04-20"
descriptionstringO que a skill fornece"Master Plan Suite template"
archetypestringClasse de forma, um identificador <class>-template em kebab-case"workflow-template"
userInvocablebooleanSe true, o usuário pode solicitar explicitamente esta skillfalse
disable-model-invocationbooleanSe true, a skill só é acionada por invocação explícitatrue
allowed-toolsstringFerramentas pré-aprovadas enquanto a skill é executada: ferramentas somente leitura, mais ferramentas com efeitos colaterais apenas como regras com escopo, como Bash(git log *). O curinga "*" isolado é rejeitado"Read, Glob, Grep"

Campos opcionais

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

Exemplo

---
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
...

Schema: hooks

Padrão de caminho: o bloco hooks do settings.json mais as implementações em Python sob src/apothem/hooks/.

Propósito: Declarar validadores acionados por eventos e manipuladores de gerenciamento de estado que o host invoca em pontos bem definidos do ciclo de vida.

Schema do arquivo de configurações

A chave de nível superior hooks mapeia nomes de eventos para arrays de blocos de 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>"
        }
      ]
    }
  ]
}

A forma -m apothem.hooks.dispatch serve ao desenvolvimento a partir de um checkout do código-fonte com PYTHONPATH=src.

CampoTipoPropósitoExemplo
matcherstringPadrão de nome de ferramenta (ou "*" para eventos independentes de ferramenta)"Write"
hooks[].typeliteral "command"O único tipo de manipulador de hook suportado atualmente"command"
hooks[].commandstringComando executável; o Apothem usa o marcador de posição ${PYTHON_BIN}, resolvido na instalação"${PYTHON_BIN}"
hooks[].argsarray de stringsArgumentos em forma exec: um caminho de script em ${HARNESS_ROOT}/.apothem/support/, seguido dos seus argumentos["${HARNESS_ROOT}/.apothem/support/hooks/dispatch.py", "SessionStart"]
hooks[].timeoutinteiro em segundosTempo máximo de execução antes de o host encerrar o hook30
hooks[].statusMessagestringRótulo curto exibido na interface do host"Session start"

Eventos obrigatórios

O template do Claude Code registra quatro eventos: SessionStart, PreToolUse, PostToolUse e Stop. scripts/dev/validate_hooks.py verifica em settings.json os cinco eventos da tabela abaixo, um conjunto diferente, e relata cada um que não encontra como aviso, e não como falha. PostToolUse está registrado, mas não é um dos cinco. PreCompact e PostCompact estão entre os cinco, mas não são registrados no Claude Code (referência de hooks), de modo que, no Claude Code, o verificador emite um aviso sobre ambos.

Os valores de timeout espelham os orçamentos canônicos dos eventos de hook — a tabela abaixo os reproduz para conveniência do leitor; a fonte canônica prevalece.

EventoTimeout típicoPropósito
SessionStart30 segundosLer a memória, verificar o estado do plano, reportar a prontidão
PreToolUse10 segundosValidar gravações quanto às políticas de isolamento de conteúdo + frontmatter
PreCompact30 segundosVerificar se o estado foi externalizado antes da compactação de contexto
PostCompact30 segundosRestaurar o estado de trabalho após a compactação de contexto
Stop60 segundosExternalização ao fim da sessão — estado de retomada, saídas, decisões

dispatch.py também aceita UserPromptSubmit e Notification na sua lista de permissões de eventos, para compatibilidade futura; nenhum dos dois está conectado nos templates distribuídos. Adicione um bloco de matcher com o mesmo padrão em forma exec para habilitá-los.

Camada Python

Todo comando de hook passa pelo mesmo despachante Python:

ArquivoPapel
src/apothem/hooks/dispatch.pyEncaminha SessionStart para session_start_bootstrap.main() e todos os outros eventos da lista de permissões para emit_hook_context.main(). Sempre sai com 0.
src/apothem/hooks/session_start_bootstrap.pyScript de hook de início de sessão — emite o contexto de resumo da memória e da suíte de planejamento.
src/apothem/hooks/emit_hook_context.pyEmissor de hook padrão — grava um envelope válido que carrega a carga registrada de --context-file.
src/apothem/hooks/messages/*.mdCarga de contexto estática referenciada por --context-file.

Validação

scripts/dev/validate_hooks.py impõe o contrato de hooks:

  • settings.json é analisado como JSON e declara cada um dos cinco eventos da tabela; um evento ausente é um aviso, não uma falha.
  • Os três scripts Python existem e são analisados como Python válido.
  • Todos os arquivos de mensagem referenciados pelos argumentos --context-file existem.
  • Nenhum caminho absoluto de usuário fixo no código (C:\Users\... etc.) aparece em src/apothem/hooks/**.py.
  • Os artefatos de shell sob src/apothem/hooks/ e scripts/ limitam-se aos stubs aprovados de localizador / bootstrap.

Schema: CLAUDE.md

Caminho: CLAUDE.md (raiz)

Propósito: Instruções do Claude Code com escopo de projeto.

Frontmatter YAML obrigatório

---
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"
---

Seções

O CLAUDE.md é redigido em seções de prosa, descritas em CLAUDE.md. Nenhum validador exige uma lista fixa de seções: scripts/dev/validate_ecosystem.py verifica as chaves de frontmatter acima.


Lista de verificação de validação

Todo artefato deve satisfazer estas verificações:

Validação do frontmatter

  • O YAML é sintaticamente válido (sem erros de análise)
  • Todos os campos obrigatórios do tipo de artefato estão presentes
  • name segue a convenção kebab-case
  • version é semântica (MAJOR.MINOR.PATCH)
  • updated está no formato de data ISO 8601 (YYYY-MM-DD)
  • description é uma string não vazia, de uma única linha
  • Os campos opcionais correspondem aos valores de enum esperados (se aplicável)
  • Nenhum erro de digitação nos nomes dos campos (use os nomes canônicos do schema)
  • Nenhum espaço em branco extra nem problema de formatação

Validação do conteúdo

  • O conteúdo começa em uma nova linha após o --- de fechamento; nos arquivos da família Markdown, a linha SPDX canônica do cabeçalho é o primeiro conteúdo depois dele
  • Nenhuma referência interna de planos (conformidade com CM-7)
  • As referências cruzadas se resolvem (se listarem outros artefatos)
  • Os links usam caminhos relativos com barras normais

Validação de portabilidade

  • Nenhum caminho absoluto fixo no código (use relativos)
  • Nenhuma sintaxe específica do Windows em artefatos de escopo universal
  • Os separadores de caminho usam barras normais
  • As variáveis de ambiente usam um formato independente de plataforma (${VAR} ou nativo da ferramenta)

Notas

  • Consistência como segurança: O frontmatter canônico viabiliza validação automatizada, ferramentas e verificação entre artefatos. Os desvios se acumulam rapidamente.
  • Declaração de portabilidade: Nem todos os artefatos podem ser universais. Declare as restrições explicitamente — é melhor documentar uma ressalva do que distribuir um bug silencioso.
  • Kebab-case para nomes: Fácil de usar em URLs, scripts e contextos de linha de comando. Evite espaços, sublinhados e camelCase em nomes.
  • Higiene do incremento de versão: Toda edição que altera o comportamento deve incrementar version e updated juntos. Correções de erro de digitação, correções de link e mudanças de formatação deixam a versão inalterada; novas seções opcionais ou antipadrões incrementam MINOR; reorganização estrutural ou mudanças de contrato incrementam MAJOR.

On this page