dshills/plancritic

GitHub: dshills/plancritic

一款利用大语言模型对软件实施计划进行结构化审查的 CLI 工具,能在执行前自动发现矛盾、歧义和缺失项并输出修补建议。

Stars: 2 | Forks: 0

# PlanCritic 一个用于审查软件实现计划并返回结构化评审结果的 CLI 工具:包括矛盾、歧义、缺失的前置条件、问题以及建议的补丁。输出以 JSON 为主(Markdown 是从 JSON 渲染而来的)。 专为希望在执行计划之前获取机器可读反馈的工程师和编码代理(coding agents)而设计。 ## 安装 ``` go install github.com/dshills/plancritic/cmd/plancritic@latest ``` 或者从源码构建: ``` git clone https://github.com/dshills/plancritic.git cd plancritic go build -o plancritic ./cmd/plancritic ``` 可选的 Web UI 是一个独立的二进制文件: ``` go build -o plancritic-web ./cmd/plancritic-web ``` ## 配置 为你的 LLM 提供商设置 API 密钥: ``` # Anthropic (首选) export ANTHROPIC_API_KEY=sk-ant-... # OpenAI export OPENAI_API_KEY=sk-... ``` 如果两者都设置了,默认使用 Anthropic。可以使用 `--model` 进行覆盖。 ## 使用方法 ``` # 基础 review (JSON output) plancritic check plan.md # Markdown 报告 plancritic check plan.md --format md # 带有 context files 和特定的 profile plancritic check plan.md --context constraints.md --context tree.txt --profile go-backend # Strict grounding 模式(不对 codebase 做假设) plancritic check plan.md --strict # 将输出写入文件 plancritic check plan.md --out review.json # 生成 patch suggestions (unified diff) plancritic check plan.md --patch-out fixes.diff # CI 模式:如果 verdict 不是 executable 则非零退出 plancritic check plan.md --fail-on not_executable # 仅筛选 warnings 及以上级别 plancritic check plan.md --severity-threshold warn # Override model plancritic check plan.md --model anthropic/claude-opus-4-6 # Verbose output(显示每个 pipeline stage) plancritic check plan.md --verbose ``` ## Web UI `plancritic-web` 运行一个本地的 HTMX 界面,用于审查上传的计划文件。 ![PlanCritic web UI](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/5aaa44a03f171313.png) ``` # 构建 web binary go build -o plancritic-web ./cmd/plancritic-web # 启动服务器 ./plancritic-web ``` 默认监听 `127.0.0.1:8080`。打开 ,选择一个计划文件,可选择添加上下文文件,然后运行审查。Web UI 使用与 CLI 相同的提供商环境变量和审查默认值。 常用覆盖项: ``` # 监听不同的本地端口 ./plancritic-web --addr 127.0.0.1:8100 # 设置表单中显示的默认值 ./plancritic-web --provider openai --model gpt-5.2 --profile go-backend ``` ## 标志 | 标志 | 默认值 | 描述 | |------|---------|-------------| | `--format` | `json` | 输出格式:`json` 或 `md` | | `--out` | stdout | 输出文件路径 | | `--context ` | — | 额外的基础参考文件(可重复使用) | | `--profile ` | `general` | 内置清单配置文件 | | `--strict` | false | 严格基础参考模式(见下文) | | `--model ` | — | 模型覆盖 | | `--max-tokens ` | 4096 | 限制 LLM 响应大小 | | `--temperature ` | 0.2 | LLM 温度 | | `--seed ` | — | 用于可复现性的种子(如果支持) | | `--severity-threshold` | `info` | 包含在输出中的最低严重级别 | | `--patch-out ` | — | 将建议的计划修改以 unified diff 格式写入 | | `--fail-on ` | — | 如果判定结果达到或超过此级别,则以退出码 2 退出 | | `--redact` | true | 在发送给模型前对敏感信息进行脱敏 | | `--offline` | false | 如果未配置提供商则失败 | | `--verbose` | false | 打印流水线步骤 | | `--debug` | false | 将脱敏后的 prompt 保存到本地文件 | ## 配置文件 内置配置文件通过特定领域的清单来引导评审: | 配置文件 | 描述 | |---------|-------------| | `general` | 语言无关的基线(默认) | | `go-backend` | Go 后端:最小依赖、明确的契约、错误处理、测试 | | `react-frontend` | React/TypeScript:组件、状态管理、可访问性、包大小 | | `aws-deploy` | AWS 基础设施:IAM 最小权限、网络、回滚、IaC、成本 | | `davin-go` | 带有主观偏好的 Go 后端内部规则 | 配置文件嵌入在二进制文件中——不需要网络访问。 ## 严格模式 使用 `--strict` 时,模型会将所有未出现在计划或上下文文件中的内容视为未知: - 除非在提供的上下文中出现,否则问题不得声称“代码库使用了 X”。 - 不确定的推断被限制在 WARN 严重级别,并标记为 `"assumption"`。 - 后置检查会扫描描述中暗示捏造代码库知识的短语,并将这些问题降级为 `UNVERIFIED`。 在审查不熟悉代码库的计划时,或者当你想要保守的、仅基于引用的输出时,请使用严格模式。 ## 输出格式 JSON 输出遵循严格的 schema: ``` { "tool": "plancritic", "version": "1.0", "input": { "plan_file": "plan.md", "plan_hash": "sha256:...", "context_files": [], "profile": "general", "strict": false }, "summary": { "verdict": "EXECUTABLE_WITH_CLARIFICATIONS", "score": 72, "critical_count": 2, "warn_count": 5, "info_count": 7 }, "questions": [ ... ], "issues": [ ... ], "patches": [ ... ], "meta": { "model": "anthropic/claude-opus-4-6", "temperature": 0.2 } } ``` ### 判定结果 | 判定结果 | 含义 | |---------|---------| | `EXECUTABLE_AS_IS` | 计划足够清晰和完整,可以直接交接 | | `EXECUTABLE_WITH_CLARIFICATIONS` | 存在细微缺口;回答相关问题后即可解除执行阻碍 | | `NOT_EXECUTABLE` | 存在关键阻碍;必须首先修改计划 | ### 评分 评分是确定性计算的:从 100 分开始,每个 CRITICAL 扣 20 分,每个 WARN 扣 7 分,每个 INFO 扣 2 分,最低为 0 分。 ### 问题类别 `CONTRADICTION`、`AMBIGUITY`、`MISSING_PREREQUISITE`、`MISSING_ACCEPTANCE_CRITERIA`、`RISK_SECURITY`、`RISK_DATA`、`RISK_OPERATIONS`、`TEST_GAP`、`SCOPE_CREEP_RISK`、`UNREALISTIC_STEP`、`ORDERING_DEPENDENCY`、`UNSPECIFIED_INTERFACE`、`NON_DETERMINISM` 每个问题都包含证据引用,并附带行号和计划中的引用摘录。 ## 退出码 | 退出码 | 含义 | |------|---------| | 0 | 成功,判定结果低于失败阈值 | | 2 | 判定结果达到或超过 `--fail-on` 阈值 | | 3 | 输入错误(文件缺失、格式错误) | | 4 | 模型/提供商错误 | | 5 | Schema 验证错误(模型返回了无效的 JSON) | ## 示例 请参阅 [`examples/`](examples/) 目录以获取示例计划、JSON 审查输出和 Markdown 报告。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)。
标签:AI辅助编程, Anthropic, API安全, CIS基准, Claude, CVE检测, DLL 劫持, EVTX分析, Go语言, HTMX, JSON输出, OpenAI, Web界面, 云安全监控, 代码审查, 代码审查工具, 内存规避, 大语言模型, 威胁情报, 实现计划评估, 开发者工具, 开源框架, 持续集成, 数据管道, 文档结构分析, 日志审计, 机器可读, 程序破解, 统一差异补丁, 编码代理, 软件工程, 软件生命周期管理, 需求分析, 静态分析