# Windsurf (Cascade)

Windsurf (Cascade) and chock: install methods and steps, what it can enforce, and the evidence behind it.

Install methods: 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

- Repo hooks: `chock sync --repo . --agents windsurf` writes `.devin/hooks.json` (ask the user before running it)

## What it can enforce

- Tier: block
- Grade before a tool runs: best-effort
- Fail mode before a tool runs: open
- Basis: third-party-install
- Recorded: 2026-08-26

## Events

| Event | Can block | Can rewrite | Fail mode |
| --- | --- | --- | --- |
| prompt_submit | yes | no | open |
| pre_tool | yes | no | open |
| post_tool | no | no | open |
| stop | no | no | open |

## Ask support

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

## Hook timeout

The vendor documents no default timeout.

Vendor source: https://docs.devin.ai/desktop/cascade/hooks (a hook entry takes command, powershell, show_output, working_directory; no timeout field, default undocumented)

## Test status

- Repo hooks: untested. A test of the plugin says nothing about repo hooks.
- No row in the engine's list of live tests for this agent.

## Known limits

Exit code 2 is the ONLY block signal: no stdout decision protocol, no machine-readable reason, no rewrite. Critically there is NO file-write event -- prompt, terminal and MCP hooks only -- so a write to a memory file is invisible to a hook on this agent. Fail mode is undocumented, so blocking rates best-effort rather than enforced. Payloads name their event in agent_action_name and carry the command, prompt and MCP fields inside tool_info (docs.devin.ai/desktop/cascade/hooks, read 2026-10-13, where the product is now Devin Desktop); the event is inferred from shape only when no name is present. The workspace file install writes, .windsurf/hooks.json, is now the legacy location: the same page says it is used only when .devin/hooks.json is absent or defines no hooks, so a repo whose .devin/hooks.json defines hooks does not run the agentseam ones.


---

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