关于 sdd-checar-ambiente
用于检查仓库环境是否具备规格驱动开发(SDD)条件的只读技能。它按指定的简明格式报告阻碍项和修复建议,不修改文件或配置。
主要功能
- 01仓库与分支检查
- 02Git 身份和远程仓库检查
- 03Agent 与项目工具检测
- 04工作树和依赖诊断
- 05已提交敏感信息检查
适用场景
- 01开始 SDD 工作前检查前置条件
- 02排查 Git 或远程访问阻碍
- 03发现缺失的项目依赖或环境文件
- 04检测已提交的凭据和私钥
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ robertodiasduarte/ sdd-starter --skill sdd-checar-ambiente安装后在 Claude Code 中输入/sdd-checar-ambiente确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlscripts/checar.shtests/test_checar.py详细介绍
检查环境
回答一个问题:当前环境是否已准备好在此处使用 SDD? 几秒内即可完成,不做任何更改,并说明需要修复什么。
如何运行
有 bash 可用时(macOS、Linux 或 Windows 上的 Git Bash),请在项目文件夹中运行此技能附带的脚本:
bash <pasta desta skill>/scripts/checar.sh
并原样回复脚本的输出——前后都不要加句子,不要评论检查了什么或没检查什么,也不要翻译。脚本已完成以下所有检查,并会按正确格式打印报告;格式不由你决定。(此技能所在的文件夹就是包含此 SKILL.md 的文件夹:项目中或 Agent 全局目录下的 .claude/skills/sdd-checar-ambiente/ 或 .agents/skills/sdd-checar-ambiente/。)
没有 bash 时(仅使用 PowerShell),请手动执行以下检查,并按照与脚本相同的格式回复:仅在有相应项目时显示 🔴 数据暴露、🔴 阻碍工作 和 ⚠️ 值得修复 区块,最后显示 ✅ 已就绪:仓库 …(如有问题,则显示 ✅ 仓库 …)。通过的检查或不适用的检查,除最后一行外都不要提及。请在 ✅ 行末尾加上此技能的标识:
sdd-checar-ambiente v1.2.0 · out/2026 · 当前版本:https://github.com/robertodiasduarte/sdd-starter/releases/latest
(脚本会自动读取此文件中的版本并添加标识。)
规则
- 只读。 不安装、不配置、不修复、不创建文件。提供命令;由用户查看获准内容后自行运行。网络操作仅限以下两项只读查询:匿名查询 GitHub(最长 3 秒),确认仓库是否公开(若失败,不要提及);以及对远程仓库执行
ls-remote(最长 10 秒),确认凭据和网络是否可用,以及仓库是否已有提交(如果编辑器的登录窗口存在,则并行执行第二次不带窗口且不带凭据的ls-remote,以区分等待登录窗口与网络无响应)。 - 绝不让 git 在终端中请求密码:否则 Agent 会一直等待无人能看到的输入。在 bash/zsh 中,所有连接远程仓库的命令都要使用
GIT_TERMINAL_PROMPT=0 git …;在 PowerShell 中使用$env:GIT_TERMINAL_PROMPT=0; git …。不要关闭编辑器(VS Code、Cursor)的登录窗口:通过该窗口登录 GitHub 的用户无需窗口也能访问远程仓库。 - 不要臆造问题。 没有纳入版本控制的
.env.example,就不要抱怨缺少.env。没有package.json,就不要提node_modules或 npm。文件夹中没有.env,就不要提.gitignore。仓库公开本身不是问题。包含公共证书的.pem文件不是秘密。一次误报会让人忽略所有其他告警。 - 按后果排序,而非按类别排序。 阻碍工作的事项要排在令人困扰的事项之前。
- 自行检查,不要提问。 以下内容都可以通过运行命令查明。
- 适用于任何 shell。
git命令在 bash、zsh 和 PowerShell 中相同。要检查程序是否存在,bash/zsh 中使用command -v <名称>,PowerShell 中使用Get-Command <名称>。
检查内容及顺序
1. 我在哪里
- 首先,这个文件夹是否已同步? 路径中包含
Library/Mobile Documents、iCloudDrive、Library/CloudStorage、OneDrive、Dropbox、Google Drive、My Drive或Meu Drive;或者在 桌面和文稿已同步到 iCloud 的 Mac 上,文件夹位于~/Desktop或~/Documents,而~/Library/Mobile Documents/com~apple~CloudDocs/Desktop(或Documents)是一个快捷方式(symlink)—— 路径本身不会改变。已同步 ⇒ 这是唯一发现的问题:将项目移出云盘 (同步可能导致.git和分支损坏或重复)。不要继续进行其他检查。 git rev-parse --show-toplevel— 这是一个 git 仓库吗?如果不是,这是最重要的发现,请按以下 顺序说明具体是哪种情况:- 文件夹是个人目录(
~)或/⇒ 终端不在项目中(不要扫描个人目录); .git位于最多 3 层深的子文件夹中(node_modules除外)⇒ “项目位于./X”:在该位置打开 项目;如果深度为 2 到 3 层,列出路径;如果超过 3 层,说明有多少个并询问要检查哪一个;- 只有系统文件(
.DS_Store、desktop.ini、Thumbs.db)或没有文件 ⇒ 还没有项目: 从sdd-brainstorm开始; - 有文件但没有
.git⇒ “这个项目还没有使用 git”:sdd-iniciar-reposkill 会将项目放进 git 和一个私有 GitHub 仓库。绝不要只回答 "git init"——未经检查就发布,可能会连客户 电子表格和证书一起发布。
- 文件夹是个人目录(
- 文件夹、当前分支(
git branch --show-current),以及是否有未提交的更改(git status --short)。
2. 可用的 Agent
claude --version和codex --version— 记录每个已安装 Agent 的版本。- 记录当前正在执行此 skill 的 Agent。
3. 可用的 Git
git --version。git config user.name和git config user.email。如果缺少其中任何一项,首次提交会失败,且错误 消息不会清楚说明该怎么办。解决命令:git config --global user.name "Seu Nome"和git config --global user.email "[email protected]"。git remote -v— 是否有远程仓库?它的主分支是什么(GIT_TERMINAL_PROMPT=0 git remote show origin, 查看 "HEAD branch" 行)?- 远程仓库有响应吗?
GIT_TERMINAL_PROMPT=0 git ls-remote --heads origin(PowerShell:$env:GIT_TERMINAL_PROMPT=0; git ls-remote --heads origin),超时上限为 10 秒。解读结果:- 列出分支 ⇒ 一切正常;
- 没有列出任何内容且没有错误 ⇒ 远程仓库还没有任何提交(⚠️):首次提交后执行
GIT_TERMINAL_PROMPT=0 git push -u origin <branch atual>; could not read Username、Authentication failed、Permission denied (publickey)、Repository not found⇒ 🔴 凭据问题:在 GitHub 上,“要么地址有误,要么仓库是私有的,而这台 电脑尚未登录”;命令是gh auth login(如果没有gh:从 https://cli.github.com 安装); 其他方案,用一行列出:SSH 密钥或 git 凭据管理器;Host key verification failed⇒ 🔴 这台电脑从未通过 SSH 确认服务器身份:ssh -T git@<host>并回答yes——这不是登录问题;Could not resolve host、timed out、Failed to connect或 10 秒内没有响应 ⇒ ⚠️ 没有 网络连接或网络受阻——不要提及密码或登录;- 命令停止但没有响应,且已配置编辑器登录窗口(设置了
GIT_ASKPASS/SSH_ASKPASS或core.askPass)⇒ 单独的GIT_ASKPASS不能证明已登录(网络停止时,git 根本不会询问密码)。在没有登录窗口和已保存 凭据的情况下重试,超时上限同样为 10 秒:GIT_TERMINAL_PROMPT=0 GIT_ASKPASS= git -c credential.helper= -c core.askPass= ls-remote --heads origin。 如果它要求登录(could not read Username、terminal prompts disabled、Permission denied ()⇒ 🔴 编辑器的登录窗口正在等待响应:在窗口中完成操作,或执行gh auth login;如果再次停止或出现网络错误 ⇒ ⚠️ 没有网络连接或网络受阻。 4. 工作分支(worktrees)
git worktree list— 第 1 行是主检出目录,不是工作分支。已打开的工作分支 = 后续各行。只有主检出目录 ⇒“没有已打开的工作分支”(说“有 1 个已打开的工作分支”描述的是不存在的状态)。- **孤立的 worktree:**列表中标记为
prunable的条目,或其文件夹已不存在的条目(有人手动删除了文件夹)。命令:git worktree prune。 - 已合并但仍打开的工作分支:某个 worktree 的分支既不是主检出目录的分支,也不是主分支本身,且已经包含在主分支中(
git branch --merged origin/<principal>),并且有自己的提交(git reflog show <branch>中有commit条目)。已包含在主分支中但没有自己的提交的分支是刚打开的工作分支,并未合并——不要建议删除。删除已合并分支的命令:git worktree remove <pasta>,然后执行git branch -d <branch>。 - 如果主检出目录(即
git worktree list --porcelain的第一行)中存在sdd/ambiente.md,请读取它:文件会说明主分支以及工作分支所在位置。主检出目录中未跟踪的sdd/是这个文件——不是问题。
5. 项目工具
- 存在
package.json,但没有node_modules⇒ 缺少npm install(否则项目的第一条命令会失败,并显示看起来像是其他问题的错误);存在composer.json,但没有vendor/,同理——两者都标为 🔴。requirements.txt存在,但文件夹中没有虚拟环境,则标为 ⚠️:依赖可能安装在虚拟环境之外。 - 已纳入版本控制的
.env.example,但没有.env⇒ 缺少本地配置(复制示例并填写)。 - PATH 中的编辑器:
code、cursor或subl(按此顺序)。没有编辑器不是问题——不标为 🔴 或 ⚠️;如果有编辑器,请在 ✅ 摘要中提及。
6. 客户数据与密钥(办公室电脑中有客户数据和 A1 证书)
- 已保存在 git 中(
git ls-files):.env或.env.*(.env.example和.env.sample除外)、.pfx、.p12,以及包含PRIVATE KEY的.pem(git grep --cached -l "PRIVATE KEY" -- '*.pem')。每个文件都标为 🔴 数据已暴露,执行命令git rm --cached "<arquivo>" && echo "<arquivo>" >> .gitignore,并且采取真正有效的保护措施:更换密码(.env)、向证书颁发机构吊销证书并重新签发(.pfx/.p12)、生成新密钥(.pem)。请说明从 git 中移除并不会删除历史记录。 - **公开仓库:**如果
origin指向 GitHub,请无需登录访问https://api.github.com/repos/<dono>/<repo>(200 = 公开;私有仓库返回 404),或运行gh repo view --json visibility。只有在 ✅ 摘要中提及公开仓库(“repo x(GitHub 上公开)”);若有数据暴露,相关项要说明文件已经在互联网上。 - **
.env不在.gitignore中:**文件夹中存在.env,但未纳入版本控制,且git check-ignore -q .env失败 ⇒ ⚠️,执行echo ".env" >> .gitignore。 - **npm 未启用
ignore-scripts:**存在package.json,npm 可用,且npm config get ignore-scripts的结果不是true⇒ ⚠️,执行npm config set ignore-scripts true,并提醒:依赖安装脚本的包可以通过npm rebuild <pacote> --ignore-scripts=false恢复安装脚本。
新工作分支预检。sdd-new-session 技能会运行 bash <pasta desta skill>/scripts/checar.sh --frente:只检查 git、仓库、远程仓库和远程访问权限。发现任何问题都会标为 🔴,脚本以代码 1 退出,最后一行是“未创建任何内容。解决问题后,请重新请求工作分支。”;一切正常时以代码 0 退出,并输出一行 ✅ Pronto para abrir a frente: …。
若要在下一次提交前拦截客户数据警报,请使用 sdd-higiene-dado 技能(经确认后安装);本技能仅用于诊断。
如何报告
不要提交冗长的报告:运行此工具的人想要解决问题,而不是阅读报告。按以下顺序列出四个部分,省略空项:
- 🔴 数据已暴露 — 已保存到 git 中的密码、证书或私钥。每项都要包含命令和保护措施(更换密码、撤销证书)。
- 🔴 阻碍工作 — 同步文件夹、不是 git 仓库(注明具体情况)、git 未设置身份信息、缺少依赖项。 每项都要包含可直接复制、能解决问题的准确命令。
- ⚠️ 建议修复 —
.env未列入.gitignore、npm 未启用ignore-scripts(这两项优先),孤立的 worktree、已集成但仍处于打开状态的工作分支、缺少.env。 - ✅ 一行摘要,以此技能的标识结尾——例如:
✅ 已就绪:仓库 meu-app,分支 main,2 个开放工作分支,Claude Code 2.1 · sdd-checar-ambiente v1.2.0 · out/2026 · 当前版本:https://github.com/robertodiasduarte/sdd-starter/releases/latest
如果一切正常,整个回复必须恰好是 ✅ 这一行——前后都不能有任何文字:不要写“全部正常”,不要列出已检查的内容,也不要主动提供帮助。健康的环境不需要一段说明;想了解详情的人会主动询问。
示例
正常:
✅ 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
在公开仓库的 git 中保存了 A1 证书:
🔴 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
存在两个问题:
🔴 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
SDD Starter by RDD 的一部分 — https://github.com/robertodiasduarte/sdd-starter