"Kata (型) — Karpathy Development Cycle: orquestra FIT → THINK → SIMPLIFY → INTENT → SURGICAL → VERIFY → ARTIFACT → REPORT (+ JUDGE opcional). Use quando precisar garantir qualidade antes de commitar: classificar tarefa, declarar assumptions, validar minimalismo, verificar intenção, mudanças cirúrgicas, relatório outcome-first, verificação adversarial, e rodar lint+test+coverage. Triggers: kata, karpathy cycle, fable method, antes de commitar, ciclo de qualidade."
Install
npx skillscat add walternagai/kata/kata Install via the SkillsCat registry.
Skill: kata — Karpathy Development Cycle
Você está executando o kata (型, "forma/padrão"), que orquestra o
Karpathy Development Cycle — um ciclo de 9 fases (+ judge opcional) para
garantir qualidade de código antes de commitar.
Esta skill é a versão para Claude Code do agente @kata do OpenCode. A
lógica de verificação (lint + teste + coverage + judge adversarial) vive no
pacote Python kata (pip install -e . neste repo), reutilizado por ambas
as versões — só a camada de orquestração/interação muda.
Filosofia
O kata combina duas influências complementares:
- Karpathy Development Cycle (Andrej Karpathy): pensar antes de codar,
manter o código mínimo, fazer mudanças cirúrgicas e verificar com critérios
objetivos. Como um kata marcial, é uma sequência disciplinada e repetível. - The Fable Method (Sahir619/fable-method): classificar a tarefa antes de
agir, definir "pronto" com verificação nomeada, reunir evidências em paralelo,
mudar o mínimo, verificar por observação e reportar resultado primeiro.
O fit gate e o triviality gate do kata são adaptações diretas do fable-method.
As Fases
FIT → THINK → SIMPLIFY → INTENT → SURGICAL → VERIFY → TWIN CHECK → ARTIFACT → REPORT
↓ (opcional)
JUDGE| Fase | Objetivo |
|---|---|
| FIT | Classificar a tarefa e aplicar triviality gate antes de investir esforço |
| THINK | Declarar problema, assumptions, alternativas e unknowns antes de codar |
| SIMPLIFY | Verificar se o código é mínimo — sem abstrações especulativas |
| INTENT | Verificar alinhamento entre código, teste e spec antes de mudar comportamento |
| SURGICAL | Validar arquivo-por-arquivo que cada mudança rastreia ao pedido |
| VERIFY | Rodar ruff + pytest + coverage (gate ≥ 70%) e checar critério de sucesso |
| TWIN CHECK | Se um defeito foi corrigido, buscar o mesmo padrão no projeto inteiro |
| ARTIFACT | Verificar que todas as linhas devidas (INTENT/AUTH/PENDING/TWINS) estão presentes |
| REPORT | Relatório outcome-first: resultado na primeira linha, verificações, caveats honestos, INTENT/AUTH/PENDING/TWINS lines |
| JUDGE (opcional) | Verificação adversarial — re-executa verificações, caça 7 tipos de fraude, entrega veredito VERIFIED/CAVEATS/UNVERIFIABLE/REFUTED |
A fase FIT é inspirada no triviality gate e fit gate; a fase JUDGE
é inspirada no fable-judge do
The Fable Method, que prova
empiricamente que classificar a tarefa antes de agir reduz falhas procedurais
em agentes de código.
Ferramentas
Mapeamento de ferramentas do Claude Code para cada tarefa do kata:
| Tarefa | Ferramenta | Uso |
|---|---|---|
| Carregar instruções da fase | Skill |
kata-fit, kata-question, kata-think, kata-simplify, kata-intent, kata-surgical, kata-verify, kata-artifact, kata-report, kata-judge |
| Carregar adapter de domínio | Skill |
kata-devops, kata-data-analysis, kata-research, kata-docs |
| Perguntar ao usuário | Texto livre (aberta) ou AskUserQuestion (fechada) + kata-question |
Uma pergunta por vez; consulte a skill kata-question para a regra de qual ferramenta usar |
| Executar comandos | Bash |
git diff, ruff, pytest, python -m kata --check-only etc. |
| Ler arquivos | Read |
Inspecionar diff/código de arquivos específicos |
| Buscar no código | Grep / Glob |
Encontrar callers, imports, patterns, arquivos |
| Editar arquivos | Edit |
Aplicar correções pontuais |
| Criar/escrever YAML | Write |
Criar/atualizar .kata/<task>.yaml |
| Rastrear progresso (opcional) | TaskCreate / TaskUpdate |
Visualizar as 9 fases como uma lista de tarefas na UI — suplementar, não substitui o YAML |
Regra: em cada fase, carregue primeiro a skill correspondente com Skill
e siga suas instruções. Esta skill é a orquestração; as demais
skills kata-* contêm o detalhe de cada fase.
Compatibilidade operacional
O kata deve funcionar em Linux, macOS e Windows. Trate os caminhos como
relativos à raiz do projeto e use Read, Write, Edit e Glob para
arquivos sempre que possível; não construa caminhos concatenando
separadores manualmente. Ao executar comandos com Bash, use a sintaxe do
shell hospedeiro. Para Python, prefira python -m ...; no Windows, usepy -m ... se python não estiver disponível. Não presuma que bash,python3, make ou comandos POSIX existam no Windows; se uma verificação
não puder ser executada nativamente, registre o bloqueio como caveat em vez
de declarar sucesso.
Preflight — as skills de fase estão instaladas?
O orquestrador não é auto-contido: cada fase carrega a skill
correspondente e segue as instruções dela. Se uma skill não carregar e você
improvisar a fase a partir do nome, o .kata/<task>.yaml sai preenchido sem
nada por trás — a "fase fingida" que o --audit existe para caçar, só que
produzida pelo ferramental em vez do agente. É a pior falha possível, porque
é silenciosa: nada no output distingue isso de trabalho de verdade.
Antes de começar o ciclo, rode python -m kata --doctor via Bash (oupy -m kata no Windows). Exit 1 significa instalação parcial — pare e
peça ao usuário que rode make reinstall ou make reinstall-claude-code.
Instalação ausente por completo não é erro: quem só usa o CLI nunca instalou
frontend nenhum.
Se uma chamada de Skill falhar durante o ciclo:
- Não improvise. Não escreva a seção da fase como se a tivesse seguido.
- Use o contrato mínimo abaixo — o suficiente para não pular a fase em
silêncio, e deliberadamente menos do que a skill entregaria. - Acrescente o nome da skill a
preflight.skills_missingno YAML. - Diga no relatório final quais fases rodaram sem instrução própria.
Contrato mínimo de cada fase
Isto é o piso para quando a skill não carregar, nunca um substituto para
carregá-la. Reparar que VERIFY e JUDGE degradam bem: a lógica deles vive no
pacote Python, e não no texto da skill.
| Fase | Piso, se a skill não carregar |
|---|---|
| FIT | Medir o diff, decidir trivialidade e rota, gravar fit.route e fit.reason |
| THINK | Perguntar problema, assumptions, alternativas, unknowns e o critério done; gravar em think |
| SIMPLIFY | Confrontar o diff com o pedido: código mínimo, sem abstração especulativa nem configurabilidade não solicitada |
| INTENT | Ler código, teste e spec; se discordarem, resolver por usuário > spec > teste > código antes de editar |
| SURGICAL | Confirmar arquivo por arquivo que a mudança rastreia ao pedido; conferir imports órfãos |
| VERIFY | python -m kata --check-only — a lógica é do CLI |
| TWIN CHECK | Se um defeito foi corrigido, buscar o mesmo padrão no projeto inteiro com Grep |
| ARTIFACT | Conferir as linhas devidas: INTENT, AUTH, PENDING, TWINS |
| REPORT | Resultado na primeira linha, verificações, caveats honestos, linhas devidas |
| JUDGE | python -m kata --task <name> --judge — a lógica é do CLI |
Diretório de Trabalho
Use .kata/ na raiz do projeto atual. Cada tarefa é um arquivo.kata/<task>.yaml com o schema:
task: nome-da-tarefa
status: draft | think-complete | approved | rejected
domain: coding # coding | devops | data-analysis | research | docs
# default: coding; outras domains carregam um adapter
done: "" # Fable Step 1: critério de sucesso declarado no THINK,
# ANTES da evidência; exibido no VERIFY e no relatório
base_commit: "" # HEAD do git no início da tarefa; usado pelo JUDGE
# para comparar mesmo depois que a tarefa é commitada.
# O CLI também ancora este SHA em refs/kata/base/*;
# divergência entre YAML e Git invalida o JUDGE.
approved_commit: "" # R14: HEAD no momento da aprovação. O JUDGE diffa
# base_commit..approved_commit em vez de base_commit..HEAD,
# então arquivos alterados por tasks POSTERIORES não
# contam como "não declarados" para esta. Ausente em
# tasks antigas (aprovadas antes desta rodada) — elas
# continuam diffando até HEAD. Não é gravado enquanto
# o HEAD ainda é o base_commit (aprovação antes do
# commit): teto igual ao piso é janela de diff vazia.
fit:
trivial: false
route: code-loop # code-loop | plan-first | question | research | inference
reason: ""
answered: false # grave true ao concluir o FIT, senão ele repergunta
# a cada retomada da tarefa
skipped: false # true só se a fase foi preenchida com default sem
# ninguém responder (modo não-interativo)
think:
problem: ""
assumptions: []
alternatives: []
unknowns: ""
answered: false
skipped: false
simplify:
minimum_code: true
no_single_use_abstractions: true
no_speculative_config: true
notes: "" # observações opcionais do SIMPLIFY (só se preenchidas)
answered: false # true ao concluir a fase; false se foi preenchida
# com default sem ninguém responder
skipped: false # true só no modo não-interativo
intent:
code_does: ""
check_expects: ""
spec_says: ""
all_agree: true
conflict_resolution: "" # como o conflito código/teste/spec foi resolvido
# (só se all_agree for false)
answered: false
skipped: false
surgical:
files: []
removed_imports_clean: true
answered: false # true ao concluir a fase; false se foi preenchida
# com default sem ninguém responder
skipped: false # true só no modo não-interativo
verify:
ruff_clean: true
tests_pass: true
coverage_pct: 0.0
coverage_pass: false
success_criteria_met: false
attempts: 0 # Fable Step 5: contador de execuções do VERIFY; ao
# chegar em MAX_VERIFY_ATTEMPTS (3) com falha, hand back
hand_back: false # true quando N tentativas falharam — tarefa devolvida
# ao usuário com o que foi tentado, o output real e a
# hipótese atual
preflight:
skills_missing: [] # skills de fase que não carregaram nesta execução.
# Fase rodada sem a instrução dela é fase degradada,
# não fase seguida — o --audit a gradua como tal
artifact:
intent_owed: true
intent_present: true
auth_owed: false
auth_present: true
pending_owed: false
pending_present: true
twins_owed: false
twins_present: true
auth:
action_taken: false
authorized: false
action: "" # o que foi feito
quote: "" # citação exata da autorização; sem ela a linha AUTH
# não é emitida, mesmo com authorized: true
pending:
action: ""
documented: false
twins:
pattern: ""
result: ""
searched: false
defect_fixed: false # é ISTO que o gate TWINS lê para saber que houve
# correção de defeito; sem esta chave o gate nunca
# dispara, porque "verificações passaram" não é
# evidência de defeito corrigido
matches_count: 0 # preenchidas pelo TWIN CHECK após a busca
files_count: 0
fix_applied: falseParsing de Argumentos
Inicialização obrigatória do estado
Antes de ler ou escrever qualquer arquivo de tarefa, garanta que .kata/
existe, usando Bash com o comando adequado ao shell hospedeiro (conforme a
seção "Compatibilidade operacional" acima):
- POSIX (Linux/macOS):
mkdir -p .kata - Windows PowerShell:
New-Item -ItemType Directory -Force .kata
Esta etapa é obrigatória em todos os modos (--init, --check-only,--judge, --report, --audit, --plan, --task, e modo padrão).
Se esta skill foi invocada com argumentos (via /kata --init nome-da-tarefa
ou equivalente), analise-os antes de executar qualquer comando. Se foi
invocada sem argumentos, trate como o modo padrão. Mapeamento:
| Input | Modo | Ação |
|---|---|---|
--init <task> |
--init |
Use Write para criar .kata/<task>.yaml com template (inclua base_commit), depois execute FIT + THINK e salve |
--check-only |
--check-only |
Pule FIT/THINK/SIMPLIFY/SURGICAL; execute VERIFY via Bash (python -m kata --check-only, ou py -m kata no Windows) e reporte |
--plan <task> |
--plan |
Crie/carregue task, execute FIT + THINK, salve o plano e pare (equivalente ao plan-first do fable-method) |
--task <name> |
--task |
Carregue .kata/<name>.yaml com Read e continue o ciclo a partir do status atual |
--judge |
--judge |
Carregue a task (por branch ou --task), execute verificação adversarial (re-executa checks, caça fraudes) |
--report |
--report |
Carregue a task (por branch ou --task), gere relatório outcome-first |
--audit [--task <name>] |
--audit |
Carregue a task e gradue as fases como followed / skipped / faked / degraded, com o risco concreto de cada skip/fake (fable-method audit) |
| (sem args) | padrão | Detecte task via branch git (Bash) ou pergunte ao usuário, FIT + ciclo completo |
Para --init, você pode também usar Bash para rodarpython -m kata --init <task> (ou py -m kata no Windows), mas depois deve
carregar o YAML e prosseguir com THINK interativamente.
Detecção de Task
Antes de qualquer fase, confira a instalação (ver Preflight acima).
Se nenhum --task for fornecido:
- Tente detectar o branch git atual via
Bash:git rev-parse --abbrev-ref HEAD - Normalize: substitua
/e_por- - Se existir
.kata/<branch>.yaml, retome essa tarefa - Caso contrário, liste tarefas existentes em
.kata/e pergunte ao usuário - Se não houver tarefas, pergunte o nome da nova tarefa
Fluxo de Execução
Fase 0: FIT
- Carregue a skill
kata-fitcomSkill. - Execute
git diff HEAD --statviaBashpara incluir alterações staged e
unstaged; se não houver HEAD, use os diffs local e staged. - Classifique a tarefa (com
kata-questionpara envolver o usuário):- A tarefa é trivial (1 arquivo, <10 linhas, sem busca)? Se sim, vá direto a VERIFY.
- Qual a rota da tarefa: code-loop, plan-first, question, research, inference?
- Se for
question: carreguekata-question, investigue, entregue achados + recomendação, não altere código sem autorização, PARE. - Se for
plan-first: execute só THINK, entregue um plano, PARE. - Registre a classificação em
.kata/<task>.yamlsob a chavefit, e gravebase_commit(HEAD atual) se ainda não estiver registrado.
Fase 0.5: Domain Adapter
Após o FIT, se o .kata/<task>.yaml declarar domain diferente de coding
(ex.: domain: devops), carregue o adapter correspondente com Skill:
domain: devops→kata-devopsdomain: data-analysis→kata-data-analysisdomain: research→kata-researchdomain: docs→kata-docs
O adapter define:
- Evidência: o que abrir antes de agir.
- Autoridade: quem decide o correto no domínio.
- Verify by observation: como confirmar que a ação funcionou.
- Fraud table: fraudes específicas do domínio.
- Minimum evidence set (binding): checklist obrigatório antes de agir.
- Rotas FIT por shape: quando cada rota se aplica no domínio.
Domain skills são opcionais. Se Skill falhar:
- Não improvise o conteúdo do adapter.
- Registre o nome da skill em
preflight.skills_missing. - Aplique o contrato mínimo descrito no adapter (evidência, autoridade,
red lines) com o bom senso do domínio. - Diga no relatório final que o adapter não carregou.
Fase 1: THINK
- Carregue a skill
kata-thinkcomSkill. - Pergunte, em texto livre e uma de cada vez (ver
kata-question):- "Qual o problema exato que estou resolvendo?"
- "Quais assumptions estou fazendo? (separadas por ;)"
- "Quais alternativas considerei? (separadas por ;)"
- "O que NÃO sei? (preciso perguntar antes?)"
- "O que é 'pronto'? (critério de sucesso + como vou verificar)" — Fable
Step 1: defina done ANTES da evidência e grave emdone. O VERIFY
confronta este critério com o resultado final.
- Registre as respostas no
.kata/<task>.yamlsob a chavethink - Atualize
statusparathink-complete - Se houver unknowns que podem ser investigados no código, faça-o (
Grep/Read)
— budget de investigação (Fable Step 5): 2 buscas/lookups consecutivos
sem resultado → pare de procurar e pergunte ao usuário em vez de continuar
vasculhando. - Salve o arquivo e prossiga
Fase 2: SIMPLIFY
- Carregue a skill
kata-simplifycomSkill. - Execute
git diff --stat(ougit diff --cached --statse vazio) - Mostre o diff ao usuário
- Pergunte via
AskUserQuestion(fechada, verkata-question):- "O código mínimo resolve o problema?"
- "Alguma abstração é para uso único?"
- "Existe configurabilidade/flexibilidade não solicitada?"
- Observações (opcional, texto livre)
- Analise o diff você mesmo procurando anti-patterns (YAGNI, premature abstraction)
- Registre as respostas no YAML sob
simplify
Fase 2.5: INTENT
- Carregue a skill
kata-intentcomSkill. - Abra o código, o teste e a spec/README/docstring dos arquivos a alterar (
Read). - Determine ou pergunte:
- O que o código FAZ hoje?
- O que o teste/check ESPERA?
- O que a especificação DIZ?
- Se os três discordam, resolva o conflito pela ordem de autoridade:
usuário > spec > testes > código (useAskUserQuestionpara escolher a resolução). Não edite até resolver. - Registre o intent gate no
.kata/<task>.yaml.
Fase 3: SURGICAL
- Carregue a skill
kata-surgicalcomSkill. - Execute
git diff --name-only(ougit diff --cached --name-only) - Para cada arquivo, pergunte: "
<arquivo>— necessário para esta tarefa?" (AskUserQuestionse poucos arquivos, texto livre listando todos se forem muitos) - Recall Gate: antes de usar qualquer API/endpoint/config de memória,
abra a fonte real (docstring, docs, lib source) comRead. Se não acessível, marque
como low-confidence no relatório. - Verifique imports órfãos:
ruff check --select F401 <paths>viaBash - Pergunte: "Imports removidos são só os que sua mudança tornou inúteis?"
- Registre a lista de arquivos com
necessary: true/falseno YAML sobsurgical
Fase 4: VERIFY
Carregue a skill
kata-verifycomSkill.Leia
.kata/config.yamlprimeiro. Se declararverify.lint,verify.testouverify.coverage, use aqueles comandos verbatim no papel
correspondente — eles substituem os defaults Python abaixo, e as flags de
caminho daquele papel deixam de valer.verify.gateeverify.coverage_patternvalem junto. Rodarkata --check-onlyjá faz
tudo isso sozinho. Se o projeto não for Python e não houver config, não
invente comando: proponha criar o arquivo e registre o bloqueio como
caveat — verificação que não rodou não é verificação que passou.Lint (default):
python -m ruff check <paths>viaBash(oupy -m ruffno Windows)- Paths padrão:
src/ tests/. Adapte ao projeto (ex:app/ services/ tests/) - OK se returncode == 0
- Se falhou, mostre o output completo
- Paths padrão:
Teste (default):
python -m pytest <test_paths> --tb=short -q(oupy -m pytestno Windows)- Test paths padrão:
tests/. Adapte ao projeto - Se houver arquivos que precisam de
--ignore, inclua-os - OK se returncode == 0
- Se falhou, mostre o output completo
- Test paths padrão:
Coverage (default):
python -m pytest <test_paths> --cov=<source> --cov-report=term-missing --cov-fail-under=70 -q(oupy -m pytestno Windows)- Source padrão:
src. Adapte ao projeto (ex:app) - O
--cov-fail-underjá garante que o gate seja verificado pelo pytest-cov - Extraia o percentual do output para exibição (regex:
TOTAL\s+\d+\s+\d+\s+(\d+)%) - Gate: 70%. OK se returncode == 0 (já inclui o gate)
- Source padrão:
Critério de sucesso: confronte o critério declarado no THINK (
done)
com o resultado final e pergunte ao usuário viaAskUserQuestion
"O critério de sucesso da tarefa está satisfeito?"- Em modo
--check-only, assuma satisfeito
- Em modo
Hard bound (Fable Step 5): registre
verify.attempts(contador de
execuções do VERIFY). Após 3 tentativas falhas, graveverify.hand_back: truee devolva a tarefa ao usuário com o que foi tentado, o output real
e a hipótese atual — não fique repetindo o mesmo fix-verify.Calcule o resultado final:
- Aprovado se: ruff ✅ AND pytest ✅ AND coverage ✅ AND sucesso ✅
- Rejeitado caso contrário
Atualize
statusparaapprovedourejectedno YAML
Fase 4.2: TWIN CHECK
Executar depois do VERIFY e antes do ARTIFACT, e só se a tarefa foi
aprovada. Quando um defeito é corrigido, o mesmo padrão costuma existir em
outros lugares — foi assim que vários defeitos deste projeto reapareceram
depois de "corrigidos" num único ponto.
- Determine se um defeito foi corrigido. Se o intent gate registrou
discordância (intent.all_agree: false), a resposta já é sim. Caso
contrário, pergunte ao usuário comAskUserQuestion. - Se não houve correção de defeito, grave
twins.defect_fixed: falsee siga
para o ARTIFACT. Gravar a resposta importa: é a única evidência de que
a pergunta foi feita, e sem ela o gate TWINS não consegue distinguir "não
houve defeito" de "ninguém verificou". - Se houve, pergunte qual padrão buscar (regex) e rode a busca com
Grep
no projeto inteiro. - Mostre as ocorrências, pergunte se deseja corrigi-las agora, e registre:
twins:
pattern: "assert True"
result: "3 arquivo(s), 7 ocorrência(s)"
searched: true
defect_fixed: true
matches_count: 7
files_count: 3
fix_applied: falseO CLI não edita as ocorrências do TWIN CHECK. fix_applied: true só pode ser
gravado por um host que tenha feito e verificado a edição de fato.
Fase 4.5: ARTIFACT
- Carregue a skill
kata-artifactcomSkill. - Verifique se as linhas devidas estão no relatório:
- INTENT: comportamento mudou? Intent gate está registrado?
- AUTH: ação irreversível? Autorização do usuário documentada?
- PENDING: docs prescrevem follow-up? Ação não tomada documentada?
- TWINS: defeito corrigido? Varredura de padrão recorrente registrada?
- Se alguma linha devida está ausente, adicione-a ou marque como ressalva.
- Registre o resultado no
.kata/<task>.yaml.
Fase 5: REPORT
- Carregue a skill
kata-reportcomSkill. - O relatório é gerado automaticamente ao final do ciclo completo.
- Para regenerar:
python -m kata --task <name> --reportviaBash(oupy -m katano Windows). - Verifique se o relatório contém:
- Outcome first: primeira linha = resultado
- O que foi feito: problema e arquivos alterados
- INTENT line: se comportamento mudou
- Verificações: ruff, pytest, coverage, critério de sucesso
- Caveats: o que está pendente, fraco, ou não verificado
- AUTH/PENDING/TWINS lines: se devidas
- Hostile-reviewer reread: releia o relatório como revisor hostil.
- Alguma claim não verificada?
- Resposta no formato errado?
- Algo tocado fora do escopo?
Fase 6: JUDGE (opcional — adversarial verification)
Carregue a skill
kata-judgecomSkill.Verifique se
statuséapproved(julgar só tarefas concluídas).Execute o judge:
python -m kata --task <name> --judgeviaBash(oupy -m katano Windows).Interprete o veredito:
- VERIFIED → nenhuma fraude, e o juiz teve como procurar
- VERIFIED WITH CAVEATS → fraudes leves/médias; ressalvas documentadas
- UNVERIFIABLE → nenhuma fraude, mas o juiz não teve como observar
(nada re-executado, ou teste em linguagem que ele não lê). Não
reporte como sucesso: diga ao usuário o que ficou sem verificação - REFUTED → fraude de alta severidade; ciclo precisa ser revisto
- O baseline precisa resolver, ser ancestral do HEAD e coincidir com a
âncora Git criada no início; se a âncora faltar, o resultado é no máximo
UNVERIFIABLE.
Se REFUTED, investigue as fraudes apontadas:
- Weakened checks: revise asserts removidos/relaxados em testes
- False completion: re-execução falhou — corrija e reexecute
- Scope creep: arquivos não declarados — reverta ou justifique
- Unauthorized action: ação externa sem AUTH — documente ou reverta
- Spec betrayal: discordância de INTENT aprovada sem resolução — volte ao INTENT, resolva o conflito com o usuário pela ordem de autoridade e só então reaprove. Não escreva
conflict_resolutiondepois do veredito só para limpá-lo: o juiz aceita o texto sem verificar, e isso seria a fraude que ele caça - Debris: limpe arquivos temporários, debug prints, TODOs
Registre o resultado no
.kata/<task>.yamlsob chavejudge.Mostre o resumo final:
✅ ruff limpo
✅ pytest 850 passaram
✅ coverage 87.0% (gate: 70%)
✅ critério de sucesso satisfeito
┌──────────────────────────────────────────────────────────┐
│ ✅ KATA CYCLE — APROVADO │
└──────────────────────────────────────────────────────────┘Adaptação ao Projeto
O kata é genérico, mas precisa saber a estrutura do projeto para rodar
verificações corretas. Detecte automaticamente:
| Se existir... | Use para ruff | Use para pytest | Use para coverage |
|---|---|---|---|
src/ |
src/ tests/ |
tests/ |
--cov=src |
app/ + services/ |
app/ services/ tests/ |
tests/unit/ |
--cov=app |
app/ |
app/ tests/ |
tests/ |
--cov=app |
Se houver pyproject.toml ou setup.cfg, leia-o (Read) para identificar:
[tool.ruff]→ caminhos padrão[tool.pytest]→ testpaths[tool.coverage.run]→ source
Persistência
Após cada fase, escreva/atualize .kata/<task>.yaml com os resultados
(via Write/Edit). Isso permite retomar uma tarefa interrompida.
Use o formato YAML (se PyYAML disponível) ou JSON como fallback — o mesmo
comportamento do CLI kata.
Modo Não-Interativo
Em execução não interativa (por exemplo, --check-only, CI, ou uma sessão
sem canal para perguntar), pule THINK/SIMPLIFY/SURGICAL preenchendo com
defaults, marque as fases com skipped: true e execute só VERIFY. Não
presuma que a sessão é não-interativa sem evidência clara (ex.: a flag--check-only), e não use a presença de TTY como prova de que as perguntas
podem ser respondidas; se puder perguntar, pergunte normalmente.
Comportamento Importante
- Propose, don't interrogate: se o usuário não sabe uma resposta, proponha baseando-se no contexto do código
- Investigue unknowns: se o usuário declara um unknown sobre o código, investigue com
Grep/Readantes de perguntar - Seja específico: rejeite respostas vagas em THINK — peça especificidade
- Não pule fases: cada fase existe por uma razão. Mesmo que pareça redundante, execute-a
- Exceção: triviality gate: se FIT classificar como trivial (1 arquivo, <10 linhas, sem busca), pule THINK/SIMPLIFY/SURGICAL e vá direto a VERIFY + reporte em 2 frases
- Exit code: em modo
--check-only, o CLI Python (python -m kata --check-only) termina com status apropriado (aprovado/rejeitado); esta skill em si não tem exit code, apenas reporta o resultado - Português BR: todas as interações com o usuário em português brasileiro