0.2.3 (2026-04-12)
- flag_groups: use pattern syntax for flag group definitions, support bool flags and value constraints (#300) (ec284c3)
0.2.2 (2026-04-12)
- config: declare version guards with
required_runok_version(#299) (2990a0e) - rules: add
<flag:name>placeholder to inspect every value of repeated and aliased flags inwhenclauses (#278) (2fe0c76)
- update rust crate libc to v0.2.184 (#279) (474b911)
- update rust crate semver to v1.0.28 (#295) (a6ef431)
- update rust crate serde-saphyr to v0.0.23 (#282) (addc72d)
- update rust crate sha2 to v0.11.0 (#272) (5cdf128)
- update rust crate tree-sitter to v0.26.8 (#283) (35e011b)
0.2.1 (2026-04-03)
- cli: support
runok migratecommand to auto-convert deprecated sandbox fs config (#252) (3dccd3e) - sandbox: support read/write sub-sections in sandbox fs config with read denial (#236) (9f06e51)
- command_parser: handle
negated_commandas a transparent container (#266) (3aebc80) - config: add
runok warning:prefix and config file path to deprecation warnings (#242) (1706f2e) - config: remove unused
definitions.commandsfield (#235) (31ebb2c) - test: strip inline tests from remote presets on load (#227) (725cf6e)
- update rust crate clap to v4.5.61 (#241) (42992c9)
- update rust crate clap to v4.6.0 (#245) (39cd8c8)
- update rust crate libc to v0.2.183 (#220) (22e7f27)
- update rust crate serde-saphyr to v0.0.22 (#259) (123c2f1)
- update rust crate terminal_size to v0.4.4 (#268) (14a436a)
- update rust crate tree-sitter to v0.26.7 (#254) (983c835)
0.2.0 (2026-03-15)
- treat
*inside quotes as glob, support\*escape for literal asterisk (#157)
- audit: improve
auditsubcommand output with table format and colors (#200) (490e206) - audit: support audit logging for command evaluation results (#103) (25c6749)
- cli: add
--dirfilter option torunok audit(#207) (71b768e) - cli: add
runok testsubcommand for rule verification (#204) (cfafb18) - cli: add
update-presetscommand (#197) (4c57355) - rules: add typed variable definitions (
definitions.vars) with<var:name>placeholder (#201) (ffee2ec) - rules: support
<var:name>in command position and per-value type (#208) (c5995ae) - rules: support
redirectsandpipevariables inwhenclauses (#203) (a513e1b) - rules: support fused short flag pattern matching (
-n3) (#205) (7a74122) - treat
*inside quotes as glob, support\*escape for literal asterisk (#157) (23c7789)
- cli: reject unknown flags before
--inexec/checksubcommands (#202) (7344abd) - cli: remove
exec --dry-runoption (#216) (155c0d3) - pattern-matcher: skip flag-starting token sequences in
<cmd>placeholder matching (#206) (f706488)
- update rust crate chrono to v0.4.44 (#211) (68bdb28)
- update rust crate semver to v1.0.27 (#212) (81a5251)
0.1.5 (2026-03-12)
- rules: handle
=-joined flag tokens in Alternation matching (#196) (15fe774) - rules: prevent flag negation from being consumed as preceding flag's value (#191) (31b76a8)
0.1.4 (2026-03-11)
- init: warn when other PreToolUse hooks conflict with runok sandbox (#186) (94a506f)
- rules: apply order-independent matching to literal tokens (#177) (e257cad)
- rules: allow flag-only negation to pass with empty command tokens (#179) (1d6c757)
- rules: match
FlagWithValuepatterns against=-joined tokens (#180) (6ebb296) - rules: match flag-only negation patterns against
=-joined tokens (#175) (7cf8eaa) - rules: resolve unmatched sub-commands to concrete actions in compound evaluation (#178) (377f83d)
0.1.3 (2026-03-09)
- config: resolve relative paths based on config file parent directory (#166) (ee1a7c3)
- preset: add file-based locking for concurrent preset cache access (#168) (27c31f4)
- preset: support path specification in GitHub shorthand references (#167) (eff4b56)
- config: resolve preset rules referenced via
extends(#174) (abc5e41) - config: traverse ancestor directories to find project config (#165) (a49f916)
- preset: remove unnecessary mutable reference warning (#169) (c1d9d3c)
- rules: apply order-independent matching to flag-only negation patterns (#171) (9c43c91)
0.1.2 (2026-03-06)
- evaluate command substitutions nested in quoted strings (#151) (af784b6)
- resolve stack overflow in compound command evaluation with command substitutions (#149) (97b46a7)
- rules: stop flag alternation from consuming placeholder as flag value (#154) (24a951a)
- treat
--as a positional literal instead of a flag (#153) (c2f6d72)
- update rust crate dialoguer to v0.12.0 (#158) (9e3cd2e)
- update rust crate tempfile to v3.26.0 (#147) (02fba8a)
- update rust crate tree-sitter to v0.26.6 (#156) (f44c9a6)
0.1.1 (2026-03-02)
- cli: add
--versionflag (#138) (a284a3b) - config: support
runok.yamlfor global config file discovery (#141) (b338d30)
0.1.0 (2026-03-01)
- trigger initial release (c9f190c)
- adapter: add
CheckAdapterfor generic check interface (#53) (cb6dc15) - adapter: add
Endpointtrait and common evaluation flow (#51) (0aee28c) - adapter: implement
ExecAdapter(#52) (36e6453) - adapter: include matched rule, reason, and fix suggestion in deny feedback (#58) (bd8f929)
- adapter: support
Endpointimplementation for Claude Code PreToolUse Hook (#54) (0c0eabf) - cli: add
--dry-runand--verboseoptions toexec/checksubcommands (#59) (f2eee5e) - cli: add
--output-formatoption and rename--formatto--input-format(#95) (5fc9592) - cli: implement
exec/checksubcommands with stdin input routing (#55) (041fc33) - cli: return spec-compliant exit codes per subcommand (#56) (2030cbc)
- cli: support plaintext stdin input for
checksubcommand (#57) (2efb529) - cli: unify
checkcommand input to positional args matchingexec(#96) (e5a3f8f) - config: add config validation (#18) (9421327)
- config: detect circular references in nested extends (#48) (00bcbe3)
- config: expand
<path:name>references in sandbox presetfs.deny(#66) (3fbaf0e) - config: generate JSON Schema for runok.yml via
config-schemafeature (#93) (beacb7f) - config: prefer
$XDG_CONFIG_HOMEfor global config directory (#118) (ff30229) - config: support global and local config merging (#25) (4ecb66c)
- config: support global local override via
runok.local.yml(#105) (c9091d3) - config: support loading local preset files from
extends(#36) (6b5e3cf) - config: support per-project personal config override via
runok.local.yml(#89) (bb9e03a) - config: support remote preset resolution via
git clone --depth 1(#43) (5368ddb) - config: support YAML config file parsing (#6) (c1b3d64)
- define common error types for each layer (#2) (14cb840)
- exec: add dry-run mode to
CommandExecutor(#41) (77eb8ce) - exec: fall back to ask on extension errors (#24) (91395e6)
- exec: support command execution with exit code forwarding via
CommandExecutor(#38) (5c04095) - exec: support JSON-RPC 2.0 communication with extension plugins (#19) (d30c9ab)
- pattern: support alternation syntax in command name position (#91) (6fabb81)
- pattern: support multi-word alternation syntax in command position (#94) (2fdea25)
- pattern: support wildcard
*as command name in patterns (#77) (82c343c) - rules: add pattern-to-command matching engine (#37) (823d96b)
- rules: add rule engine with Explicit Deny Wins priority (#40) (28834e5)
- rules: implement
LexToken-based pattern parser (#5) (556ef10) - rules: implement CEL expression evaluator for when-clause conditions (#8) (227252f)
- rules: implement command string tokenizer (#7) (f780588)
- rules: implement pattern string lexer for tokenization (#4) (397e6d8)
- rules: structure command strings into flags and arguments (#21) (47feaba)
- rules: support command extraction from subshells (#23) (07cafa8)
- rules: support compound command evaluation with result aggregation (#49) (4395c0b)
- rules: support recursive command extraction from control structures (#26) (ac7ac89)
- rules: support recursive wrapper command evaluation (#45) (c6fd568)
- sandbox: implement
SandboxPolicyconstruction and policy resolution (#63) (a77bcca) - sandbox: implement Linux sandbox helper binary (#68) (545ae31)
- sandbox: implement macOS
SandboxExecutorusing Seatbelt/SBPL (#67) (32d7e96) - wrapper: add
<opts>and<vars>placeholders for wrapper patterns (#84) (0d41c66)
- adapter: evaluate extracted sub-command instead of raw input for simplified compound constructs (#87) (0c463b7)
- cli: unwrap
Resultfromshell_quote_joincall inroute_check(#100) (730633e) - command_parser: skip
commentnodes incollect_commands(#88) (9882e01) - command_parser: strip env-prefix variable assignments from command nodes (#90) (c2f7c76)
- command_parser: treat
variable_assignmentas transparent container to exclude bare assignments from command extraction (#82) (ff881b5) - config: preserve global
definitions.pathsduring config merge (#28) (7a30d16) - hook: include sandbox-wrapped
updatedInputforaskdecisions (#81) (75bf7c4) - hook: use
snake_caseserde rename forHookInput(#76) (78f3e39) - linux-sandbox: enforce glob patterns in deny list via bubblewrap (#122) (dd02db7)
- linux-sandbox: remove obsolete
runok-linux-sandbox:prefix from warning messages (#128) (a3862e7) - parser: handle redirects in command rule matching (#102) (10c9e9c)
- pattern: allow literal
[as a command name in patterns (#83) (ce99efe) - pattern: allow wildcard
*in command position to match multi-word commands (#98) (7d0b0ba) - pattern: apply glob matching to literal tokens containing
*(#106) (b95f957) - pattern: match flags inside optional groups in order-independent manner (#97) (6c029e6)
- pattern: match non-aliased flags in order-independent manner (#80) (ebb23e3)
- pattern: prevent flags from consuming literal
]as a value in bracket commands (#85) (68daac1) - pattern: prevent wildcard from matching across shell operators in compound commands (#108) (067ab7e)
- pattern: treat
*inside alternation parts as a glob wildcard (#101) (0ab984f) - resolve ETXTBSY flaky tests on Linux CI by retrying spawn (#32) (6980503)
- rule_engine: resolve unmatched sub-commands in compound evaluation via
defaults.action(#79) (43ba553) - sandbox: fall back to
defaults.sandboxwhen matched rule has no sandbox attribute (#78) (eb53670)
- update rust crate anyhow to v1.0.102 (#117) (ba79bd5)
- update rust crate clap to v4.5.58 (#47) (fca519c)
- update rust crate clap to v4.5.59 (#86) (cc80443)
- update rust crate clap to v4.5.60 (#113) (34219e0)
- update rust crate landlock to v0.4.4 (#69) (9abbb8d)
- update rust crate serde_json to v1.0.149 (#20) (98d5d1a)
- update rust crate serde-saphyr to v0.0.17 (#14) (336b13d)
- update rust crate serde-saphyr to v0.0.18 (#42) (ea3bad4)
- update rust crate serde-saphyr to v0.0.19 (#70) (aa6e315)
- update rust crate serde-saphyr to v0.0.20 (#130) (0f502c2)
- update rust crate sha2 to v0.10.9 (#46) (62c8316)