Clientes¶
O AtipSpec funciona dentro do cliente de programação que você já usa.
atipspec init instala as mesmas skills onde cada cliente as descobre; a CLI
é a mesma em todos os lugares. O que muda é como você invoca uma skill e como
o revisor recebe uma sessão isolada.
Uma skill por fase¶
Cada fase tem sua própria skill, nomeada conforme a fase, além de uma skill guarda-chuva para status e perguntas sobre o fluxo:
| Skill | O que faz |
|---|---|
atipspec-contract |
define ou altera o contrato de arquitetura |
atipspec-explore |
resume em um briefing uma ideia que ainda não está clara |
atipspec-spec |
a entrevista e os cenários na spec viva; com o plano, a proposta que você aprova no ponto de parada 1 |
atipspec-fix |
um defeito: o requisito aceito que ele quebra, corrigido com um critério de regressão, e um plano de uma tarefa, sem entrevista |
atipspec-plan |
abordagem, escopo, tarefas e testes, apresentados com a proposta |
atipspec-build |
código e testes, cada tarefa registrada com task-done, e depois a verificação final |
atipspec-review |
a revisão adversarial em uma sessão isolada |
atipspec-deliver |
o resultado para sua aceitação no ponto de parada 2, e depois o arquivamento na spec viva |
atipspec-curate |
mantém o contexto do projeto pequeno |
atipspec-ship |
executa as fases restantes, parando apenas onde a CLI para |
atipspec |
status, ajuda e qual fase vem a seguir |
Uma skill de fase tem poucas linhas: executa o comando da fase, faz o que ele imprime e para se ele recusar. A CLI decide se a fase pode começar, então a fase ativa nunca é a interpretação do modelo sobre o seu pedido.
| Cliente | --client |
Skills instaladas em |
|---|---|---|
| Claude Code | claude |
.claude/skills/atipspec*/SKILL.md |
| Codex | codex |
.agents/skills/atipspec*/SKILL.md |
| Cursor | cursor |
.cursor/skills/atipspec*/SKILL.md |
| GitHub Copilot | github-copilot |
.github/skills/atipspec*/SKILL.md |
| Antigravity | antigravity |
.agents/skills/atipspec*/SKILL.md |
| Gemini CLI | gemini |
.gemini/skills/atipspec*/SKILL.md |
Codex e Antigravity compartilham uma pasta. Alguns clientes também descobrem as pastas de skills de outros clientes; se você vir duplicatas, instale apenas uma.
Invocar
/atipspec-contract
/atipspec-spec password-reset: users should be able to reset a forgotten password
/atipspec-ship password-reset
Revisor em uma sessão isolada: o modelo usa a ferramenta Agent com
um subagente general-purpose e o prompt "Read
.atipspec/tmp/password-reset-review-packet.md and do what it says." O
subagente nunca vê a conversa, então escreve session: isolated.
Invocar
Revisor: um subagente quando sua versão do Codex oferece um; caso
contrário, abra uma segunda sessão do Codex no projeto e cole o prompt do
pacote. Qualquer um dos dois escreve session: isolated; um review
escrito na mesma sessão escreve session: shared.
Invocar: escolha atipspec-spec (ou a fase que você precisa) no seletor de skills, ou peça ao Agent para usá-la e descreva a entrega.
Revisor: um agente em segundo plano com o prompt do pacote, ou um
novo chat que não viu o trabalho: session: isolated. No mesmo chat:
session: shared.
Invocar: no modo agente, peça ao Copilot para usar a skill atipspec-spec e descreva a entrega.
Revisor: uma nova sessão de agente com o prompt do pacote:
session: isolated. Na mesma sessão: session: shared.
Invocar: verifique /skills list, depois peça a ele para usar
atipspec-spec. Skills de projeto exigem um workspace confiável.
Revisor: uma nova sessão com o prompt do pacote: session: isolated.
Na mesma sessão: session: shared.
Invocar: peça ao agente para usar a skill atipspec-spec.
Revisor: um subagente ou uma nova sessão com o prompt do pacote:
session: isolated. Na mesma sessão: session: shared.
O revisor declara session: em review.md; nada no cliente o comprova. Um
review compartilhado é um aviso, e um erro com risk: high ou
require_isolated_review (veja review): nesse caso, peça
uma nova sessão para o revisor.
O que o modelo carrega¶
Uma skill de fase tem poucas linhas. O comando da fase imprime todo o resto:
o cabeçalho da fase com o status derivado, o workflow da fase em
.atipspec/framework/workflows/, as regras compartilhadas em
.atipspec/framework/rules.md, e a saída de atipspec context <slug>. O
modelo lê specs/ apenas conforme o contexto o seleciona e escreve a spec
viva que altera, nunca lê o archive por inteiro, e nunca lê um workflow de
uma fase em que não pode entrar.
Regras de permissão de aprovação¶
Você aprova na conversa, e o assistente registra isso com
atipspec accept ... --code <code>. Onde o cliente pode ser configurado para
perguntar a você antes de esse comando rodar, init e install o
configuram, e o registro diz isso em seu channel:
| Cliente | O que o AtipSpec instala | Canal de um accept do assistente |
|---|---|---|
| Claude Code | .claude/settings.json: ask para Bash(*atipspec accept *), e para Edit em .github/workflows/**, .gitlab-ci.yml e .claude/settings*.json; deny de Edit em .atipspec/deliveries/*/approvals/**, .atipspec/deliveries/*/evidence/**, .atipspec/deliveries/*/review-rounds.json, .atipspec/approvals/** e .atipspec/archive/** |
client-permission enquanto essas regras estiverem intactas e nenhum hook do projeto responder à pergunta, assistant caso contrário |
| Codex | nada ainda: as regras de projeto em .codex/rules/*.rules podem perguntar antes de um prefixo de comando, mas só carregam em uma camada de projeto confiável e seu comportamento com approval_policy = never não foi verificado |
assistant |
| Cursor | nada: .cursor/cli.json tem listas de permissão e de negação, sem perguntar, e só para sua CLI |
assistant |
| GitHub Copilot | nada: a configuração de aprovação automática do terminal do VS Code é de melhor esforço, não uma fronteira de segurança | assistant |
| Gemini CLI | nada: seu motor de políticas pode perguntar, mas as políticas de workspace hoje não carregam | assistant |
| Antigravity | nada: suas regras de permissão são globais ou definidas na IDE | assistant |
Como as regras do Claude Code se comportam:
- O Claude Code avalia
deny, depoisask, depoisallow; uma regraallownunca as sobrepõe, e as regrasaskperguntam em todos os modos de permissão. Nos modos que não podem perguntar, o comando é negado, então nada é registrado. - A pergunta pede que você permita o comando exato, com o código do conteúdo que você aprovou; ela confirma essa mesma aprovação, não é uma segunda.
- As regras
denycobrem as ferramentas de edição do Claude Code, os comandos de arquivo que ele reconhece e os redirecionamentos; versões anteriores à 2.1.210 tratam as regras deEdite os redirecionamentos de outra forma. Elas não cobrem programas arbitrários, como um script que escreve um arquivo. - As regras
askparaEditem.github/workflows/**,.gitlab-ci.ymle.claude/settings*.jsonfazem as ferramentas de edição do Claude Code perguntarem a você antes de alterar a CI que executamerge-check, ou as configurações que guardam estas regras. Ao contrário das regrasdeny, elas não barram um redirecionamento: com o Claude Code 2.1.296 no modoacceptEdits, um comando Bash que as configurações permitem, comoecho,printfoupython3 -c, escreveu em.github/workflows/com um redirecionamento sem perguntar, e qualquer programa que a sessão possa executar pode escrever ali. A proteção que se mantém é omerge-check: ele bloqueia um branch que altera a CI, as configurações do cliente ou as skills fora de uma entrega, e a CI em si é protegida no provedor (veja CI antes do merge). - As regras são carregadas do
.claude/settings.jsondo projeto: abra a sessão na raiz do projeto. Uma sessão aberta em um subdiretório, ou em uma pasta pai ou outro repositório que entra no projeto comcd(algumas sessões de workflows e de subagentes fazem isso),--setting-sourcessemproject, as configurações de usuário ou gerenciadas, e os hooks nelas que respondem aos pedidos de permissão as contornam sem que a CLI consiga perceber. Um hookPreToolUseouPermissionRequestpara Bash no.claude/settings.jsonou no.claude/settings.local.jsondo projeto é visível:statuseaudito nomeiam e o canal éassistant. Sessões executadas pelo Agent SDK, que não carrega configurações de projeto a menos que seu programa peça e repassa as perguntas a esse programa, eclaude -pregistramassistant. - A mesclagem mantém todas as outras chaves e entradas, adiciona apenas as
regras que faltam e não escreve nada quando todas estão presentes. Um
arquivo que não é JSON puro (com comentários, por exemplo) ou um link
simbólico fica intocado, e as regras são impressas para que você as
adicione manualmente. Remover o Claude Code no menu do
initremove apenas essas regras. auditavisa quando as regras estão ausentes ou incompletas, nomeando as que faltam, estatusimprime uma linhaapprovals:com o estado delas. Até que todas estejam lá, as aceitações são registradas com o canalassistant.atipspec install --updateas repara.
client-permission significa que as regras que fazem o Claude Code perguntar
a você estão neste projeto, não que a sessão as carregou nem que a CLI viu
você confirmar. Em um terminal sem marcadores de agente, accept pede que
você digite o código (canal terminal); um agente pode remover seus
marcadores e responder a esse prompt a partir de um terminal que ele cria,
então nenhum canal identifica quem aprovou: eles descrevem como o comando
foi executado. Para aprovações autenticadas, use uma
política de confiança externa.
Idioma¶
O inglês é o idioma principal; espanhol e português são suportados. Os
arquivos do framework, as skills e a saída da CLI permanecem em inglês: uma
única fonte, lida por um modelo que segue instruções em inglês e responde a
você no seu idioma. O que uma pessoa lê segue language em config.yaml: o
dossiê de aceitação de atipspec report, e este site, que existe nos três
idiomas com um seletor. O que o modelo escreve no seu idioma é entendido pela
CLI: nomes de seção como Intención ou Intenção, Fuera de alcance ou
Fora do escopo, Atributos de calidad ou Atributos de qualidade,
Preguntas abiertas ou Questões em aberto; marcadores de vazio como
Ninguna ou Nenhuma; rótulos como Por qué: ou Observado:; e os
gatilhos do lint, os termos vagos e as palavras de medição. IDs, cabeçalhos
de template e status permanecem como os templates os definem, porque a CLI
os interpreta.
Atualizando¶
Depois de atualizar a CLI, execute em cada projeto:
Isso substitui os arquivos de framework e de skill que diferem da versão
instalada, remove os arquivos de .atipspec/framework/ que essa versão não
instala, mescla em .claude/settings.json as regras de permissão do
Claude Code que faltarem sem remover nada, e nunca toca em mais nada.
Enquanto ele não é executado, audit, check e merge-check falham: cada
fase imprime ao agente as regras e os workflows do framework, então eles
precisam ser os que a versão instalada traz, como as skills. Fixe a mesma
versão na CI que executa merge-check. Uma
instalação anterior à 0.1.0 tinha uma única skill atipspec; a atualização
substitui seu conteúdo e adiciona as skills de fase ao lado dela.