# 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.

> Ask the user before running any command on this page: each one changes how their agent or repository behaves.

## 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)

State: 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

| Event | Can block | Can rewrite | Fail mode |
| --- | --- | --- | --- |
| pre_tool | yes | no | configurable |
| post_tool | no | no | open |
| tool_failure | no | no | open |
| prompt_submit | no | no | open |
| session_start | no | no | open |
| session_end | no | no | open |
| stop | yes | no | open |
| file_changed | no | no | open |

## 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: https://goose-docs.ai/docs/guides/context-engineering/hooks/

## 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](https://github.com/open-coder-ai/chock/commit/5a4b6287a46e07f9f856d9bbe10622bd1ff2e021) and catalog [1e60d211c1bb](https://github.com/open-coder-ai/chock-catalog/commit/1e60d211c1bb767152c6ab0167932da06ab3a10f).
