mcpField
S
sdd-checar-ambiente

sdd-checar-ambiente

github.com/robertodiasduarte开发1132 次安装3 天前更新
代码仓库

关于 sdd-checar-ambiente

用于检查仓库环境是否具备规格驱动开发(SDD)条件的只读技能。它按指定的简明格式报告阻碍项和修复建议,不修改文件或配置。

主要功能

  1. 01仓库与分支检查
  2. 02Git 身份和远程仓库检查
  3. 03Agent 与项目工具检测
  4. 04工作树和依赖诊断
  5. 05已提交敏感信息检查

适用场景

  1. 01开始 SDD 工作前检查前置条件
  2. 02排查 Git 或远程访问阻碍
  3. 03发现缺失的项目依赖或环境文件
  4. 04检测已提交的凭据和私钥

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/robertodiasduarte/sdd-starter --skill sdd-checar-ambiente

安装后在 Claude Code 中输入/sdd-checar-ambiente确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

agents/
openai.yaml
scripts/
checar.sh
tests/
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 仓库吗?如果不是,这是最重要的发现,请按以下 顺序说明具体是哪种情况:
    1. 文件夹是个人目录(~)或 / ⇒ 终端不在项目中(不要扫描个人目录);
    2. .git 位于最多 3 层深的子文件夹中(node_modules 除外)⇒ “项目位于 ./X”:在该位置打开 项目;如果深度为 2 到 3 层,列出路径;如果超过 3 层,说明有多少个并询问要检查哪一个;
    3. 只有系统文件(.DS_Store、desktop.ini、Thumbs.db)或没有文件 ⇒ 还没有项目: 从 sdd-brainstorm 开始;
    4. 有文件但没有 .git ⇒ “这个项目还没有使用 git”:sdd-iniciar-repo skill 会将项目放进 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 技能(经确认后安装);本技能仅用于诊断。

如何报告

不要提交冗长的报告:运行此工具的人想要解决问题,而不是阅读报告。按以下顺序列出四个部分,省略空项:

  1. 🔴 数据已暴露 — 已保存到 git 中的密码、证书或私钥。每项都要包含命令和保护措施(更换密码、撤销证书)。
  2. 🔴 阻碍工作 — 同步文件夹、不是 git 仓库(注明具体情况)、git 未设置身份信息、缺少依赖项。 每项都要包含可直接复制、能解决问题的准确命令。
  3. ⚠️ 建议修复 — .env 未列入 .gitignore、npm 未启用 ignore-scripts(这两项优先),孤立的 worktree、已集成但仍处于打开状态的工作分支、缺少 .env。
  4. ✅ 一行摘要,以此技能的标识结尾——例如: ✅ 已就绪:仓库 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

评论

支持 Markdown