Faster agent workflows and quiet permissions
- Test runs fit the machine. Each merge-gate check gives pytest its share of the cores (cores ÷ check slots) instead of every core. Workers' own pytest runs use 2 test workers. A check that times out now stops its whole process tree.
- The suite runs less often. Passing check results are reused for identical code across branches, the supervisor's checkout and milestone checks.
- Cheaper tool calls, same permission answers.
- The pre-tool hook takes a lightweight path.
- The license is cached instead of read from the Keychain on every Bash call.
- Requests aren't held when no desktop app is connected.
- An answer in the terminal is noticed in about 2 s.
- Pipeline fixes.
- Approved branches no longer fail to merge on stray untracked files.
- graphify runs one rebuild at a time, at low priority, and reuses its cache in new worktrees.
- Rejected branches go back to a resumed worker, and findings outside the worker's task go straight to the supervisor.
- Codex workers stop asking to leave their sandbox for tests. They run
python -m pytestfrom the project's virtualenv. - Workers rarely ask you for permission.
- Combined shell commands are decided part by part.
- A command brindle can't verify goes back to the worker with guidance instead of to you.
- Asks go to the worker's supervisor first.
Replaying 16,750 real tool calls under Autonomous, only 14 reached a person, all of them pushes to main or a release branch.
- Permissions settings open on capability groups (Files, Shell, Git & push, Network, MCP), each with an Allow, Ask or Deny baseline. The Inbox has a new permission card.
- Optional: inferred test scoping. Set
"scoped_checks": "infer"and a worker branch's pytest checks run only the tests its change affects. A full run happens when that can't be worked out, or when conftest, pyproject or a lockfile changed. It's off by default in this release. Every check also gets the changed paths inBRINDLE_CHANGED_FILES.
No config changes needed: checks in .brindle/config.json stays a list of command strings.
Full details: #288, #289.