Devin
Install
nah hook devin install
Restart Devin and inspect /hooks. Remove only nah's handlers with:
nah hook devin uninstall
The installer updates standard ~/.config/devin/config.json, preserves
unrelated configuration, and replaces stale nah 0.x handlers.
Behavior
The local harness shared by Devin CLI and Devin Local in Devin Desktop sends exec, read, write, edit, grep, and glob calls through nah. Definite findings block. Malformed and every other unblocked call delegate to Devin's permission flow.
Boundaries
This does not cover cloud Devin, handoff sessions, legacy Cascade, non-agent
Desktop features, third-party ACP agents, or direct human actions. Alternate
configuration files supplied with --config avoid the standard hook.
Devin's Bypass mode (/yolo) auto-approves normal tools, while Autonomous mode
auto-approves shell and fetch tools. Devin does not document either mode as
disabling PreToolUse, so a loaded nah hook can still block; delegated calls
may execute without a prompt. Exit 2 blocks, while other nonzero hook exits are
logged and continue. The nah adapter deliberately uses exit 2 when its own
guard blocks. Evaluation failure exits 0 with fixed diagnostic feedback.
Devin imports Claude hooks by default, so installing both integrations can
check a call twice. The adapter uses DEVIN_PROJECT_DIR; a persistent shell's
changed cwd is not present in the documented payload. Devin also discovers
project hooks from .devin/hooks.v1.json, .devin/config.json,
.devin/config.local.json, .claude/settings.json, and
.claude/settings.local.json from the working directory through the repository
root. Those hooks can run alongside nah. Other hook sources, loading, future
tool shapes, and runtime failures remain outside nah.
While active, this adapter blocks visible lifecycle commands, mutations to its
standard user config, and child launches using --config to avoid it. Bypass
and Autonomous permission modes do not disable hooks and are not
self-protection findings. The agent is told not to retry protected changes; an
operator can use nah nap from another terminal.
This integration is best effort: runtime APIs and hook behavior can change. After upgrades, verify the latest official upstream documentation linked below, inspect the loaded hook, and test it before relying on nah. See Devin's hook documentation, permission modes, and Devin Local documentation.