Reasonix does not recognize a `max-iters` frontmatter field — the
subagent step budget is derived from the parent's `agent.max_steps`
config in `reasonix.toml` (default 0 = unlimited; finite values yield
parent/2 with min 5). Since a CLI-Anything build typically needs 25–40
tool-call rounds, add a Step Budget section to SKILL.md and a
Configuration Note to README.md advising users to keep `max_steps = 0`
or set it to 64+ to avoid truncation.
- Replace `mcp__codegraph__codegraph_search` / `mcp__codegraph__codegraph_context`
with `mcp__codegraph__search` / `mcp__codegraph__context` to match Reasonix's
StripRawPrefix("codegraph_") naming (SKILL.md, README.md, root README)
- Remove "spawns an isolated Reasonix sub-agent" claim from README.md;
slash command invocation always inlines per Reasonix's RunSkill doc,
isolation is only via run_skill tool invocation
- Keep `runAs: subagent` in SKILL.md frontmatter (correct declaration
for run_skill path) but no longer promise isolation for /<name> path
When installed via the bundled shell scripts, Reasonix reads SKILL.md
directly from ~/.reasonix/skills/cli-anything/SKILL.md. Without runAs:
subagent in the frontmatter, the skill defaults to inline mode, which
runs the entire CLI-Anything workflow in the parent session instead of
in an isolated sub-agent as documented in README.md.
The install_skill API path already included this field (passed as a
parameter), but the source SKILL.md file was missing it, causing
inconsistent behavior between the two installation methods.
Add a new agent adapter for the Reasonix coding agent, following the
same pattern as the existing Codex and Hermes skill adapters.
New files:
- reasonix-skill/SKILL.md — full CLI-Anything methodology mapped to
Reasonix's tool ecosystem (bash, write_file, edit_file, multi_edit,
grep, glob, mcp__codegraph__*, task, web_fetch)
- reasonix-skill/agents/reasonix.yaml — agent interface metadata
- reasonix-skill/scripts/install.sh — macOS/Linux installer
- reasonix-skill/scripts/install.ps1 — Windows PowerShell installer
- reasonix-skill/README.md — installation and usage documentation
- reasonix-skill/REASONIX_SKILL_INSTALL.md — install_skill API reference
Modified files:
- .gitignore — allow reasonix-skill/ directory
- README.md — add Reasonix to supported agent list, project structure,
quick-start prerequisites, and Works with line
Codex P2 + Copilot review of 5790651. One real correctness bug
(error visibility in non-JSON CLI), three defensive cleanups
(thread-safety, log traceback, doc drift). Pre-existing items
already tracked as #327, #328; two more filed as new follow-ups.
1. browser_cli.py fs_ls + fs_grep non-JSON branches now check
"error" in result before falling into the empty-collection
"No elements"/"No matches" path. Mirrors fs_cd. Without this,
`fs ls /nonexistent` displayed "No elements at /nonexistent"
instead of DOMShell's "No such directory" error. (Codex P2)
2. domshell_backend.py _daemon_lane_id capture wrapped in a
threading.Lock; the test-and-set race on the `is None` check
moved inside the lock. Cheap defensive measure for any future
concurrent caller of _call_execute. (Copilot ×3)
3. domshell_backend.py daemon-failure log.warning now carries
exc_info=True so the traceback shows up in diagnosability
output. (Copilot)
4. HARNESS.md dropped the stale `group_id="shared"` reference
(removed in 5790651's R3 fix) and replaced with accurate
_daemon_lane_id-based wording for daemon-no-session callers.
The split-and-check table accuracy (separate pre-existing item)
stays scoped to #328. (Copilot)
Tests: 193 passing locally (was 191 + 2 new for ls/grep error
visibility).
Cc @yuh-yang
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Address @yuh-yang's three R3 blockers on PR #308. All three land in this PR;
the grep parser issue (blocker 3) takes Path B — Python-side rejection with
a clear error message — while the real parseArgs `--` work goes upstream to
a future DOMShell release.
1. fs cat at root no longer raises Python ValueError before reaching
DOMShell. The absolute-root guard added in round 5 was overreaching —
it converted DOMShell's standard "Usage: cat <name>" error into a
Python exception. Guard removed; cat '' now reaches the kernel and
surfaces DOMShell's own error string, restoring pre-migration
behavior. Stale "should raise" tests flipped to "should not raise +
return parseable error result".
2. Daemon-mode/no-session lane handling is now consistent across daemon-
alive and daemon-dead paths. The previous "shared" branch (commit
99d1182) claimed per-connection-default stickiness that doesn't hold
when _daemon_session is None and each call spawns a fresh
ClientSession. Replaced with a module-level _daemon_lane_id captured
on the first daemon-no-session call and reused on every subsequent
call. Works in both paths: alive daemon reuses the id on its
persistent connection; dead daemon's fresh spawns swapToAgentLane()
into the existing Chrome tab-group by id (groups persist across
MCP session boundaries). Stale-lane failure mode (user closes the
group manually) propagates DOMShell's own error — same shape as the
session-bearing path. Replaces the previous-round "shared" test
with first-call-captures + subsequent-calls-reuse tests.
3. Hyphen-prefixed grep patterns now raise a clear Python-side
ValueError instead of silently failing at DOMShell. The current
DOMShell parseArgs treats any arg starting with "-" as a flag —
no "--" separator, no -e <pattern> form — so `grep -r -- -foo`
and `grep -r -e -foo` both fail at the kernel. Tracked upstream as
a parser-limitation issue; the real fix ships with the next
DOMShell release that already justifies a Chrome Web Store
submission. Until then, the wrapper rejects the input with
guidance instead of letting it silently fall through.
191 passing locally (was 189 + 4 new tests - 1 deleted shared-lane test -
1 old cat-root test replaced).
Cc @yuh-yang
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The SKILL.md file should not exist in this repo — it is maintained
in the upstream CloakBrowser CLI project and referenced via skill_md
URL in public_registry.json. Removing it from this PR.
Per review on #335: mock the Godot backend with returncode == 0 and a
parse-error marker in stderr, assert validate_script reports valid=False
and surfaces stderr in errors. Also cover the positive zero-stderr case,
benign stderr noise (warnings), and the nonzero-returncode path.
Verified the parse-error test fails against the pre-fix validate_script
(returncode-only check) and passes with the stderr scan.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>