Chock.sh Build your plugin

Agents

goose

goose and chock: install methods and steps, what it can enforce, and the evidence behind it.

Install methods: plugin, sync. Agentseam tier block, grade best-effort before a tool runs.

Install methods

  • Plugin: chock install --client goose (ask the user before running it)
  • Repo hooks: chock sync --repo . --agents goose writes .agents/plugins/agentseam/hooks/hooks.json (ask the user before running it)

Install steps

goose (goose)

Tested

The command (ask the user before running it: it builds a plugin of hooks that change how their agent behaves):

chock install --selection <code> --client goose --apply

With --apply, chock runs these steps for goose:

goose discovers ~/.agents/plugins/chock-guardrails as a user plugin, in every project: start a new goose session. There is no command to run (goose plugin install takes a git URL only). To turn it off, add chock-guardrails to disabledPlugins in ~/.config/goose/settings.json.

What it can enforce

Tier
block
Grade before a tool runs
best-effort
Fail mode before a tool runs
configurable
Basis
vendor-docs
Recorded
2026-10-11

Events

EventCan blockCan rewriteFail mode
pre_toolyesnoconfigurable
post_toolnonoopen
tool_failurenonoopen
prompt_submitnonoopen
session_startnonoopen
session_endnonoopen
stopyesnoopen
file_changednonoopen

Ask support

Answers an ask with: block. Honours ask: no. Evidence: tested (tests/test_guard_fail_to_ask.py::test_a_crashed_guard_asks_rather_than_allowing).

Hook timeout

Default 30 seconds, set by the timeout field in s.

Vendor source

Test status

  • Plugin (goose): tested.
  • Repo hooks: untested. A test of the plugin says nothing about repo hooks.
  • Through the plugin install, at hook point plugin-hook: goose 1.55.0 CLI, Windows 11, 2026-10-18. live probe of a chock plugin auto-discovered from ~/.agents/plugins/chock-witness, with Git for Windows' sh on PATH. goose runs every hook with sh -c. Without sh, every tool call was denied, even a harmless git status, with "the hook command failed to run" (on_failure: block). block-no-verify refused a git commit --no-verify shell command before it ran ("Tool call denied by policy hook chock-witness: Blocked by chock policy: block-no-verify"). pin-github-actions refused a write to .github/workflows/witness.yml at the write ("Unpinned GitHub Action detected"). A harmless git status ran (org-plan witness/results/witness-goose-2026-10-18.md, 6316fd3)

Known limits

PreToolUse and Stop are the only events that can block; a block from any other event is ignored. The verdict is the flat {decision: block, reason} body, and a bare allow is silence. No rewrite and no ask: a transform or escalate degrades to a block, never to a silent pass. Fail mode is configurable and only at PreToolUse: a failed hook is fail-open by default, and on_failure: block makes it fail closed -- agentseam's install writes on_failure: block on every hook entry it writes (goose reads it at PreToolUse only). Stop stays fail-open whatever on_failure says, and goose caps consecutive Stop blocks (GOOSE_STOP_HOOK_BLOCK_CAP). stdout is the decision channel, so a handler that prints a log line to stdout reads as no decision. The event name rides under event, not hook_event_name, which is what separates goose's payloads from every other adapter's. PreToolUseResult, BeforeReadFile, BeforeShellExecution and AfterShellExecution are observation-only and parse as unknown; AfterFileEdit is wired as file_changed. SubagentStart/SubagentStop are not emitted. Every plugin hook is spawned as sh -c <command> on every platform, Windows included: hook_command() calls Command::new("sh") with no Windows branch (its only cfg branch swaps in flatpak-spawn on Linux), and the hooks module never reads GOOSE_SHELL, which selects only the developer shell tool's shell (vendor-source: aaif-goose/goose v1.55.0 = 2bcb858, crates/goose/src/hooks/mod.rs:1093-1098; read 2026-10-18). A spawn error becomes a hook failure, "the hook command failed to run" (:725-738, :45), so on Windows sh must be on PATH or, under the on_failure: block that agentseam writes, every tool call is denied, harmless ones included. No hook field picks a per-platform command (the action carries only command, timeout and on_failure, :127-133), so unlike codex_cli's commandWindows no install form works around it. Owner witness run, 2026-10-18, chock's own goose plugin (not a Claude Code plugin), goose 1.55.0 on Windows 11: with no sh on PATH, the guard, the gate and a benign git status were all denied with that hook-failure message, and setting GOOSE_SHELL=powershell changed nothing; with Git for Windows' Git\bin (sh.exe) put on PATH, the benign call ran, the guard (git commit --no-verify) was refused before it ran and the gate (a write of an unpinned GitHub Action) was refused at write (org-plan witness/results/witness-goose-2026-10-18.md at 6316fd3). Instruction files reach it through AGENTS.md. Evidence wanted (to test or overturn this row): https://github.com/open-coder-ai/agentseam/issues/177

Built from engine 5a4b6287a46e and catalog 1e60d211c1bb.