{"id":47602910,"url":"https://github.com/dshills/plancritic","last_synced_at":"2026-04-01T18:57:53.354Z","repository":{"id":339296539,"uuid":"1161321260","full_name":"dshills/plancritic","owner":"dshills","description":"CLI tool that reviews software implementation plans and returns structured critique: contradictions, ambiguities, missing prerequisites, and suggested patches.","archived":false,"fork":false,"pushed_at":"2026-02-19T04:39:59.000Z","size":90,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-19T07:19:01.728Z","etag":null,"topics":["cli","code-review","developer-tools","golang","llm","static-analysis"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dshills.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-19T01:14:01.000Z","updated_at":"2026-02-19T04:40:03.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dshills/plancritic","commit_stats":null,"previous_names":["dshills/plancritic"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/dshills/plancritic","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dshills%2Fplancritic","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dshills%2Fplancritic/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dshills%2Fplancritic/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dshills%2Fplancritic/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dshills","download_url":"https://codeload.github.com/dshills/plancritic/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dshills%2Fplancritic/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31290983,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","code-review","developer-tools","golang","llm","static-analysis"],"created_at":"2026-04-01T18:57:52.697Z","updated_at":"2026-04-01T18:57:53.344Z","avatar_url":"https://github.com/dshills.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PlanCritic\n\nA CLI tool that reviews software implementation plans and returns structured critique: contradictions, ambiguities, missing prerequisites, questions, and suggested patches. Output is JSON-first (Markdown is rendered from JSON).\n\nDesigned for use by engineers and coding agents who want machine-readable feedback on a plan before execution begins.\n\n## Installation\n\n```bash\ngo install github.com/dshills/plancritic/cmd/plancritic@latest\n```\n\nOr build from source:\n\n```bash\ngit clone https://github.com/dshills/plancritic.git\ncd plancritic\ngo build -o plancritic ./cmd/plancritic\n```\n\n## Configuration\n\nSet an API key for your LLM provider:\n\n```bash\n# Anthropic (preferred)\nexport ANTHROPIC_API_KEY=sk-ant-...\n\n# OpenAI\nexport OPENAI_API_KEY=sk-...\n```\n\nIf both are set, Anthropic is used by default. Use `--model` to override.\n\n\u003e **Privacy note:** Input content (plan and context files, after redaction) is sent to the configured model provider. Redaction is enabled by default.\n\n## Usage\n\n```bash\n# Basic review (JSON output)\nplancritic check plan.md\n\n# Markdown report\nplancritic check plan.md --format md\n\n# With context files and a specific profile\nplancritic check plan.md --context constraints.md --context tree.txt --profile go-backend\n\n# Strict grounding mode (no assumptions about the codebase)\nplancritic check plan.md --strict\n\n# Write output to file\nplancritic check plan.md --out review.json\n\n# Generate patch suggestions (unified diff)\nplancritic check plan.md --patch-out fixes.diff\n\n# CI mode: exit non-zero if verdict is not executable\nplancritic check plan.md --fail-on not_executable\n\n# Filter to warnings and above only\nplancritic check plan.md --severity-threshold warn\n\n# Override model\nplancritic check plan.md --model anthropic/claude-opus-4-6\n\n# Verbose output (shows each pipeline stage)\nplancritic check plan.md --verbose\n```\n\n## Flags\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--format` | `json` | Output format: `json` or `md` |\n| `--out` | stdout | Output file path |\n| `--context \u003cpath\u003e` | — | Additional grounding files (repeatable) |\n| `--profile \u003cname\u003e` | `general` | Built-in checklist profile |\n| `--strict` | false | Strict grounding mode (see below) |\n| `--model \u003cid\u003e` | — | Model override |\n| `--max-tokens \u003cn\u003e` | 4096 | Cap LLM response size |\n| `--temperature \u003cfloat\u003e` | 0.2 | LLM temperature |\n| `--seed \u003cint\u003e` | — | Seed for reproducibility (if supported) |\n| `--severity-threshold` | `info` | Minimum severity included in output |\n| `--patch-out \u003cpath\u003e` | — | Write suggested plan edits as unified diff |\n| `--fail-on \u003clevel\u003e` | — | Exit code 2 if verdict meets/exceeds this level |\n| `--redact` | true | Redact secrets before sending to model |\n| `--offline` | false | Fail if no provider is configured |\n| `--verbose` | false | Print pipeline steps |\n| `--debug` | false | Save redacted prompt to local file |\n\n## Profiles\n\nBuilt-in profiles steer the critique with domain-specific checklists:\n\n| Profile | Description |\n|---------|-------------|\n| `general` | Language-agnostic baseline (default) |\n| `go-backend` | Go backend: minimal deps, explicit contracts, error handling, tests |\n| `react-frontend` | React/TypeScript: components, state management, accessibility, bundle size |\n| `aws-deploy` | AWS infrastructure: IAM least-privilege, networking, rollback, IaC, cost |\n| `davin-go` | Opinionated Go backend house rules |\n\nProfiles are embedded in the binary — no network access required.\n\n## Strict Mode\n\nWith `--strict`, the model treats everything not present in the plan or context files as unknown:\n\n- Issues must not claim \"the repo uses X\" unless it appears in provided context.\n- Uncertain inferences are capped at WARN severity and tagged with `\"assumption\"`.\n- A post-check scans descriptions for phrases suggesting fabricated repo knowledge and downgrades those issues to `UNVERIFIED`.\n\nUse strict mode when reviewing plans for unfamiliar codebases or when you want conservative, citation-only output.\n\n## Output Format\n\nJSON output follows a strict schema:\n\n```json\n{\n  \"tool\": \"plancritic\",\n  \"version\": \"1.0\",\n  \"input\": {\n    \"plan_file\": \"plan.md\",\n    \"plan_hash\": \"sha256:...\",\n    \"context_files\": [],\n    \"profile\": \"general\",\n    \"strict\": false\n  },\n  \"summary\": {\n    \"verdict\": \"EXECUTABLE_WITH_CLARIFICATIONS\",\n    \"score\": 72,\n    \"critical_count\": 2,\n    \"warn_count\": 5,\n    \"info_count\": 7\n  },\n  \"questions\": [ ... ],\n  \"issues\": [ ... ],\n  \"patches\": [ ... ],\n  \"meta\": {\n    \"model\": \"anthropic/claude-opus-4-6\",\n    \"temperature\": 0.2\n  }\n}\n```\n\n### Verdicts\n\n| Verdict | Meaning |\n|---------|---------|\n| `EXECUTABLE_AS_IS` | Plan is clear and complete enough to hand off |\n| `EXECUTABLE_WITH_CLARIFICATIONS` | Minor gaps; answering questions unblocks execution |\n| `NOT_EXECUTABLE` | Critical blockers; plan must be revised first |\n\n### Score\n\nScore is computed deterministically: start at 100, subtract 20 per CRITICAL, 7 per WARN, 2 per INFO, clamped at 0.\n\n### Issue Categories\n\n`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`\n\nEvery issue includes evidence citations with line numbers and quoted excerpts from the plan.\n\n## Exit Codes\n\n| Code | Meaning |\n|------|---------|\n| 0 | Success, verdict below fail threshold |\n| 2 | Verdict meets/exceeds `--fail-on` threshold |\n| 3 | Input error (missing file, bad format) |\n| 4 | Model/provider error |\n| 5 | Schema validation error (model returned invalid JSON) |\n\n## Examples\n\nSee the [`examples/`](examples/) directory for a sample plan, JSON review output, and Markdown report.\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdshills%2Fplancritic","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdshills%2Fplancritic","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdshills%2Fplancritic/lists"}