Repository navigation
omind 10.3.1
omind 10.3.1 — Grok recalls count as consults, and the commit freshness gate now runs in every harness, not just Claude.
10.3.1
Fixed
- Grok's Claude-hook fast path counts a
use_toolrecall as a consult
(#472).omi-guard.sh
reads.tool_nameonly, and v10.3.0's Grok translation runs in the Python
adapter. On the bash fast path a recall arrives asuse_toolwith
omi__recall-notenested inside, so it is not a consult, and the gate
denies the recall that would have cleared it. The script now accepts
camelCase, unwrapsuse_tool/CallMcpTool, and maps Grok's built-in
names (run_terminal_command,read_file, …) onto the names it already
classifies. A snake_case-onlyuse_toolor built-in name on
--harness claudeis translated the same way, so PostToolUse records the
consult. Listing tools still do not clear the gate, and vault writes are
still not consults. A plain Claude event is unchanged. A dispatcher's
argumentssent as a JSON string is parsed, an empty first payload no
longer hides the real arguments, and a dispatcher with no inner tool name or
an event with no tool is left alone instead of erroring jq. The Python
translator applies the same rules. - The commit freshness gate runs in every harness, not just Claude
(#473). Its checks matched the tool nameBashonly. Antigravity
(run_command), Gemini (run_shell_command), Hermes (terminal), OpenCode
(bash) and Poolside (shell) send their own names, so a commit with no
fetch went through, and the repo-work and global-config checks were skipped
too. The adapter now maps each harness's shell tool ontoBash
(guard.SHELL_TOOL_NAMES), andguard.decidedoes the same for a caller
that builds the action itself. The command is read fromcommand,
CommandLineorcmd, as a string or an argv list (Codexlocal_shell),
by both the PreToolUse path and the PostToolUse retraction, so a failed
fetch under any of these names is retracted. - The no-jq, no-core last resort in
omi-guard.shfails closed for every
shell tool name and for anyuse_tool/CallMcpTooldispatcher. It
matchedBashandrun_terminal_commandonly. A test pins its list to
guard.SHELL_TOOL_NAMES. - A dispatcher whose first name field is empty is still unwrapped. jq's
//kept"", so{"tool_name":"","name":"run_terminal_command",…}stayed
use_tooland its command never reached the Bash path. jq now takes the
first non-empty name, as the Python translator does. - Antigravity resolves the repo from
run_command's ownCwd. It wins
over a top-levelcwdand the workspace root, so agit fetchor
git commitrun in a repo outside the root is judged against that repo. A
JSON-quotedCwdis decoded, and a relative one is taken from the
workspace root.
Tests
- A fetch, then a commit with a multi-line
-mtrailer block, run from a
different repo's cwd, is fresh in every harness that runs the guard
(Claude, Codex, Grok, Antigravity, Gemini, Hermes, OpenCode, Poolside;
MiniMax models run inside these). omind 10.0.2 split that commit at the
newline inside the quotes, lost itsgit -Cpath, and judged it against
the cwd's repo, so a commit right after a clean fetch was blocked. Later
releases fixed that as a side effect; these tests pin it.