devseunggwan/praxis
Workflow rules from CLAUDE.md turned into hooks and skills that actually fire
Changelog
All notable changes to praxis are documented here.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
7.17.0 (2026-09-14)
Added
- docs: add the per-hook output channel column (#1400) (9738307)
- hooks: add rewrite arms to pipefail-advisory and gh-flag-verify (#1399) (5c60bb0)
- hooks: close five surfaces no hook is positioned to read (#1407) (b545d8c)
- hooks: compose PreToolUse input rewrites in the dispatcher (#1398) (6876269)
- hooks: gate opening-move blame attribution (#1393) (db4734e)
- hooks: gate refusals missing from the final report (#1395) (bad4e6b)
- hooks: meter the bypass-route prose lane (#1394) (fdc7e76)
- hooks: send mutation advisories to the model (#1406) (1be2a4e)
- scripts: check INDEX trigger cells against the manifest (#1379) (622301c)
- skills: add bypass-report ledger viewer (#1390) (4431f23)
- skills: add tradeoff — decision-fork report (#1389) (2b8bec5)
- skills: quantify the delegated prompt (#1401) (0a8d81d)
Fixed
- hooks: keep merge approval window intact (#1413) (00dd26b)
- hooks: normalize before the planning skip (#1378) (cb9eb11)
- hooks: require approval after a prior merge (#1414) (a8c8f9c)
- hooks: send pipefail advisory to the model (#1411) (9aef51e), closes #1408
- hooks: stage locked state writes per process (#1384) (45eca22)
- hooks: state the marker condition where offered (#1412) (f40cb22), closes #1402
- hooks: tie review advisory to gate tier (#1388) (1a8e016)
- skills: use bare plugin-root placeholders (#1396) (cf4f521)
Changed
- bump reviewdog/action-actionlint from 1.73.2 to 1.73.4 (#1276) (763881e)
- bump the codeql-action group with 2 updates (#1409) (bf156fb)
- hooks: delete the tool_response path (#1386) (a30e6e0)
- hooks: end the PostToolUse parallel run (#1365) (1aa5976)
- hooks: make wrapper interpreter selectable (#1404) (825ff49)
- record the hook if-field placement rule (#1397) (ec49ff3)
7.16.0 (2026-09-07)
Added
- hooks: add review_by sunset date per hook (#1315) (526b64b), closes #1300
- hooks: advise on settings-file writes (#1356) (4faa57d), closes #1337
- hooks: fire second-failure on tool failure (4c1454e), closes #1337 #1337
- hooks: gate repeated mutations in one batch (#1372) (5910d92)
- hooks: grade a subagent's final turn too (#1358) (4dd443a), closes #1337
- hooks: inject isolation contract on spawn (#1374) (1b86824)
- hooks: port codex-review-route to python (#1317) (dddbc44), closes #1304
- hooks: resume transcript scans from a cursor (a979558)
- skills: adopt when_to_use and runtime fields (#1345) (120f8fc), closes #1331
Fixed
- hooks: advise on masked exit gating a mutation (#1274) (98a237b)
- hooks: fail open on an unreadable provenance tail (c72e891), closes #1279
- hooks: lead emitted bodies with english (#1316) (7f9dd0d), closes #1298
- hooks: rotate the logs that had no retention (bfaab75), closes #1282
- hooks: scratch skip is for absolute tmp paths (#1363) (2029b4b), closes #1362 #713
- paths: honour PRAXIS_HOME for telemetry dir (34d4dc5), closes #1340
- skills: plugin-root paths, omc prereq, install (#1327) (87e9e3c), closes #1289 #1290 #1291
- skills: resolve recover tools via skill dir (#1346) (c8a4b1e), closes #1333
Changed
- add a pinned mypy job and runner step (#1321) (cde0dfc), closes #1301
- add reading paths and shrink agents.md (#1318) (b175132), closes #1306
- audit: drop the removal narrative (a1b6de9), closes #713
- gate pytest on a coverage floor (#1320) (de3cdbb), closes #1303
- give cited rules an in-repo home (#1328) (b51cdcc), closes #1293 #1294 #1295
- hooks: count pass fires instead of writing rows (#1367) (2392e8d)
- hooks: drop the slack/notion mcp matcher (#1360) (2c0e05b), closes #713
- hooks: parse only tool_use lines in advisory (4ac09e0), closes #1278
- hooks: postcompact via SessionStart (59c38a3), closes #1339
- hooks: re-argue commit ADVISE on reversibility (#1273) (b75dbcf)
- hooks: read the issue-dedup tail by seeking (ce6ae6b), closes #1279
- hooks: retire stale hook refs and adr status (#1324) (618ef40), closes #1292
- hooks: retract the squash-merge exemption (#1275) (73a2ca2)
- hooks: run the Stop hooks in one process (#1344) (c05f1a9), closes #1281
- hooks: split _hook_utils behind a shim (#1322) (79d7423), closes #1305
- hooks: stream the codex-review commit scan (621067b), closes #1277
- hooks: stream the rejection scan passes (1a3ea71), closes #1280
- hooks: stream two more commit-path scans (5277c9b), closes #1312
- put general rules ahead of incident narratives (#1329) (bcd5b52), closes #1296 #1299
- readme: list hooks inert without a component (9860bb7), closes #1332
- run markdownlint without the docker build (#1353) (de91959), closes #1350 #1351 #1352
- runtime-constraints: re-verify bash cwd reset (#1326) (7484487), closes #1286
- runtime: record hook payload divergences (#1373) (c4dbc06)
- sync runtime descriptions with the manifest (#1323) (6be39c6), closes #1284 #1285 #1287 #1288 #1299
- translate korean prose in english docs (#1325) (f96f605), closes #1297
7.15.0 (2026-09-05)
Added
- cmux: idleness oracle for orphan pane triage (#1255) (e825d2f)
- hook: extend rejected-mutation-reconsent to the dispatch surface (#1262) (30e95f0)
- hooks: advise on unenforced mandatory steps (#1263) (d1e3e33)
- hooks: gate composed $ command lines (96c0f98)
- hooks: gate parens release-please rejects (#1268) (9ea4785)
Fixed
- cmux-delegate: drop $<digit> from the skill body (#1269) (a825eae)
- hooks: classify string-shaped failed payload (#1270) (1cb7ca6)
- hooks: cut the marker window at the last merge that ran (#1264) (b8785bb)
- hooks: declare the two undeclared advisory strict knobs (#1260) (b291ffd)
- hooks: detect gh api comment writes (#1267) (e923b7d)
- hooks: resolve gate-4 visibility in the hook (#1272) (9a75c74)
Changed
7.14.0 (2026-09-03)
Added
Fixed
- hooks: aggregate Stop-lane decision:block in run_group (#1199) (61dd495)
- hooks: decay the retrospect marker per turn (#1249) (7e14550)
- hooks: distinguish an unscanned transcript from zero rejections (#1234) (ed8446a)
- hooks: host-aware commit deny checklist (#1236) (ed3f804)
- hooks: host-scope printed gate references (#1248) (eaa716d), closes #1245
- hooks: pr-anchor-existence-gate records no fire events (#1223) (a86f695), closes #1213
- hooks: reconcile praxis_state_dir across _paths.sh and _paths.py (#1222) (cbdd22e), closes #1215
- hooks: scan every dispatch group for fixed timeouts (#1235) (259dd18)
- hooks: see posted anchors the gate was blind to (#1254) (a4d01ad)
- retrospect: resolve gate-4 repo visibility via the API (#1242) (8ab92c4)
Changed
- fail the release run on a dropped commit (#1233) (2d55889)
- hooks: dispatch PostToolUse(Bash) as one process (#1253) (6a45153)
- hooks: extract shared _lib helpers (#1232) (2d86ff6)
- hooks: read postcompact transcript tail by seeking, not scanning (#1224) (0a9d318), closes #1155
- hooks: read the transcript tail in advisory scans (#1251) (cb0b888)
- hooks: scan the transcript incrementally in Stop gates (#1243) (3c287e7)
- telemetry: gzip finished days on rollover (#1247) (f5ed4c9)
7.13.0 (2026-09-01)
Added
- ci: derive sibling-gate enumeration from manifest (#1142) (de6bdfc), closes #1127
- hooks: add manifest.schema.json and validate the hook manifest (#1202) (7169e79)
- hooks: advise on unanchored comment sprawl (#1143) (c684bb7), closes #1141
- hooks: ask before a turn fans out past what was asked (#1131) (ae28d98)
- hooks: branch-name-check denies only when attested (#1165) (2cf8696), closes #1159
- hooks: codex commit gate detects capability (#1190) (31bd3a5)
- hooks: declare component deps via requires (#1163) (a2edd9b), closes #1158
- hooks: PR-marker gates deny only when attested (#1189) (2b3104c)
Fixed
- close the Gate-4 doc gap and land the codeql bump as one commit (#1147) (d55dc54)
- cmux: enumerate all windows in find_orphans (#1129) (132c1dd)
- hooks: add korean wording variants to momentum gate (#1136) (e6f1e9a)
- hooks: bilingual advisory bodies (#1166) (a2f6aa1), closes #1160
- hooks: gate repo-less gh writes in cross-boundary-preflight (#1149) (66741e1)
- hooks: per-member deadline for the Bash dispatch group (#1195) (ab1477a)
- hooks: personal-owner exemption reads env (#1162) (4d08faa), closes #1156
- hooks: route scope-confirm logs and gh-label cache into documented roots (#1205) (5fdff21)
- hooks: treat a lone grouping token as syntax, not as the command (#1200) (87aab96)
- retrospect: gate issue rows at the stage4 approval (#1144) (511faca), closes #1138
- retrospect: gate-4 audits issue-routed public writes (#1135) (a7da22c), closes #1038
- scripts: close latent gaps in the manifest check gate (#1204) (b7ced98)
- skills: resolve symlinked $0 in CLI scripts (c33ee6c)
- skills: standalone-tier correctness — arguments, plugin-root, bypass-review paths (#1196) (7771d53)
- tests: fold sub-suite skips into PRAXIS_TESTS_STRICT (#1201) (2268154)
- using-praxis: route all 18 skills through the onboarding entry point (#1197) (f861a91)
Changed
- cmux-delegate: make the delegation unit an issue (#1134) (09ba417), closes #1133
- cmux-delegate: restore fire-and-forget (#1132) (2202f6e)
- cmux-delegate: translate body prose to match the corpus language convention (#1208) (11f61cc)
- codeql.yml pins init and analyze as two separate
uses:lines, and the (d55dc54) - guard the workflow pinning discipline (6e47d66)
- hook: record the settled-answer design menu as gap #5 (#1120) (4e61f45), closes #1119
- hooks: hook suitability audit + R1/R7 fixes (#1161) (e3806e6)
- hooks: normalize matcher spellings and add Edit/Write dispatch groups (#1198) (ed44c51)
- hooks: one jq spawn for the mix-check header (#1152) (7356556), closes #1151
- hooks: record the guard/gate two-tier design (#1188) (2f6bc38)
- hooks: shell-append fire records and bound the silent-pass scan (#1207) (3d6a72f)
- hooks: toolchain literals move to env (#1164) (20bd65a), closes #1157
- regenerate README hook aggregates and gate the counts (#1203) (dd4c4fd)
- retrospect: #1135 widened Gate-4's selection to (d55dc54)
- rules: name claims that terminate in prose (#1145) (1162dd2), closes #1044
- shellcheck extensionless skill scripts (3d457f4)
7.12.0 (2026-08-24)
Added
- hooks: add pr-anchor-existence-gate Stop hook (#1115) (b1e03ac)
- hooks: ask before a prod call whose premise may have dissolved (#1052) (ee1e1a1)
Fixed
- assorted gate/parse correctness nits (1c4b54e), closes #1097
- ci: retry the apt phase, not just bound it (#1050) (738de04)
- cmux-delegate: give the delegated worker a real stdin (#1057) (12634df), closes #1054
- cmux-delegate: make decision_gate write atomic (#1073) (da9cad5)
- cw: read every sibling config dir's broker state (2a5c0bd)
- cw: warn on reaper version drift (53edd02)
- hooks: accept an approval in its final clause (#1089) (827dad9)
- hooks: block path-prefixed gh/git bypass (fd25ef8), closes #1092
- hooks: correct sciomc gate bypass instruction (#1114) (81648e1), closes #1112
- hooks: disqualify a title quoted both ways (#1069) (527f561)
- hooks: fall through when a launcher's impl is absent (#1066) (96436fb), closes #1053
- hooks: gate unqualified verdict restatement (#1067) (06b8b1f)
- hooks: guard background poll-waiter chains (#1068) (20a412e)
- hooks: normalize command spec lookup key (5a7fbd1), closes #1099
- hooks: stop advisory firing on exit-0 Bash (c87cd96), closes #1096
- hooks: stop counting exit-0 calls as failures (#1071) (7715c66)
- hooks: stop safe_tokenize dropping a line (26a4e29), closes #1091
- menu-tier: close gap 3 for destructive sequences (#1072) (58a2afa)
- recover-sessions: harden the recovery CLIs (275bc38), closes #1095
- scripts: align memory lint with runtime parser (128438a), closes #1094
- spec-drift: skip Verify inside fenced blocks (50d0c63), closes #1093
Changed
- bump github/codeql-action/analyze from 4.37.6 to 4.37.7 (#1080) (95c36d8)
- bump github/codeql-action/init from 4.37.6 to 4.37.7 (#1081) (811cd53)
- bump reviewdog/action-actionlint from 1.73.1 to 1.73.2 (#1082) (b03be52)
- coderabbit: skip auto-review on release PRs (#1048) (3787644), closes #1047
- hooks: bound Stop-gate transcript scans (#1083) (dc06931)
- hooks: drop the CMUX_DELEGATE exemption (#1074) (f7543fc), closes #1055
- hooks: scan the transcript only when a gate needs it (#1084) (df31269)
- hooks: throttle the cache sweep to once a day (#1086) (3e1ab0c)
- rewrite README as a landing document (#1090) (fbfe0e3)
- sync project tagline across manifests (#1111) (c1c13f0)
7.11.0 (2026-08-19)
Added
Fixed
7.10.0 (2026-08-16)
Added
- cmux-delegate: add a worker decision gate (0087b84)
- cmux-delegate: classify worker liveness (3614663)
- hook: demote git-commit to advise, add ADVISE-channel arm (#1030) (df6cc4e)
- hook: re-ask before a mutation the user already refused (#1028) (f4182c1)
- hooks: add Bash blast-radius ask to output-block-falsify-advisory (#1025) (6aa725b)
- hooks: advise commit decomposition from the message itself (#977) (d65c1b2)
- hooks: advise on foreground Bash calls declaring long timeouts (#1026) (83a95be)
- hooks: advisory for n=1 quantitative claims (#969) (09181e8)
- hooks: enumerate required tokens on block (512fd69), closes #941
- hooks: gate poll-loop retries on reading the guard's own spec (#1027) (c4bd6dc)
- hooks: require a non-mutating tier in approval menus (#966) (3efa1ed)
- retrospect: add denied-actions lane + Gate-12 (#1029) (80110bd)
- skill: add merge-briefing procedure (#980) (635f561)
- skills: spec-drift and a spec store outside the repo (#1006) (ea24d15)
Fixed
- cmux-delegate: key the report on the workspace (6d8d653)
- cmux-delegate: supply the stdin column's non-TTY exemption (#1022) (615d27e), closes #981
- codex-review-wrap: always background the review call (#983) (e18de75)
- hook: make the anchor gate's PostToolUse findings reach the model (#1000) (7262740)
- hooks: bind each body flag to its own gh invocation in perf advisory (#1015) (2eefdfc), closes #973 #973
- hooks: fold lines across an open quote in safe_tokenize (#1014) (c79d872)
- hooks: guard session state read-modify-write (#965) (5efc14c)
- hooks: merge gates fire on non-merge commands (#986) (8dfafdf), closes #985
- hooks: serialize jq-config dedup state and stage per process (#1017) (0e755d1), closes #970 #951
- hooks: stop rule 1b firing on refusal-led turns (#976) (f3979aa)
- menu-tier: gate create/update on shared surface, cancel on mutation (#1016) (8a62c97)
- retrospect: escalate own-org public repo writes at Gate-4 (#1024) (256b428)
- spec-drift: run Verify commands with stdin at /dev/null (#1018) (487aea8), closes #1008
Changed
- architecture: state stdin column precondition (1a5ea64)
- bump codeql-action/analyze to 4.37.6 (ddea2e3)
- bump codeql-action/init to 4.37.6 (e1acc9a)
- bump reviewdog/action-actionlint from 1.73.0 to 1.73.1 (#1032) (075ac78)
- codex-review-wrap: pin Step 4b and Liveness to companion 1.0.6 (#1020) (cb0b375)
- ethos: forbid delegating a hook workaround to the user (#1023) (ad1ecb5)
- retrospect: declare memory-lint CI split intended, not a gap (#1021) (0a096ae), closes #975
- spec: a Verify oracle must fail when its inputs are gone (#1019) (f66836e), closes #1011 #1008
- spec: tracked feature-spec convention under .praxis/specs (#1002) (7821fa8)
7.9.1 (2026-08-11)
Fixed
7.9.0 (2026-08-08)
Added
- codex-review-wrap: add round-continuation gate (#946) (950d934), closes #945
- hook: gate the PR verification anchor comment (#948) (20bd73d)
- hooks: advise on repeat failures (#950) (816903e)
- hooks: gate evidence class on the changed surface (#957) (03d4f8a)
- reaper: reclaim brokers in unowned workspaces (#936) (8bf1dfa), closes #926
Fixed
- bypass-review: filter fixture sessions from fire-rate (#953) (379f25e)
- hooks: stop gh api squash path falling through (#952) (69e5a4d)
- hooks: verify briefing before marker releases merge (#956) (9e55a40)
7.8.0 (2026-08-03)
Added
- hook: advise on direct pytest execution (#915) (ff3a51c)
- hook: gate code-defect claims on call-site probe (#913) (3ab294f)
- hook: gate Write-surface decision blocks on internal consistency (#912) (5d81746)
- hooks: enumerate verb gates on first block (#931) (cf71fe9), closes #873
- retrospect: gate remedy-reach receipt (#930) (3b7495b), closes #917
Fixed
- codex-review-wrap: gate reap on owner death (#923) (303a466), closes #919
- cw: guard --gc against live sessionDir (#927) (1f55c99), closes #921
- hook: demote 세션 종료 to separator form (#924) (20fc2ae)
- hook: downgrade Recommended T1 deny back to ask (#900) (d8d389c)
- hook: expose exact falsified predicate (3568a43), closes #910
- hook: narrow negative-existence framing tokens (#902) (46b08af)
- hooks: emit verb checklist on both channels (#933) (e25689f), closes #932
- hooks: exempt live session from cache sweep (#928) (87358f4), closes #920
- telemetry: divert dev-checkout fires off the ledger (#935) (eb6b3f3), closes #934
- tests: isolate fire-ledger in run-tests.sh (#925) (25be6a2)
Changed
- hook: extract shared external-write body module (#908) (cf9c387)
- hooks: consolidate runtime files under PRAXIS_HOME (#911) (bfd7a61), closes #903
- tests: fail loud on skipped linters (#929) (83cb2ae), closes #917
7.7.0 (2026-07-28)
Added
- hook: advisory for perf multiplier without timing artifact (#888) (105a7f9), closes #850
- hook: block bare git worktree prune without snapshot (#881) (363d6c7), closes #870
- hook: cover negative-polarity PR state claims (#884) (318fc0e)
- hook: gate PR-claims lacking same-turn mutation (#880) (7ba3a03), closes #868
- hooks: advisory for cwd-dependent relative execution (#882) (726abf9), closes #852
- hooks: cover squash-merge title length (#890) (a51d83b)
- hooks: guard force-push in bash commands (#886) (20385bd)
- hooks: stop-lane gate for prose proposal blocks (#885) (b97b541)
- hook: warn on suppressed-stderr negative-verdict fallback (#896) (1381f4f)
- skills: file-based agent report handoff (#894) (1918eae)
- telemetry: instrument impl.sh hooks (#892) (c8454f4)
Fixed
- hooks: honor CLAUDE_CONFIG_DIR in memory resolver (#878) (337d7c6), closes #853
- telemetry: isolate test writes from ledger (#883) (e4df858)
- tests: guard mktemp -d failure across the suite (#898) (1980c6e)
Changed
- add lint tier to run-tests.sh (#875) (b3ab7db), closes #866
- contributing: qualify canary lag figures (#895) (15ae2ce)
- worktree-merge-cleanup: add squash merged-ness oracle (#879) (485dc34), closes #871
7.6.0 (2026-07-27)
Added
- codex-review-wrap: per-finding approval gate (#863) (d742c41)
- hook: add artifact-verdict evidence gate (#864) (9ac8fa3), closes #862
- hooks: record stop-lane block/advise fires (#855) (cd758b9)
Changed
- bump actions/checkout from 7.0.0 to 7.0.1 (#856) (68ec063)
- bump actions/setup-python from 6.3.0 to 7.0.0 (#858) (4343a82)
- bump github/codeql-action/analyze from 4.37.1 to 4.37.3 (#859) (1bde14d)
- bump github/codeql-action/init from 4.37.1 to 4.37.3 (#857) (3bba3d1)
- bump reviewdog/action-actionlint from 1.72.0 to 1.73.0 (#860) (0f2808e)
- hooks: formalize canary verification steps (#851) (f266f14)
- worktree-merge-cleanup: guard prune blast radius (#867) (d689960)
7.5.0 (2026-07-22)
Added
- hooks: add pr-report-destination-gate Stop hook (#833) (244e170)
- hooks: add secret-print-redaction advisory (#838) (4d4699e)
- hooks: add source-citation probe gate (#839) (255c066)
- hooks: surface pr-body tokens at deny time (#840) (18bf86f), closes #824
Fixed
- ask-falsify-gate: move falsified line out of question body (0e58c46)
- hooks: extract shared memory-dir resolver (#837) (e56e7e1)
- momentum-gate: add in-band briefing-surfaced bypass marker (#835) (b2bbaf3)
- momentum-gate: scope merge-briefing window to prior turn (#834) (f4319bc)
Changed
- add review-body surface to pr comment scope (#836) (0212f68)
- ask-falsify-gate: allow evidence in description (#829) (0e58c46)
7.4.0 (2026-07-18)
Added
- hook: model-routing tier-mismatch advisory (#789) (af98844)
- hook: pre-commit staged-file enum advisory (#785) (6db4a8c)
- hooks: add runtime-state-claim-gate stop hook (#818) (a042f35)
- hooks: escalate momentum gate on merge (#819) (65ff72c)
- hooks: escalate repeated same-session blocks (#813) (5727666)
- hooks: gate unprobed exclusion directives (#814) (4140c51)
- hooks: gh-merge-worktree-precondition gate (#801) (b5e639f)
- hooks: negative-existence verdict probe gate (#812) (e4306b3)
- hooks: ready-to-fill falsified scaffold (#796) (45065c5)
- skill: add surface-enumeration skill (#782) (600b9f0)
Fixed
- hooks: confirm label absence before blocking (#808) (e5b0f3f), closes #803
- hooks: detect over-claiming in falsify check (#811) (945ce88)
- hooks: resolve memory-hint dir-slug mismatch (#800) (d4cd812)
- hooks: skip shell redirects in branch-name-check (#810) (62d23bb), closes #806
Changed
- bump github/codeql-action/analyze from 4.37.0 to 4.37.1 (#820) (07301c0)
- bump github/codeql-action/init from 4.37.0 to 4.37.1 (#821) (a460c2a)
- bump reviewdog/action-markdownlint from 0.27.0 to 0.28.0 (#822) (34515af)
- hook: ask-end-option agent-facing decision (#794) (9af49a6)
- hooks: move falsify gate detail to specs (#815) (e3fbd32)
- hooks: on-demand home for merge cleanup seq (#817) (754ef32)
- skills: absorb surface-enum detail classes (#816) (f3399db), closes #792
7.3.0 (2026-07-14)
Added
- hooks: add foreground poll-loop guard (#778) (5ce724a), closes #745
- retrospect: enforce silent-pass completeness (#773) (b34e590)
- retrospect: include sidechain events in corpus (#765) (f5bc434)
Changed
- bump github/codeql-action/analyze from 4.36.3 to 4.37.0 (#767) (0d92efd)
- bump github/codeql-action/init from 4.36.3 to 4.37.0 (#768) (e93e61e)
- bump lycheeverse/lychee-action from 2.8.0 to 2.9.0 (#769) (2c1a90c)
- exclude generated CHANGELOG from markdownlint (#771) (b849cca), closes #770
- retrospect: add fire-rate prune audit (#777) (7793b32), closes #776
- retrospect: codify stage 2.5 gates (#775) (7e292c5), closes #774
- retrospect: fix stale memory-hint event coverage note (#780) (3a0f44c)
7.2.1 (2026-07-05)
Fixed
- ci: guard release-please sync on tagging run (#759) (f7f7c58), closes #757
- completion-verify: block echo-fabricated evidence (#762) (167c267)
Changed
7.2.0 (2026-07-05)
Changed
- automate releases with release-please (#753) (6054b77)
- note squash-title drives release-please bump (#756) (4c69904)
[7.1.0] - 2026-07-03
11 PRs since 7.0.0. Minor release. Headline changes: the debt
deferred-decision ledger skill, completion of the bypass-review fire-rate
metrics left open from #710, and the 3 outcome-proxy telemetry signals scoped
out of #710/#737 for lack of a telemetry source at the time — bypass-review fire-rate's Outcome Proxy section now reports external_write_revert_count,
rework_commit_count, and reclarification_loop_count alongside the existing
strike_count. Plus a PR-state re-fetch gate for stale merge-approval menus,
a codex-review-wrap subagent-transcript fix, and the retrospect is_error
per-body enumeration fix.
Added
debt: new report-only skill — deferred-decision ledger unioning commit-trailer markers (Not-tested:,Confidence: low,Rejected:,Directive:,Scope-risk:) fromgit log --grepwith tree compounding comments (# [PR #N]) fromgrep. Groups hits, tags markers with no stated revisit condition asno-trigger, and never modifies any file. (#711)bypass-review: fire-rate report completed with the three metrics left open from #710 —advise_ignored_rate(same-hook recurrence at the SAME advise decision, right-censored fires excluded),bypass_count(exact match via manifestmode.bypass_envwhen declared, else a session_id + hook-name token-subset + nearest-timestamp heuristic with an unattributed bucket), and a best-effortstrike_countoutcome-proxy joined via the strike-counter's per-session state. Adds three sections to the existing report without restructuring the Per-Hook Fire Counts table. (#710, PR #731)pr-state-refetch-gate: newPreToolUse(AskUserQuestion)hook — when a menu's question/header/option text co-occurs a PR number with a merge-intent keyword (EN merge/squash, KO 머지), it re-fetches live PR state viagh pr view --json state,mergeStateStatusand surfaces an advisory (or blocks underPRAXIS_PR_STATE_REFETCH_STRICT=1) when the PR is already MERGED or CLOSED, preventing a stale merge-approval question against a PR that no longer needs it. (#733)destructive-bash-guard: detectsgit revert,gh pr close,gh issue reopencommand patterns and logs anexternal_write_revert_countoutcome-proxy signal to the fire-ledger (command-pattern detection only, not state-reversal proof). (#737, #739)bypass-review:rework_commit_countoutcome-proxy signal — correlates git commits to fire-event sessions via aSession-Id:commit trailer (exact match, manual convention) with a 15-minute timestamp-heuristic fallback for commits lacking the trailer, mirroringbypass_count's exact-map + heuristic-fallback structure. Trailer coverage is forward-only (not retroactive); both limitations are documented inOUTCOME PROXY LIMITATIONS. (#737, #741, PR #742)askuserquestion-loop-signal: newPostToolUse(AskUserQuestion)hook appending areclarification_loop_countoutcome-proxy signal per call. Uses a coarse per-session call-count proxy (≥2, no topic clustering) to avoid adding fields to the shared fire-ledger record schema; the same-topic accuracy limitation (false positives on multi-topic sessions, false negatives across session/compaction boundaries) is documented inOUTCOME PROXY LIMITATIONS. Addsrecord_session_fire()tohooks/_lib/_fire_ledger.pyas a RICH single-event writer for standalone hooks needing realsession_idattribution outside the Bash dispatch group. (#737, #740, PR #743)
Fixed
block-commit-without-codex-reviewhook: the codex-review-wrap detection scan now also reads each subagent transcript (<session-dir>/subagents/agent-*.jsonl), so aSkill(praxis:codex-review-wrap)call made inside a Task/Agent-dispatched subagent is credited — a root-only scan was structurally blind to review work a subagent actually performed. (#730, PR #738)retrospect: Stage 2 now requires eachis_errortool-result body to be read individually (no category inference from the tool name or a preceding result), with atool_census/is_error_countcross-check — closing the under-enumeration gap where a single category-collapsed row passed the Gate-7is_error_enumstructural check. (#720, PR #729)
Changed
docs: CONTRIBUTING.md gains a pre-PR version-bump checklist (VERSION + generated manifests + a CHANGELOG section the release workflow can extract) (#728); an evidence-based hook prune audit (docs/hook-prune-audit.md) scoring keep/merge/drop per hook (#735); markdown tables realigned for MD060/MD056 (#736).
[7.0.0] - 2026-06-28
Major release. Removes the cmux-browser skill, which has migrated to the
cmux repository (manaflow-ai/cmux) where it lives closer to the cmux app it
automates. Removing a public skill + its installed CLI is a breaking change
for consumers (/praxis:cmux-browser and the ~/.local/bin/cmux-browser
command both disappear), so this is a semver major per the project's
convention for skill removals.
Removed (BREAKING)
-
cmux-browser: skill and its pass-through CLI wrapper removed from praxis. The cmux-side documentation skill is maintained inmanaflow-ai/cmux; the praxis wrapper (~/.local/bin/cmux-browser, selector-error usage hints) is dropped because the cmux skill invokes the nativecmux browserCLI directly. The session-management cmux-* skills (cmux-delegate,cmux-recover-sessions,cmux-resume-sessions,cmux-save-sessions,cmux-session-manager) are unaffected. (#726)Upgrade note: if you installed praxis CLIs via
scripts/install.shon a prior version,~/.local/bin/cmux-browseris now a dangling symlink. Remove it manually (rm ~/.local/bin/cmux-browser);scripts/verify-symlinks.shwill also flag it asDANGLING.
[6.3.3] - 2026-06-25
Patch release. Hardens retrospect suppression-ledger handling and adds the externalized critic re-scan audit trail.
Added
retrospect: conditional externalized critic re-scan tier after the MEMORY.md repeat scan, withcritic_diff:recorded in the Stage 3 suppression ledger whether the tier runs or is skipped (#702, PR #704)
Fixed
retrospect-mix-checkStop hook: Gate-8 now requires thecritic_diff:ledger line alongsideworst_agent_failure:andself_adversarial:, so Stage 3 cannot silently omit the conditional critic tier outcome (#702, PR #704)retrospect: Gate-8 self-incrimination and ledger-laundering hardening for suppression-ledger reports (#700, #703)
[6.3.1] - 2026-06-16
Patch release. Closes the retrospect Stage-3 fence-omission bypass (#666).
Fixed
retrospect-mix-checkStop hook: a free-form / localized Stage 3 report that omitted the<!-- retrospect:distribution begin -->fence evaded all identifier checks, so the hook exited 0 and every gate (Gate-1..7, incl. the post-compaction Gate-7) silently no-op'd — "the gate exists but does not fire", one level deeper than "rule exists ≠ retrieval". The gate now anchors on a session-scoped retrospect-active marker (set at skill-invocation time, format-independent) and blocks onmarker AND table-shaped AND no-fence AND not-Stage-4, so the fence can no longer be omitted to bypass the gates. Prose-only pre-Stage-3 clarification stops still pass through (#666, PR #667)
Added
retrospect-active-markerpreflight hook (multi-event:PreToolUse(Skill)+UserPromptSubmit): maintains a session-scoped marker recording that a retrospect Stage 3 report is owed in the current turn, independent of the agent's output format. Foundation for the #666 gate above (#666, PR #667)
[6.3.0] - 2026-06-11
17 PRs since 6.2.0. Minor release. Headline changes: a reachability gate for
applied-on-branch claims (#661), the readonly-verify-deferral-gate Stop hook
(#642), a post-compaction receipt gate for retrospect (#639), and automated
GitHub Releases from CHANGELOG (#631). Plus the #647 audit follow-ups
(stop-hook JSON signal unification, fail-open coverage, transcript-utils
consolidation) and CI supply-chain hardening.
Added
merge-state-claim-gatehook:appliedclaim kind — a reachability gate for "X is applied on branch B" claims in the final message. General state queries no longer release an applied claim; only reachability evidence (git merge-base --is-ancestor, a same-command--jsonstate+baseRefName query,git branch --contains) does. Companionexternal-write-falsify-checkCheck 4 requires a reachability probe for same-line branch+applied claims in external write bodies (strict mode viaPRAXIS_APPLIED_CLAIM_STRICT=1) (#656, PR #661)block-personal-asset-leakhook: second opt-in marker class — personal-repo<owner>/<repo>references, opt-in viaPRAXIS_PERSONAL_REPO_OWNERS(unset keeps the existing dotfiles-only behavior). Matcher surface extendedBash→Write|Edit|Bashwith lazy fail-open target-repo discrimination and a dotted-hostname guard against worktree-path false positives (#658, PR #659)readonly-verify-deferral-gatehook (Stop, advisory): detects the anti-pattern of offering to run a read-only verification ("should I check?", "진행할까요?") instead of just running it and pasting the result — the inverse of the siblingcompletion-signal-gate(#642)retrospect: Gate-7 post-compaction receipt gate — a session-level Stop-hook structural check that turns the Stage 2 "compaction + readable transcript" prose MUST into a machine-checkable receipt, after the salient-window default recurred in two independent sessions (#600, PR #639)ci: automated GitHub Releases from CHANGELOG —.github/workflows/release.ymlonv*tag push /workflow_dispatchbuilds the release body via the new sharedscripts/extract-changelog-section.sh(13-case fixture test suite included) (#631)tests: behavior test suite forscripts/install.sh/scripts/verify-symlinks.sh— 35 cases covering the detection/conflict branches the happy-path smoke never reaches (#647, PR #660)
Changed
hooks: Stop-hook signal mechanism unified on stdout JSON. The 3 python advisory hooks move from stderr+exit (effectively invisible to the user at exit 0) tosystemMessage/{decision: "block"}JSON — per-hook block behavior unchanged, advisory visibility improved (#647, PR #657)hooks: transcript JSONL scan logic hoisted into a singlehooks/_lib/_transcript.pySoT (public API 7 functions + 1 constant); 9 hooks converted, ~430 duplicated lines removed (#643, PR #652)hooks:@fail_openapplied to the 9 standalone-executed hooks that lacked it; dispatch-covered vs standalone classification documented in DESIGN.md; newcheck-plugin-manifestsRule 15 invariant prevents regression (#645, PR #653)retrospect: SKILL.md split intoreferences/(1,592 → 1,283 lines) — normative body retained in place, report template / worked examples moved to reference docs (#646, PR #654)docs: ARCHITECTURE.md gains an up-front "Architectural shape" section naming the 4 wiring patterns with anchor links (#648, PR #649); README prose converted to English with CLI docs synced (#637)ci: GitHub Actions pinned to commit SHAs (#633);github/codeql-action3.36.2 → 4.36.2 (#635);gitleaks/gitleaks-action2.3.9 → 3.0.0 (#634)
Fixed
retrospect: Stage 1.5 Signal-4 index byte threshold lowered below the observed host load budget (PRAXIS_RETROSPECT_INDEX_BYTE_THRESHOLDdefault 30720 → 24000) and an event-driven trigger added — an observed host truncation warning now fires Signal 4 regardless of the numeric thresholds (#651)- audit LOW batch (#647, PR #655) —
session-intenthook state write made atomic viatempfile.mkstemp+os.replace(H7); over-general barecmux-delegatetriggers"delegate"/"new session"narrowed to 5 compound phrases (S1); retrospect frontmatter delegate agent names qualified tooh-my-claudecode:canonical form (S4); advisory-nudge "Never block" INDEX.md wording corrected to state the 2 exceptions (H1)
[6.2.0] - 2026-06-05
24 PRs since 6.1.3. Minor release. Headline changes: the single-process hook
dispatch runner (ADR-0002) collapses the (PreToolUse, Bash) hook group into one
process, and block-pr-without-precommit-evidence gains a --body-file
path-not-found diagnostic. Plus retrospect / falsify-gate fixes and CI hardening.
Added
block-pr-without-precommit-evidencehook: a distinct--body-file not founddiagnostic. When--body-filenames a path absent on disk (a relative path resolves against the hook's own cwd, not the PR worktree) and no inline body is present, the hook now emits a path-not-found message advising an absolute path instead of the misleading generic token-missing block (#608, PR #624)
Changed
hooks: single-process dispatch runner (ADR-0002). The(PreToolUse, Bash)hook group now executes through onehooks/_dispatch.sh→_dispatch.pyprocess instead of N separate wrapper invocations, cutting per-Bash-call fork overhead. Each dispatched hook's behavior is unchanged. ADR (#614), runner (#615), build wiring (#616), finalize (#619), orphaned dispatch-only wrapper removal (#618, PR #620)check-plugin-manifestsCI: two new invariants — opt-in wrapper byte-identity (Rule 6c) guardingexternal-write-falsify-check.shagainst stale/missing drift (#605, PR #621), and docs/hook redirect-stub parity (Rule 14) requiring a byte-identical stub per hook dir and blocking orphans (#606, PR #622)hooks: shared-_libconsolidation — option-text collection (#601) and git-argv parsing (#597) hoisted into_libfor cross-hook reuseskills:bypass-reviewdemoted from skill to CLI tool (noSKILL.md; not invocable as/praxis:*) (#583); in-body Triggers bullets retired in favor of frontmatter (#593); CLI script list single-sourced (#581)ci: workflows consolidated and triggers deduped (#592); reviewdog inline static-review actions added (#588)
Fixed
output-block-falsify-advisoryhook: the deny/ask messages now state the line-start (startswith) requirement, so aFalsified:placed mid-line no longer triggers the same opaque ×2 block (#598, PR #623)retrospect: friction pre-scan now full-enumerates a readable transcript even when a compaction summary is present, rather than defaulting to the summary's salient narrative; the verbal-summary fallback is restricted to a genuinely unreachable transcript (#600, PR #625)block-rename-sweep-survivorshook: the survivor-scan subprocess call now has a timeout (#609)hooks: scope-confirm log routed to the host-neutralpraxis_homestate dir (#612)skills:restore-sessionstrigger deduped (#589);cmux-resumeIron Law corrected (#586)docs:codex-review-wrapcitations corrected (#610); the missing[6.1.2]changelog entry backfilled (#611)
Security
ci: credential persistence disabled inactions/checkout, so theGITHUB_TOKENis no longer left in the runner git config after checkout (#596)
[6.1.3] - 2026-06-04
Added
retrospect: 5th deterministic pre-scan laneself_correction— detects a mistake the agent caught and self-corrected mid-session (same intent + changed oracle/target/basis + prior result wrong not errored), the event the narrative pre-scan is most likely to self-servingly omit. Signature scan → per-candidate LLM judge → genuine self-corrections promote to friction events (origin: self_correction); every judged drop is recorded in aself_correctionledger, and the ledger fence is emitted even on the 0-friction early-exit path. The fence lives outside theretrospect:distributionboundary, so the Stop-hook parser is unaffected (#576)retrospect: three honest-labeling improvements rooted in "form-compliance crowding out intent" — (1) Stage 2 pre-agent artifact probe (read a directly-readable artifact before the MANDATORY tracer call and fold the confirmed fact into the briefing, or recordprobe skipped:), (2) per-finding behavioral-label falsification (a dual-nature finding narrowed to a lonebehaviorallabel must carry abehavioral-label-justify:line or list all categories), and (3) a Stage 1.5 carry-forwardprobe-unrunnablebranch (retain-by-default + bounded-drop escape viaPRAXIS_RETROSPECT_UNRUNNABLE_DROP_CYCLES, default 3). Prose-only; Stop-hook parser unaffected (#577)
Fixed
block-sciomc-finding-commithook: the finding-marker scan now parses the transcript role-aware (JSONL per-entry) instead of grepping the raw tail as text. The marker corpus is restricted to assistant messagetextblocks andAgent/Tasksubagent tool-results; markers inside user turns, system-reminder blocks, orRead/Skilltool-results that merely load a SKILL.md documenting the token schema no longer self-trip the gate. The consensus-refetch check still scans the full ordered stream after the finding, so agh pr view … --json bodyrecorded as an assistant Bash tool_use still satisfies the gate (#573, PR #575)retrospect: Stage 1.5 hygiene cursor now guards against multi-session lost-update. A new Cursor write mandate re-reads the on-disk.omc/state/retrospect-hygiene-cursor.jsonbefore persisting and, when a sibling session advanced the cursor since this session's entry read, union-merges thenotecarry-forward + scan trail + batch pointer instead of plain-overwriting. Previously two interleaved/retrospectruns clobbered each other's findings — the second session's Write silently dropped the first session's carry-forward, breaking the Stage 1.5 carry-forward guarantee under concurrency (#568)
[6.1.2] - 2026-06-02
2 PRs since 6.1.1. Fix-only release — no new hooks or skills.
Fixed
retrospect: Stage 1.5 hygiene cursor now guards against multi-session lost-update. A new Cursor write mandate re-reads the on-disk.omc/state/retrospect-hygiene-cursor.jsonbefore persisting and, when a sibling session advanced the cursor since this session's entry read, union-merges thenotecarry-forward + scan trail + batch pointer instead of plain-overwriting. Previously two interleaved/retrospectruns clobbered each other's findings — the second session's Write silently dropped the first session's carry-forward, breaking the Stage 1.5 carry-forward guarantee under concurrency (#568, PR #569)commit-title-format-checkhook:release:prefix now whitelisted forgh pr createtitles only. The dev→prod release PR conventionrelease: Production Deploy (YYYY-MM-DD)was blocked becausereleaseis not a Conventional Commits type and the pattern enforces a lowercase description. The whitelist is scoped togh pr create—git commit -m "release: ..."andgh issue create --title "release: ..."still block (Conventional Commits enforced) (#570, PR #571)
[6.1.1] - 2026-06-02
Added
block-personal-asset-leakhook: PreToolUse(Bash) advisory that scansgh issue/pr create|comment|edit|reviewbodies for an absolute home-dotfiles path (/Users/<name>/.claude/...,/home/<name>/.config/...) and nudges to use the portable~/form or remove it — a deterministic backstop for the literal personal-asset path-leak form (semantic surfacing, MCP writes, reverse-direction, tilde, and/projects/worktree paths are out of scope). Every body flag is scanned, relative--body-fileresolves against the payload cwd, and--body "$BODY"heredoc-variable bodies are resolved before the scan. Advisory by default;PRAXIS_PERSONAL_LEAK_STRICT=1escalates to a block (#565)
Changed
merge-menu-review-options-advisoryhook: context-aware reviewer routing (L2) — when a merge-decision menu lacks a review option, the advisory now tailors which reviewer it recommends to the change's nature (security > data > design > ux priority) by reading the branch diff, with nearest-fork-point base resolution so routing is correct on multi-base repos. Fail-open to the static generic levers; subprocess budget capped under the manifest timeout (#564)
[6.1.0] - 2026-06-01
Added
merge-state-claim-gatehook: Stop advisory when the final assistant message asserts a completed merge/PR/issue/worktree state (EN/KR) but no freshgh pr|issue view/list/mergeor GitHub-MCP pull_request/issue read appears in the recent transcript — escalates the repeatedly-hallucinated merge-state-claim family from memory to a structural gate. Fail-open,PRAXIS_MERGE_CLAIM_BYPASS/PRAXIS_MERGE_CLAIM_STRICT(#503)push-remote-ref-verifyhook: PostToolUse(Bash) advisory aftergit pushwhen the remote branch tip did not advance to the pushed SHA — guards the rotating-endpoint silent-divergence failure where a second push in a session reaches a different proxy endpoint, prints* [new branch], exits 0, but never lands on the intended remote. Fail-open,PRAXIS_PUSH_VERIFY_BYPASS/PRAXIS_PUSH_VERIFY_STRICT(#539)pre-output-falsification-gatehook: advisory when an AskUserQuestion (Recommended)/evaluative option is surfaced under recent negative evidence without a disconfirming probe phrase in the question body, and when a read-only status command (status/get/list) repeats ≥3× in a session (#487)retrospect: Stage 2 multi-oracle completeness gate (Gate-6) + Stage 1.5 oracle-annotation signal 5 — stored-value falsification requires same-oracle confirmation; different-oracle results emit a separate cohort-shift finding (#489)
Changed
docs: added a single hook environment-variable registry (docs/bypass-vars.md) cataloguing allPRAXIS_*/CLAUDE_HOOK_BYPASS_*vars by kind (opt-out / strict / config / path-test) with their owning hook, plus a Guard Parser Boundary section inSECURITY.mddocumenting that the token-based guards do not decode interpreter strings (eval/bash -c/sh -c/python -c/find -exec) — explicit threat-model boundary instead of a regex arms race (partial of #500; long-term parser-fragility tracked separately)hooks: durable cross-session state now defaults to the host-neutral~/.praxis/stateinstead of the Claude-nested~/.claude/state/praxis(strike counter, phantom-path markers, and the strike state read bypostcompact-context).PRAXIS_STATE_DIRstill overrides the base (back-compat); strike-counter migrates existing state across once on first run, and the readers fall back to the legacy location. New_pathshelpers (praxis_state_dir/praxis_cache_dir/legacy_state_dir) + layout docdocs/runtime-state-layout.md. Volatile${TMPDIR}/praxis-*caches are swept in a follow-up (partial of #527)hooks: swept the remaining 20_main_inner/main()hand-rolled fail-open wrappers onto the shared@fail_opendecorator (hooks/_lib/_hook_runtime.py), so all blocking/advisory Python hooks now use a single fail-open pattern. No behavior change; each hook's copied fail-open test block is replaced by amain.__wrapped__structural assertion (behaviour is verified once intests/test_hook_runtime.sh) (#526)
[6.0.3] - 2026-05-29
1 PR since 6.0.2. Hook false-positive fix only — no skill or hook-behavior additions.
Fixed
hook:pre-edit-protected-branch-guardnow skips gitignored paths (git check-ignore). Gitignored files (runtime state under.omc/state/, build artifacts, caches) can never be committed/PR'd, so the Issue-Driven Worktree Workflow the guard enforces is categorically inapplicable — blocking them was a false positive..omc/plans/was already exempt but the sibling.omc/state/was not; thecheck-ignorerule generalizes beyond hardcoded paths (#493)
[6.0.2] - 2026-05-29
1 PR since 6.0.1. Packaging fix only — no skill or hook behavior changes.
Fixed
manifest: the generated Claudeplugin.jsondeclared onlyskills, so Claude Code registered no hooks and the entire suite stayed dormant while skills loaded. Added the missinghooksfield (cursor/opencodealready had it; regression from the ADR-0001 Phase 2 layout move) (#491)
[6.0.1] - 2026-05-29
12 PRs since 6.0.0. All additive (new always-on/advisory hooks, session-management refinements) or internal (refactor, docs) — no breaking changes, no removed skills or hooks.
Added
inject-post-compact-session-contexthook: re-injects session context after a context-compaction event (#482)- destructive-bash-command guard hook (#478)
- sensitive-credential-file write guard hook (#477)
- advisory nudge for
&&-chained inspection commands (#476) cmux-resume: hostname mismatch gate (#474)cmux-delegate: handoff synthesis (#462)- skill-surface freeze gate (
scripts/) (#473)
Changed
recover-sessions: summary-based display name (#475)hooks: extract shared emit-decision helper (#471)
Fixed
retrospect: mandate cursor read + carry-forward in Stage 1.5 (#485)
Docs
retrospect: clarify rule-violation boundary fordismissed_candidates(#484); specify Stage 2.7 scope window for trigger detection (#483)
[6.0.0] - 2026-05-27
19 PRs since 5.2.0. The headline is the ADR-0001 hook-layout migration (phases 1–3): every hook moved into a role-dir collocation layout (hooks/<role>/<name>/{impl,spec}) with manifest-driven generation of the per-platform hooks.json. On top of that, several new always-on enforcement gates (commit-title / branch-name / codex-review-on-commit / worktree-edit / child-repo-issue) and the bypass-telemetry suite (Phase 1 hook + Phase 2 review CLI) change commit/PR/write-time behavior for all users — semver major for the structural reorganization and the new gating surface.
Added
block-commit-without-codex-reviewhook (PreToolUse(Bash), claude-host): hard-blocks contentgit commitwhenpraxis:codex-review-wraphas not been invoked this session; escape via[skip-codex-review]token orCLAUDE_HOOK_BYPASS_CODEX_REVIEW_GATE=1(#425, #426)bulk-write-memory-checkpointadvisory hook (PreToolUse(Edit|Write|NotebookEdit)): nudges a memory re-read on the 2nd write to a SoT path (vault/, wiki/, .claude/, skills/, AGENTS.md/CLAUDE.md); always exits 0, bypass viaPRAXIS_BULK_WRITE_BYPASS=1(#443)bypass-reviewtelemetry review CLI (Phase 2): read-only aggregation over the bypass-telemetry JSONL — groups by tool, surfaces most-bypassed rules, highlights bypass-then-error events (#456)bypass-telemetryPostToolUse hook (Phase 1): records bypass env-var usage to~/.praxis/telemetry/(names only, values redacted) (#454)skill-gatehook for external commands (#453)worktree-edit-gatehook (#452)- child-repo issue-creation block hook (#451)
- branch-naming convention enforcement hook (#450)
- commit-title format enforcement hook (#449)
- autonomy-vs-convention doc template (#447)
Changed
- ADR-0001 hook-layout migration: phase 1 test/wrapper prep (#424), phase 2 role layout + manifest (#432), phase 3 spec collocation (#435)
- standardized hook block-message format (#444)
retrospect: 0-friction audit-trail enforcement (#446)
Fixed
block-commit-without-codex-review: harden the command parser — close grouped ((git …)), command-substitution ($(git …)), and separator-chained (true;git …) bypasses (#455)block-sciomc-finding-commit: harden finding detection (#448) and close commit bypasses (#445)
Docs
- recorded the ADR-0001 phase 3 merge in
docs/adr/0001§7 (#442)
[5.2.0] - 2026-05-26
18 PRs since 5.1.0 — 9 feat plus fixes, refactors, tests, and docs. All additive — semver minor.
Added
block-pr-without-precommit-evidencehook (PreToolUse(Bash)): blocks PR creation when no pre-commit verification evidence exists in the session (#414)- completion-signal retrieval gate hook: forces rule retrieval when a completion signal is emitted (#399)
gh --jsonPreToolUse validator hook + accompanying test suite (#397 #410)- label-existence verifier hook: confirms
gh pr/gh issuelabel values actually exist in the target repo before the call (#388) cross-check-hook-index-and-hostsscript: cross-validates the hook index against per-hookhostsclassification (#416)retrospect: path-probe gate on the write path (#398); size-threshold signal added to the Stage 1.5 hygiene pass (#390)codex-review-wrap: Source-of-Truth (SoT) audit step (#396)- Recommended-marker tier upgraded from
asktodeny(#394)
Changed
gh-json-validator: bypass env-var naming aligned with sibling hooks (#411)- dup-search gate: extract the search topic before running the overlap match (#389)
- rule 2 scope narrowed/namespaced to the praxis cwd (#409)
Fixed
- Removed the redundant
hostsarray from all-host hooks (#408 #417)
Docs
- Corrected
Supported hoststoclaude, codexfor two gated hooks (#418) - Indexed 7 previously-missing hooks in ARCHITECTURE (#407 #415)
[5.1.0] - 2026-05-21
2 PreToolUse(Bash) blocking hooks from the Hub #2242 retrospect — additive, semver minor.
Added
block-sciomc-finding-commithook (PreToolUse(Bash)): blocksgit commit(not amend/merge/revert/cherry-pick/--allow-empty) when transcript tail contains sciomc/reviewer finding markers (sibling-deviant,Stage N analysis/finding/complete,[FINDING:,[STAGE_COMPLETE:,scientist-agent,deep-dive,cross-validation,의미 mismatch) AND nogh pr|issue view ... --json bodyor explicit ratification token was emitted AFTER the most recent finding. Escape hatches:[user-approved]/[ratified-by-user]token in commit message,CLAUDE_HOOK_BYPASS_SCIOMC_GATE=1env var. Backs the "User-stated design is RATIFIED; AI analysis findings are DRAFTS" rule (#374 #383)block-gh-issue-create-without-dup-searchhook (PreToolUse(Bash)): blocksgh issue createwhen no priorgh search issues/gh issue list/gh issue viewexists in the same session transcript, OR when prior searches exist but no extracted keyword from--titleoverlaps with any prior search args. Escape hatches:[dup-checked]/[no-search-needed]token in title, personal-repo carve-out (--repo devseunggwan/*),CLAUDE_HOOK_BYPASS_DUP_GATE=1env var. Backs CLAUDE.md "GitHub Issue Hygiene" (#374 #383)
[5.0.0] - 2026-05-21
3 hook removals labeled BREAKING force a semver major bump; also 2 feat + a repo-wide identifier sweep.
Added
block-manufactured-action-menuhook: affirmative-form option-label markers (그대로 진행,execute now,as instructed) extend the question-form set so a clarification menu surfaced after an explicit directive is caught from the option-label side;execute/run it/implementadded to the command-signal set as the directives that pair with them (#377 #379)retrospect: Stage 4 Action 6 (hook code) creates a dedicated worktree when the hook target repo is on a protected branch, so the inline write is not blocked bypre-edit-protected-branch-guard(#375 #380)
Removed (BREAKING)
trino-describe-firsthook + paired-pre/-postshims + spec + tests (Trino MCP-specific gate; not generic enough for upstream praxis)trino-catalog-gatehook + paired-postshim + spec + tests (Trino MCP-specific catalog gate)cross-repo-worktree-preflighthook + shim + spec + sibling test (org-specific worktree mismatch detector)
Changed
- Repo-wide identifier sweep:
laplace-*/hubctl/windmill/signoz/channeltalk/airflow/laplacetec/removed from hook code, docs, SKILL.md examples, and test fixtures cross-boundary-preflightadvisory text: internal-identifier example list genericizedtests/test_retrospect_routing.sh:PRAXIS_RETROSPECT_FORBIDDEN_PATTERNSenv var lets forks extend the banned list without forking the test (#376)
[4.1.0] - 2026-05-21
5 feat + 1 refactor + 1 fix + 1 docs accumulated since 4.0.0. All additive — semver minor.
Added
output-block-falsify-advisoryhook: T2 confidence-anchoring framing detection — scans optionlabelORdescriptionfor EN tokens (safer/safest/clearly/natural fit|choice/obvious choice/default to|choice/prefer this/barerecommend(?:ed|s)?) and KO substrings (안전한/가장 안전/자연스러운/당연히/분명히/추천/기본값) alongside the existing literal(Recommended)/(추천)marker check; sameFalsified:line satisfaction; emits distinctANCHORING_ASK_MSGso downstream parsers can distinguish which tier escalated; description-only(Recommended)and lowercase(recommended)now ask-escalate (intentional upgrade) (#369 #371)memory-hinthook: event coverage extended fromPreToolUse(Bash)only toBash | Edit | Write | NotebookEdit | AskUserQuestion; per-memoryhookEventsfrontmatter opt-in (default[Bash]preserves prior behavior); ASCII-keyword split pattern in mixed Hangul/ASCII text (#358 #361)retrospect: Stage 1.5 hygiene + Stage 2.7 audit pass (#365 #366); pre-scan checklist + per-finding ledger (#363 #370); hookable contract integration withmemory-hint(#356 #360)
Changed
momentum-rule-retrieval-gatehook: dynamic memory load viamomentum: [merge|dispatch|force-push]frontmatter on individual memory files; hardcoded memory cites removed in favor of trigger-family-based opt-in; static force-push fallback retained so empty memory dir still emits the actionable rule line (#359 #362)
Fixed
retrospectAction 3: symlinked global~/.claude/CLAUDE.mdtargets are now detected viarealpathand routed through the staging file →AskUserQuestion3-option (apply / 수정 / 보류) approval path; project-localAGENTS.mdcontinues to use directEdit(#367)
Docs
docs/hook/memory-hint.mdcross-linked fromretrospectSKILL.md Stage 4 Action 1 so reviewers see the hookable contract at the memory-write call site (#368)
[4.0.0] - 2026-05-18
Milestone release: 4 new PreToolUse/PostToolUse hooks, codex-review-wrap critic pre-lock probe gate, retrospect Gate-5 mandate, and 4-round codex review refinements on hook batch (#347 #348 #349 #350 #351). User-directed major bump (no breaking API changes; cumulative additions since 3.17.0 warrant milestone marker).
Added
bash-worktree-existence-advisoryhook: pre-Bash advisory forcd/pushd/(cd ...)to missing worktree paths; heredoc fused-token forms, pushd ±N stack index, subshell-local cwd tracking, trailing)strip (#322 #337 #347)trino-catalog-gatehook: PreToolUse 3-part SQL catalog gate (catalog.schema.table); items 1-3, 6-9 refinements + dead constant removal (#321 #336 #350)external-write-path-existence-checkhook: advisory forgh issue/prbody files referencing repo paths that do not exist on disk; inline-code path extraction,_is_phantomos.sep prefix fix, first-token split,#fragment/?querystrip, fenced-block guard (#324 #335 #348)jq-config-empty-dict-advisoryhook: advisory for jq commands targeting empty/missing config dicts;-n/--null-inputmulti-path handling,_SUBST_NULL_INPUT_REoperand-aware scrub, combined-short flag-rn/-nr, token boundary lookbehind/lookahead, broken-symlink lexists (#338 #351)momentum-rule-retrieval-gatehook: pre-dispatch/pre-merge momentum gate (#326)version-bump-evidence-checkhook: changelog evidence requirement before posting external version-bump issues/PRs (#327)codex-review-wrap: Step 5f spec refinements (#339); Step 5g critic pre-lock probe gate with negative-claim enumeration + probe citation format + worked examples F1/F2 (#346 #349); diminishing-returns advisory at N rounds; grep exit=1 vs exit=2 error-table clarificationretrospect: Gate-5 mandate for step 7 scan (#325); gate-4 verdict wire to mix-check (#317); falsify-before-recommended label check (#233)Issue & PR Conventionssection in CLAUDE.md: partial-scope PRRefs #Nvs full-scopeCloses #N(#352)
Changed
pre-edit-protected-branch-guardhook: detect PR-workflow repo via recent commit(#N)suffix signal before write-protect (#239)external-write-falsify-checkhook: structural tokenization migration
Fixed
bash-worktree-existence-advisory: subshell cwd leak, spaced subshell form, pushd cwd leak (R1-R4 codex review fixups under #347)external-write-path-existence-check: fenced-block PR body sample false-positives, NUL-binary detection, lstrip./quirk (R1-R4 codex review fixups under #348)jq-config-empty-dict-advisory:--arg name -nvalue-operand handling,_scan_subst_for_config_paths-n missing path (R1-R4 codex review fixups under #351)trino-catalog-gate:_CATALOG_REF_NCunused constant removed (#350 codex round 1)
Docs
CLAUDE.md/AGENTS.mddisambig: project vs global references indocs/hook/and skills (#334)
3.17.0 - 2026-05-16
Added
pre-edit-md-escape-advisoryhook: warns on Edit of.mdfiles with escape-sensitive tokens without a prior Read (#238)output-block-falsify-advisoryhook: nudges output-block falsification gate before surfacing(Recommended)options (#225)pre-gh-pr-create-dedup-gatehook: runsgh pr list --searchbeforegh pr createto surface duplicates (#240)advisory-wrapper-signature-verifyhook: warns before writing wrapper code with delegation patterns (#243)block-manufactured-action-menuhook: warns when AskUserQuestion surfaces a proceed-menu after a command-intent signal (#244)- Shared compound-Bash cascade advisory across all block hooks (#244)
retrospect: falsify-before-recommended-label check (#233)
Changed
pre-edit-protected-branch-guardhook: detect PR-workflow repo before protecting write (#239)
Fixed
block-ask-end-optionhook: bare Korean end-tokens in option labels (#241)codex-review-wrap: forbidSkill("codex:review")probe in Step 4 (#242)block-pr-without-caller-evidencehook: reads body-file for caller evidence (#226)builtin-task-postusehook: scope task-postuse counter per call (#223)
3.16.0 - 2026-05-13
Added
block-manufactured-action-menuhook: block AskUserQuestion proceed-menus after command-intent (#215)external-api-literal-triggerhook: advisory for ALL_CAPS enum candidates and 3-part SQL identifiers without prior retrieval (#216)
3.15.0 - 2026-05-13
Added
block-ask-end-optionhook: detects indirect session-end phrasing (#213)RUNTIME_CONSTRAINTS.md: runtime constraints gate for skill authoring (#212)retrospect: tool output completeness gate (#211)
3.14.0 - 2026-05-12
Added
pre-edit-protected-branch-guardhook: block Edit/Write on protected branches when dirty or after PR-workflow commit (#204)
3.13.0 - 2026-05-12
Added
cross-boundary-preflighthook: block heredoc ingh pr/issue create; checklist on cross-repo--repowrites (#205)
3.12.0 - 2026-05-12
Added
external-write-falsify-checkhook: author-exempt detection for unverified identifiers in mapping tables (#207)codex-review-wrap: sibling-defect cross-check step (#203)
3.11.0 - 2026-05-12
Added
verify-commit-flag-overridehook: denygit commitwith hook/signing override flags (#194)retrospect: backing-repo gate and recommended-label red flag (#206)
Changed
- Hook specs split into individual
docs/hook/*.mdfiles (#196)
3.10.0 - 2026-05-11
Added
trino-describe-firsthook: requireDESCRIBE <table>before Trino MCP query references (#189)block-ask-end-optionhook: warn on mechanically surfaced end options in AskUserQuestion (#193)
3.9.0 - 2026-05-11
Added
session-intenthook: session-scope intent-pivot gate forghmutating commands (#190)
3.8.0 - 2026-05-11
Added
gh-flag-verifyhook: validateghCLI flag-subcommand combinations (#191)
3.7.0 - 2026-05-11
Added
pre-merge-approval-gatehook: surface per-PR approval prompt forgh pr mergein direct sessions (#187)
3.6.0 - 2026-05-11
Added
commit-title-length-checkhook: enforce 50-character commit title limit (#186)
3.5.1 - 2026-05-11
Added
external-write-falsify-checkhook: nested MCP body and positionalghbody detection (#179)
3.5.0 - 2026-05-11
Added
external-write-falsify-checkhook: advisory opt-in hook for hypothesis-stage text before external writes (#175)
3.4.0 - 2026-05-11
Added
retrospect: Gate-3 evidence robustness audit in Stage 2.5 (#172)
3.3.0 - 2026-05-09
Added
retrospect: explicit backing-repo gate before Stage 4 issue creation (#171)
3.2.0 - 2026-05-09
Added
codex-review-wrap: premise verification and flip detection across review rounds (#170)codex-review-wrap: fallback when codex-companion is unavailable (#166)
3.1.1 - 2026-05-08
Fixed
codex-review-wrap: use direct Node invocation instead of shell wrapper (#164)
3.1.0 - 2026-05-07
Added
block-pr-without-caller-evidencehook: gategh pr createon caller-chain evidence in PR body (#159)
3.0.0 - 2026-05-06
Added
codex-review-routehook: warn on/codex:reviewin multi-worktree repos (#152)memory-hinthook: surface hookable memory entries by keyword at decision time (#150)
Removed
debugskill removed (#157)turbo-complete,turbo-setup,turbo-deliver,cmux-orchestratorskills removed (#155)
2.11.0 - 2026-04-30
Added
retrospect: memory-bias gate with 4-layer reinforcement (#147)
2.10.1 - 2026-04-29
Changed
retrospect: resolves backing repo from skill file location (#145)
2.10.0 - 2026-04-29
Added
completion-verifyhook: require same-turn Bash verification evidence before completion claims (#144)
2.9.0 - 2026-04-28
Added
codex-review-wrapskill: worktree-aware wrapper for/codex:reviewwith multi-worktree disambiguation (#141)
2.8.1 - 2026-04-27
Added
cmux-browserskill and CLI wrapper with SPA hydration wait protocol (#133)
Fixed
strike: scope state directory to praxis-owned path (#137)
2.8.0 - 2026-04-27
Fixed
builtin-task-postusehook: correct false agent-spawn signal for built-in task tools (#135)
2.7.0 - 2026-04-26
Added
block-gh-state-allhook: hard-block invalidgh search --state allflag combination (#132)
2.6.1 - 2026-04-24
Fixed
- Plugin packaging: drop
hooksoverride to avoid duplicate auto-load (#125)
2.6.0 - 2026-04-24
Added
- Multi-platform packaging with generated manifests; build and check scripts (#123)
2.5.0 - 2026-04-24
Added
side-effect-scanhook: pre-Bash scan for mutating commands (git commit/push,gh pr merge/create) (#122)
Fixed
cmux-orchestrator: harden codex result parsing (#121)
2.4.1 - 2026-04-24
Added
turbo-setup: next-step branching guide (#93)strike: gate 3/3 reset on reflection and persuasion (#105)
Changed
- Routing: unify provider regex style across all skills (#120)
Fixed
cmux-orchestrator: replacegrep -oPwith macOS-compatible patterns (#112)
2.4.0 - 2026-04-21
Added
strike/strikes/reset-strikesskills: session-scoped three-strike discipline with Stop hook block (#103)
2.3.3 - 2026-04-16
Added
- Auto-register
completion-verifyStop hook viaplugin.json(#101)
2.3.2 - 2026-04-16
Added
turbo-setup: auto-open cmux workspace after worktree creation (#95)retrospect: tool friction pass and upstream feedback action (#88)
Fixed
- CLI: document codex exec write permissions (#94)
2.3.1 - 2026-04-14
Added
- Multi-provider routing: route tasks to codex, gemini, or claude by keyword (#81)
cmux-delegatev2: account, session, and distribute modes (#59)cmux-delegate:--permission-modeargument (#61)recover: show session UUID in list output (#74)recover: surface filter reasons in output (#75)recover: deduplicate conversation chains (#73)retrospect: surface multi-action improvement proposals (#86)- CLI symlink install + verify script (#76)
Fixed
recover: prefer internal timestamp over mtime (#72)recover: robust/exitdetection via user-only tail (#71)retrospect: deduplicate memory entries before creating (#80)
2.3.0 - 2026-04-09
Added
retrospect: escalation logic and mandatory agent calls (#50)
Changed
- Consolidated workflow into
turbo-completionskill (#55)
Removed
brainstormskill removed (#53)
2.2.0 - 2026-04-09
Added
cmux-delegateskill: delegate tasks to independent cmux sessions (#48)
2.1.0 - 2026-04-08
Added
turbo-implementskill (#44)
Changed
- All skills made project-agnostic (#46)
- Merged
finish-branchintoturbo-deliver
2.0.0 - 2026-04-08
Changed
- Project renamed from
my-skillstopraxis; all references updated (#40)
1.4.0 - 2026-04-08
Added
cmux-save-sessionsandcmux-resume-sessionsskills (#39)
1.3.0 - 2026-03-31
Added
retrospectskill: session retrospect with friction analysis (#37)
Fixed
cmux-recover-sessions: workspace creation and plain mode (#32)
1.2.0 - 2026-03-27
Added
cmux-session-managerskill: daily session lifecycle management (#28)
Changed
recover-sessions-cmuxrenamed tocmux-recover-sessions(#30)
1.1.0 - 2026-03-26
Added
recover-sessionsskill: bulk session recovery after power loss (#18)cmux-recover-sessionsskill: cmux-backed session recovery (#20)- Unified workflow skills: turbo-setup, turbo-deliver, cmux-orchestrator (#13, #24)
pr-dev-to-prodskill: release PR from dev to prod (#3)- Plugin-based architecture for install-claude-stack (#7)
Changed
- Shared scan module extracted from skills (#26)
Fixed
finish-branch: reorder compounding before merge (#16)