Changelog¶
Historico canonico de versoes do toolkit. Conteudo includido literalmente do
CHANGELOG.md
da raiz — qualquer release nova aparece aqui no proximo build CI.
Changelog¶
Todas as mudanças relevantes deste projeto são documentadas aqui.
O formato segue Keep a Changelog e este projeto adere a Semantic Versioning.
5.7.0 - 2026-06-01¶
Fecha um drift silencioso na etapa create-tasks do pipeline SDD: o backlog
gerado inline (sub agente que registra a skill mas escreve o conteúdo "de
cabeça") podia omitir o skeleton do template canônico — checkboxes - [ ],
prefixo FASE, legendas de status/criticidade, Matriz de Dependências, Resumo
Quantitativo e seções Escopo Coberto/Excluído. O único gate da etapa
(validate-docs-rendered) só valida render (Mermaid, links, frontmatter),
nunca conformidade estrutural, então o drift passava silencioso até um
humano notar. Reforço de prompt na SKILL ("aplique o template fielmente") já
existia e foi ignorado — por isso a correção é uma checagem determinística
por Bash, imune ao mesmo modo de falha (LLM) que gerou o problema.
Added¶
create-tasks/scripts/validate-tasks-template.sh— gate determinístico de fidelidade ao template. EmiteFINDING|<severity>|<code>|<msg>+RESULT. Severidadecritical(sem headingFASE, sem checkbox, sem tag de criticidade) = drift que quebra downstream (execute-task/ contagem de métricas doreview-task);warning= seção de metadados ausente (legendas, Matriz, Resumo, Escopo Coberto/Excluído). Honraphase_prefixdoconfig.jsonsemjq(POSIX puro) ou via--phase-prefix. Exit0conformante,1drift,2uso/arquivo. Read-only. Cobertura emtests/test_validate-tasks-template.sh(10 cenários)- fixture
tests/fixtures/tasks-md/conformant.md. assert_stdout_not_containsno harness de testes (tests/lib/harness.sh) — assertion negativa que faltava, espelhandoassert_stdout_contains.
Changed¶
- Orquestradores
agente-00c+feature-00c: adicionado o pre-gatetemplate-fidelityna etapacreate-tasks, rodando antes do gatedocs-render(skeleton antes de render).critical→ Decisão + tentativa de Edit re-normalizando aotemplates/tasks.md(preservando todo o conteúdo e o progresso[x]);warning→ Decisão informativa.record-skillcomo nos demais gates. - SKILL
create-tasks: documenta o novo script em "Scripts auxiliares" + gotcha sobre o drift silencioso do backlog gerado inline.
5.6.0 - 2026-05-31¶
Deprecated¶
- Skill
decision-tree: marcada como deprecated (deprecated: true,deprecated_since: 5.6.0,remove_in: 6.0.0). O cstk-panel (cstk serve) passou a visualizar as decisões dostate.jsonde forma mais eficiente — interface web interativa, sempre atualizada, sem gerar arquivos HTML avulsos. A skill continua funcionando até a remoção em v6.0.0; nenhum substituto será portado para dentro do toolkit (a visualização vive no painel). Frontmatter doSKILL.mdrecebeu os campos de depreciação e um banner; README marca a entrada como deprecated.
5.5.0 - 2026-05-30¶
Encerra um bug recorrente (3 ocorrências seguidas, em features distintas) em
que o orquestrador feature-00c/agente-00c retorna sem fechar a onda nem
emitir Schedule intent — deixando a onda aberta, o ponteiro
(current_stage/next_instruction) parado e a knowledge.db sem o
conhecimento da onda. Diagnóstico: são DUAS camadas. (1) O orquestrador (LLM)
trata o retorno da Skill da fase como fim de turno e para antes dos passos
6-13 — comportamento que o "Contrato de conclusão de turno" já tenta evitar
por reforço de prompt e que, empiricamente, reforço de prompt não resolve.
(2) A recuperação determinística estava documentada mas não encodada em
nenhum dos 4 commands pai — vinha sendo feita à mão a cada ocorrência. A
correção move o fechamento para uma rede de segurança idempotente e
obrigatória a cada retorno no PAI.
Added¶
state-ondas.sh reconcile-wave— rede de segurança determinística e idempotente para o caso "onda aberta". Guarda de idempotência viawave-status: se a onda já está fechada/ausente → NO-OP (não double-contaaccumulated_metrics); se aberta → fecha deterministicamente (back-fill de.tasks[]em execute-task →record-skill→endcom motivo derivado → avançacurrent_stage/next_instruction, ou promove.execution.status=concluidana fase terminal). Flag--terminal-phasepara terminalidade dependente de flavor (feature-00c=review-task, agente-00c=review-features). 13 cenários novos emtests/test_state-ondas.sh.state-ondas.sh wave-status— primitivaopen|closed|noneda última onda (.waves[-1].termination_reason), base da guarda de idempotência.
Changed¶
- 4 commands pai chamam
reconcile-waveINCONDICIONALMENTE a cada retorno do orquestrador, antes do ingest naknowledge.db(e, no/agente-00c-resume, ainda com o lock ativo). Quando o orquestrador parou cedo sem emitirSchedule intent:, o pai passa a derivar o agendamento do.execution.statusreal (terminal → não agenda;em_andamento→ agenda a próxima onda) em vez de depender da linha que o orquestrador não emitiu.
Fixed¶
- Ordem ingest-vs-fechamento: o eco de ingest no pai rodava mesmo com a
onda aberta (ingerindo onda incompleta); agora o
reconcile-wavefecha antes. - Over-advance do ponteiro na fase terminal do
feature-00c:pipeline.sh next-stageusa a lista COMPLETA (agente-00c, termina em review-features), o que avançariareview-task → review-featureserroneamente numa feature;--terminal-phase review-taskcorrige.
5.4.0 - 2026-05-30¶
Restaura no feature-00c a paridade de duas capacidades que só o
agente-00c (orquestrador de projeto) exercia: o registro de Sugestões
para skills globais (FR-020) e a retrospectiva proativa por marco (a
cada 25 ondas). Diagnóstico: as sugestões sumiram dos relatórios das features
recentes não por maturidade, mas porque o orquestrador feature-00c nunca
teve o gatilho ativo — só mencionava o mecanismo na tabela de capacidades e
ainda apontava para um subcomando fantasma (suggestions.sh append, que não
existe; o real é register). Mesmo padrão de bug-fantasma da 5.3.0. Empírico:
toda execução feature-00c (inclusive runs de 31 e 38 ondas) fechava com 0
sugestões, enquanto runs agente-00c produziam 2–9.
Added¶
feature-00c: gatilho ativo de Sugestão para skill global (passo10.quado loop + seção "Sugestões para skills globais (FR-020)"): porta o checkpoint que oagente-00cjá tinha, registrando viasuggestions.sh registercom--suggestions-fileem<projeto>/.claude/agente-00c-suggestions.md. A §5 do relatório passa a popular-se em features (validado end-to-end: register → state → §5).feature-00c: retrospectiva proativa por marco (passo10.ter+ seção dedicada): a cada 25 ondas emite bloqueio LEVE propondo revisão dos padrões acumulados e atualiza.next_retrospective_milestone— paridade com oagente-00c.report.sh emit --flavor feature-00c|agente-00c(FR-018): novo subcomando que resolve o caminho do relatório pelo flavor, aplicasecrets-filterINTERNAMENTE e SEMPRE, e grava o arquivo. Constrói a capacidade que os docs dofeature-00c(orquestrador, resume, abort) já invocavam como fantasma — mesma estratégia da 5.3.0 (construir o que a doc descrevia). secrets-filter ausente/inacessível = erro (nunca grava relatório não-filtrado). Cobertura: 8 cenários novos emtests/test_report.sh.tests/test_doc-subcommands.sh(lint de invariante do repo): varre os docs de orquestrador/command e falha se uma referência<helper>.sh <subcomando>apontar para um subcomando inexistente no dispatch do script. Pega a classe "subcomando-fantasma" (append,emit,check-cmd,skill-invoked,increment, flags deinit) em CI, não em runtime.
Fixed¶
- Subcomando fantasma
suggestions.sh appendna doc doagente-00c-feature-orchestrator(tabela de capacidades + seção de issue): corrigido parasuggestions.sh register(o único subcomando de escrita que existe no runtime). Era o motivo de o mecanismo nunca disparar mesmo quando o orquestrador tentava usá-lo. - Mais subcomandos-fantasma no
agente-00c-feature-orchestrator(achados pelo novo lint):bash-guard.sh check-cmd→check;spawn-tracker.sh increment→enter;state-ondas.sh skill-invoked→record-skill(4 ocorrências, incl. uma invocação real no passo de gate). Todos já tinham a forma correta em OUTROS pontos do mesmo doc ou noagente-00c— eram inconsistências que só falhariam em runtime. - Referências a
report.sh emitnofeature-00c(orquestrador, resume, abort) deixam de ser fantasma agora que o subcomando existe; os 2 sites do orquestrador ganham o--state-dirque faltava.
Security¶
- Guard anti-confabulação em escalada de segurança (regra de aterramento de
evidência nos 2 orquestradores + 2 comandos de resume): a evidência citada
para um evento de segurança (prompt-injection/canary/tampering/output hostil)
DEVE ser substring literal de um tool result observado; sem aterramento →
--score 0 --escolha ameaca-nao-verificada(pause), nunca escalar ameaça fabricada. Originou da auditoria de uma execução real (security-hardening- owasp) onde um resume (PAI) confabulou uma string de prompt-injection num output SSH limpo, gravou Decisão score-3 com evidência fabricada e escalou ao operador (dec-122, depois retratada): a trava de score-3 confere que a evidência existe, não que é real. Move o flagra do momento-da-ação para o momento-do-registro. Trava de regressão textual emtests/test_orchestrator-evidence-grounding.sh.
5.3.0 - 2026-05-30¶
Normalização das chaves do state.json (runtime agente-00c/feature-00c) e das
colunas da knowledge.db de português para inglês. Originou de um bugfix: o
/feature-00c documentava um init via one-liner (state-rw.sh init --short-name
… --briefing-* … + drift.sh extract) que NÃO existia nos scripts — as flags
eram fantasma. A correção exigiu construir as capacidades faltantes, o que abriu
a oportunidade de uniformizar o schema inteiro. Não-breaking: pt-BR é aceito
na entrada via aliases; EN é canônico na saída. Remoção do suporte pt-BR = próxima
MAJOR. Mapa congelado em docs/specs/schema-en-migration/migration-map.md.
Added¶
state-rw.sh— canonicalizador de chaves (_sr_canonicalize_file): rename plano pt-BR → EN em toda leitura/escrita dostate.json. O arquivo converge para EN a cada escrita; states pt-BR legados são lidos transparentemente. Subcomando novostate-rw.sh migratecanonicaliza um state in-place (idempotente; backup pt-BR emstate-history/).state-rw.sh init— modo-feature determinístico:--short-name+--briefing-path/sha256+--constitution-path/sha256/version+--key-aspectsemitem o schema de feature completo (short_name,prerequisites,current_stage="specify") numa única chamada atômica. Encerra o recipe multi-passo (init base + N×set) que produzia states inconsistentes — corrige o bug que originou esta release.drift.sh extract --text: extrator real de keywords (determinístico: lowercase + tokenização + stopwords pt/en + dedupe + top-N). Substitui a referência fantasmadrift.sh extract --textodos docs do/feature-00c.
Changed¶
- Chaves do
state.json→ EN em todo o runtime (~30 scripts + orquestradores/commands):execucao→execution,etapa_corrente→current_stage,ondas→waves,decisoes→decisions,bloqueios_humanos→human_blocks,orcamentos→budgets,metricas_acumuladas→accumulated_metrics,sugestoes→suggestions, + todas as folhas (contexto→context,escolha→choice,justificativa→rationale,score_justificativa→justification_score, etc.). drift.sh aspectos→key-aspects(aliasaspectosmantido com aviso de deprecação).cli/lib/recall.sh— schema v7: colunas e tabelas daknowledge.dbnormalizadas para EN (tabelabloqueios→blocks;execucao_id→execution_idem todas; etc. — vermigration-map.md §3.11). Índice é DERIVADO: o bumpRECALL_SCHEMA_VERSION6→7 dropa+recria as tabelas renomeadas no 1º acesso de um DB pré-v7;--reindex/próximo ingest repopula a partir dostate.json(sem perda).cstk recall --typeaceitablock(canônico) ebloqueio(alias deprecado). Ingestão lê chaves EN dostate.jsoncom fallback pt-BR.
Notas¶
- SemVer MINOR: nada quebra para usuários do cstk (aliases pt-BR + EN; DB reconstrói sozinho). Remoção dos aliases = próxima MAJOR.
- Fora de escopo (follow-ups, mesma estratégia de alias): nomes de flag CLI
(A); valores de enum como
em_andamento(B); keys de output de relatóriomodel-routing-report/report(D). - Consumidores da knowledge.db (ex.: cstk-panel) precisam adequar-se aos nomes de coluna EN — painel é repo à parte.
5.2.0 - 2026-05-28¶
Correção de perda de informação na ingestão de decisões do knowledge.db.
Descoberta: ao gravar uma decisão, só a opção escolhida (escolha) era
indexada — todas as outras opções avaliadas (opcoes_consideradas no
state.json) eram descartadas, perdendo o contexto de quais alternativas
foram consideradas e rejeitadas. Schema v6 (aditivo).
Added¶
cli/lib/recall.sh— schema v6: nova colunadecisions.opcoes (TEXT), alimentada por.decisoes[].opcoes_consideradasdostate.json(array JSON serializado viatojson— todas as opções avaliadas, não só a escolhida). Entra também no corpo pesquisável da FTS (type='decision'), então buscar por uma opção não escolhida recupera a decisão.RECALL_SCHEMA_VERSION5 → 6. Migração idempotenteALTER TABLE decisions ADD COLUMN opcoespara DBs v<6 (checada viaPRAGMA table_info, espelhandotasks.titulo);--reindexretro-alimenta o histórico já indexado.
5.1.0 - 2026-05-28¶
Feature recall-suggestions + correção de robustez na ingestão do knowledge.db.
Descoberta ao auditar o índice real: a tabela retros estava vazia em todas as
14 execuções porque nenhum produtor escreve .retros[] — mas o conteúdo
retrospectivo de verdade (diagnóstico + proposta de meta-padrão) já existia em
.sugestoes[] e nunca era indexado. E execuções com data não-canônica sumiam
silenciosamente da tabela executions. Schema v5 (aditivo).
Added¶
cli/lib/recall.sh— schema v5: nova tabelasuggestions (project, feature, wave, execucao_id, source_ts, source_id, skill_afetada, severidade, diagnostico, proposta, referencias, issue_aberta, ingested_at), alimentada por.sugestoes[]dostate.json.diagnostico+propostaformam o corpo pesquisável na FTS unificada (type='suggestion') e passam pelosecrets-filter(FR-006);referenciaséjoin(",")também filtrado.RECALL_SCHEMA_VERSION4 → 5;RECALL_TYPE_ENUMestendido comsuggestion.cstk recall <termo> --type suggestione--reindexretro-alimentam todo o histórico de execuções já indexadas.
Fixed¶
- Linha de execução sumindo silenciosamente em
recall_ingest_state_json: o cálculo de duração viafromdateiso8601lançava emterminada_emdate-only (ex."2026-05-25", gravada por orquestrador antigo), e como o parse vivia dentro do mesmo programajqque monta a linha inteira, o throw derrubava a execução toda (executions=0) sem aviso — enquantowaves,decisionsebloqueiosda mesma execução eram ingeridos normalmente. Agora o parse é isolado emtry … catch "": a execução é preservada e sóduracao_segundosvira NULL. Recupera execuções concluídas que estavam invisíveis no índice (ex.flow-assistant-streaming).
Notes¶
- Aditivo:
CREATE TABLE IF NOT EXISTScriasuggestionsem DBs v<5 sem perda; rodecstk recall --reindexpara popular as sugestões e recuperar execuções que tinham sido derrubadas pela data não-canônica. Zero mudança de surface CLI (apenas um valor novo no enum--type). Cobertura: 4 cenários novos emtests/cstk/test_recall.sh(S1–S4); suíte recall 97/97.
5.0.0 - 2026-05-27¶
BREAKING. O projeto foi renomeado para cstk (repositório
JotJunior/claude-ai-tips → JotJunior/cstk), alinhando repositório, produto e
binário sob o mesmo nome. Removidas as skills marcadas como deprecated desde a
v3.12.0 (remoção originalmente prevista para a v4.0.0). Documentação recalibrada
para descrever o que o toolkit realmente faz.
Removed¶
create-use-case— usespecify(formato SDD). Removidos a skill, o scriptnext-uc-id.sh+ teste, as fixturestests/fixtures/ucs/, a entrada emprofiles.txt.ine as referências no catálogo de tips e emspecify.- 8 skills
dotnet-*— stack .NET descontinuada, sem substituto no toolkit global. Removida a árvorelanguage-related/dotnet/; o profilelanguage-dotnetdeixa de existir (era auto-derivado da pasta). Quem usa .NET deve copiar as skills de uma release ≤ 4.10.0 para<projeto>/.claude/skills/.
Changed¶
- Rename
claude-ai-tips→cstkem URLs, badges, GitHub Pages e scripts de install/release. URLs antigas seguem vivas via redirect do GitHub. - Honestidade na documentação: status do
agente-00catualizado (funcional, porém sem suíte de testes automatizada dos agentes — não mais "esqueleto FASE 1"); autonomia recalibrada (pausa em bloqueios reais, não é "dispare-e- esqueça"); recall descrito como mitigação defense-in-depth contra prompt-injection (não "defesa");owasp-securityreposicionada como revisão guiada por checklist (não auditoria/pentest); removido o número não verificável "71 bugs / 134 sessões" dobugfix.
Notes¶
- Profile
alle contagem caem de 38 → 29 skills. Quem instalou viacstk: rodecstk update;cstk doctordetecta o drift das skills removidas.
4.10.0 - 2026-05-27¶
Feature recall-memory-mirror: o cstk recall agora indexa e busca os
arquivos .md de auto-memoria do Claude Code (~/.claude/projects/<encoded>/memory/),
integrando-os na FTS unificada do knowledge.db. Schema v4.
Added¶
cli/lib/recall.sh— schema v4: nova tabelamemories (project, slug, type, description, body_scrubbed, path, indexed_at)com chave primaria(project, slug).RECALL_SCHEMA_VERSIONbumped de3para4.RECALL_TYPE_ENUMextendido commemory.cstk recall --ingest(aditivo): apos ingerir telemetria dostate.json, indexa os.mdem~/.claude/projects/<encoded>/memory/do projeto alvo. Cada.mdvira uma entrada emmemoriese uma linha emknowledge_fts(type='memory',feature='memory',wave='-'). Body e description passam porsecrets-filter.sh scrub. Linha de status extendida com, N memories.cstk recall --reindex(aditivo): reconstroimemoriesvarrendo~/.claude/projects/*/memory/no disco via reverse-derivation. Invariante C-004: NUNCA le dostate.jsonpara reconstruir memorias.cstk recall --type memory: filtra busca FTS retornando so memorias; ex:cstk recall "setup" --type memory.cstk recall --list-memories [--project P]: lista slug + description de todas as memorias indexadas (sem body), util para auditoria. Formato:<project> / <type> / <slug> — <description>.- Degradacao graciosa: todos os novos caminhos (ingest/reindex/list-memories
de memories) degradam graciosamente quando
sqlite3,jqousecrets-filterestao ausentes — exit 0 com aviso; nunca abortam o fluxo de ingestao.
Notes¶
- A tabela
memoriese puramente derivada (indice); ostate.jsontransacional nao e tocado. Base inteira reconstruivel viacstk recall --reindex. - Projetos com underscore no basename podem apresentar
projectinconsistente entre ingest e reindex (limitacao CQ1 documentada emdata-model.md). --ingestinclui memories so se ostate.jsoncontemprojeto_alvo_path;--reindexinclui todos os projetos com diretoriomemory/no HOME.- Entrega:
recall.she runtime — chega a copia instalada viacstk self-update --from <tarball>(nao viacstk install/update).
4.9.1 - 2026-05-27¶
Corrige um falso positivo no painel (cstk-panel): execuções finalizadas com
sucesso apareciam nas métricas ainda "em andamento" na última fase real (ex.
review-task), porque etapa_corrente nunca era promovida quando
execucao.status virava concluida. A normalização é feita na camada
derivada (ingestão da knowledge.db), mantendo o state.json fonte intacto.
Fixed¶
cstk recall --ingest(tabelaexecutions): quando.execucao.statusé terminal de sucesso (concluida— canônico dostate-validate— ouconcluido, variante histórica), a coluna derivadaetapa_correntepassa a ser"concluido".abortada/em_andamentopreservam a fase real (aborto não é conclusão). Só o valor derivado muda; ostate.jsontransacional fica inalterado.
Notes¶
- Registros já ingeridos mantêm a
etapa_correnteantiga até umcstk recall --reindex(re-lê osstate.jsonpela mesma normalização). A correção é prospectiva para novas ingestões. - Entrega: o
recall.shé runtime — chega à cópia instalada viacstk self-update, nunca porcstk install/update.
4.9.0 - 2026-05-27¶
Rodada de robustez de processo inspirada no benchmark obra/superpowers: descriptions orientadas a gatilho, gates à prova de racionalização e checklists de requisitos com dono e follow-up — para deixarem de ser write-only.
Added¶
- Checklist com dono por item (
{auto}/{humano}): a skillchecklistmarca cada item com seu resolvedor —{auto}(o agente resolve lendo a spec e citando evidência) ou{humano}(julgamento de valor/risco que cabe ao dono do produto). Nova auto-resolução (§3.7) marca os{auto}com[x]+ citação, ou[Gap]quando a spec não satisfaz. - Loop gap → ação: itens abertos ganham destino explícito (§4.4) —
[Ambiguity]/[Conflict]para/clarify,[Gap]para/create-tasks,{humano}para o dono. A skillcreate-taskspassa a consumirchecklists/*.mdda spec e converter[Gap]/[Conflict]abertos em tarefas de requisito — fechando o ciclo sem reordenar o pipeline.
Changed¶
descriptiondas skills = quando usar, não o que a skill faz: removido o resumo de workflow dos descriptions deexecute-task(enumerava os 9 passos),decision-tree(mecanismo interno) eapply-insights(caminho de implementação). Evita que o Claude siga o resumo sem abrir o corpo da skill.- Gates à prova de racionalização:
execute-taskganha gate de evidência (§8.2 — cada[x]exige output literal; o sumário não é prova) e fecha a brecha do "(se aplicável)" em testes (§5). Os orquestradoresagente-00cefeature-00cganham 2ª auto-checagem: fechar a onda não promove.execucao.status— ler ostate.jsonreal, nunca o sumário do subagente.
4.8.0 - 2026-05-27¶
cstk serve volta ao modo de produção de porta única. A partir do
cstk-panel v0.2.0, o servidor
Fastify registra @fastify/static e serve a API e o SPA buildado no mesmo
processo e porta — não é mais necessário o modo dev (Vite + proxy). O comando
passa a rodar npm run build && npm run start e a flag --port volta a
controlar a porta de fato.
Changed¶
cstk serveagora usanpm run build && npm run start(em vez denpm run dev): um único processo Fastify serve API + SPA na mesma porta. Onpm run buildcontinua obrigatório (o tarball é a árvore-fonte; ostartserveapps/web/dist).PORTvolta a ser exportado: o servidor lêprocess.env.PORTe binda a porta resolvida.--portvoltou a funcionar (1024–65535; também lê$PORT) — removido o aviso de "porta ignorada em modo dev".
Requires¶
- cstk-panel >= 0.2.0 (com serving estático via
@fastify/static). Painéis em cache de versões anteriores devem ser atualizados comcstk serve --update(ou--reinstall); do contrário onpm run startantigo sobe apenas a API e devolve JSON 404 em/.
4.7.2 - 2026-05-27¶
Corrige a proveniência do knowledge.db para execuções do agente-00c
(orquestrador de projeto): seus registros eram ingeridos com feature='unknown'
(o agente-00c não grava short_name como o feature-00c). Agora usam o nome do
diretório do projeto (basename de projeto_alvo_path), tornando os registros
identificáveis no índice e no painel. O project já era correto — a correção é
na coluna feature.
Fixed¶
cstk recall --ingest(layoutagente-00c-state/): derivafeaturedo nome do dir do projeto em vez de'unknown'. Semprojeto_alvo_path, degrada para'unknown'(igual aoproject). O layoutfeature-00c-state/<short>/segue inalterado.agente-00c-orchestrator(anti-eco FR-011):--exclude-featuredo read-back passa de"unknown"parabasename(projeto_alvo_path), mantendo a paridade com o valor ingerido (do contrário o orquestrador ecoaria as próprias escritas de volta no read-back de specify/plan).
Notes¶
- Registros já gravados como
feature='unknown'permanecem assim até umcstk recall --reindex(e apenas para osstate.jsonainda presentes em disco). A correção é prospectiva. - Entrega: o
recall.sh(runtime) chega viacstk self-update; oagente-00c-orchestrator(catálogo) viacstk update— rode ambos para manter ingestão e anti-eco consistentes.
4.7.1 - 2026-05-27¶
Corrige cstk serve: o frontend (Vite) abortava com Failed to resolve entry
for package "@cstk-panel/shared-types". O painel e uma arvore-fonte e o web
importa o workspace lib @cstk-panel/shared-types, cujo package.json aponta
main para dist/index.js — que nao existe ate o npm run build. O cstk serve
rodava npm run dev sem buildar, entao o Vite nao resolvia o pacote.
Fixed¶
cstk serveagora rodanpm run buildantes denpm run dev: compila os workspaces (gerapackages/shared-types/dist, etc.) para que o Vite resolva@cstk-panel/shared-types. O build e idempotente e roda a cada start, cobrindo tambem instalacoes feitas sem build. Se o build falhar, o comando sai com erro (sugerindo--reinstall) e nao tenta iniciar o painel.
Contexto: a validacao anterior do modo dev (4.6.1) passou por acaso porque o painel havia sido buildado manualmente durante a investigacao; numa instalacao limpa (
npm installapenas) odist/do shared-types nao existia.
4.7.0 - 2026-05-27¶
Adiciona a flag cstk serve --update: atualiza o painel cstk-panel para a
release mais recente sob demanda, reinstalando apenas se houver versao nova
(senao reusa o cache). O start normal continua offline-safe e instantaneo — a
checagem de rede so ocorre com --update.
Added¶
cstk serve --update: consulta a release mais recente via API do GitHub e compara com.panel-version. Se houver versao nova, reinstala (download +npm install+.panel-versionatualizada); se ja estiver na latest, apenas informa e reusa. A checagem e best-effort: falha de rede/API nao aborta o comando — a versao instalada e mantida e o painel inicia normalmente.- Helper interno
_serve_latest_tag(POSIX, sem jq): extraitag_nameda release mais recente, rejeitando prerelease/draft; falha silenciosa (return 1) em qualquer erro de rede/parse.
Notes¶
--reinstallcontinua reinstalando incondicionalmente (ignora--update).- Em modo dev,
--updatenao altera a porta da UI (servida pelo Vite na 5173).
4.6.2 - 2026-05-27¶
Unifica a fronteira command↔orquestrador para aquisição de lock e
inicialização de estado no agente-00c/feature-00c. Antes, a divisão de
responsabilidades era inconsistente entre as duas famílias e contraditória
internamente: /agente-00c (command) não adquiria o lock (o orquestrador
adquiria no loop), enquanto /feature-00c (command) e seu orquestrador
adquiriam — um double-acquire de um lock não-reentrante (mkdir) somado a um
double-init de state.json. Resultado: ao iniciar uma feature/projeto, o
agente gastava ciclos lendo 3+ arquivos para (mal-)resolver quem detém o lock,
sem um contrato canônico contra o qual decidir.
Fixed¶
- Modelo único de lock/init: o slash command PAI (
/agente-00c|/feature-00cno início;*-resumeentre ondas) adquire o lock antes do spawn e o libera SEMPRE após o orquestrador retornar, e cria ostate.json. O orquestrador (subagente) faz zero chamadas astate-lock.sh acquire/releasee não re-inicializa estado — sempre continua de.proxima_instrucao. Idêntico em primeira-invocação e resume. /agente-00c(command) passou a adquirir o lock (passo 3) e a liberá-lo SEMPRE (novo passo 5.ter) — antes não fazia nenhum dos dois.- Orquestradores (
agente-00c-orchestrator,agente-00c-feature-orchestrator): removidas as chamadas deacquire/release; o loop apenas valida estado +sha256-verifydentro do lock já detido pelo pai. - Double-init neutralizado no
feature-00c-orchestrator: re-inicializar ostate.jsonclobraria a Decisão de wave-select gravada pelo command pai.
Added¶
- Bloco "Fronteira command↔orquestrador (lock + init) — CONTRATO CANÔNICO" presente nos 6 arquivos do pipeline (2 commands de início, 2 de resume, 2 orquestradores), para que nenhum agente precise re-investigar a fronteira.
4.6.1 - 2026-05-27¶
Corrige cstk serve: o painel agora exibe a interface web. Antes, o subcomando
rodava npm run start — que sobe apenas a API (Fastify) — e ainda forcava
PORT=5173 sobre ela, de modo que http://127.0.0.1:5173 devolvia o envelope
JSON {"error":"Not found"} em vez da UI. O painel cstk-panel nao possui
serving estatico em producao (o server nao registra @fastify/static), e o SPA
depende do proxy /api que so existe no modo dev do Vite.
Fixed¶
cstk serveagora lanca o painel vianpm run dev(concurrently): a API Fastify sobe em:3001e o frontend Vite em:5173, com o Vite servindo o SPA e proxiando/api -> :3001. Abrirhttp://127.0.0.1:5173exibe a interface.- Removido o
export PORT: forcar a porta movia a API para fora de:3001e quebrava o proxy do Vite. A porta voltada ao usuario passa a ser a do Vite. --port: continua validado (inteiro 1024-65535) por compatibilidade, mas em modo dev a UI e servida pelo Vite na:5173; um aviso e emitido se!= 5173.
Nota: o modo dev roda um dev server (HMR/watch da fonte). Um serve de producao de porta unica exigiria adicionar
@fastify/staticao server docstk-panel(outro repositorio).
4.6.0 - 2026-05-27¶
Adiciona o subcomando cstk show-tip — mecanismo de dicas contextuais para skills
do toolkit. Em cada onda do orquestrador, uma dica e exibida automaticamente para
a fase corrente (ex: --phase execute-task), mantendo o operador informado sobre
boas praticas sem bloquear o fluxo. O catalogo tips/catalog.md cobre 38 skills
(81 entradas: uso, gotcha, avancado) e e extensivel em < 5 minutos por skill.
Inclui correcao de bug no parser awk que impedia a emissao de entradas alternadas.
Added¶
cstk show-tip [SKILL] [--phase FASE] [--audit] [--catalog PATH]: novo subcomando de exibicao de dicas. Modo exibicao: fail-silent absoluto (FR-006), sempre exit 0. Modo--audit: valida cobertura do catalogo por skill (categorias uso + gotcha obrigatorias, >= 2 entradas), exit 0 ok / exit 1 gaps.tips/catalog.md: catalogo com 81 entradas cobrindo 38 skills (23 globais + 7 Go + 8 .NET). Cada entrada tem frontmatter YAML (skill,category,text)- corpo com exemplos concretos em fence de codigo. Formato parseavel por awk POSIX.
cli/lib/show-tip.sh: implementacao POSIX sh pura, sem deps externas. Parser com maquina de estados awk (OWASP A05: valores de usuario via-v, nunca interpolados). RNG via/dev/urandom+ fallbackdate +%s. Fail-silent em todos os caminhos de erro. Sourced porcli/cstkvia dispatch.tests/cstk/test_show-tip.sh: 17 cenarios cobrindo exibicao (5.2), audit (5.3), seguranca A05 (5.4) e lint/performance (5.5-5.6). Integrado ao runnertests/run.shvia convencaocli/lib/<n>.sh -> tests/cstk/test_<n>.sh.- Integracao nos dois orquestradores:
agente-00c-orchestrator.mdeagente-00c-feature-orchestrator.mdexibem dica fail-silent no inicio de cada onda viaTIP=$(cstk show-tip --phase "$FASE" 2>/dev/null) || TIP="".
Fixed¶
- Parser awk de
_st_parse_catalog: correcao de bug onde a transicaobody -> "---"mudava parastate=outem vez destate=frontmatter, fazendo com que o frontmatter de cada segunda entrada fosse ignorado. O parser agora transitabody -> frontmatterdiretamente, permitindo que todas as entradas sequenciais do catalogo sejam emitidas corretamente (antes: 27 de 81 entries; depois: 81 de 81). Backward-compatible: catalogo sem terminador final continua sem emissao espuria. tips/catalog.md: adicionado terminador---apos a ultima entrada (dotnet-testing gotcha) para que ela seja emitida pelo parser corrigido. Sem o terminador, a ultima entrada do catalogo era sempre perdida.
4.5.0 - 2026-05-26¶
Adiciona o subcomando cstk serve — interface web local do cstk panel.
Na primeira execução, baixa automaticamente a release mais recente do
JotJunior/cstk-panel e instala em
~/.local/share/cstk/panel; execuções subsequentes reutilizam o cache (sem
download). Encerramento gracioso com grace period de 5s (SIGTERM → SIGKILL).
POSIX sh puro; SSRF allowlist para github.com e objects.githubusercontent.com.
Added¶
cli/lib/serve.sh: biblioteca POSIX sh que implementa o fluxo completo docstk serve— parse de flags (--port,--host,--reinstall,--help), validação de porta (1024–65535), prereq check decurl/npm, SSRF allowlist (github.com,codeload.github.com,objects.githubusercontent.com,api.github.com), lazy-install via GitHub Releases API, integridade best-effort (.sha256),npm install, foreground start comtrap SIGTERM/SIGINT, grace period 5s + SIGKILL.cli/cstk(dispatch): novocase serve)que sourcacli/lib/serve.she chamaserve_main "$@".tests/cstk/test_serve.sh(29 cenários): cobre flags/porta/host, prereq check, SSRF allowlist, lazy-install, tarball corrompido,npm installfalho, saída espontânea do filho, zeroeval, SIGTERM + SIGKILL (grace period), entre outros. Todos os stubs decurl/npmsão locais (sem rede real).tests/cstk/fixtures/serve/panel-fixture.tar.gz: fixture de tarball mínimo (package.json+.panel-version) para testes de download sem rede.
Changed¶
README.md: nova seção Painel Web (cstk serve) documentando uso, opções, variáveis de ambiente e notas de segurança.cli/README.md: seção de subcomandos atualizada para incluirserve.
Tests¶
tests/cstk/test_serve.sh: 29 cenários PASS, cobertura via--check-coveragesem órfãos.
4.4.0 - 2026-05-26¶
Fecha um buraco de perda de dados na trilha de tasks: uma feature com 21 tasks
gravava apenas 2 no state.json/knowledge.db. A causa raiz não estava na
ingestão (recall.sh espelha .tasks[] fielmente e não lê tasks.md),
mas em como .tasks[] era escrito — um snippet jq hand-rolled na prosa
dos orquestradores (§5.d.ter), append não-idempotente que só rodava se o
LLM lembrasse de executá-lo a cada task. Quando o orquestrador comprimia a fase
execute-task em poucas ondas e pulava o append, as tasks sumiam em silêncio.
A correção introduz um caminho de escrita auditado e idempotente
(record-task) e, sobretudo, uma rede de segurança determinística
(reconcile-tasks) que deriva .tasks[] do tasks.md — o artefato que de fato
contém todas as tasks via checkboxes — em vez de depender da disciplina do LLM.
Mudança aditiva e retro-compatível (catálogo + runtime helper).
Added¶
global/skills/agente-00c-runtime/scripts/state-ondas.shganha dois subcomandos:record-task(upsert idempotente de uma entrada em.tasks[]portask_id; caminho atômico auditado com backup emstate-history/+sha256;--if-absentnão sobrescreve entrada real) ereconcile-tasks --tasks-md <path>(backstop determinístico: parseia otasks.md, identifica toda task concluída — heading### N.Mcom TODAS as subtarefas-checkbox[x]— e back-filla viarecord-task --if-absentqualquer uma ausente de.tasks[]; tasks pendentes/bloqueadas/parciais ficam de fora para não fabricarpass/fail;--dry-runlista os faltantes). Camposorigem/recorded_atsão aditivos — a ingestão seleciona só os 8 campos do contrato e ignora o resto.global/skills/review-task/SKILL.md§4.6: gate de completude.tasks[] ↔ tasks.md. Rodareconcile-tasks --dry-run(detecta divergência), depois apply (sana, idempotente), e reporta o findingtask-outcome-nao-gravadoquando o caminho ao vivo falhou. Read-only no passo 1, idempotente no passo 2 — seguro a cada review.
Changed¶
global/agents/agente-00c-orchestrator.mdeagente-00c-feature-orchestrator.md(§5.d.ter): o snippetjqhand-rolled (get→. + [$e]→set) que escrevia.tasks[]foi substituído por uma chamada astate-ondas.sh record-task— idempotente portask_id(sem duplicatas mesmo se chamado repetidamente) e auditado. Cada bloco passa a documentar a rede de segurançareconcile-taskscomo o backstop que garante completude. Comportamento backward-compatible.
Tests¶
tests/test_state-ondas.sh(+18 cenários):record-task(append, upsert idempotente,--if-absentsem clobber, acúmulo, sem onda em andamento, validações deoutcome/testes_passados ≤ rodados/array de arquivos/flags obrigatórias) ereconcile-tasks(dry-run lista concluídas ausentes, ignora pendentes/bloqueadas, extração de título sem a tag de criticidade, não clobbera entrada real, idempotência,tasks.mdausente, flags obrigatórias). Cobre o pitfallawk FNR==NRcom primeiro arquivo vazio (.tasks[]sem entradas) — corrigido com comparação porFILENAME.
4.3.4 - 2026-05-26¶
Corrige drift de contrato nos briefs do cstk-panel: o event_type da tabela
events era documentado como conjunto fechado de 4 valores
(lock_contention, validation_failed, wave_retry, schedule_wait),
omitindo recall_consulted (emitido pelo read-back loop em specify/plan desde
a v3.18.0). A ingestão em recall.sh trata event_type como texto livre,
sem allowlist, então o painel — construído sobre o contrato fechado — não
reconhecia recall_consulted e o exibia rotulado como schedule_wait. Fix
restrito à documentação de contrato (docs/cstk-panel/*.md); a fonte de verdade
(state.json) e a knowledge.db sempre armazenaram o valor fielmente.
Fixed¶
docs/cstk-panel/backend-brief.md,docs/cstk-panel/frontend-brief.md: contrato deevent_typedeixa de declarar "conjunto fechado de 4" e passa a documentá-lo como texto livre com conjunto conhecido de 5 (+recall_consulted). O contrato doEventIconagora exige fallback para tipos desconhecidos (ícone genérico + rótulo = valor cru recebido), nunca recategorizando para um tipo conhecido. Fix recurrence-proof: como a ingestão não aplica allowlist, um 6º tipo futuro re-disparava o mesmo bug. Ação de deploy fica no repo docstk-panel(remover qualquer ramodefault → schedule_waitnoEventIcon).
4.3.3 - 2026-05-26¶
Mitiga, na origem, o defeito que motivou a rede de segurança da v4.3.2: o
orquestrador (subagente) tratava o retorno de uma Skill(...) da fase como
fim de turno e parava cedo, abandonando o fechamento da onda, a ingestão na
knowledge.db e a emissão do Schedule intent. A v4.3.2 garantiu que a
ingestão acontecesse mesmo assim (camada determinística no comando-pai); esta
versão ataca a causa raiz no prompt dos orquestradores (camada que reduz a
frequência). Mudança aditiva, restrita ao catálogo (global/agents/*.md) —
propaga via cstk update. Fix de prompt é probabilístico e NÃO substitui a
rede de segurança da v4.3.2; as duas camadas coexistem.
Fixed¶
global/agents/agente-00c-orchestrator.md,agente-00c-feature-orchestrator.md: adicionada a seção "Contrato de conclusão de turno" antes do Loop principal, mais anotação no passo 5 (onde a Skill é invocada) e bullet anti-padrão. O contrato reframa o retorno de QUALQUERSkill(...)como o MEIO da onda (nunca o fim), define a linhaSchedule intent: ...como o único token válido de fim de turno e prescreve uma auto-checagem ("a última linha que emiti éSchedule intent:?") antes de devolver controle ao comando-pai. Reduz a recorrência da parada precoce que deixava a onda sem fechar e aknowledge.dbsem ingestão.
Added¶
tests/test_orchestrator-turn-completion.sh: trava de regressão (7 cenários) que assegura a presença dos marcadores do contrato ("Contrato de conclusão de turno", "MEIO da onda", auto-checagem, reforço no passo 5) nos dois orquestradores. Registrada como interna emtests/run.sh(existence-guarded, não mapeia 1:1 a um script).
4.3.2 - 2026-05-26¶
Correção de robustez na memória de conhecimento cross-feature (knowledge.db).
A ingestão pós-onda vivia num único lugar — o passo 10.bis do loop do
orquestrador, dentro do subagente. Quando o orquestrador retornava sem
completar o loop (parando cedo, antes de fechar a onda e emitir o Schedule
intent), o comando-pai recuperava o bookkeeping da onda mas não re-ingeria, e
a knowledge.db ficava vazia mesmo com o state.json sendo atualizado
normalmente. Esta versão adiciona uma rede de segurança de ingestão nos quatro
comandos-pai. Mudança aditiva e retrocompatível, restrita ao catálogo
(global/commands/*.md) — propaga via cstk update. Para backfill de uma
execução já rodada: cstk recall --ingest --state-dir <state-dir>.
Fixed¶
global/commands/feature-00c.md(§5.bis),feature-00c-resume.md(§4.bis),agente-00c.md(§5.bis),agente-00c-resume.md(§8.bis): cada comando-pai agora executacstk recall --ingestcomo rede de segurança logo após tratar oSchedule intent, garantindo que o conhecimento da onda chegue àknowledge.dbmesmo quando o orquestrador retorna sem alcançar o passo10.bis. A chamada é idempotente (upsert por chave natural — re-ingestão após o10.bisé inofensiva), read-only sobre ostate.jsone degrada para no-op em qualquer falha (cstk fora do PATH,sqlite3/jqausentes); nunca bloqueia o fechamento ou o agendamento da onda. Defesa-em-profundidade sobre o10.bisexistente — não altera a causa raiz (orquestrador parar cedo).
4.3.1 - 2026-05-26¶
Correção de contrato da skill review-task. Ela é um relatório de status
READ-ONLY, mas a implementação ainda carregava a capacidade de escrever
arquivos e, ocasionalmente, criava um arquivo de relatório — fricção recorrente
nos dados de uso do /insights (o usuário precisava interromper para corrigir).
Esta versão alinha a implementação ao contrato sempre pretendido. Sem impacto
para quem usa a skill como relatório: o comportamento removido nunca foi
intencional.
Fixed¶
global/skills/review-task/SKILL.md: removidoEditdeallowed-tools, de modo que a skill não tem mais capacidade de escrever ou criar arquivos (a criação de arquivo de relatório era comportamento não-intencional). Marcar tarefa como concluída emtasks.mdpermanece responsabilidade do/execute-task.
Changed¶
review-task/SKILL.md: adicionado invariante explícito de contrato de saída logo após a introdução — a skill emite o status na conversa (stdout) e nunca cria nem escreve arquivo de relatório, persistindo apenas quando o usuário pedir explicitamente.
4.3.0 - 2026-05-26¶
A skill apply-insights passa a consumir os dados do /insights nativo como
fonte PRIMÁRIA, em vez de depender de um resumo curado à mão (que ficava
desatualizado e podia ser de outro projeto). Mudança aditiva e retro-compatível
(degrada para o .md curado e depois para best-practices genéricas).
Added¶
global/skills/apply-insights/scripts/digest-facets.sh: agrega os facets per-sessão do/insightsnativo (~/.claude/usage-data/facets/*.json) num digest markdown data-driven — distribuição degoal_categorieseoutcome,friction_countsranqueado (sinal-chave para recomendações),claude_helpfulness, satisfação e amostras defriction_detailpor tipo de fricção. Flags--facets-dir,--samples N(default 3) e--top N(default 15, corta a cauda longa de alta cardinalidade comogoal_categories).find -exec cat + | jq -sevita ARG_MAX. Degradação graciosa (semjq, diretório ausente, sem*.jsonoujqfalhando → exit 0 com stdout vazio).
Changed¶
apply-insights/SKILL.md: Step 1 reescrito com cadeia de fontes facets digest →~/.claude/insights/usage-insights.mdcurado → genérico, sempre preferindo o digest (atual, do projeto corrente) e informando ao usuário qual fonte foi usada.descriptione gotchas atualizados.
Tests¶
tests/test_digest-facets.sh(14 cenários): agregação, ranking descendente de fricção, cap--topda cauda longa, amostras defriction_detail, caso sem fricção, degradação (dir ausente/vazio,jqausente via PATH shadow) e validação de argumentos (--samples/--topinválidos, arg desconhecido,--help).
4.2.0 - 2026-05-25¶
Enriquecimento da camada B do índice de conhecimento (knowledge.db) para
melhor observabilidade no futuro cstk-panel. Mudanças aditivas e
retro-compatíveis: o índice é derivado e reconstruível via
cstk recall --reindex; states e índices antigos seguem funcionando.
Added¶
- Coluna
tasks.titulo(schema v3): a tabelataskspassa a guardar o título descritivo de cada task (do heading emtasks.md). Os orquestradores (agente-00cefeature-00c) gravam.tasks[].tituloao registrar o outcome da task; a ingestão grava a coluna passando o valor porsecrets-filter.sh(FR-017 — é o único campo de texto livre da camada B). Migração idempotente viaALTER TABLE tasks ADD COLUMN titulo TEXTemrecall_apply_schema: índices v2 ganham a coluna sem precisar de--reindex; DBs novos já nascem com ela. Retro-compat:.tasks[].tituloausente →"". - Evento
recall_consulted+ métrica de consultas ao histórico: os orquestradores gravam um eventorecall_consultedem.eventos[]a cada consulta do read-back loop (cstk recall --context) no início despecify/plan— inclusive quando nada é retornado (hits=0), caso que a Decisãoread-back PRE-DECISAOnão cobria (só registrada comK>0, FR-017). A métrica "quantas vezes o histórico foi consultado pelo orquestrador" =COUNT(*) FROM events WHERE event_type='recall_consulted'; adescricaocarregaetapa=… hits=Npara separar consultas produtivas das vazias. Sem mudança de schema (a ingestão deeventsaceita o tipo por convenção, sem allowlist). Best-effort: nunca gateia/aborta/atrasa a onda.
Changed¶
RECALL_SCHEMA_VERSION2 → 3 (apenas pela colunatitulo; o eventorecall_consultednão altera schema).
Tests¶
tests/cstk/test_recall.sh: cobertura detitulo(scrub do segredo + retro-compat""), cenáriom13da migração ALTER v2→v3 (coluna adicionada, linhas pré-existentes preservadas, idempotente) eb23da métricarecall_consulted(total + split produtivas/vazias). Asserts deschema_versionatualizados para3.
4.1.1 - 2026-05-25¶
Correções na camada de memória cross-feature (cstk recall). Afetam apenas
cli/lib/recall.sh — o índice (~/.claude/cstk/knowledge.db) é derivado e
reconstruível via cstk recall --reindex. Sem mudança de schema.
Fixed¶
- Feature gravada como
unknownno índice quandostate.jsonnão temshort_name: a ingestão derivava o nome da feature apenas de.short_name. States legados sem o campo (gravados antes de oinitversioná-lo) caíam no fallback"unknown". Agora a resolução: (1) tolera.execucao.short_namealém de.short_name; (2) quando ausente, deriva o short-name do diretório-pai no layoutfeature-00c-state/<short-name>/(checagem por componente — robusta para caminhos relativos e absolutos). O layoutagente-00c-state/continuaunknownpor design (o orquestrador de projeto não gravashort_name— anti-eco FR-011). --reindexpodia ESVAZIAR o índice (perda de dados): ofindde descoberta de states, ao varrer uma raiz ampla (ex.:$HOMEdefault), sai com status ≠0 ao tocar diretórios sem permissão — mesmo tendo impresso matches válidos. O idiomafind ... || _rx_states=""descartava esses matches; como o reindex apaga o DB antes de repopular, o índice terminava vazio. Trocado por|| :, que preserva o stdout já capturado pela command-substitution.
Tests¶
tests/cstk/test_recall.sh:scenario_16(resolução de feature comshort_nameausente — fallback por diretório,.execucao.short_name, caminho relativo, eagente-00c-state→unknown) escenario_17(reindex preserva matches quandofindsai ≠0).
4.1.0 - 2026-05-24¶
Melhorias de tooling de desenvolvimento (não afetam o tarball de release nem
o usuário instalado — apenas tests/, .github/ e .shellcheckrc). O tarball
de catálogo é idêntico em conteúdo ao da v4.0.0; esta release é um marco de
repo (sincroniza CHANGELOG/tag) e gate de CI.
Added¶
tests/run.sh --fast/--slow: split da suite por velocidade.--fastpula a allowlist de tests lentos (_is_slow_test, derivada de medição — 11 tests > ~5s somando ~177s de ~260s) e roda em ~1/3 do tempo;--slowroda só os lentos. Mutuamente exclusivos; compõem com PATTERN e--list/--stats.tests/run.sh --stats: agrega contagem de scenarios por arquivo (desc) + total. Respeita PATTERN e o filtro de velocidade.tests/test_run-modes.sh: cobertura dos novos modos (registrado como teste interno em_is_internal_test).- CI shellcheck advisory (
.github/workflows/shellcheck.yml): lint estático dos.shem PR + push main, não-gateante (continue-on-error). Config de ruído sistêmico em.shellcheckrc(disable SC1091/SC2016/SC2148).
4.0.0 - 2026-05-24¶
BREAKING — feature model-routing-por-onda. O model-routing dos
orquestradores autônomos (agente-00c/feature-00c) deixa de ser
audit-only: o modelo escolhido agora É APLICADO à execução. Isto
revoga a cláusula FR-017 da feature original agente-00c-model-routing
(v3.15.0), cuja premissa de que "o harness não aceita model no spawn,
logo a escolha é apenas auditoria" ficou obsoleta — o harness atual
aceita model no spawn de subagente (precedência sobre o frontmatter).
O gatilho do routing deixa de ser o caminho raro do spawn de clarify e
passa a ser toda onda do pipeline.
Por que MAJOR: muda o contrato de comportamento do orquestrador
(antes: sugere e audita, nunca aplica; depois: aplica por onda). Para
ativar o comportamento novo é preciso build + install da fonte
(global/...) — passo manual do operador; o tarball publicado é que
carrega o efeito. Camada de telemetria/auditoria permanece
retro-compatível (execuções antigas sem Decisão por-onda continuam
legíveis pelo agregador).
Changed (BREAKING)¶
- Mecanismo PRIMÁRIO — mapa fase→modelo por onda (FR-014): novo
model-routing.sh wave-select --state-dir <SD>resolve a fase (via--etapaou.etapa_corrente) e retorna o modelo a aplicar na onda, com base no mapa versionado e determinísticoglobal/skills/agente-00c-runtime/references/phase-model-map.txt(POSIX-puro, semjq). Recorte default "3 faixas balanceado":plan/analyze/constitution→opus;specify/clarify/checklist/create-tasks/briefing→sonnet;execute-task→sonnet (piso refinável);validate-docs/review-task→haiku; fase não listada →manter-atual(FR-020 — nunca erro, evolução tolerada). - Aplicação no spawn de clarify (US2, FR-003): o passo 8 da sequência
pré-spawn passa
model=<escolha>à tool Agent quando acionável (escolha∈ {haiku,sonnet,opus} escore >= 2); em fallback/manter-atual/score<2omodelé omitido e o subagente herda omodel:do frontmatter. O par Decisão⟷spawn permanece 1-para-1 (Invariante I1): a aplicação não cria 2a Decisão. - Documentação revogando o audit-only (FR-017): banner de
supersessão na spec arquivada
docs/specs/_archived/agente-00c-model-routing/spec.md(Status + FR-017 + Princípio V + Out-of-Scope anotados); seção model-routing doCLAUDE.mdreescrita (aplicação por onda + tabela fase→modelo + ordem de precedência); blocos pré-spawn dos dois agent files (agente-00c-orchestrator.md,agente-00c-feature-orchestrator.md) corrigidos para refletir aplicação (eliminadas as contradições internas com a nota FASE 5);review-task/SKILL.mdajustado.
Added¶
model-selectorcomo camada de REFINO (FR-001/FR-019, US4): roda só emexecute-taskcom--task-text, sobre o piso do mapa (sonnet), podendo elevar→opus (tarefa profunda) ou rebaixar→haiku (tarefa trivial). Catálogo de sinais (global/skills/model-selector/references/sinais.md) expandido além do MVP com vocabulário de fase/complexidade, coberto por corpus de teste (tests/fixtures/model-selector-corpus/corpus.tsv).- Precedência de resolução do modelo da onda:
override manual (FR-016) > escalada mid-onda→opus (FR-015) > refino model-selector > mapa fase→modelo. Override do operador via Decisão manual pré-onda lida pelo resume; escalada mid-onda via.escalada_modelo_pendente=truegravado pela onda anterior (sinaliza subestimação). - Idempotência por onda (FR-008):
wave-selectecoa o modelo já aplicado e não registra 2a Decisão quando já existeDecisaoDeRoteamentoPorOndapara a onda corrente (seguro em resume). - Auditoria sugerido-vs-aplicado (US3, FR-012/SC-006):
model-routing-report.sh aggregateganha 2a seção "Seleção por onda — sugerido vs aplicado" (distribuição do modelo aplicado, por origem mapa/refino/override/fallback, taxas de fallback e override, contagem de divergências sugerido≠aplicado comrotuladas/sem rotulo).sem rotuloDEVE ser 0 (review-taskescala findingmodel-routing-divergencia-sem-rotulo). - Integração nos commands (FASE 3):
agente-00c/feature-00c+ respectivos*-resumeaplicam owave-selectno início de cada onda e leem override manual pré-onda. - Cobertura de teste:
tests/test_model-routing.sh,tests/test_model-routing-report.sh,tests/test_command-spawn-model-routing.sh,tests/test_orchestrator-spawn-model-apply.sh,tests/test_state-decisions-reconcile.sh,tests/cstk/test_model_selector_corpus.sh, fixtures de state com routing por onda (mixed + unlabeled-divergence).
3.19.1 - 2026-05-24¶
Correções de coerência pós-3.19.0, sem mudança de comportamento do produto
(documentação + tooling de testes). Não altera o conteúdo funcional do tarball.
Fixed¶
- CHANGELOG — footer-links da série 3.x: o rodapé de links de versão só
cobria
1.0.0/1.1.0/2.0.0; toda a série 3.x (28 versões, incluindo a própria3.19.0) estava sem link. Bloco regenerado a partir dos headings (formatoreleases/tag/vX.Y.Z, ordem descendente) — agora 31 headings = 31 links, consistente com a convenção Keep a Changelog. tests/run.sh --check-coverage— falsos órfãos: o check saía com exit 1 por 3 órfãos-de-script (_log.sh,_state-dir.sh,classify.sh) + 27 órfãos-de-test que, na verdade, possuem cobertura — apenas sob tests de nome descritivo que não casa a convenção 1:1test_<base>.sh(tests granulares demodel-selectore tests de aspecto comoruntime-log-redaction,secrets-filter-backup,skills-cache-protocol,update-extra-kinds,state-dir-parametrization). Adicionada allowlist coerente nos dois lados (_is_internal_testpara tests +_is_covered_by_named_testpara scripts), cada isenção exigindo que o cobridor exista em disco (anti-ponto-cego: se o script/test sumir, volta a ser órfão real). Resultado:./tests/run.sh→ORPHANS: 0(sem falso WARN) e--check-coverage→ exit 0. Suíte completa 1043/0/0, sem regressão.
3.19.0 - 2026-05-24¶
Expande a ingestão da memória de conhecimento (cstk recall) para derivar
métricas de dashboard a partir do state.json transacional, sem nunca
tocá-lo (somente leitura) e sem quebrar a propriedade de índice derivado
(tudo reconstruível via cstk recall --reindex). O índice
(~/.claude/cstk/knowledge.db) sobe de schema v1 → v2 de forma aditiva e
retro-compatível (CREATE TABLE IF NOT EXISTS): nenhuma das 4 tabelas
textuais existentes (decisions/bloqueios/retros/skills) muda de
semântica, e bases v1 instaladas migram em silêncio na primeira ingestão. Esta
feature prepara o terreno para um futuro cstk-panel (dashboard read-only,
fora de escopo): este repositório passa a ser a fonte da verdade das
métricas que o painel consumirá. Camada estritamente aditiva, best-effort,
read-only — nenhum breaking change nos modos existentes
(search/--ingest/--reindex/--context).
Added¶
- Camada A — métricas derivadas em
cli/lib/recall.sh: 3 novas tabelas ingeridas a partir de.execucao,.ondas[],.metricas_acumuladas,.orcamentose.historico_movimento_circulardostate.json: executions— uma linha por execução (proveniência project/feature/id, status, motivo de término filtrado, duração derivada;NULLquandoem_andamento).waves— uma linha por onda (ciclo de vida,tool_calls,wallclock_seconds, motivo de término).alert_signals— uma linha por sinal de alerta (circular, budget breach), idempotente e tolerante a negativos. Métricas adicionais (latência humana de bloqueios, clarify-rate, mix de roteamento de modelos) ficam deriváveis a partir das tabelas — o mix de modelos permanece delegado ao agregadormodel-routing-report.sh.- Camada B — instrumentação em
cli/lib/recall.sh+ nos dois orquestradores (global/agents/agente-00c-feature-orchestrator.mdeagente-00c-orchestrator.md): 2 novas tabelas alimentadas por campos aditivos dostate.json: tasks— outcome por task (outcomepass|fail, testes rodados/passados,lint_ok,arquivos_tocados), chave natural(project, feature, execucao_id, task_id).events— eventos do ciclo de execução. Campos.tasks[]/.eventos[]gravados pelo mesmo caminho de runtime auditado dos demais writes — nenhum mecanismo de escrita novo (contract layer-b §5).schema_versiondo índice 1 → 2 (registrado emschema_meta); migração aditiva e idempotente.
Notes¶
- Índice puramente derivado (FR-001/FR-002): a ingestão lê o
state.jsonsomente em modo leitura (jq -r+wc -c); auditoria empírica confirma zero write-back aostate.jsone confinamento desqlite3exclusivamente emcli/lib/recall.sh(FR-004). Base inteira reconstruível via--reindex. - Degradação graciosa (FR-003): ausência de
sqlite3/jqnunca aborta a ingestão nem a onda — sai com status 0 emitindo aviso. - Idempotência (FR-008): toda escrita de entidade nova é idempotente por chave natural; re-ingerir a mesma execução não altera o índice.
- Segredos (FR-006): todo texto livre persistido passa pelo filtro de
segredos antes do
INSERT. - Spec:
docs/specs/knowledge-db-metrics/; contratos emcontracts/recall-ingest-schema.mdecontracts/layer-b-instrumentation.md.
3.18.0 - 2026-05-23¶
Fecha o read-back loop da memória de conhecimento cross-feature: até
v3.17.0 os orquestradores apenas ESCREVIAM no índice (cstk recall --ingest);
agora também LEEM de volta. Um novo modo cstk recall --context consulta o
índice (FTS5/bm25) com os termos da feature corrente e devolve um bloco
markdown enxuto pronto para injeção em prompt; os orquestradores agente-00c/
feature-00c o invocam num passo PRE-DECISAO no início das fases specify e
plan, injetando aprendizado de execuções passadas antes de decidir. Camada
estritamente aditiva, best-effort, read-only — nenhum breaking change nos modos
existentes (search/--ingest/--reindex).
Added¶
- Modo
cstk recall --context "<termos>"emcli/lib/recall.sh(recall_mode_context): retorna um ContextBlock markdown (> Aprendizado recuperado (read-back loop) — K achados...+ uma linha por achado com proveniênciaproject/feature/wave (ts): body). Flags:--limit N(default 4),--exclude-feature NAME(anti-eco no SQL),--max-bytes N(default 2000, corte por achado inteiro),--type/--project/--db(iguais ao modo busca). Composição OR entre termos (novo helperfts_query_escape_or, reusafts_phrase_escape) — o modo busca permanece AND-implícito. - Passo PRE-DECISAO (read-back loop) nos dois orquestradores
(
global/agents/agente-00c-feature-orchestrator.mdeagente-00c-orchestrator.md): dispara somente emspecify+plan, deriva termos deaspectos_chave_iniciais(≤8, fallbackprojeto_alvo_descricao), injeta o bloco com rótulo UNTRUSTED / não-autoritativo (defesa prompt-injection ASI09/LLM01) e registra Decisão auditável quando K>0 (sem persistir o body bruto recuperado).
Security¶
- Conteúdo recuperado pelo modo
--contextjá foi scrubbed na ingestão (secrets-filter.sh) — o consumo não re-scrub (seguro por construção). NUL rejeitado em qualquer input; anti-eco aplicado no SQL viasql_escape(sem bypass por valor manipulado); injeção SQL/FTS tratada como literal.
Notes¶
cstk recall --contexté read-only e best-effort: toda degradação (semsqlite3, índice ausente/corrompido, zero achados, query degenerada) resulta em no-op silencioso (stdout vazio, exit 0) — nunca gateia uma onda. O teto de tempo (US3-3) é satisfeito pelo.timeout 5000do SQLite + a natureza best-effort, semtimeoutwrapper dedicado (POSIX sh puro).- Cobertura: 22 cenários novos em
tests/cstk/test_recall.sh(modo--contextfaz parte derecall.sh, sem arquivo de teste órfão), rodados sob HOME real e HOME falso.
3.17.0 - 2026-05-23¶
Adiciona a camada aditiva de memória de conhecimento cross-feature: um índice
SQLite global (~/.claude/cstk/knowledge.db, FTS5) alimentado por um hook
best-effort no fim de cada onda dos orquestradores agente-00c/feature-00c,
e o novo comando cstk recall para busca cross-projeto/feature com
proveniência. O índice é puramente derivado — o state.json transacional
permanece a fonte de verdade, intacto, fora do caminho crítico. Sem breaking
changes.
Added¶
- Comando
cstk recallemcli/lib/recall.sh(POSIX sh +jq+sqlite3), com três modos: - busca (default):
cstk recall <query> [--project P] [--type T] [--limit N] [--db PATH]— full-text via FTS5/bm25 sobre decisões, bloqueios, retro-execuções e skills invocadas, ordenado por relevância e exibindo proveniência (projeto / feature / onda / data).--typeaceitadecision|bloqueio|retro|skill;--limitexige inteiro positivo (default 20). - ingestão (
--ingest --state-dir DIR): extrai os registros de umstate.jsone faz upsert idempotente no índice (filtrado porsecrets-filterantes da escrita). É o hook chamado no fim de onda. - reconstrução (
--reindex [--states-root DIR]): reconstrói o índice a partir dosstate.json/state-historyexistentes, tornando a base totalmente descartável e regenerável. - Hook de fim de onda documentado em ambos os orquestradores
(
agente-00c-orchestratoreagente-00c-feature-orchestrator): após o backup filtrado da onda, invocacstk recall --ingestem modo best-effort. - Segurança de entrada em
recall.sh: escaping em duas camadas (literais SQL via duplicação de aspas simples + tokens FTS5 via duplicação de aspas duplas), validação de--limitcomo inteiro, e rejeição/strip de bytes NUL. - Degradação graciosa: a ausência de
sqlite3oujqnunca aborta uma onda — o hook e orecallsaem com status 0 emitindo um aviso. O índice é isolado em~/.claude/cstk/, separado do estado transacional por projeto. - Cobertura: 20 cenários em
tests/cstk/test_recall.sh(quickstart 1-14, detector/strip de NUL, degradação semsqlite3/jq, índice corrompido, reindex, adversariais e concorrência),shellcheck -s shlimpo. Spec emdocs/specs/cstk-knowledge-db/.
3.16.0 - 2026-05-23¶
Adiciona a skill decision-tree, que gera um relatório HTML interativo em
forma de árvore de decisão a partir do state.json de uma execução
agente-00c/feature-00c. Inclui correção de conformidade (Princípio I e III
da constitution) e habilita a skill no profile complementary. Sem breaking
changes.
Added¶
- Skill
decision-treeemglobal/skills/decision-tree/: o script POSIXrender-decision-tree.sh(subcomandorender --state PATH [--output FILE] [--title STR]) extrai.decisoes[]viajqe injeta num template HTML autocontido (SVG + painel de detalhe + zoom, abre offline sem CDN). O tronco verde liga cronologicamente aescolhade cada Decisão à seguinte, dedec-001até um nó de conclusão. Invariantes IDT-1 (read-only), IDT-2 (determinístico byte-a-byte), IDT-3 (POSIX puro), IDT-4 (render no cliente). Cobertura: 18 cenários emtests/test_render-decision-tree.sh,shellcheck -s shlimpo. complementary:decision-treeemscripts/profiles.txt.in: a skill agora é instalada porcstk install --profile complementary(e por--profile all). Antes só aparecia no profile auto-geradoall.- Spec retroativa em
docs/specs/decision-tree/(spec.md+tasks.md): ratifica o contrato já implementado para conformidade com o Princípio I (SDD recursivo) da constitution.
Fixed¶
- Seção
## Gotchasausente emglobal/skills/decision-tree/SKILL.md(violava o Princípio III — "um SKILL.md sem Gotchas é incompleto" — e o quality gategrep -L '## Gotchas'). Adicionadas armadilhas reais:jqmandatório sem fallback, escape obrigatório de</,escolhafora das opções, proibição de timestamp no payload (IDT-2) e de CDN externo. model-selectorórfã de profile: a skill (v3.14.0), consumida pelos orquestradores no passo 1 do model-routing, só estava no profile auto-geradoall.cstk install(defaultsdd) instalava os orquestradores mas deixava o fluxo de model-routing sem a skill que ele invoca. Adicionada asdd:model-selectorecomplementary:model-selectoremscripts/profiles.txt.in(mesma razão deagente-00c-runtime).
3.15.0 - 2026-05-23¶
Entrega da feature agente-00c-model-routing via pipeline SDD
autonoma /feature-00c em 21 ondas com 42+ decisoes auditaveis.
Integra a skill standalone model-selector (v3.14.0) aos
orquestradores autonomos agente-00c e feature-00c no spawn de
subagentes via tool Agent (clarify-asker + clarify-answerer),
registrando Decisao auditavel + entrada em
.ondas[N].skills_invoked[] por spawn. Sem breaking changes.
Added¶
- Helper POSIX
model-routing.shemglobal/skills/agente-00c-runtime/scripts/: 3 subcomandos (template,invoke,idempotent-check) implementando invariantes INV-1..INV-6 do contract.templateemite payload determinista para input domodel-selector;invokeorquestra classify+register+skill-invoked em uma transacao atomica via state-lock;idempotent-checkrejeita re-spawn com mesmo input (mesmodecisao-id+ mesmo input-hash). Cobertura: 94 cenarios shell emtests/test_model-routing.sh,shellcheck -s shlimpo. - Reconciliador
state-decisions-reconcile.shemglobal/skills/agente-00c-runtime/scripts/: 2 subcomandos (detect,repair). Resolve half-records (decisao sem entrada emskills_invoked[]ou vice-versa) detectados em retomadas pos-crash.--dry-runlista divergencias sem mutar;--applyreescreve mantendo append-only via merge auditavel. Cobertura: 11 cenarios emtests/test_state-decisions-reconcile.sh. - Agregador
model-routing-report.sh aggregateemglobal/skills/agente-00c-runtime/scripts/: consome state.json e emite tabela markdown (total de roteamentos, distribuicao por modelohaiku|sonnet|opus|manter-atual, taxa de fallback, half-records pendentes — deve ser 0). Consumido peloreview-taskpara auditoria de cobertura de model-routing. Cobertura: 17 cenarios emtests/test_model-routing-report.sh. - Integracao em
agente-00c-orchestrator.md§5.e.bis: nova secao "Roteamento de modelos pre-spawn" com sequencia 8-step e invariantes I1 (toda decisao gera skill_invoked match), I2 (toda retomada checa half-records), I3 (idempotencia por input-hash). Analogo emagente-00c-feature-orchestrator.md. - Auditoria em
review-task/SKILL.md§4.5: nova subsecao "Model-routing coverage" — review-task agora chamamodel-routing-report.sh aggregatee reporta saude do roteamento (cobertura de spawns, taxa de fallback, half-records). - Spec SDD completa em
docs/specs/agente-00c-model-routing/: spec.md (20 FRs), plan.md, research.md, data-model.md, quickstart.md, tasks.md (~100 tarefas em 7 fases), contracts/ (model-routing-helper.mdcom 6 invariantes,orchestrator-integration.md), checklists/requirements.md (50 items, 4 load-bearing CHK032/CHK047/CHK048/CHK050).
Fixed¶
- Performance: watcher subshell leak (descoberto durante execucao da feature): scripts internos do agente-00c-runtime spawnavam subshells de watcher em loop sem cleanup, causando ~16.8x overhead em ondas longas. Corrigido com trap EXIT explicito + PID tracking. Impacto: ondas de execute-task longas (>10min) agora finalizam ~17x mais rapido.
Changed¶
review-task/SKILL.mdganhou §4.5 (model-routing audit). Demais secoes inalteradas — comportamento backwards-compatible quando state.json nao temskills_invoked[]com entries do model-selector.
3.14.0 - 2026-05-22¶
Tres entregas principais: (1) skill model-selector completa via
pipeline SDD autonoma, (2) Fases 1+2 da feature artifact-cache
(primitiva state-cache.sh + protocolo de leitura nas 4 skills SDD
principais), (3) otimizacoes de tokens/boot via trim de descriptions
em skills, commands e custom agents. Sem breaking changes.
Added¶
- Skill
model-selector(PR #17): sugestor de modelo (haiku/sonnet/opus) por heuristica POSIX pura.scripts/classify.sh(560+ linhas) classifica o input do operador em rasa/media/profunda e emite output markdown em 4 secoes fixas, com fallbackmanter-atualquando indeterminado (input <3 tokens ou empate de pesos).scripts/report.sh(118 linhas) agrega varias classificacoes via branch jq happy-path + fallback awk byte-identical (FR-010a — carve-out de optional-deps). Catalogo de sinais extensivel sem patch emreferences/sinais.md(15 verbos MVP, peso=1). Rotulos sempre abstratos — nunca versao concreta de modelo. 22 testes shell (~127 cenarios PASS),shellcheck -s shlimpo,SKILL.md<200 linhas. Entregue via pipeline SDD autonoma/feature-00cem 23 ondas com 100 decisoes auditaveis. - Protocolo de leitura cache em skills SDD (Fase 2 de
artifact-cache) (PR #16):
specify,clarify,planeexecute-taskagora consultamstate-cache.sh readantes de ler briefing/constitution do disco, com fallback transparente. Reduz ~5-10k tokens/onda em pipelines longos doagente-00c/feature-00c. Hash-validation TOCTOU-safe via_hash.sh; skills standalone (sem state.json) preservam comportamento original. - Primitiva
state-cache.sh+_hash.sh(Fase 1 de artifact-cache) (PR #15): novo helper POSIX emglobal/skills/agente-00c-runtime/scripts/state-cache.shcom 6 subcomandos (init,read,write,invalidate,status,gc) operando sobre namespaceartifact_cacheemstate.json. Extensaostate-validateaceita o novo schema. Helper sourceable_hash.shcentraliza calculo de SHA-256 com fallbacksha256sum/shasum/openssl/awk.
Added (drafts SDD — sem implementacao)¶
- Feature SDD
agente-00c-artifact-cachedrafts iniciais emdocs/specs/agente-00c-artifact-cache/: spec.md— feature spec completa com 4 User Stories (P1/P1/P2/P2), 17 Functional Requirements (FR-CACHE-001..017), Edge Cases, Constitutional Alignment, 5 Success Criteria, Out of Scope, e 5 Open Questions para/clarify.plan.md— plano tecnico provisorio com Constitution Check, Data Model (state.json novo schema), API Contracts da primitiva novastate-cache.sh(6 subcomandos), Research (5 decisoes), Project Structure, Phase plan, Risks.tasks.md— 20 tarefas em 5 fases (Clarify → Primitiva+schema → Skills → Orquestrador+report → Integracao+release), matriz de dependencias, coverage matrix Requirements×Tasks.- Proposito: reduzir ~5-10k tokens/onda em pipelines longos do
agente-00c via cache opcional de briefing.md + constitution.md
em
state.json, com hash-validation TOCTOU-safe e fallback preservado para skills standalone. - Implementacao real fica deferida apos
/clarifyresolver as 5 Open Questions.
Changed¶
- Slash commands + custom agents descriptions: trim YAML
description:em todos os 6 slash commands (global/commands/) e 6 custom agents (global/agents/). Reducao de ~5.245 chars para ~2.569 chars (~669 tokens economizados por boot, -51%). Triggers e discriminadores chave preservados (clarify-asker vs answerer, orchestrator vs feature-orchestrator, etc). Detalhes operacionais e flags permanecem no body de cada arquivo (so carrega quando o comando/agente e efetivamente invocado). Continuacao da otimizacao iniciada em PR #8 (skills); combinada, total ~2k tokens/boot. PR #9. - Skill descriptions: trim YAML
description:em todas as 21 skills deglobal/skills/(de ~10k chars / ~2.560 tok para ~4.6k chars / ~1.150 tok no contexto eager-loaded). Reducao de 54% nos descriptions, ~1.350 tokens economizados por boot. Triggers (frases em aspas) preservados — routing inalterado. Detalhe sobre frameworks, listas longas e clausulas "NAO use para X" extensas migrado para o body doSKILL.md(so carrega quando a skill e invocada). Otimizacao para reduzir custo por onda em pipelines longos (agente-00c,feature-00c). PR #8.
3.13.0 - 2026-05-20¶
Feature-00C — variante do agente-00C focada em uma feature
individual dentro de projeto que JA tem briefing.md +
docs/constitution.md ratificados. Reusa integralmente o runtime
POSIX do agente-00c via parametrizacao retrocompativel (zero
mudancas em comportamento do /agente-00c). Bump MINOR — nenhuma
breaking change.
Added¶
- 3 slash commands:
/feature-00c "<descricao>" [<short-name>](invocacao),/feature-00c-resume <short-name>(retomada com hash validation TOCTOU-safe),/feature-00c-abort <short-name>(aborto manual com SIGTERM + grace period 60s). - 3 agentes custom:
agente-00c-feature-orchestrator(pipeline 7-fases: specify → clarify → plan → checklist → create-tasks → execute-task → review-task),feature-00c-clarify-asker,feature-00c-clarify-answerer(algoritmo de score 0..3 identico ao 00c, mas 3a fonte = spec_corrente em vez de stack_sugerida). - Pre-flight
feature-00c-preflight.sh(FR-010A): valida hashes briefing + constitution registrados em state.json contra arquivos em disco; distingue MAJOR drift (bloqueio compulsorio) de MINOR/PATCH (aviso opcional). Output JSON estruturado. - Filtro de secrets estendido (FR-029 §extensao + FR-036):
secrets-filter.sh for-backupgera backups por onda com hash auto-registrado (state_sha256_self) sobre conteudo filtrado;_log.shaplica filtro em stderr/stdout via helper sourceable com fallback[NO-FILTER]graceful. - §Quality Gates complementares no
agente-00c-feature-orchestrator.md(alinhamento com PR #6 / v3.12.0): integravalidate-documentation(apos specify+plan),owasp-security(apos plan, findings critical/high = BloqueioHumano OBRIGATORIO) evalidate-docs-rendered(apos create-tasks) como gates pos-artefato auditaveis. gate-findingegate_skippedcomokindvalidos de Decisao (data-model.md§Decisao)./review-taskaudita features com2 skips sem justificativa como
quality-gate-bypass.- Helper sourceable
_state-dir.sh: resolve diretorio de estado via precedencia--state-dir arg > AGENTE_00C_STATE_DIR env > erro. Inclui_sd_flavor_to_report_namepara nomes canonicos por flavor (agente-00c | feature-00c). - Roundtrip empirico de secrets documentado em
docs/specs/feature-00c/validation-runs/roundtrip-secrets-2026-05-20.md— 7 checks PASSED empiricamente (contrato de privacidade da feature-00c validado).
Changed¶
- README.md: nova subsecao "Feature-00C — Variante de escopo de feature individual" sob a secao Agente-00C, documentando os 3 comandos novos + coexistencia com agente-00c.
global/skills/agente-00c-runtime/SKILL.md: description atualizada mencionando os DOIS orquestradores que consomem o runtime; 3 secoes novas + 4 Gotchas cobrindo as adicoes.- 21 scripts POSIX do agente-00c-runtime: refactor de
parametrizacao confirmado como majoritariamente DESNECESSARIO
(auditoria empirica em
global/skills/agente-00c-runtime/scripts/_audit-paths.md: 18/21 ja aceitavam--state-dirdesde v1.0).
Tests¶
- +33 cenarios POSIX na suite global (de 651 → 672 PASS):
tests/test_state-dir-parametrization.sh(12 cenarios)tests/test_feature-00c-preflight.sh(7 cenarios)tests/test_secrets-filter-backup.sh(8 cenarios)tests/test_runtime-log-redaction.sh(6 cenarios)- Template de cenarios manuais em
docs/specs/feature-00c/validation-runs/quickstart-2026-05-20.md(12 cenarios incluindo roundtrip empirico + gate-finding).
Backward compatibility¶
- Zero breaking changes.
/agente-00ccontinua funcionando bit-a-bit identico. - Refactor de runtime e 100% retrocompativel — comportamento default preservado sem env var.
- Suite POSIX completa: 672 PASS / 0 FAIL / 0 ERROR / ~140s.
Detalhamento¶
docs/specs/feature-00c/: 37 FRs, 14
SCs, 11 user stories, plan + research (7 Decisions Phase 0), data-
model (8 entidades), 2 contracts (cli-invocation + report-format),
2 checklists (requirements 35 items, security 40 items), quickstart
(12 cenarios), validation-runs (coverage + quickstart-template +
roundtrip empirico).
3.12.0 - 2026-05-20¶
Auditoria estrategica de skills "complementares" do toolkit. Skills sem referencia em nenhum orquestrador ou skill orquestradora eram codigo morto — discoverable so via trigger phrase manual, e raramente acionadas na pratica. Esta release toma decisao explicita skill-por-skill: incentivar (integrando aos orquestradores), depreciar (com remocao agendada), ou remover (quando project-specific demais para o toolkit).
Added¶
- Principio formal de escopo do toolkit (README §Contribuindo):
skills publicadas em
global/skills/oulanguage-related/<stack>/skills/NAO devem nomear clientes/projetos especificos. Skills com forte acoplamento a um projeto pertencem ao proprio projeto, em<projeto>/.claude/skills/. Caso historico:create-report. - Quality Gates SDD no orchestrator (
agente-00c-orchestrator.mdsecao 5.f): 3 skills antes orfas (validate-documentation,validate-docs-rendered,owasp-security) viraram gates nao-bloqueantes pos-artefato no pipeline: - apos
specify→validate-documentationem spec.md - apos
plan→validate-documentationem plan.md +owasp-security(findings critical/high obrigam BloqueioHumano) - apos
create-tasks→validate-docs-renderedno feature-dir
Skip de gate e auditavel: requer Decisao com justificativa, e
/review-task flaga features com >2 skips sem motivo solido como
quality-gate-bypass.
- Delegacao para skills Go em execute-task e review-task:
6 skills go-* antes orfas viraram atalhos explicitos quando stack
detectado for Go (execute-task §4.2.1 e review-task "Atalhos de
auditoria por stack"): go-add-entity, go-add-consumer,
go-add-migration, go-add-test, go-review-service, go-review-pr.
Deprecated¶
- Skill
create-use-case: substituida porspecify(formato SDD com user stories, success criteria e integracao com pipeline orquestrado). Frontmatter recebedeprecated: true,deprecated_since: 3.12.0,remove_in: 4.0.0. UC classico nao tem mais espaco no fluxo atual. - 8 skills
dotnet-*:dotnet-create-entity,dotnet-create-feature,dotnet-create-project,dotnet-create-test,dotnet-hexagonal-architecture,dotnet-infrastructure,dotnet-review-code,dotnet-testing. Stack .NET descontinuada pelo mantenedor; sem substituto no toolkit global. Remocao agendada para v4.0.0 — usuarios que ainda usam .NET devem copiar para<projeto>/.claude/skills/antes da remocao.
Removed¶
- Skill
create-report(language-related/go/skills/create-report/): era altamente acoplada ao sistema GOB (nomes de servico hardcodedgob-report-service/gob-go-commons, exchange RabbitMQgob.reports, caminhos ETCD do GOB, vocabulario macônicolodge/federal/state_orient, cabecalho fixo "Grande Oriente do Brasil" no PDF). Material project-specific pertence ao<projeto>/.claude/skills/, nao ao toolkit global. Caso historico que motivou o principio formal acima.
Changed¶
- README: arvore de estrutura marca
create-use-casee diretoriolanguage-related/dotnet/como deprecated; tabela "Skills para .NET" recebe aviso de depreciacao; tabela "Skills para Go" reflete a delegacao via orquestradores; secao Contribuindo ganha o principio formal de escopo + regra #8 ("Generalize, ou pertence ao projeto").
Why this release matters¶
Skills orfas (sem incentivo nos orquestradores) viram codigo morto silencioso: ocupam espaco no install, complicam descoberta, mas raramente sao acionadas. A auditoria desta release decidiu o destino de cada uma das 24 skills "complementares" do toolkit:
- 13 ACTIVE (ja integradas — sem mudanca)
- 9 incentivadas via orquestradores (3 gates SDD + 6 go-* via execute-task/review-task)
- 4 mantidas standalone (
bugfix,advisor,image-generation,apply-insights— uso por trigger manual cobre o caso) - 9 deprecated (8 dotnet-* + create-use-case)
- 1 removida (
create-report)
3.11.0 - 2026-05-19¶
Enforcement runtime do protocolo pre-flight constitution-conflict
(orchestrator.md §5.b). O hardening v3.8.0 documentou em texto que o
orquestrador deve emitir BloqueioHumano antes de invocar
Skill(constitution) quando pipeline.sh constitution-conflict
retorna exit=2, mas nao havia trava no runtime — dec-004 do projeto
github-pages-cstk-manual provou empiricamente que o agente pode
detectar exit=2 corretamente, listar as 3 opcoes canonicas, e ainda
assim decidir sozinho em Auto Mode (--score 2) e invocar a skill
sem aguardar resposta humana. Esta release fecha os dois caminhos de
bypass no runtime, sem mudar comportamento legitimo.
Added¶
- Trava em
state-decisions.sh register: quando--opcoescontem as 3 strings canonicas do BloqueioHumano pre-flight (atualizar-global-via-bump-SemVer,criar-feature-delta-com-sync-impact-report,abortar-feature-sem-principios-proprios), exige--score 0. Score maior reproduz dec-004 e e rejeitado com exit 1 + mensagem detalhada apontando para a sequencia correta (registrar score 0 →bloqueios.sh register→ aguardar humano →pipeline.sh require-blockade-resolved→ invocar skill). pipeline.sh require-blockade-resolved --state-dir SD --etapa STAGE: novo subcomando que valida cadeia decisao→bloqueio→resposta humana antes da invocacao da skill. Para--etapa constitution:- exit 0 se bloqueio respondido com
atualizar-global-via-bump-SemVeroucriar-feature-delta-com-sync-impact-report; - exit 1 com diagnostico em stderr (
status: missing-preflight-decision/missing-blockade/blockade-pending/blockade-resolved-abort/blockade-invalid-response) caso contrario; - outras etapas retornam
status: not-enforcedexit 0 (extensivel para futuros protocolos).
Changed¶
global/agents/agente-00c-orchestrator.md§5.b: instrucao OBRIGATORIA para rodarpipeline.sh require-blockade-resolvedantes de cadaSkill(constitution). Inclui descricao dos exit codes + referencia historica ao bypass dec-004 que motivou o enforcement.
Tests¶
- 5 novos cenarios em
tests/test_state-decisions.sh(22 total) cobrindo: rejeicao com 3 opcoes canonicas + score=2; aceitacao com score=0; ordem das opcoes irrelevante; backward-compat para decisoes posteriores (tipo ratificacao) com etapa=constitution mas opcoes diferentes; subconjunto parcial das canonicas nao dispara trava. - 8 novos cenarios em
tests/test_pipeline.sh(35 total) cobrindo: etapa nao-enforcada retorna 0; ausencia de decisao pre-flight falha; decisao sem bloqueio FK falha; bloqueio aguardando falha; respondido com criar-delta passa; respondido com atualizar-global passa; respondido com abortar falha; resposta nao-canonica falha. - Suite completa: 639 PASS / 0 FAIL / 0 ORPHANS.
3.10.0 - 2026-05-19¶
Upgrade do cstk session start: nova flag --claude que, apos criar
a worktree isolada, entra no diretorio e dispara o Claude Code via
exec claude. Atalho para o fluxo mais comum (cstk session start X
&& cd ../<repo>-X && claude) em um unico comando.
Added¶
cstk session start <name> --claude: apos setup da sessao (worktree + branch +.claude/filtrado), fazcdpara o path da sessao e substitui o processo cstk porclaude(TTY herdado diretamente, sem shell intermediario). Combinavel com--reset,--reusee--force. Quandoclaudenao esta no PATH, retorna exit 1 com hint manual (cd <path> && claude) — a sessao ja foi criada antes do launch, entao a falha e parcial e reversivel.
Tests¶
- 3 novos scenarios em
tests/cstk/test_session.sh(60 total na suite session, 626 no toolkit completo): scenario_start_claude_flag_launches_claude_binary: stub declaudeconfirma que o CWD do exec e o path da sessao.scenario_start_claude_flag_missing_binary_exit_1: PATH isolado semclauderetorna exit 1; sessao foi criada antes da falha.scenario_start_claude_flag_in_help_text: help documenta a flag.
3.9.1 - 2026-05-19¶
Hotfix do release v3.9.0 — pipeline release.yml falhou em CI Ubuntu
por 2 testes ambient-specific. Sem mudanca de comportamento de feature.
Fixed¶
_session_prordem de validacao: spec FR-009 declara ordem(a) sessao, (b) commits, (c) gh. Implementacao inicial tinha gh check antes de commits check, fazendoscenario_pr_no_commits_exit_13retornar 12 (unauth) em vez de 13 (sem commits) em ambientes ondegh auth statusfalha (CI Ubuntu sem credenciais). Validacao local agora tem precedencia sobre dep externa, alinhado a spec.- Teste
scenario_pr_gh_not_installed_exit_11: PATH=/usr/bin:/bin incluia gh no CI Ubuntu (/usr/bin/gh). Refatorado para criar diretorioisolated-bincom symlinks apenas para essentials (git/sh/sed/etc), garantidamente sem gh — robusto entre macOS (brew em /opt/homebrew) e Ubuntu (apt em /usr/bin).
3.9.0 - 2026-05-19¶
Subcomando cstk session — sessoes paralelas isoladas via git worktree,
resolvendo colisao de working tree, branch HEAD e
.claude/agente-00c-state/ quando o usuario abre multiplas features
simultaneas no mesmo repositorio. 4 verbos (start/list/end/pr),
zero dependencias alem de git + gh (dep opcional confinada em
cli/lib/session.sh sob amendment 1.1.0 da Constitution).
Added¶
cstk session start <name> [--reset|--reuse] [--force]: cria worktree em<parent>/<repo>-<name>/com branch resolvida segundo 5 regras (nova / rastreando origin / reutilizar local / recriar com --reset / forcar com --reuse). Copia.claude/filtrado excluindo 8 artefatos runtime/per-env (agente-00c-state/, agente-00c-archive/, insights/, settings.local.json, agente-00c-whitelist, agente-00c-report.md, agente-00c-suggestions.md, .agente-00c-state.lock).--resetcom commits nao-mergeados emite prompt interativo (bypassavel com--force).cstk session list [--json]: tabela comNAME BRANCH IDLE STATUS PATH; marcadores combinaveisCURRENT,*,STALE. Modo JSON emite array camelCase (name/branch/path/idleDays/dirty/stale/current) sem rodape. Ordenacao por idle ASC. Rodape "tip: rode 'git worktree prune'..." se houver STALE.cstk session end <name> [--force]: remove worktree + branch local com guards. Prompt interativo se ha mudancas nao commitadas, commits nao pushados ou PR aberto no GitHub. Detecta self-end (rodando de dentro da worktree-alvo → exit 14).ghopcional — ausente/unauth pula PR check com warning e prossegue.cstk session pr <name> [--draft] [--title T] [--body B] [--reviewer USER]: push + abre PR viagh pr create. Idempotente: se PR ja existe (OPEN/MERGED), retorna URL existente sem criar duplicata. Detecta default branch viagit symbolic-ref refs/remotes/origin/HEAD(fallbackmain). Falha parcial (push OK + gh create falhou) emite stderr orientativo com comandos de recovery.- Boot-check
git >= 2.36: necessario para campoprunableemgit worktree list --porcelain. Versao inferior → exit 15 com mensagem de upgrade. - 15 exit codes especificos: 5 (nome invalido), 6 (sessao ja
existe), 7 (path ocupado), 8 (branch mergeada), 9 (sessao nao
encontrada), 10 (cancelado), 11 (gh ausente), 12 (gh unauth), 13
(sem commits), 14 (self-end), 15 (git antigo). Todos documentados
em
contracts/cli-session.mde exercitados por cenarios automatizados. - 57 cenarios de teste em
tests/cstk/test_session.shcobrindo os 4 subcomandos + helpers + dispatch + E2E + lint meta. 2 cenarios de PR marcados como MANUAL (exigem rede + repo remoto GitHub).
Changed¶
cli/cstkdispatcher: adicionadasessionem 3 lugares (linha 159 case help, linha 196 dispatch principal, linha 141 secao COMANDOS do help geral).README.md: nova secao "Sessoes paralelas" com exemplos e referencias para spec + contracts.CLAUDE.md: secao curta "Sessoes paralelas (cstk session)" apontando para a spec.
3.8.0 - 2026-05-19¶
Hardening do agente-00C contra dois bypasses encontrados em
exec-2026-05-18-iniciacao-membro-rolledback: (1) constitution raiz
ignorada com feature-delta silencioso (dec-004) e (2) tasks.md gerado
in-process sem invocar a skill create-tasks (dec-014). O fix endurece
pipeline.sh detect-completion, adiciona novo subcomando
constitution-conflict e introduz audit trail de invocacao de skills
via state-ondas.sh record-skill.
Added¶
pipeline.sh constitution-conflict: novo subcomando que detecta 4 estados entredocs/constitution.mdraiz e feature constitution (none-exists / pre-skill-alert / conflict / coordinated). Exit 2 obriga o orquestrador a emitir BloqueioHumano com 3 opcoes (atualizar global via bump SemVer / criar feature-delta com Sync Impact Report / abortar) antes de invocar a skillconstitution. Exit 1 sinaliza feature constitution silenciosa semPredecessor:no header.state-ondas.sh record-skill: subcomando que registra invocacao formal de skill via tool Skill em.ondas[-1].skills_invoked = [...]. Idempotente para mesma combinacao (skill + decisao_id). Permite quereview-task(e auditorias) identifiquem o anti-padrao "etapa marcada completa mas skill canonica nunca foi invocada"..ondas[N].skills_invoked: []: novo campo no schema dostate.json, inicializado emstate-ondas.sh start. Backward compatible — states pre-existentes nao quebram.- Regras 5.a/5.b/5.c/5.d/5.e no
agente-00c-orchestrator.md: invocacao via tool Skill OBRIGATORIA parabriefing,constitution,create-tasks. Constitution exige pre-flight comconstitution-conflictantes de chamar a skill. Cada etapa SDD chamarecord-skillapos a invocacao bem-sucedida. - 19 novos cenarios de teste: 13 em
test_pipeline.sh(validacao briefing/tasks + 4 cenarios constitution-conflict + 2 cenarios de detect-completion constitution) e 7 emtest_state-ondas.sh(record-skill: append, idempotencia, multi-skill, sem decisao_id, sem onda, validacao de flags, init com skills_invoked vazio).
Changed¶
pipeline.sh detect-completion --stage briefingagora valida estrutura minima do template (header# (Project )?Briefing+ >=4 secoes nucleares: Visao/Usuarios/Escopo/Prioridades/Restricoes/ Stack/Qualidade/Futuro). Antes aceitava qualquer arquivo presente. Razao: defesa contra briefings rasos gerados in-process.pipeline.sh detect-completion --stage create-tasksagora valida estrutura do template da skillcreate-tasks: cabecalho# Tarefasou# Tasks, presenca de## FASE N, legendas[C]/[A]/[M](NAO aceitaP0/P1/P2/P3),## Matriz de Dependencias,## Resumo Quantitativo,## Escopo Cobertoe## Escopo Excluido. Antes so checava existencia do arquivo.pipeline.sh detect-completion --stage constitutionquando raiz e feature constitution coexistem: agora exige header comPredecessor:ou referencia adocs/constitution.mdnas primeiras 30 linhas. Sem essa coordenacao explicita, retorna exit 1 com mensagem orientando o operador.
Fixed¶
- Bypass de skills SDD (dec-004 + dec-014 da execucao-fonte): o
orquestrador podia gerar
constitution.md(feature-delta) etasks.mddireto via Write/Edit, sem invocar a skill canonica e sem detect-completion sinalizar problema. O artefato resultante drifa do template oficial — no caso real,tasks.mdsaiu sem Matriz de Dependencias / Resumo / Escopo, e a feature constitution criou 8 principios proprios sem coordenacao com a global v1.0.0. Os 3 gates novos (constitution-conflict + validacao estrutural + skills_invoked tracking) fecham esse furo em camadas: pre-flight bloqueia, validacao rejeita artefato fora-do-padrao, audit trail expoe etapa marcada completa sem skill invocada.
3.7.0 - 2026-05-16¶
Enriquecimento significativo da skill owasp-security com atualizacoes
posteriores a Janeiro/2026, incorporando 9 novas listas/standards e 6
mencoes de cobertura complementar. Reestruturada em SKILL.md (entry
point operacional) + 5 arquivos de referencia profunda em
references/, mantendo carregamento de contexto enxuto sem perder
profundidade.
Added¶
- OWASP LLM Top 10:2025: nova secao irma a Agentic 2026 cobrindo riscos a nivel-modelo (LLM01 Prompt Injection, ..., LLM07 System Prompt Leakage, LLM08 Vector/Embedding Weaknesses, LLM10 Unbounded Consumption). Detalha indirect prompt injection (+32% Nov-2025 a Feb-2026 per Google), poisoning de RAG e inversao de embeddings.
- OWASP API Security Top 10:2023: secao completa com API1 BOLA, API3 BOPLA (mass assignment + excessive exposure), API6 Sensitive Business Flow Abuse, API7 SSRF (incluindo metadata-service guards) e API10 Unsafe Third-Party Consumption. Inclui patterns Python para cada risco.
- OWASP CI/CD Top 10: CICD-SEC-1..10 com deep dive em PPE (Direct, Indirect, Public), modern credential hygiene (OIDC federation, ESO, dynamic creds via Vault) e SLSA/Sigstore para integridade de artefato.
- NIST SP 800-63B-4 (Final 31-Jul-2025): substitui aluso vaga por regras concretas — passwords 15 chars no AAL2, SHALL NOT impor composition rules, SHALL NOT requerer rotacao periodica, SHALL checar contra breached-password lists, SHALL NOT usar KBA recovery. Nova Section 5.3 Session Monitoring com reauth 12h/30min e step-up auth.
- WebAuthn / Passkeys: nova subsecao substituindo "MFA generico". Cobre WebAuthn L3 Working Draft (Jan-2025), passkeys como AAL2 syncable authenticators, server-side requirements e armadilhas (origin check, sign-count monotonicity, cross-origin iframes).
- OAuth 2.1 + FAPI 2.0: cobertura de OAuth 2.1 (PKCE mandatory, implicit/password grants removidos), DPoP (RFC 9449) sender- constraining, PAR (RFC 9126), JAR (RFC 9101) e FAPI 2.0 Security Profile Final (19-Feb-2025) para APIs high-stakes.
- MCP Authorization Spec (Jun-2025): expansao do ASI04 cobrindo RFC 8707 Resource Indicators, DPoP em MCP, ataque "confused deputy" em proxy servers e sanitizacao de tool descriptions. Checklist especifico para review de servidores MCP.
- Post-Quantum Cryptography: nova secao cobrindo FIPS 203 ML-KEM, 204 ML-DSA, 205 SLH-DSA (publicadas 13-Ago-2024). Estrategia HNDL (Harvest-Now-Decrypt-Later), crypto agility, hybrid TLS (X25519+ML-KEM-768), timeline NIST IR 8547 e CNSA 2.0 (mandatory US-gov 2030-01-02).
- Secrets Management 2026: OIDC federation (GitHub Actions ↔ AWS STS), Workload Identity, External Secrets Operator, dynamic database credentials via Vault, SOPS/Sealed Secrets para GitOps, gitleaks/trufflehog em pre-commit + push protection.
- CWE Top 25:2025 (CISA/MITRE, Dez-2025): tabela com top 25 + mapeamento para OWASP Top 10:2025. Destaques: CWE-862 Missing Authorization subiu 5 posicoes, CWE-79 XSS retomou #1.
- Modern prompt injection patterns: indirect injection no wild (+32% trimestre), many-shot jailbreaking (exploits >128k context), tool-empowered jailbreaks (chains que individualmente parecem benignas). Cita pesquisa do Google e Anthropic.
- MAESTRO threat modeling: framework do Cloud Security Alliance (Fev-2025) estendendo STRIDE com camada AI-agent-specific. 7 layers de modelagem: foundation model, data, agent framework, tools, multi-agent orchestration, application logic, user/UI.
- OWASP Mobile Top 10:2024 + MASVS 2.1: cobertura M1-M10 com exemplos plataforma-especificos (Keychain iOS, EncryptedSharedPrefs Android, cert pinning OkHttp com backup pin).
- OWASP Kubernetes Top 10 + Docker Top 10: K01-K10 com Pod
Security Standards (
restricted), NetworkPolicy default deny, OPA/Kyverno admission policies, Falco runtime, distroless base images. - EU AI Act mapping: regulation 2024/1689 com risk tiers (unacceptable/high-risk/limited/minimal/GPAI), obrigacoes vigentes desde 2-Ago-2025, multas ate EUR35M ou 7% turnover. Overlap com OWASP LLM Top 10 e Agentic 2026.
Changed¶
SKILL.mdreorganizado: cabecalhodescriptionexpandido para incluir 12+ novos triggers (passkey, FAPI, post-quantum, MCP security, prompt injection). Adicionada secao "Deep references" no topo apontando parareferences/*.md. Checklists de Auth, Data Protection e Agentic AI reescritos para refletir 2026 best practices (passkeys-first, OIDC federation, MCP OAuth 2.1). Gotchas atualizados com 5 regras novas (NIST 800-63B-4 no-rotation, passkey-first, MCP OAuth 2.1+RFC 8707+DPoP, PQC inventory now, LLM+Agentic complementares).OWASP-2025-2026-Report.mdexpandido: TOC reorganizado em 11 secoes (era 5). ASVS V2.1.1 atualizado de "12 chars" para "12+ (NIST 800-63B-4 raises to 15 for AAL2)". 6 novas secoes inseridas: API Security Top 10:2023, CI/CD Top 10, LLM Top 10:2025, NIST SP 800-63B-4 highlights, Post-Quantum Cryptography, CWE Top 25:2025. Sources reorganizadas por categoria (OWASP / Auth / Crypto / AI / Regulatory / Standards). Data atualizada para Maio/2026.README.mdlinha de descricao da skill: expandida para listar todas as 12 listas/standards cobertas (era apenas 3).
Files¶
global/skills/owasp-security/SKILL.md— 680 linhas (+110 vs 3.6.0)global/skills/owasp-security/OWASP-2025-2026-Report.md— 1061 linhas (+269 vs 3.6.0)global/skills/owasp-security/references/llm-agentic.md— NOVO, 273 linhasglobal/skills/owasp-security/references/api-cicd.md— NOVO, 275 linhasglobal/skills/owasp-security/references/auth-modern.md— NOVO, 277 linhasglobal/skills/owasp-security/references/crypto-modern.md— NOVO, 198 linhasglobal/skills/owasp-security/references/extras.md— NOVO, 223 linhas
3.6.0 - 2026-05-15¶
Evolucao pos-execucao do agente-00c — 14 recomendacoes priorizadas
derivadas da primeira execucao real (60 ondas, 224 decisoes,
exec-2026-05-11T19-59-58Z). Backlog completo em
docs/specs/agente-00c-evolucao/tasks.md; analise-fonte em
docs/01-briefing-discovery/agente-00c-analise-licoes-aprendidas.md.
Added¶
- FASE 1 P0 — Validacao empirica obrigatoria para
score=3:state-decisions.sh register --score 3agora EXIGE--evidencia(>=20 chars com comando empirico + fragmento literal do output). Sem evidencia, exit 1 com violacao de Principio I. Razao: 3 decisoes historicasscore=3afirmaram premissa tecnica falsa sem rodar tsc/test/grep. Adiciona Etapa 0 "Validacao Empirica de Premissas" noexecute-task/SKILL.mde §Score-de-decisao no orchestrator. - FASE 1 P0 — Drift detector refatorado: matcher bidirecional
via tokens (
mcp-jiracasa comintegracao-bidirecional-mcp-jira), 3 camadas de aspectos (iniciais/tecnicos/operacionais), janela movel de 12 ondas (warn>=5 untouched, abort>=8) substitui o gatilho antigo de "5 consecutivas". Novos subcomandosdrift.sh mark-touched --aspecto Xedrift.sh debug [--onda ID]. Init aceita--tecnicos,--operacionaise--force. - FASE 1 P0 — Secrets-filter allow-list: novo arquivo
.secrets-filter-ignore(baseline com SAML_ISSUER, OIDC_ISSUER, COOKIE_DOMAIN, PUBLIC_, VITE_, etc); suporte a wildcard de sufixo; auto-descoberta de override por projeto-alvo (<env-dir>/.claude/agente-00c-state/secrets-filter-ignore); heuristica slug-com-separador para identificadores publicos curtos. Razao: identificadores publicos por design (sug-005, sug-049) eram redatados, removendo paths legiveis do report. - FASE 2 P1 — Pre-flight de bootstrap no briefing: nova secao
em
briefing/SKILL.mdinstruindo geracao descripts/bootstrap-deps.shpara stacks multi-workspace (npm workspaces, Go modules, Cargo). Amortiza N bloqueiosnpm installcirurgicos em batch unico antes de/agente-00c. Documentado tambem emagente-00c.md(checklist pre-execucao com heuristica de gap). - FASE 2 P1 — Sincronizacao bidirecional
tasks.md↔ codigo: protocolo de 3 pontos (pre-execucao, decisao→sub-FASE, hook pos-onda) emcreate-tasks/SKILL.md; Etapa 9.3 nova emexecute-task/SKILL.md; hook pos-detect-completion no orchestrator emitindo Decisao informativa quando diff vs checkbox diverge. Subsecao "Paridade de tipos compartilhados" (sug-028). - FASE 2 P1 — Mapeamento etapa → aspecto-chave automatizado:
novo subcomando
state-rw.sh infer-aspectos [--projeto-alvo-path PATH]que aplica matcher fuzzy bidirecional (mesma logica do drift.sh) contragit diff --name-only HEAD~1..HEADpara inferir aspectos tocados pela onda. Orchestrator chama no hook pos-detect-completion + persiste em.ondas[-1].aspectos_chave_tocados. Tabela de fallback etapa → aspecto-tipico documentada. - FASE 3 P2 — Convencoes de Borda no plan: nova ETAPA 5.4 em
plan/SKILL.mdexigindo tabelaCamada | Case style | Validacao | Fonte da verdadepara features com 2+ camadas. Roundtrip E2E obrigatorio noquickstart.md(chamada real, nao mock) para features com borda backend↔frontend. Novo pass G "Convencoes de Borda" emanalyze/SKILL.md. - FASE 3 P2 — Decisoes de Infraestrutura Auditaveis no specify:
checklist de 6 itens (scheduling, key rotation, refresh policy,
mutex multi-pod, backup/restore, idempotencia) virando FRs
FR-NN-INFRA-Xexplicitos.clarify/SKILL.mdganhou categoria INFRA + reordenou prioridade (INFRA acima de UX). - FASE 3 P2 — Init de aspectos no briefing: orchestrator §"Init
de aspectos-chave (primeira onda apenas)" chama
drift.sh initcom 3 camadas apos briefing concluido./agente-00c-resumeaceita--init-aspectos,--init-aspectos-tecnicos,--init-aspectos-operacionaispara execucoes legadas (relaxa idempotencia via--force). - FASE 4 P3 — Marco-aware retro a cada 25 ondas: hook no passo
10 do orchestrator emite bloqueio leve perguntando ao operador se
deseja retro proativa em multiplos de 25 ondas. Atualiza
.proximo_marco_retrospectivano estado. - FASE 4 P3 — Schedule intent literal vs sentinel: tabela do
passo 11 do orchestrator ganhou coluna "Slash command pai".
Pipelines de
/agente-00c-resumeusampromptliteral (/agente-00c-resume --projeto-alvo-path <PAP>), nao sentinel<<autonomous-loop-dynamic>>(que so funciona quando/loope o pai). - FASE 4 P3 — Perfil
--runbookno validate-documentation: validacao de frontmatter (title: RB-\d{3}:, severidade, tempo-estimado, pre-requisitos), 6 secoes obrigatorias (incluindo Rollback quando severidade=critica), check de placeholders residuais (TODO/XXX/FIXME) e cross-refs validos. - FASE 4 P3 — Dry-run de Agent tool em clarify (orchestrator
§5.a): antes do spawn de clarify-asker, verifica disponibilidade
da tool Agent; se ausente, registra Decisao EXPLICITA de downgrade
in-process (evita silent-fallback documentado em dec-006).
clarify/SKILL.mdganhou secao "Modos de invocacao" referenciando o orchestrator. - FASE 4 P3 — Sistema canonico de tracking: nova secao no topo
do orchestrator instruindo a IGNORAR system-reminders sobre
TaskCreate/TaskUpdate. Razao (sug-029): 8+ reminders em uma so onda historica;state.json+state-decisions.shsao o sistema canonico (auditavel via 5 campos + score). Investigacao sobre hook do harness emdocs/specs/agente-00c-evolucao/notas-harness-hook.md(conclusao: nao viavel hoje).
Changed¶
- BREAKING (interno) —
drift.sh checkmuda semantica: antes contava ondas CONSECUTIVAS sem aspecto (5 = abort); agora conta untouched em JANELA MOVEL das ultimas 12 ondas (5..7 = warn, >=8 = abort). Backbone tecnico intercalado (FASE 4.x) nao dispara mais abort. Stdout docheckagora e numero de untouched na janela, nao consecutivas. Tests atualizados (21 cenarios, 21/21 verdes). Overrides via env:DRIFT_WINDOW_SIZE,DRIFT_WARN_THRESHOLD,DRIFT_ABORT_THRESHOLD. - BREAKING (interno) — schema do state.json: adicionados
campos opcionais
.aspectos_chave_tecnicos,.aspectos_chave_operacionais,.proximo_marco_retrospectiva, e.decisoes[].evidencia. Backward-compatible para read; writers antigos que nao emitirem esses campos continuam funcionando. - BREAKING (interno) —
state-decisions.sh registerrejeitascore=3sem--evidencia: chamadas anteriores que emitiamscore=3sem evidencia agora falham com exit 1. Para preservar comportamento antigo, baixar parascore=2(que permanece valido sem evidencia).
Fixed¶
- Drift detector deixava de detectar aspectos quando o aspecto era
string longa contendo o token presente no texto (
integracao- bidirecional-mcp-jiravs texto "mcp-jira ok"). Matcher bidirecional via tokens resolve. SAML_ISSUER,COOKIE_DOMAIN,OIDC_ISSUER(publicos por design) eram redatados como secrets, removendo paths legiveis do report.
Testing¶
./tests/run.shfull suite: 548 PASS / 0 FAIL / 0 ERROR / 0 ORPHANS apos a evolucao (+15 cenarios novos cobrindo evidencia score=3, drift fuzzy/camadas/janela/mark-touched/debug, secrets-filter allow-list/slug, e infer-aspectos).
3.5.3 - 2026-05-12¶
Fixed¶
cstk updatenao sincronizavacommands/eagents/: a funcaoupdate_mainemcli/lib/update.shso iterava o manifest de skills. Commands e agents (infraestrutura global do toolkit, distribuida pelo install via_install_apply_extra_kinds) ficavam congelados em drift permanente apos a primeira instalacao. Sintoma reportado: orchestrator do agente-00C continuava emitindo "ScheduleWakeup nao disponivel neste harness" mesmo aposcstk update, porque o fix do commit 56b3959 (orchestrator retornaSchedule intentem vez de invocarScheduleWakeup) nunca alcancava o disco do usuario.
Fix: novo _update_apply_extra_kinds espelha o do install, com
semantica de update completa:
- Idempotencia: release == manifest -> zero writes (mtime preservado)
- Edit local: respeita --force (sobrescreve) e --keep (silencia);
sem flag, conta em skipped_edits e propaga exit 4
- Third-party (.md fora do manifest dedicado por kind): preservado
por default; --force sobrescreve — caminho de recuperacao para
instalacoes historicas em que o manifest dedicado por kind nunca
foi criado
- Manifest de skills vazio nao impede mais processar commands/agents
- Summary reporta linhas commands: ... e agents: ... com seis
counters (installed/updated/uptodate/kept/skipped/preserved)
Help text de cstk update --help atualizado para refletir o escopo.
Cobertura: 9 cenarios novos em tests/cstk/test_update-extra-kinds.sh
(idempotencia, atualizacao real, third-party com/sem --force,
edit local com --force/--keep/exit 4, dry-run zero writes,
compat com tarball historico sem commands/agents). 12 cenarios
existentes em test_update.sh continuam verdes.
- agente-00c-orchestrator emitia
Schedule intent: nonemesmo com statusem_andamento: a nota explicativa do prompt comecava com "POR QUE NAO HA ScheduleWakeup AQUI" e descrevia o problema em tom negativo ("qualquer ScheduleWakeup invocado aqui firmaria — se firmasse — para um contexto ja extinto"). O LLM, executando como sub-agent, parafraseava essa explicacao e raciocinava "schedule nao funciona aqui, motivo=ScheduleWakeup_indisponivel" — emitindoSchedule intent: none; motivo=ScheduleWakeup_indisponivelmesmo quando deveria emitirdelaySeconds=.... O slash command pai reproduzia a frase invalida ("Proxima onda agendada: nenhuma — ScheduleWakeup indisponivel; retomar via /agente-00c-resume"), efetivamente desabilitando schedule automatico.
Fix em global/agents/agente-00c-orchestrator.md:
- Nota de topo reescrita em tom positivo: "Schedule SEMPRE funciona.
Voce decide os parametros, o pai executa." Lista explicita de
antipadroes ("NUNCA emita Schedule intent: none com motivo
ScheduleWakeup indisponivel ou similar").
- Passo 11 reescrito: tabela de decisao expandida com coluna
"Bloqueios pendentes" e marca OBRIGATORIO para o caso
em_andamento + 0 bloqueios. Reforco final: "NUNCA emita
Schedule intent: none com motivo ScheduleWakeup_*".
3.5.2 - 2026-05-12¶
Fixed¶
cstk 00c: Ctrl+C nao abortava prompts limpo (#2):trap '_00c_release_lock' EXIT INT TERMrodava o cleanup mas nao chamavaexit. POSIX consume o sinal apos o trap;read -rno loop de validacao retornava empty e o while prosseguia pedindo input — operador ficava preso no prompt e Ctrl+\ (SIGQUIT) era o unico escape, orfanando o lock per-path.
Fix: split em duas traps. EXIT chama _00c_release_lock (cleanup);
INT/TERM chamam exit 130/exit 143, que disparam o EXIT trap
em sequencia. Operador sai com exit code POSIX correto e lock
liberado.
Regressao coberta via self-signal kill -INT $$ em
scenario_issue_2_sigint_propaga_exit_130 (SIGINT real em background
jobs nao eh testavel em POSIX sh por causa do SIG_IGN inherit).
- agente-00c: pipeline.sh detect-completion nao reconhecia paths do
/initialize-docs(#3):detect-completionso olhava em--feature-dir(docs/specs/<feature>/), mas as skillsbriefingeconstitutionsalvam em paths project-level da hierarquia numerada: briefing ->docs/01-briefing-discovery/briefing.md, constitution ->docs/constitution.md. Orchestrator nunca detectava conclusao dessas etapas; double-write workaround duplicava o artefato em dois locais (suggestionsug-001da smoke v3.5.0).
Fix: novo flag opcional --projeto-alvo-path PAP em
detect-completion. Para briefing/constitution, paths do
/initialize-docs sao aceitos como fallback alem do feature-dir.
Orchestrator (Loop principal item 6) passa o PAP em todas as
chamadas. Skills briefing/constitution permanecem inalteradas
— caminho canonical delas continua nos paths numerados (decisao
consciente: artefatos project-level separados de feature-level).
3.5.1 - 2026-05-12¶
Fixed¶
/agente-00cfalhava em install default por falta da skillagente-00c-runtime: a runtime (infra interna que provêstate-rw.sh,path-guard.sh,whitelist-validate.shetc. ao orchestrator) so constava no profileall—cstk installdefault (profilesdd) instalava comandos e agentes do 00C mas deixava a runtime de fora. Resultado:/agente-00cfalhava na primeira chamada Bash do orchestrator com referencia a script ausente.
Tres camadas de fix:
scripts/profiles.txt.in:agente-00c-runtimeagora pertence asddEcomplementary(alem doallja existente). Qualquer install default carrega a runtime junto.cli/lib/00c-bootstrap.sh::_00c_check_deps: pre-flight docstk 00cestende para command + runtime executavel + orchestrator. Antes so checava o.mddo command — instalacao parcial passava silenciosa e quebrava so dentro de uma onda.global/agents/agente-00c-orchestrator.md: nova secao "Pre-flight da execucao" antes do loop de onda, com Bash check programatico destate-rw.sh/state-lock.sh/path-guard.sh(+x). Substitui a interpretacao em natural-language que estava produzindo diagnosticos hallucinados.
Regression test em tests/cstk/test_build-release.sh garante que o
profile sdd inclui agente-00c-runtime permanentemente.
- Orchestrator (sub-agent) nao pode invocar
ScheduleWakeupde forma sobrevivente: o thread do sub-agent termina ao retornar o sumario para o slash command pai. Qualquer wakeup agendado pelo orchestrator firmaria — se firmasse — para contexto ja extinto. O resultado era o erro recorrenteProxima onda agendada: nenhuma (ScheduleWakeup indisponivel — operador retoma via agente-00c-resume).
Refactor para o padrao decide-aqui-executa-la:
global/agents/agente-00c-orchestrator.md:ScheduleWakeupremovido deallowed-tools. Step 11 reescrito — orchestrator agora DECIDEdelaySeconds+reasone grava o ISO planejado em.ondas[-1].proxima_onda_agendada_para. Step 13 (sumario) formaliza linhaSchedule intent: delaySeconds=N; reason="..."; prompt="..."(ouSchedule intent: none; motivo=<X>) que o pai parseia.global/commands/agente-00c.mdeglobal/commands/agente-00c-resume.md:ScheduleWakeupadicionado aoallowed-tools. Novo step "Schedule da proxima onda" parseia a linha do sumario do orchestrator e invocaScheduleWakeupno thread do pai. Em caso de falha, limpa.ondas[-1].proxima_onda_agendada_paraviastate-rw.sh set.
Comportamento externo: /agente-00c e /agente-00c-resume agora
realmente agendam a proxima onda quando o status e em_andamento sem
bloqueios. O sumario ao operador mostra ISO real do wakeup, nao
intencao do sub-agent.
3.5.0 - 2026-05-09¶
Added¶
-
Subcomando
cstk 00c <path>— bootstrap interativo do agente-00C (FASE 12 docstk-cli): atalho recomendado para iniciar uma sessao do agente-00C. Cria diretorio do projeto-alvo, valida path, coleta parametros via prompts (descricao, stack JSON, whitelist de URLs) e invocaclaudeja com/agente-00c '<args>'auto-submetido como primeiro turno. Elimina friccao demkdir/cd+ memorizar a sintaxe da slash command. -
Validacao defensiva (FR-016b): rejeita path traversal
.., rejeita 14 zonas de sistema (/,/etc,/usr,/var,/bin,/sbin,/boot,/proc,/sys,~/.ssh,~/.gnupg,~/.aws,~/.config/claude+ canonicas e resolvidas no macOS); resolve symlinks viarealpath -m(fallback POSIXcd -Ppara BSD).<path>exato em$HOMErejeitado, mas paths INSIDE$HOMEsao permitidos. - TTY-only (FR-016a): subcomando recusa execucao em pipe/CI;
[ -t 0 ] && [ -t 1 ]. Stderr pode ser redirecionado. - Dir nao-vazio = recusa direta sem prompt (FR-016b): finalidade
e atalho para projeto NOVO; mensagem aponta
/agente-00c-resumepara retomada. - Lock per-path (FR-016h, novo):
mkdir <path>/.cstk-00c.lock/atomico antes de qualquer prompt; release viatrap EXIT INT TERM- release explicito antes do
exec claude. Previne race entre duas instancias simultaneas no mesmo<path>.
- release explicito antes do
- Dep checks (FR-016d): claude CLI no PATH;
jqno PATH (teste funcional viajq --version);~/.claude/commands/agente-00c.mdinstalado — ausencia dispara prompt[Y/n]para auto-install viacstk installem foreground (respeita lockfile global de FR-015). Falha do nested install propaga exit code + razao. - Sanitizacao (FR-016g): descricao escapada para shell single-quotes
(
'->'\''); stack JSON compactada viajq -c; whitelist persistida em<path>/.agente-00c-whitelist.txt(chmod 600) e referenciada via path absoluto em--whitelist(evita argv overflow). - Validacao de URL na whitelist: espelha
agente-00c-runtime/scripts/whitelist-validate.shrejeitando patterns overly-broad (**puro,*://*,https://*sem dominio, host vazio, sem scheme http(s), wildcard fora do prefixo*.dominio.tld). - Dry-run preview obrigatorio (FR-016e): mostra path final,
descricao, stack, whitelist count + path, e linha exata da
/agente-00cque sera invocada. Confirmacao final[Y/n](default Y); flag--yespula apenas o prompt final + auto-install. - Spawn auto-submit (FR-016f):
exec claude "$slash_command"passa a slash command como argv[1]; claude processa como primeiro turno automatico (sem exigir Enter adicional do operador).
Implementacao em cli/lib/00c-bootstrap.sh (~480 linhas POSIX puro)
com 16 helpers privados _00c_* + entry point publico
bootstrap_00c_main. Special-case no dispatcher porque POSIX
nao permite funcao com nome iniciando em digito (00c_main invalido).
Cobertura de testes: 18 cenarios em tests/cstk/test_00c-bootstrap.sh
com mocks de claude (registra argv) e cstk install (controlavel).
Cenarios cobrem path validation, TTY, deps ausentes, prompts (descricao
9/501 chars, com $, com unicode, JSON malformado, URL overly-broad),
lock pre-existente, dry-run + cancel, happy path com argv correto,
apostrofo escapado, JSON com aspas duplas internas. Suite total:
505 PASS / 0 FAIL.
Changed¶
-
Carve-out 1.1.0 atualizada:
jqagora obrigatorio emcli/lib/00c-bootstrap.sh(era opcional em outros comandos do cstk). Justificativa: validacao de stack JSON (FR-016c) + dep transitiva doagente-00c-runtimeque ocstk 00cinvoca via/agente-00c— falha cedo em FR-016d e melhor UX que erro tardio dentro da sessao doclaude. -
cstkdispatcher ecstk --helpatualizados com nova entrada00c <path>listando o subcomando entre os comandos validos. -
README.md secao Agente-00C documenta
cstk 00c <path>como o caminho preferido para iniciar sessoes do agente-00C, com nota apontando/agente-00c-resumepara retomada de execucoes existentes.
3.4.0 - 2026-05-09¶
Changed¶
/agente-00cfaz warm-up de permissoes em batch ANTES de spawnar o orquestrador (post-FASE 9 feedback): nova passo 0 invoca todas as 10 skills da pipeline + 3 agentes custom + ScheduleWakeup + Bash helpers + Read/Write em sequencia. Cada invocacao dispara o prompt nativo de permissao do Claude Code uma vez, com o operador presente. Apos confirmacao, o orquestrador roda autonomamente sem interrupcoes (resolve o problema de fluxo travado quando permissoes "lazy" pediam aprovacao em ondas posteriores onde o operador nao estava disponivel)./agente-00c-resumee/agente-00c-abortNAO refazem warm-up (resume = continuacao, abort = operacao curta com operador presente). Orquestrador ganhou secao "Warm-up de permissoes (pre-condicao)" documentando o contrato e instruindo deteccao de permissao pendente no meio de uma onda como BloqueioHumano.
Added¶
-
Validacao end-to-end (parcial) e licoes da implementacao do agente-00C (FASE 9):
-
scripts/quickstart-shell-sim.sh: simula via Bash os 10 cenarios do quickstart compondo as primitivas dos 14 scripts doagente-00c-runtime. NAO invoca o agente Claude — exercita apenas composicao shell-level. Resultado: 10/10 PASS em ~5s. Detecta regressao quando um script deixa de compor com outros (gate complementar atests/run.shque testa cada script isoladamente). -
docs/specs/_archived/agente-00c/validation-runs/(novo diretorio): registro de execucoes do agente-00C. README com template + tipos (shell-simulation vs end-to-end-real). Primeiro registro:2026-05-06-end-to-end-shell-simulation.md(10/10 PASS, SCs validaveis em shell-level: SC-001, SC-002, SC-007, SC-008). -
docs/specs/_archived/agente-00c/lessons-from-implementation.md: 5 licoes concretas da implementacao das 8 fases — bug jq em pipe (drift.sh), dupla resolucao de symlinks no macOS (path-guard.sh), "skills internas" como padrao (agente-00c-runtime), cobertura forçada como ROI alto (3 bugs descobertos), estratificacao 3-camadas (commands/agents/scripts). Cada licao com proposta concreta de FR para skill especifica + avaliacao contra constitution do toolkit (nenhuma requer amendment).
Subtarefas da FASE 9 atendidas autonomamente: 9.1.1-9.1.11 (10 cenarios shell-simulated + relatorio), 9.2.1-9.2.3 (bump MINOR determinado, CHANGELOG/README atualizados), 9.4.1-9.4.3 (licoes da implementacao + propostas FR + avaliacao constitution).
Subtarefas pendentes (exigem operador): 9.2.4 (cstk doctor pos-release
v3.4.0), 9.3.* (primeira execucao real do agente em projeto-alvo —
exige 1-3h wallclock + curadoria de relatorio), 9.4.4 (abertura real
de issues no toolkit — exige autorizacao + execucao com gh), 9.4.5
(atualizar threat-model com threats observados em runtime real).
-
Relatorio e integracao com toolkit do agente-00C (FASE 8): 28 subtarefas implementadas em 3 novos scripts cobrindo geracao de relatorio com 6 secoes auditaveis, registro de Sugestoes para skills globais e abertura automatica de Issue no toolkit GitHub.
-
report.sh(FR-011 + SC-001 + FR-012): subcomandosgenerateevalidate.generaterenderiza 6 secoes obrigatorias (Resumo Executivo com tabela de 15 campos + paragrafo, Linha do Tempo com tabela de ondas, Decisoes agrupadas por agente + lista detalhada, Bloqueios Humanos divididos em pendentes/respondidos/ sem, Sugestoes em 3 niveis de severidade, Licoes Aprendidas cravado como placeholder em parcial e preenchivel via--licoes-aprendidas+--final) + Apendice A com 5 paths.validatecheca as 6 secoes viagrep -qFe reporta faltantes. Caller deve aplicarsecrets-filter.sh scrubem pipe (FR-030). -
suggestions.sh(FR-020): subcomandosregister,list,count,next-id,mark-issue,render-md. Sugestoes vivem em DOIS lugares —state.json .sugestoes[](ground truth JSON)- agente-00c-suggestions.md (export human-readable regerado a
cada register/mark-issue). 3 severidades validadas:
informativa, aviso, impeditiva. Diagnostico exige >=50 chars
para forçar detalhamento acionavel.
mark-issueatualiza.issue_aberta+ incrementametricas_acumuladas.issues_toolkit_abertas.
- agente-00c-suggestions.md (export human-readable regerado a
cada register/mark-issue). 3 severidades validadas:
informativa, aviso, impeditiva. Diagnostico exige >=50 chars
para forçar detalhamento acionavel.
-
issue.sh(FR-021): subcomandoscreate,check-duplicate,hash. Excecao escopada ao Principio V — apenasgh issue create --repo JotJunior/cstk. Hash de 8 chars do diagnostico normalizado (lowercase + collapse whitespace + sha256- cut) para dedup via
gh issue list --search. Template docontracts/issue-template.mdaplicado via heredoc (Skill afetada, Diagnostico, Reproducao com decisoes recentes, Por que e impeditivo, Proposta de correcao, Anexos). Defense in depth:secrets-filter.sh scrubaplicado 2x (no build do body + antes dogh create). Labelsagente-00c,bug,skill-globalcriadas automaticamente se ausentes (gh label create --force). Falha degh create(sem internet, rate limit) propaga exit 1; corpo truncado em ~4000 chars com pointer ao relatorio local.--dry-runimprime template completo sem chamargh.
- cut) para dedup via
Agente orquestrador atualizado (passo 12 do Loop principal) com
template operacional completo: pipe de report.sh generate |
secrets-filter.sh scrub > <report.md> + report.sh validate,
fluxo de Sugestao (impeditiva => issue.sh create), retentativa
+ bloqueio humano em falha persistente.
27 cenarios de teste novos em
tests/test_{report,suggestions,issue}.sh. test_issue.sh cobre
apenas dry-run + hash (chamadas reais a gh evitadas para nao
gerar issues em produçao — validacao end-to-end na FASE 9.1.6).
-
Continuacao cross-sessao do agente-00C (FASE 7): 20 subtarefas cobrindo
ScheduleWakeuppara ondas curtas,/agente-00c-resume, fallback/scheduleRoutines para pausas longas, e/agente-00c-abort. Sem novos scripts — todas as primitivas necessarias ja existem nas FASES 2-6 (state-rw, state-validate, state-lock, bloqueios, sanitize, secrets-filter, state-ondas). -
global/agents/agente-00c-orchestrator.md— passo 11 expandido:ScheduleWakeupinvocado APENAS para ondas nao-terminais sem bloqueios pendentes; tabela de calibracao dedelaySecondsrespeitando cache Anthropic (5min TTL): 60-270s para continuacao normal, 1200-1800s apos threshold proxy. Sentinela<<autonomous-loop-dynamic>>documentada. Reason no formatoagente-00c onda <NNN+1> apos <motivo>. Passo 13 cravou formato do sumario retornado ao operador. -
global/agents/agente-00c-orchestrator.md— nova secao "Pausas longas e fallback/scheduleRoutines": template completo de routine/schedule criar "..." cron="..." prompt="/agente-00c-resume --projeto-alvo-path <PAP>"; orientacao para incluir no relatorio parcial quandoaguardando_humano+ sinais de inatividade; explicito "NAO criar routine automaticamente" (operador escolhe cron especifico). -
global/commands/agente-00c-resume.md— substituido o esqueleto da FASE 1 por fluxo operacional de 8 passos: parse de args, lock acquire, validate + sha256-verify, branch por status (terminal / em_andamento / aguardando_humano), apply de--resposta-bloqueiocom sanitizacao viasanitize.sh limit-length --max 2000, spawn do orquestrador com prompt indicando "CONTINUACAO de execucao existente" +retomada_motivo, lock release + sumario. -
global/commands/agente-00c-abort.md— substituido o esqueleto por fluxo operacional de 8 passos: parse, validacao com fail-soft para schema invalido (abort PROCEDE — pode ser o motivo do abort), idempotencia explicita (status terminal = no-op), atualizacao viastate-rw.sh set(backup automatico), stub minimal de relatorio comsecrets-filter.sh scrubaplicado, commit local viastate-ondas.sh git-commit(fail-soft se nao e repo git, NUNCA push), sumario com hash do commit. -
README.md— limitacao "Schedule mínimo de 5 min via /loop" atualizada para refletir clamp [60, 3600s] doScheduleWakeup+ fallback/scheduleRoutines. -
Seguranca do agente-00C (FASE 6 — todas as 9 sub-features sao [C]): 56 subtarefas implementadas em 5 scripts focados no
agente-00c-runtime, cobrindo 8 FRs criticos (FR-017, FR-018, FR-024, FR-025, FR-026, FR-027, FR-028, FR-029, FR-030, FR-031) e 5 threats (T1, T2, T3, T4, T5). -
path-guard.sh(FR-024 + FR-017): subcomandosvalidate-target,check-write,resolve. Resolve symlinks viarealpath/readlink -fcom fallback portavel para paths inexistentes. Lista de zonas proibidas cobre 20+ paths incluindo formas canonica (/etc) e resolvida no macOS (/private/etc); explicitamente NAO bloqueia/var/folders(mktemp). Resolve TAMBEM cada zona antes de comparar (defesa T2 contra symlinks adversariais que apontam para zona proibida via~). -
bash-guard.sh(FR-018 + FR-028 + SC-008): subcomandoscheck-blocklist,check-whitelist,check. Blocklist: sudo, package managers (npm/pnpm/yarn/pip/gem/brew/go install/cargo install) sem prefixodocker exec/run,git push(qualquer remote), kubectl mutativo, terraform apply/destroy, aws cli mutativo, gcloud deploy, docker push, docker-compose push, helm install/upgrade/uninstall. Whitelist: detecta network calls (curl/wget/gh api,issue,pr,repo,browse/git fetch,pull,clone), extrai URL (incluindo via--repo OWNER/NAMEpara gh) e checa contra whitelist; converte glob simples (**->.*,*->[^/]*) em regex. Excecao escopada:gh issue create --repo JotJunior/cstkbypass (FR-021). -
secrets-filter.sh(FR-030): subcomandosscrub,check. Filtros em ordem (especificos primeiro para preservar tipo): AWS keys (AKIA[A-Z0-9]{16,}), Bearer tokens, basic auth em URLs, tokens com palavra-chave proxima (token/key/secret/password/pwd/auth/ api_key/access_key precedendo valor 20+ chars), valores de chaves do.env(carregado via--env-file, valores < 8 chars ignorados).[REDACTED],[REDACTED-AWS-KEY]e[REDACTED-ENV]distinguem tipo. Hashes git e UUIDs sem palavra-chave proxima NAO sao filtrados (anti-falso-positivo). -
sanitize.sh(FR-025): subcomandoslimit-length,check-length,escape-commit-msg,escape-issue-body,escape-path. Defaults cobremdescricao_curta(max 500 chars).escape-commit-msgremove newlines/tabs/dollars/backticks/quotes + limita 100 chars.escape-issue-bodypreserva newlines (markdown), remove$(...)e backticks.escape-pathremove path traversal..+ chars nao-[A-Za-z0-9._-]+ limita 64 chars. -
whitelist-validate.sh(FR-031): subcomandoscheck,list. Rejeita patterns "overly broad":**puro sem dominio,*://*(scheme com glob),https://*sem dominio, host vazio, sem scheme, wildcard fora do padrao prefixo*.dominio.tld. Diagnostico inclui numero da linha + motivo + conteudo.
Agente orquestrador (global/agents/agente-00c-orchestrator.md)
atualizado com tabela de primitivas estendida (5 novos scripts) +
secao "Defesa em profundidade" reescrita listando os 7 mecanismos
(bash-guard, path-guard, sanitize, secrets-filter, whitelist-validate,
sha256-verify, goal alignment) com instrucoes operacionais explicitas
para o LLM (quando invocar, qual subcomando, semantica de exit code).
62 cenarios de teste novos em
tests/test_{path-guard,bash-guard,secrets-filter,sanitize,whitelist-validate}.sh.
Inclui casos adversariais: symlink que aponta para ~/.ssh, comando
Bash com sudo/git push/docker push/kubectl apply, payload com
AWS key/Bearer/basic auth/.env values, whitelist com **/*://*/etc.
-
Autonomia controlada do agente-00C (FASE 5): 5 novos scripts em
global/skills/agente-00c-runtime/scripts/cobrem os 5 mecanismos de aborto graceful que mantem o orquestrador dentro do orcamento e do escopo declarado (Principio IV — Autonomia Limitada com Aborto). -
budget.sh: proxies de orcamento de sessao (FR-009, sem signal nativo de tokens). 3 dimensoes: tool_calls da onda (default 80), wallclock (default 5400s = 90min) e tamanho de state.json (default 1MB).checkexit 1 quando QUALQUER threshold dispara, com TSVTIPO\tCURRENT\tTHRESHOLDem stdout. Wallclock usa fallback portavel BSD/GNU paradate -dvsdate -j -f. State size viastat -f %z(BSD) /stat -c %s(GNU) /wc -c(fallback). -
cycles.sh: limite de ciclos por etapa (FR-014.a —loop_em_etapa).tickincrementa contador;--progress-madezera (orquestrador decide quando 1 dos 4 indicadores de FR-014 aconteceu).resetexplicito ao avancar de etapa (separacao de responsabilidades — nao infere mudanca via.etapa_corrente). Exit 3 em > 5 ciclos. -
circular.sh: deteccao de movimento circular (FR-014.b).pusharmazena{problema_hash, solucao_hash, timestamp}em buffer FIFO de capacidade 6. Normalizacao: lowercase + nao-alfanumerico->space + 20 primeiras palavras.detectexit 3 quando mesmo problema_hash aparece >=3 vezes (cobre o padrao "P=A,S=X / P=B,S=Y / P=A,S=Z / P=B,S=Y / P=A,S=X" do exemplo da spec). -
drift.sh: drift detection / goal alignment (FR-027, threat T1).initgrava 3..7 aspectos-chave (cravado pos-primeira-onda — recusa sobrescrever).checkitera ondas do final para o inicio, conta consecutivas sem decisao mencionando aspecto (case-insensitive substring nos campos contexto/escolha/justificativa de cada decisao). Warn em 3 ondas (stderr, exit 0); abort em 5 (exit 3, motivodesvio_de_finalidade). -
retro.sh: limite de retro-execucoes (FR-006).checkvalidaconsumed < max(default 2).consumeexit 3 SEM mutar estado se incremento excederia max (defesa em profundidade — testado com snapshot before/after). Orquestrador converte 3a tentativa em BloqueioHumano viabloqueios.sh register.
37 cenarios de teste em tests/test_{budget,cycles,circular,drift,retro}.sh.
Agente orquestrador (global/agents/agente-00c-orchestrator.md)
atualizado: tabela de primitivas inclui os 5 novos scripts; passos 7
e 8 do Loop principal de uma onda referenciam cada gatilho de aborto
com semantica explicita (motivo, exit code, acao do orquestrador).
-
Padrao clarify de dois atores (agente-00C FASE 4): implementacao do mecanismo de "Pause-or-Decide" (Principio II da feature), com mediacao orquestrada entre clarify-asker (gera 1-5 perguntas via skill clarify) e clarify-answerer (decide via heuristica de score 0..3).
-
global/agents/agente-00c-clarify-asker.md: prompt operacional completo. Inputs (spec_path,briefing_path,etapa_corrente,decisoes_anteriores,quantidade_max_perguntas); fluxo (Read + Skill clarify + filtro de redundantes); formato JSON cravado comQ1..QN+default_sugeridoopcional; saida vazia{ "perguntas": [] }quando nao ha clarificacao pendente. Tools restritas a Skill+Read (sem Agent — bisneto nao recursiona). -
global/agents/agente-00c-clarify-answerer.md: heuristica de score documentada (3 fontes: briefing, constitutions toolkit+feature, stack-sugerida). Tabela de decisao (>=2 decide, ==1 decide so se outras violarem constitution, ==0 pause-humano). Tie-breaker em 4 niveis. Formato JSON compause_humano: boolecontexto_para_humanoquando aplicavel. Tools restritas a Read+Bash (Bash apenas paradate). -
global/agents/agente-00c-orchestrator.md: passo 5 do Loop principal expandido com fluxo de mediacao em 7 sub-passos (a-g): pre-flight via spawn-tracker, spawn asker, spawn answerer (irmaos), aplicar respostas validas como Decisao via state-decisions.sh, converter score 0 em BloqueioHumano via bloqueios.sh, fim de onda gracioso quando ha pendentes. -
Novo script
global/skills/agente-00c-runtime/scripts/bloqueios.sh: ciclo de vida de BloqueioHumano (FR-015, FR-016). 6 subcomandos:register(gerablock-NNNsequencial; valida FK para Decisao existente; validapergunta >= 20 chars; atualiza.execucao.status = "aguardando_humano"e.metricas_acumuladas.bloqueios_humanos_total);respond(marcarespondido+ gravaresposta_humana+respondido_em; volta.execucao.status = "em_andamento"SO quando todos os bloqueios pendentes foram respondidos);list(TSV com filtro opcional por status);count(com--pending-only);next-id;get(JSON do bloqueio).
14 cenarios de teste em tests/test_bloqueios.sh cobrem o lifecycle
completo (register -> respond), FK violation, validacao de pergunta
curta, status transitions com bloqueios multiplos, idempotencia.
-
Orquestrador raiz do agente-00C (FASE 3): 4 novos scripts em
global/skills/agente-00c-runtime/scripts/cobrem state machine, decisoes auditaveis, tracking de subagentes e ciclo de vida de ondas. -
pipeline.sh: 5 subcomandos.stagesimprime as 10 etapas canonicas (briefing → constitution → specify → clarify → plan → checklist → create-tasks → execute-task → review-task → review-features).next-stage/prev-stagepara avanco linear ou retro-execucao.detect-completionmapeia 7 etapas para artefatos esperados emdocs/specs/<feature>/.skill-conflictdetecta skill em local (<projeto>/.claude/skills/) + global (~/.claude/skills/) com 4 status (conflict/only-local/only-global/ not-found); regra: local vence. state-decisions.sh: registro auditavel (Principio I — Auditabilidade Total).registervalida 5 campos obrigatorios (contexto>=20, opcoes_consideradas>=1, escolha, justificativa>=20, agente); falha = exit 1 comviolacao Principio I. Idsdec-NNNsequenciais; linka aonda_idcorrente;--score0..3 para decisoes do clarify-answerer (FR-015). Atualizametricas_acumuladas.decisoes_total. Subcomandoscount,list,next-idpara introspeccao.spawn-tracker.sh: enforce FR-013 (max 3 niveis).entervalida(current+1) <= 3ANTES de qualquer escrita; falha = exit 3 SEM modificar estado. Atualizaprofundidade_max_atingidaesubagentes_spawned.leavedecrementa (idempotente em min 1).checkexposto para validacao read-only. Defesa em profundidade: agentesagente-00c-clarify-askereclarify-answererNAO declaram tool Agent.state-ondas.sh: ciclo de vida de Ondas.startcria novaonda-NNN- reseta tool_calls/inicio_onda_corrente.
endvalida 1 dos 5 motivos validos (etapa_concluida_avancando, threshold_proxy_atingido, bloqueio_humano, aborto, concluido), calcula wallclock (fallback portavel GNUdate -d-> BSDdate -j -f) e atualiza metricas_acumuladas.tool-call-tickpara incrementar contador (backup so a cada 10 ticks p/ nao explodir state-history/).git-commit --motivo MOTIVOfaz commit local no projeto-alvo (chore(agente-00c): <onda-id> - <motivo>); NUNCAgit push(Principio V — Blast Radius Confinado).
- reseta tool_calls/inicio_onda_corrente.
46 cenarios de teste em tests/test_{pipeline,state-decisions,spawn-tracker,state-ondas}.sh.
Agente orquestrador (global/agents/agente-00c-orchestrator.md)
atualizado com instrucoes operacionais detalhadas (13 passos do loop
principal de uma onda) referenciando estas primitivas.
-
Skill interna
agente-00c-runtime(agente-00C FASE 2): biblioteca POSIX consumida pelos agentes custom do agente-00C. NAO e user-invocavel — empacota helpers de estado, validacao e lock para a pipeline. Distribuida viacstk install(catalog/skills/) e instalada em~/.claude/skills/agente-00c-runtime/. Conteudo: -
scripts/state-rw.sh: subcomandosinit,read,write,get,set,sha256-update,sha256-verify,path-check. Implementa schema state.json v1.0.0, backups automaticos por onda emstate-history/, integridade SHA-256 (FR-029), atomic write via mktemp+mv, write-probe para detectar permissao negada, captura de I/O errors (disco cheio). scripts/state-validate.sh: validador FR-008 read-only com 10 checagens (schema_version, 14 campos obrigatorios, 4 invariantes numericas, status x terminada_em, 5 campos de Decisao, integridade de FK BloqueioHumano -> Decisao, whitelist nao-vazia). Sem auto-correcao (Principio III).scripts/state-lock.sh: subcomandosacquire,release,check,check-execution-busy. Lock viamkdiratomico em<state-dir>/.lock/; locks independentes por projeto-alvo (permite execucoes simultaneas em projetos distintos). TOCTOU residual (CHK072) documentado.
Dependencia: jq (carve-out 1.1.0 da constitution para JSON
estruturado). 36 cenarios de teste em tests/test_state-{rw,validate,lock}.sh.
cstk installdistribuicommands/eagents/(agente-00C FASE 1.2): o tarball de release agora incluicatalog/commands/ecatalog/agents/(espelhos deglobal/commands/eglobal/agents/), e ocstk installcopia esses.mdsoltos para~/.claude/commands/e~/.claude/agents/(respectivamente./.claude/commands/e./.claude/agents/em--scope project). Cada kind tem seu proprio manifest dedicado (<dest>/.cstk-manifest) com schema identico ao de skills.
Comportamento: instalacao sempre processa TODOS os .md (sem filtro de
profile — sao infraestrutura, nao skills); re-install vira "updated";
arquivo pre-existente sem entry no manifest e PRESERVADO como third-party
(FR-007). Tarballs historicos sem catalog/commands/ ou
catalog/agents/ continuam validos — ambos os campos sao opcionais.
-
cstk doctorvarre os 3 kinds (skills, commands, agents): drift em commands/agents (EDITED, MISSING, ORPHAN) e reportado com prefixo de kind (ex:[EDITED] commands/agente-00c); skills continuam exibidas sem prefixo (compatibilidade backward).--fixremove entries MISSING do manifest correto por kind. -
Esqueleto do agente-00C em
global/commands/(3 slash commands:/agente-00c,/agente-00c-abort,/agente-00c-resume) eglobal/agents/(3 agentes custom: orchestrator, clarify-asker, clarify-answerer). Esqueleto apenas — implementacao operacional ocorre ao longo das Fases 2-9 do backlog emdocs/specs/_archived/agente-00c/tasks.md.
Changed¶
manifest_default_pathaceita argumento opcionalkind(defaultskills— backward compatible). Uso:manifest_default_path global commands.hash.shexportahash_file <arquivo>(wrapper sobresha256_file) para cobrir artefatos single-file (commands/agents).hash_dirinalterado.
3.3.0 - 2026-05-05¶
Added¶
- Skill
review-features: relatorio comparativo de TODAS as features do projeto (cross-feature), complementar areview-task(que olha UMA feature). Saida: tabela com nome, descricao, % concluida, criticidade pendente e sugestao de acao por feature (ARQUIVAR/ABANDONAR/PRIORIZAR/CONTINUAR/INDEFINIDO).
Heuristica deterministica:
- ARQUIVAR: feature 100% concluida
- ABANDONAR: 0% concluida e sem modificacao ha mais de 90 dias
- PRIORIZAR: tem subtasks [C] pendentes e menos de 50% concluida
- CONTINUAR: caso geral em andamento
- INDEFINIDO: tasks.md vazio
Acompanha script POSIX scripts/aggregate.sh (saida markdown ou
JSON-lines via --json) com 16 cenarios de teste em
tests/test_aggregate.sh. A skill e read-only — sugestao e recomendacao,
nunca executa arquivar/deletar sem confirmacao do usuario.
3.2.3 - 2026-04-27¶
Changed¶
cstk install --helpagora lista os profiles disponiveis (sdd,complementary,all) com o conteudo de cada um e marcasddcomo default. Antes, o usuario via apenas "Default: sdd" e nao tinha como descobrir que existiam outros profiles nem o que cada um continha — a unica fonte erascripts/profiles.txt.inno repo, fora do alcance de quem instalou via tarball.
Reportado por usuario: apos cstk install (default sdd), faltavam
skills complementares (advisor, bugfix, owasp-security, etc.) e nao
havia pista no help de como instala-las. Solucao: profile
complementary instala as 9 skills de uso pontual; profile all
instala tudo. Exemplos no help cobrem os 3 profiles + cherry-pick.
Test atualizado: scenario_install_help_exit_zero verifica que os
tres nomes de profile aparecem na saida.
3.2.2 - 2026-04-27¶
Fixed¶
cstk installecstk updatesem--fromagora consultam a API GitHub para descobrir a ultima release, em vez de abortar com "vem na FASE 3.2 (bootstrap)" — mensagem misleading que sobreviveu a entrega da FASE 3.2 (que entregou apenas o bootstrap standalone, nao a resolucao no comandocstk install).
Comportamento novo:
- --from URL (explicit) → usa a URL fornecida
- $CSTK_RELEASE_URL (env) → usa a URL do env
- (novo) sem nada acima → GitHub API /releases/latest
Honra $CSTK_REPO para forks (default JotJunior/cstk).
Mesmo padrao ja em uso por cstk self-update desde FASE 5.
Reportado por usuario: cstk install apos bootstrap retornava
"[error] install: --from URL ausente e \$CSTK_RELEASE_URL nao setado"
— quebrava o fluxo "instalar via one-liner depois cstk install"
documentado no README.
Test atualizado: scenario_install_sem_from_e_sem_env_consulta_api
usa CSTK_REPO=invalid/nonexistent para forcar 404 da API e validar
que o erro reportado e "falha ao consultar" (em vez de mensagem
antiga sobre CSTK_RELEASE_URL nao setado).
3.2.1 - 2026-04-27¶
Fixed¶
- Bootstrap one-liner (
cli/install.sh) ecstk self-updatebaixavam URL com 404. A construcao da URL do tarball usava o tag completo (cstk-v3.2.0.tar.gz), masscripts/build-release.shstrip o prefixovao gerar o asset (cstk-3.2.0.tar.gz). Match falhava com 404.
Fix: ambos cli/install.sh e cli/lib/self-update.sh agora computam
TAG_BARE=${TAG#v} e usam essa variante ao construir o filename do
asset, mantendo o tag original (com v) no path do release. Comporta-
mento alinhado com build-release.sh.
Impacto: releases/latest/download/install.sh em v3.2.0 esta
quebrado — usuarios precisam usar v3.2.1 (que fixa o asset URL ao
baixar). v3.2.0 nao foi removida; tag continua presente para
rastreabilidade do incidente.
Descoberto por usuario reportando curl: (22) ... 404 ao executar o
one-liner publicado no README.
3.2.0 - 2026-04-26¶
Added¶
cstkCLI (POSIX shell) — toolkit de instalação, atualização e auditoria de skills. Substitui ocp -rmanual documentado emCLAUDE.mdpor um fluxo rastreável: manifest por escopo (versão +source_sha256+ ISO timestamp), lock concorrente viamkdir, verificação SHA-256 obrigatória em todo download (FR-010a), preservação de skills de terceiros (FR-007), políticas explícitas de conflito em update (--force/--keep, exit 4 quando edit local detectado sem flag — FR-008).
Comandos: install, update, self-update, list, doctor.
Profiles: sdd (default — pipeline SDD com 10 skills),
complementary (9 skills independentes), all (todos os 35 skills),
language-go, language-dotnet. Cherry-pick por nome também
suportado; modo interativo via --interactive (seletor numerado em
TTY).
Escopos: --scope global (~/.claude/skills/, default) e
--scope project (./.claude/skills/). Hooks de language-* são
instalados APENAS em escopo de projeto (FR-009c) com merge automático
de settings.json quando jq disponível, ou paste-block instrucional
quando ausente (FR-009d).
Self-update atômico (FR-006): par bin + lib tratado como unidade
indivisível via stage-and-rename coordenado + boot-check de versão
embutida vs versão da lib. Nunca toca o manifest de skills (FR-006a;
verificável: mtime do .cstk-manifest preservado).
Pipeline de release em .github/workflows/release.yml —
triggered por push tag v*, valida testes (tests/run.sh + cstk
suite), gera tarball determinístico via scripts/build-release.sh
e publica via gh release create com cstk-X.Y.Z.tar.gz,
.sha256 e install.sh (asset standalone para o one-liner
curl <url> | sh).
Observabilidade: cstk list (TSV/pretty) + cstk doctor
(4 estados de drift: OK, EDITED, MISSING, ORPHAN — SC-007).
Determinismo do tarball (scripts/build-release.sh): mtime
normalizado, gzip -n, ordenação LC_ALL=C sort, detecção
GNU-vs-BSD tar para paths portáveis. Verificado: 2 builds
consecutivos produzem o mesmo SHA-256.
Cobertura de testes: 242 cenários (tests/run.sh global), zero
falhas. Gap real único (Scenario 13 SC-003 byte-a-byte) coberto por
tests/cstk/test_quickstart-e2e.sh.
Spec completa em docs/specs/cstk-cli/;
documentação user-facing em README.md §Instalação.
Governance¶
- Constitution 1.0.0 → 1.1.0 (MINOR amendment): nova subseção "Optional
dependencies with graceful fallback" sob Princípio II disciplinando deps
não-POSIX em três condições cumulativas (uso opcional com fallback
verificável, confinamento em único arquivo, declaração explícita na feature).
Nota complementar no Decision Framework item 4 reconhece subseções de
carve-out como mecanismo válido quando precedidas por amendment MINOR.
Não afrouxa Princípio II — Bash-isms seguem proibidos,
ripgrep/fd/batspermanecem banidos mesmo como opcionais, deps obrigatórias continuam vetadas. Primeiro caso concreto sob a nova regra:jqopcional emcli/lib/hooks.shda featurecstk-cli. Verdocs/specs/constitution-amend-optional-deps/para histórico completo de raciocínio.
3.1.1 - 2026-04-20¶
Versão PATCH — correção de bug latente em validate.sh análogo ao
histórico de metrics.sh (commit ead1b68).
Fixed¶
validate.shdeixa de poluir stderr cominteger expression expected. As linhas 244–245 continham o mesmo padrão defeituosogrep -c ... || printf '0'que quebroumetrics.sh: em no-match,grep -cimprime"0"e sai com exit 1, disparando o fallback que concatena outro"0"— resultado"0\n0"quebra as comparações aritméticas subsequentes. Fix aplica o padrão seguroVAR=$(grep -c ...) || VAR=0.- Bug latente adicional revelado: a aritmética corrompida fazia com
que os três
ifdo bloco "Próximos Passos" (Corrigir N ERRO(s),N AVISO(s),Nenhuma ação necessária) falhassem silenciosamente em docs válidos. Com o fix, a mensagem de sucesso- Nenhuma acao necessaria. Documentacao renderiza corretamente.volta a aparecer quando aplicável. - Tabela Resumo do stdout deixa de renderizar
| X | 0\n0 |em duas linhas quando algum contador é zero — agora sempre em linha única| X | 0 |.
Added¶
tests/test_validate.sh :: scenario_stderr_limpo_em_docs_validos: regressão dedicada que captura stderr ao rodarvalidate.shcontrafixtures/docs-site/valid/e falha se contiver"integer expression expected"ou"[: ". Protege contra o retorno do bug histórico.- Assertion adicional em
scenario_docs_validos: trava como invariant a linha "Nenhuma acao necessaria" que agora aparece em docs válidos. - Feature SDD completa em
docs/specs/fix-validate-stderr-noise/: spec + plan + research + quickstart + tasks + checklists/requirements (29 subtarefas, 100% concluídas).
Contract preserved¶
- Exit codes de
validate.shinalterados (0 em sucesso, 1 em ERROs). - Estrutura do stdout (seções, colunas, severidades) inalterada.
- Apenas valores numéricos corrigidos onde estavam corrompidos, e
stderr limpo. Nenhum teste existente em
test_validate.shquebrou.
3.1.0 - 2026-04-20¶
Versão MINOR — adição de suíte automatizada de testes para os scripts
POSIX distribuídos em global/skills/**/scripts/.
Added¶
-
Suite automatizada de testes em
tests/cobrindo os 5 scripts shell do toolkit (metrics.sh,next-task-id.sh,next-uc-id.sh,scaffold.sh,validate.sh). Entry point únicotests/run.shexecuta 44 scenarios em 3–4 segundos e reporta status trichotômico PASS / FAIL / ERROR no formato TAP. -
Harness POSIX puro em
tests/lib/harness.shcom gestão isolada pormktemp -d+trap EXIT/INT/TERM, e os helpersassert_exit,assert_stdout_contains,assert_stderr_contains,assert_stdout_match,assert_no_side_effect,fixtureerun_all_scenarios. Zero Bash-isms; zero dependências além das ferramentas POSIX canônicas. -
Regressão dedicada do bug histórico de
metrics.sh(scenario_regressao_bug_grep_c_sem_matches) protegendo contra o retorno do padrão defeituosogrep -c ... || printf '0'que concatenava"0\n0"e quebrava expressões aritméticas. Validado revertendo o fix temporariamente durante a entrega: a suíte detectou 3 FAILs incluindo o dedicado. -
Modos do runner:
--list(lista scenarios sem executar),--check-coverage(detecta scripts sem teste e testes sem script; exit 1 em órfão), filtragem porPATTERNposicional,--help. -
Governança de cobertura (FR-009 da spec): no modo normal, órfãos aparecem como warning (
ORPHANS: N+ bloco# WARN:) sem bloquear; no modo--check-coverage, órfãos fazem exit 1. Convenção estritatests/test_<nome>.shpara cadaglobal/skills/<skill>/scripts/<nome>.sh. -
tests/README.mdcom quickstart, arquitetura, formato TAP, exit codes, contrato do harness (tabelas de helpers) e guia para adicionar teste ao script novo. -
Spec completa em
docs/specs/shell-scripts-tests/:spec.md+plan.md+research.md+data-model.md+contracts/runner-cli.md quickstart.md+checklists/requirements.md+tasks.md. Feature entregue em 5 fases, 113 subtarefas, 100% concluídas.
Known issue (fora do escopo desta release)¶
validate.sh(linhas 273–284) contém o mesmo padrãogrep -c || printf '0'do bug histórico demetrics.sh. Afeta apenas stderr (não exit code nem stdout). Registrado emdocs/specs/shell-scripts-tests/tasks.md§FASE 2. Candidato para nova feature em ciclo SDD separado.
3.0.0 - 2026-04-20¶
Versão MAJOR devido a remoção de asset distribuído (contrato de instalação
muda — usuários que faziam cp -r global/insights/ precisam migrar).
Removed (BREAKING)¶
- Diretório
global/insights/removido do repositório. O arquivousage-insights.mdque vivia ali era uma curadoria específica de sessões de um usuário (Go + TypeScript + PostgreSQL multi-serviço), não um playbook genérico. Distribuí-lo como parte do toolkit confundia quem clonava: o conteúdo era tratado como autoritativo quando era apenas o snapshot de um contexto.
Como fica agora:
- A skill
apply-insightscontinua funcionando — ela sempre leu de~/.claude/insights/usage-insights.md(espaço do usuário), nunca deglobal/insights/diretamente. - Se o arquivo
~/.claude/insights/usage-insights.mdexistir, a skill o usa. Caso contrário, cai em best-practices genéricas (comportamento já documentado no SKILL.md). - O modelo recomendado agora: gerar o arquivo via a slash command nativa
/insightsdo Claude Code (que analisa suas sessões reais) ou curá-lo manualmente. Cada usuário mantém o seu próprio.
Impacto para consumidores:
- O comando
cp -r global/insights/ ~/.claude/insights/(documentado no README) não existe mais — o diretório-fonte foi removido. - Quem já tinha copiado o arquivo para
~/.claude/insights/mantém a cópia local intocada. - README atualizado: seção "Insights de Uso" reescrita para refletir o modelo por-usuário; diagrama de estrutura e bloco de instalação limpos.
- CLAUDE.md atualizado: seção "Renomeando uma skill" não referencia mais
global/insights/.
Migration¶
- Se você dependia do arquivo distribuído:
# O arquivo pode continuar no seu ~/.claude/insights/ se você já o copiou
ls ~/.claude/insights/usage-insights.md
# Caso contrário, gere o seu via o /insights nativo do Claude Code,
# ou mantenha um playbook curado manualmente neste caminho
- Se você referenciava
global/insights/em scripts ou docs próprios, remover a referência — o caminho não resolve mais.
2.0.0 - 2026-04-19¶
Versão MAJOR devido a rename de skill user-visível (identificador de invocação é contrato público).
Changed (BREAKING)¶
- Skill
insightsrenomeada paraapply-insights— o Claude Code tem uma slash command nativa/insights(analisa suas sessões de uso) que colidia no namespace de autocomplete com a nossa skill homônima. As duas coexistiam sem uma sobrescrever a outra, mas a ambiguidade gerava atrito: - usuários precisavam selecionar a correta a cada invocação
- documentação que referenciasse
/insightsficava ambígua - hooks que tentassem invocar por string tinham comportamento indefinido
Rename para apply-insights deixa claro que a função é prescritiva
(aplicar um playbook ao projeto) — distinta da nativa, que é
introspectiva (analisar sessões). A description da skill agora explicita
essa diferença para o modelo.
Impacto para consumidores:
- Invocações via /insights agora rodam a skill nativa do Claude Code
- Para a função antiga, usar /apply-insights
- Arquivos CLAUDE.md / documentação que referenciavam /insights precisam
ser atualizados
Migration¶
- Se o seu projeto tem instalação local:
.claude/skills/insights/→.claude/skills/apply-insights/ - Atualizar triggers em CLAUDE.md, memórias, hooks, scripts
- Nova invocação:
/apply-insights(ou qualquer dos triggers em português como "aplicar insights", "aplicar playbook", "melhorar claude.md")
1.1.0 - 2026-04-19¶
Refatoração ampla das 18 skills globais aplicando os princípios do artigo "Skills no Claude Code: O Guia Definitivo" e adicionando 1 nova skill. Todas as mudanças são backward-compatible na invocação pelo nome — skills continuam respondendo aos mesmos triggers e argumentos.
Added¶
-
Nova skill
validate-docs-rendered(categoria "Verificação de Produto" do artigo) — valida que a documentação Markdown realmente renderiza corretamente: diagramas Mermaid parseáveis, links internos sem 404, frontmatter YAML consistente, tabelas bem formadas, code blocks com linguagem declarada. Script POSIXscripts/validate.shroda 5 checagens com exit code para uso em CI/hooks. -
Seções
Gotchasem todas as 18 skills preexistentes — documentando armadilhas recorrentes e erros típicos. Segue a recomendação do artigo de que "o conteúdo mais valioso de uma skill é a seção de gotchas". -
Scripts POSIX reutilizáveis em 4 skills:
initialize-docs/scripts/scaffold.sh— cria estrutura 01-09 com READMEs template, idempotente, suporta--dry-run,--force,--dir=PATHcreate-use-case/scripts/next-uc-id.sh— calcula próximoUC-{DOMINIO}-NNNdisponível; suporta--listpara auditar domínios existentescreate-tasks/scripts/next-task-id.sh— calcula próximo ID hierárquico (1.3,1.2.4) com regex ancorado para evitar falsos positivos-
review-task/scripts/metrics.sh— extrai métricas de progresso do tasks.md em formato tabular + JSON -
Arquitetura de skill-como-pasta com subdiretórios para progressive disclosure em 8 skills (specify, plan, create-tasks, create-use-case, briefing, checklist, constitution, analyze):
templates/— templates preenchíveis (feature-spec, plan, tasks, briefing, constitution, data-model, contracts, quickstart, research, use-case)examples/— exemplos concretos (specify temspec-good.mdespec-bad.mdcom anti-patterns comentados)-
references/— documentação de apoio (catálogos de items por domínio para checklist; consistency-checks para analyze; discovery-guide detalhado para briefing) -
Composição explícita do pipeline SDD — cada skill do pipeline agora documenta em seções
## Pré-requisitose## Próximos passosquais artefatos consome e qual skill é o passo lógico seguinte. Torna a sequência briefing → constitution → specify → clarify → plan → checklist → create-tasks → analyze → execute-task → review-task navegável sem tooling formal de dependências. -
config.jsonem 3 skills para configuração por projeto: create-use-case/config.json— mapa de domínios customizados, output_dir, formato de ID, mínimos de qualidadecreate-tasks/config.json— níveis de criticidade, paths de output (spec_derived vs standalone), prefixo de fase, granularidadeinitialize-docs/config.json— estrutura de diretórios customizável,keep_in_root,file_routingpor padrão
Quando config.json está ausente, as skills usam defaults documentados.
Quando presente, o projeto adapta as convenções sem bifurcar a skill.
Changed¶
-
Reescrita do campo
descriptionde todas as 18 skills no formato de trigger conditions ("Use quando o usuário X, Y ou Z. Também quando mencionar A, B, C. NÃO use quando W.") em vez de resumo. Isso melhora descoberta — o modelo precisa decidir quando invocar a skill, não apenas o que ela faz. Particularmente relevante com Opus 4.7, que interpreta descrições de forma mais literal. -
Agnosticização completa das skills — removidas referências específicas a projetos, stacks e convenções de qualquer cliente/codebase. Skills agora tratam stack (Go/Python/React/etc.), domínios de negócio (AUTH/CAD/PED) e paths internos (
services/{service}/...) como exemplos ilustrativos marcados, não como assunções. Cada skill funciona em qualquer projeto. -
bugfixreescrita para ser stack-agnostic — os 8 passos do protocolo (Step 0..7) agora usam terminologia genérica de camadas ("server / backend", "client / frontend", "cross-boundary") em vez de listas específicas de Go/React. Comandos de build/test/lint apresentados em tabela por stack. -
execute-taskreescrita para ser stack-agnostic — Etapa 7 (Lint) é agora uma tabela com comandos típicos por stack (Go, Node, Rust, Python, Java, .NET) em vez de assumirgo build ./.... -
create-use-case: domínios deixam de ser enum fixo — a lista antiga (AUTH, CAD, PED, FIN, FAT, LOG, MON, INAD, REC, PROP, CONT, DOM) virou exemplo; a skill consultaconfig.jsonou UCs existentes antes de perguntar ao usuário. -
Templates extraídos do SKILL.md para arquivos separados — reduzem o custo de contexto no momento da invocação: o modelo carrega o template só quando preenche, não toda vez que decide se invoca a skill.
Moved¶
global/skills/create-use-case/template-uc.md→global/skills/create-use-case/templates/use-case.md(alinhamento com a convençãotemplates/das demais skills)
Documentation¶
- README.md atualizado com:
- Seção "Anatomia de uma skill" documentando a arquitetura (SKILL.md + templates/examples/references/scripts/config.json)
- Esclarecimento de que domínios (AUTH/CAD/PED/etc.) são configuráveis por projeto, não uma lista universal
- Seção "Contribuindo" revisada com guidelines para novas skills (trigger-condition descriptions, gotchas, progressive disclosure)
- Link para este CHANGELOG
Estatísticas desta versão¶
- 18 skills preexistentes atualizadas
- 1 skill nova (
validate-docs-rendered) - 19 arquivos novos de templates/references/examples
- 5 scripts POSIX (4 nas skills existentes + 1 na skill nova)
- 3 arquivos
config.json - 5 commits incrementais (uma fase por commit)
1.0.0 - 2026-04-18¶
Primeira versão publicada do toolkit.
Added¶
- 18 skills globais cobrindo pipeline SDD completo (briefing, constitution, specify, clarify, plan, checklist, create-tasks, analyze, execute-task, review-task) e skills complementares (advisor, bugfix, create-use-case, image-generation, initialize-docs, insights, owasp-security, validate-documentation)
- Skills específicas para Go (commit, create-report, go-add-entity, go-add-migration, go-add-test, go-add-consumer, go-review-pr, go-review-service) e hooks de validação
- Skills específicas para .NET (create-entity, create-feature, create-project, create-test, hexagonal-architecture, infrastructure, review-code, testing)
- Arquivo
global/insights/usage-insights.mdcom padrões extraídos de 134 sessões reais de uso - README documentando estrutura, pipeline SDD sugerido e convenções de nomenclatura