v0.0.10 — 7-CLI policy enforcement: Claude, Codex, Copilot, Cursor, Gemini, OpenCode, Pi
LatestFirst stable release of the 7-CLI cycle. failproofai now enforces policies across all major terminal coding agents:
| CLI | Config path | Stop semantics |
|---|---|---|
| Claude Code | .claude/settings.json |
exit-2 force-retry |
| OpenAI Codex | .codex/hooks.json |
exit-2 force-retry |
| GitHub Copilot | .github/hooks/failproofai.json |
{decision:"block",reason} JSON force-retry |
| Cursor Agent | .cursor/hooks.json |
{followup_message} JSON force-retry |
| Gemini CLI | .gemini/settings.json |
{decision:"block",reason} JSON force-retry |
| OpenCode | .opencode/plugins/failproofai.mjs + .opencode/opencode.json |
in-process plugin |
| Pi | .pi/settings.json + bundled pi-extension/ |
before_agent_start next-turn injection |
Highlights this cycle
- Per-CLI multi-select control panel in the dashboard
/policiesConfigure tab — install / uninstall the diff across all 7 CLIs in one round-trip, with brand-colored per-row status pills, a 7-segment coverage strip, and pre-checked detected CLIs for one-click adoption (#344). - Pi
Stoppolicy enforcement viabefore_agent_startsystem-prompt injection — works around Pi'sAgentEndEventhaving no Result type by capturing the denyreasonand gating the next user turn (#341). - OpenCode + Pi tool-input canonicalization — two-layer (shim + handler) so
block-read-outside-cwd,block-env-files, andblock-secrets-writeactually fire onread/write/editcalls. Existing user-scope shims auto-upgrade on the next failproofai version bump without a re-install (#337, #340). - Per-CLI
Stopsemantics docs — new "Per-CLI Stop semantics" subsection indocs/built-in-policies.mdxwith a 7-row table + Pi-limitation callout so users enablingrequire-*-before-stopunderstand what they'll see on each CLI (#342). - Dashboard restyle: single dark theme, project pages keyed by encoded cwd, full Gemini session UUIDs, plain-text startup line replacing the ASCII wordmark (#319, #335, #336, #338).
release-prep-checkworkflow policy + dated## <version> — <YYYY-MM-DD>CHANGELOG headings so every PR ships release-ready (no## Unreleaseddrift) (#335).
See CHANGELOG.md for the complete per-beta breakdown across the 13 betas in this cycle.