About sdd-checar-ambiente
A read-only skill that checks whether a repository environment is ready for Spec-Driven Development (SDD). It reports blockers and suggested fixes in a prescribed concise format without changing files or configuration.
Key features
- 01Repository and branch checks
- 02Git identity and remote checks
- 03Agent and project-tool detection
- 04Worktree and dependency diagnostics
- 05Secret exposure checks
Use cases
- 01Check prerequisites before starting SDD work
- 02Identify Git or remote-access blockers
- 03Find missing project dependencies or environment files
- 04Detect committed credentials and private keys
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ robertodiasduarte/ sdd-starter --skill sdd-checar-ambienteAfter installing, type/sdd-checar-ambientein Claude Code to confirm it loaded.
Bundled files
References and scripts installed along with SKILL.md.
agents/openai.yamlscripts/checar.shtests/test_checar.pyDetails
From the project READMEChecar ambiente
Responder uma pergunta: este ambiente está pronto para trabalhar com SDD aqui? Em segundos, sem mudar nada, dizendo o que consertar.
Como executar
Com bash disponível (macOS, Linux, ou Git Bash no Windows), rode o script que acompanha esta skill, de dentro da pasta do projeto:
bash <pasta desta skill>/scripts/checar.sh
e responda com a saída dele, exatamente como veio — sem frase antes, sem frase depois, sem
comentário sobre o que foi ou não verificado, sem tradução. O script já faz todas as verificações abaixo
e já imprime o relatório no formato certo; o formato não depende de você. (A pasta desta skill é a que
contém este SKILL.md: .claude/skills/sdd-checar-ambiente/ ou .agents/skills/sdd-checar-ambiente/,
no projeto ou na pasta global do agente.)
Sem bash (PowerShell puro), faça as verificações abaixo à mão e responda no mesmo formato do
script: blocos 🔴 Dado exposto, 🔴 Impede o trabalho e ⚠️ Vale arrumar só se tiverem itens, e por
último a linha ✅ Pronto: repo … (ou ✅ Repo … quando houver problema). Checagem que passou ou não se
aplica não é mencionada fora dessa linha. Termine a linha ✅ com a identificação desta skill:
sdd-checar-ambiente v1.2.0 · out/2026 · versão atual: https://github.com/robertodiasduarte/sdd-starter/releases/latest
(o script faz isso sozinho, lendo a versão deste arquivo).
Regras
- Somente leitura. Não instale, não configure, não conserte, não crie arquivo. Entregue o comando;
quem roda é o usuário, depois de ver o que está autorizando. Saídas de rede, as duas só de leitura:
uma consulta anônima ao GitHub, de até 3 segundos, para saber se o repositório é público (se falhar,
não diga nada sobre isso); e uma consulta
ls-remoteao remoto, de até 10 segundos, sem pedir senha, para saber se a credencial e a rede chegam lá e se ele já tem algum commit (com a janela de login de um editor presente, uma 2ªls-remoteem paralelo, sem janela e sem credencial, separa janela esperando de rede parada). - Nunca deixe o git pedir senha no terminal: o agente ficaria esperando uma resposta que ninguém vê.
Todo comando que fala com o remoto roda com
GIT_TERMINAL_PROMPT=0 git …no bash/zsh; no PowerShell,$env:GIT_TERMINAL_PROMPT=0; git …. A janela de login do editor (VS Code, Cursor) não é desligada: quem está logado no GitHub por ela alcança o remoto sem janela nenhuma. - Não invente problema. Sem
.env.exampleversionado, não reclame de.envausente. Sempackage.json, não fale denode_modulesnem de npm. Sem.envna pasta, não fale de.gitignore. Repositório público, sozinho, não é problema. Um.pemcom certificado público não é segredo. Um alarme falso ensina a ignorar todos os outros. - Ordene por consequência, não por categoria. O que trava vem antes do que incomoda.
- Descubra, não pergunte. Tudo abaixo se descobre rodando comandos.
- Funciona em qualquer shell. Os comandos de
gitsão iguais no bash, no zsh e no PowerShell. Para saber se um programa existe, usecommand -v <nome>no bash/zsh ouGet-Command <nome>no PowerShell.
O que verificar, nesta ordem
1. Onde estou
- Antes de tudo, a pasta está sincronizada? Caminho com
Library/Mobile Documents,iCloudDrive,Library/CloudStorage,OneDrive,Dropbox,Google Drive,My DriveouMeu Drive; ou, no Mac com Mesa e Documentos no iCloud, a pasta fica em~/Desktopou~/Documentse~/Library/Mobile Documents/com~apple~CloudDocs/Desktop(ouDocuments) é um atalho (symlink) — o caminho em si não muda. Sincronizada ⇒ é o único achado: mover o projeto para fora da nuvem (.gite frentes se corrompem ou duplicam com a sincronização). Não siga para as outras checagens. git rev-parse --show-toplevel— é um repositório git? Se não for, esse é o achado mais importante, e diga qual é o caso, nesta ordem:- a pasta é a pessoal (
~) ou/⇒ o terminal não está num projeto (não varra a pasta pessoal); - há
.gitem subpasta até 3 níveis (fora denode_modules) ⇒ "o projeto está em./X": abrir lá (de 2 a 3, liste; mais que 3, diga quantas e pergunte qual); - só arquivos do sistema (
.DS_Store,desktop.ini,Thumbs.db) ou nada ⇒ ainda não há projeto: começar pelasdd-brainstorm; - há arquivos e nenhum
.git⇒ "este projeto ainda não usa git": a skillsdd-iniciar-repopõe no git e num GitHub privado. Nunca responda só "git init" — publicar sem conferir antes leva planilha de cliente e certificado junto.
- a pasta é a pessoal (
- Pasta, branch atual (
git branch --show-current) e se há mudanças não commitadas (git status --short).
2. Agentes disponíveis
claude --versionecodex --version— registre a versão de cada um que existir.- Qual deles está executando esta skill agora.
3. Git utilizável
git --version.git config user.nameegit config user.email. Sem os dois, o primeiro commit falha com uma mensagem que não diz claramente o que fazer. O comando que resolve:git config --global user.name "Seu Nome"egit config --global user.email "[email protected]".git remote -v— há remoto? Qual é a branch principal dele (GIT_TERMINAL_PROMPT=0 git remote show origin, linha "HEAD branch")?- O remoto responde?
GIT_TERMINAL_PROMPT=0 git ls-remote --heads origin(PowerShell:$env:GIT_TERMINAL_PROMPT=0; git ls-remote --heads origin), com teto de 10 segundos. Leia o resultado:- lista de branches ⇒ tudo certo;
- nada listado e nenhum erro ⇒ o repositório remoto ainda não tem nenhum commit (⚠️): o primeiro
commit e
GIT_TERMINAL_PROMPT=0 git push -u origin <branch atual>; could not read Username,Authentication failed,Permission denied (publickey),Repository not found⇒ 🔴 credencial: no GitHub, "ou o endereço está errado, ou o repositório é privado e este computador não está logado"; o comando égh auth login(semgh: instalar em https://cli.github.com); alternativas, numa linha só: chave SSH ou o gerenciador de credenciais do git;Host key verification failed⇒ 🔴 este computador nunca confirmou a identidade do servidor por SSH:ssh -T git@<host>e responderyes— não é problema de login;Could not resolve host,timed out,Failed to connectou nenhuma resposta em 10 segundos ⇒ ⚠️ sem internet ou rede bloqueada — não fale em senha nem em login;- parou sem resposta e há janela de login de editor configurada (
GIT_ASKPASS/SSH_ASKPASSdefinidos oucore.askPass) ⇒GIT_ASKPASSsozinho não prova login (com a rede parada o git nem pede senha). Repita sem a janela e sem credencial guardada, também com teto de 10 s:GIT_TERMINAL_PROMPT=0 GIT_ASKPASS= git -c credential.helper= -c core.askPass= ls-remote --heads origin. Ela pediu login (could not read Username,terminal prompts disabled,Permission denied () ⇒ 🔴 a janela de login do editor está esperando resposta: responder a janela, ough auth login; parou de novo ou deu erro de rede ⇒ ⚠️ sem internet ou rede bloqueada.
4. Frentes de trabalho (worktrees)
git worktree list— a 1ª linha é o checkout principal, não é frente. Frentes abertas = as linhas seguintes. Só o checkout principal ⇒ "nenhuma frente aberta" (dizer "1 frente aberta" aqui descreve um estado que não existe).- Worktree órfã: entrada da lista marcada
prunable, ou cuja pasta não existe mais (alguém apagou a pasta à mão). Comando:git worktree prune. - Frente já integrada ainda aberta: branch de uma worktree que não é o checkout principal nem a
própria branch principal e que já está contida na principal
(
git branch --merged origin/<principal>) e que teve commit próprio (git reflog show <branch>tem alguma entradacommit). Branch contida na principal sem commit próprio é uma frente recém- aberta, não integrada — não sugira removê-la. Comando para a integrada:git worktree remove <pasta>e depoisgit branch -d <branch>. - Se existir
sdd/ambiente.mdno checkout principal (a primeira linha degit worktree list --porcelain), leia-o: ele diz a branch principal e onde as frentes ficam. Umsdd/não rastreado no checkout principal é esse arquivo — não é problema.
5. Ferramentas do projeto
package.jsonpresente enode_modulesausente ⇒ faltanpm install(sem isso o primeiro comando do projeto falha com um erro que parece outra coisa);composer.jsonsemvendor/, idem — os dois são 🔴.requirements.txtsem ambiente virtual na pasta é ⚠️: as dependências podem estar instaladas fora dele..env.exampleversionado e nenhum.env⇒ falta a configuração local (copiar o exemplo e preencher).- Editor no PATH:
code,cursorousubl(nesta ordem). Sem editor não é problema — não entra em 🔴 nem em ⚠️; se houver um, cite-o no resumo ✅.
6. Dado de cliente e segredos (o computador do escritório tem dado de cliente e certificado A1)
- Já salvo no git (
git ls-files):.envou.env.*(exceto.env.examplee.env.sample),.pfx,.p12, e.pemque contémPRIVATE KEY(git grep --cached -l "PRIVATE KEY" -- '*.pem'). Cada um é 🔴 Dado exposto, com o comandogit rm --cached "<arquivo>" && echo "<arquivo>" >> .gitignoree a medida que protege de fato: trocar as senhas (.env), revogar o certificado com a autoridade certificadora e emitir outro (.pfx/.p12), gerar chave nova (.pem). Tirar do git não apaga do histórico — diga isso. - Repositório público: se o
originé do GitHub, consultehttps://api.github.com/repos/<dono>/<repo>sem login (200 = público; privado responde 404), ough repo view --json visibility. Público aparece só no resumo ✅ ("repo x (público no GitHub)"); com dado exposto, o item diz que o arquivo já está na internet. .envfora do.gitignore: existe.envna pasta, não está rastreado, egit check-ignore -q .envfalha ⇒ ⚠️,echo ".env" >> .gitignore.- npm sem
ignore-scripts: hápackage.json, o npm existe enpm config get ignore-scriptsnão étrue⇒ ⚠️,npm config set ignore-scripts true, avisando que um pacote que dependa de script de instalação volta comnpm rebuild <pacote> --ignore-scripts=false.
Pré-voo de uma frente nova. A skill sdd-new-session roda bash <pasta desta skill>/scripts/checar.sh --frente:
só git, repositório, remoto e acesso ao remoto. Qualquer achado vira 🔴, o script sai com código 1 e a
última linha é "Nada foi criado. Depois de resolver, peça a frente de novo."; saudável, sai 0 com uma linha
✅ Pronto para abrir a frente: ….
Para um alarme que barra o próximo commit com dado de cliente, a skill é a sdd-higiene-dado (instala
com OK); esta aqui só diagnostica.
Como reportar
Não entregue relatório longo: quem roda isto quer ser desbloqueado, não ler. Quatro blocos, nesta ordem, omitindo os vazios:
- 🔴 Dado exposto — senha, certificado ou chave privada já salvos no git. Cada item com o comando e a medida que protege (trocar senha, revogar certificado).
- 🔴 Impede o trabalho — pasta sincronizada, não é repositório git (com o caso), git sem identidade, dependências faltando. Cada item com o comando exato que resolve, pronto para copiar.
- ⚠️ Vale arrumar —
.envfora do.gitignore, npm semignore-scripts(estes primeiro), worktree órfã, frente integrada ainda aberta,.envausente. - ✅ Resumo em uma linha, terminando com a identificação desta skill — ex.:
✅ Pronto: repo meu-app, branch main, 2 frentes abertas, Claude Code 2.1 · sdd-checar-ambiente v1.2.0 · out/2026 · versão atual: https://github.com/robertodiasduarte/sdd-starter/releases/latest
Se estiver tudo certo, a resposta inteira é exatamente a linha ✅ — nenhuma frase antes nem depois: nada de "Tudo limpo", de lista do que foi verificado ou de oferta de ajuda. Ambiente saudável não merece parágrafo; quem quer detalhe pergunta.
Exemplos
Saudável:
✅ Pronto: repo meu-app, branch main, nenhuma frente aberta, Claude Code 2.1 · sdd-checar-ambiente v1.2.0 · out/2026 · versão atual: https://github.com/robertodiasduarte/sdd-starter/releases/latest
Com o certificado A1 salvo no git de um repositório público:
🔴 Dado exposto
- O certificado digital certificados/empresa.pfx está salvo no git. Este repositório é público: o arquivo já está na internet.
git rm --cached "certificados/empresa.pfx" && echo "certificados/empresa.pfx" >> .gitignore
Depois, revogue o certificado com a autoridade certificadora e emita outro.
✅ Repo meu-app (público no GitHub), branch main, nenhuma frente aberta, Claude Code 2.1 · sdd-checar-ambiente v1.2.0 · out/2026 · versão atual: https://github.com/robertodiasduarte/sdd-starter/releases/latest
Com dois problemas:
🔴 Impede o trabalho
- O git não tem e-mail configurado — o primeiro commit vai falhar.
git config --global user.email "[email protected]"
⚠️ Vale arrumar
- A frente ../meu-app-frentes/relatorio-mensal já foi integrada na main e continua aberta.
git worktree remove ../meu-app-frentes/relatorio-mensal
git branch -d relatorio-mensal
✅ Repo meu-app, branch main, 1 frente aberta, Claude Code 2.1 · sdd-checar-ambiente v1.2.0 · out/2026 · versão atual: https://github.com/robertodiasduarte/sdd-starter/releases/latest
Parte do SDD Starter by RDD — https://github.com/robertodiasduarte/sdd-starter