Pular para conteúdo

name: agente-00c-runtime description: 'Internal POSIX runtime helpers for agente-00c/feature-00c orchestrators (state, lock, validation, hashes, secrets filter). NOT user-invocable.' allowed-tools: - Bash - Read


Agente-00C Runtime

Scripts POSIX que implementam as primitivas de estado da pipeline 00C. Consumidos via tool Bash pelos agentes em ~/.claude/agents/agente-00c-*.md.

Layout

~/.claude/skills/agente-00c-runtime/
└── scripts/
    ├── state-rw.sh        # init/read/write/get/set/sha256/path-validate
    ├── state-validate.sh  # FR-008: schema + invariantes (read-only)
    └── state-lock.sh      # acquire/release/check (mkdir atomico)

Convencao de path do estado

<projeto-alvo>/.claude/agente-00c-state/
├── state.json
├── state.json.sha256
├── .lock/                 # diretorio criado por mkdir atomico
└── state-history/
    └── onda-NNN-<iso8601>.json

Todos os scripts aceitam --state-dir <path> apontando para o diretorio acima — nao para o state.json diretamente.

Dependencia: jq

Os helpers de leitura/escrita de state.json exigem jq no PATH. Sem jq, os scripts falham com mensagem clara orientando instalacao (brew install jq no macOS / apt install jq em Debian/Ubuntu). Esta e uma excecao escopada ao Principio II do toolkit (POSIX sh puro), alinhada com o carve-out 1.1.0 da constitution para JSON estruturado.

NAO e skill user-invocavel

Esta skill NAO tem trigger automatico — description indica claramente que e infraestrutura interna. Nao deve aparecer como sugestao para o operador. A presenca em ~/.claude/skills/ e necessaria apenas porque o mecanismo de cstk install so distribui artefatos sob global/skills/, global/commands/ ou global/agents/.

Estado atual

FASE 2 do backlog em docs/specs/_archived/agente-00c/tasks.md. Implementacao operacional dos 3 scripts entregue como esqueleto + cobertura de testes em tests/test_state-*.sh.

Reuso pelo feature-00c (FASE 1 de docs/specs/_archived/feature-00c/tasks.md)

Este runtime e compartilhado entre /agente-00c (orquestracao de projeto inteiro) e /feature-00c (orquestracao de feature individual). Auditoria empirica em scripts/_audit-paths.md confirma que 18/21 scripts ja aceitam --state-dir DIR desde a v1.0 — nenhum refactor mecanico necessario. Os 3 scripts restantes (issue.sh, report.sh, secrets-filter.sh) tem decisoes de design documentadas no audit.

Helper sourceable _state-dir.sh

scripts/_state-dir.sh fornece resolucao consistente do diretorio de estado entre callers. Contrato:

. "$(dirname -- "$0")/_state-dir.sh"

# resolve precedencia: arg explicito > env var > erro
STATE_DIR=$(_sd_resolve "$EXPLICIT_DIR") || exit 1

# valida que e diretorio gravavel
_sd_require_dir "$STATE_DIR" || exit 1

# resolve nome canonico do report/suggestions por flavor
REPORT_NAME=$(_sd_flavor_to_report_name "$FLAVOR") || exit 1

Variavel de ambiente reconhecida: AGENTE_00C_STATE_DIR. Sem --state-dir e sem env var = erro claro em stderr (nao fallback silencioso — Principio I, auditabilidade).

Decisao SHARED para secrets-filter-ignore

Ambos orquestradores leem do mesmo arquivo <projeto-alvo>/.claude/agente-00c-state/secrets-filter-ignore. Razao: e config do projeto-alvo, nao do orquestrador — quem define o que e "sensivel localmente" no projeto e o operador, e ambos orquestradores operam ao mesmo nivel de confianca. Detalhe em scripts/_audit-paths.md §"Detalhamento das 3 ocorrencias HARDCODED".

Gotchas

--state-dir e o contrato canonico — env var e atalho, nao default silencioso

Todos os scripts do runtime que tocam estado aceitam --state-dir DIR como argumento. A variavel AGENTE_00C_STATE_DIR (introduzida pelo helper _state-dir.sh) e apenas conveniencia quando o caller esta embutido num contexto que ja conhece o path. Sem nenhum dos dois = erro explicito; nunca fallback para path historico hardcoded.

Flavor afeta apenas rendering de paths em templates (report/issue)

--flavor=agente-00c|feature-00c (default agente-00c) e usado pelos helpers _sd_flavor_to_report_name e _sd_flavor_to_suggestions_name para renderizar nomes de arquivo nos corpos de relatorio/issue. NAO afeta operacoes de I/O sobre state.json (essas usam state-dir diretamente).

Backward-compat de /agente-00c: zero mudancas em comportamento default

Todas as adicoes da feature-00c (helper _state-dir.sh, contrato SHARED de secrets-filter-ignore, conceito de flavor) sao retrocompativeis. Invocacoes existentes de /agente-00c continuam funcionando bit-a-bit identicas — verificavel pela suite completa em tests/run.sh (todos os test_* passam sem alteracao).

Helper _log.sh exige AGENTE_00C_RUNTIME_SCRIPTS_DIR quando sourceado de contexto sem $0 valido

scripts/_log.sh resolve o path do secrets-filter.sh para aplicar filtro antes da emissao (FR-036). Quando sourceado de um script normal, auto-detecta via $(dirname "$0"). Quando sourceado via sh -c "..." (tests, eval, etc), $0 aponta para sh e a deteccao falha. Callers devem setar AGENTE_00C_RUNTIME_SCRIPTS_DIR=/path/to/scripts/dir antes de sourcing nesses casos. Sem isso, _log.sh cai no fallback [NO-FILTER] <msg> — degradado mas nao silencioso.

Subcomando secrets-filter.sh for-backup para backups com hash auto-registrado

Le state.json em stdin, aplica filtros + emite envelope JSON {wave_number, captured_at, state_sha256_self, state_snapshot} em stdout. Hash calculado sobre o conteudo FILTRADO (nao o state operacional). Permite verificacao retroativa de corrupcao via sha256sum < (jq '.state_snapshot' backup.json) == .state_sha256_self. Uso: cat state.json | secrets-filter.sh for-backup --wave-number 7 > backups/wave-007.json.

Script feature-00c-preflight.sh valida hashes antes da fase plan (FR-010A)

Pre-flight invocavel via feature-00c-preflight.sh check --state-dir DIR. Verifica: (a) briefing.sha256 em disco vs state.json, (b) constitution.sha256 e version (MAJOR drift = error/exit 1; MINOR/PATCH = warn/exit 0), (c) chama pipeline.sh constitution-conflict para forward-compat. Output JSON estruturado {ok: bool, findings: [...]}. Reuso direto do runtime do agente-00c (Principio I, sem implementacao paralela).