A hook is a command DataMind Oda runs by itself when something happens in a chat, for example when Oda uses a tool, when you send a prompt, when a chat starts, or when a turn stops. Hooks use the Claude Code hooks format, so hooks written for Claude Code work here too.
Hooks are on by default, nothing is switched off, and no folder is trusted to start with. You manage hooks in Settings > Hooks, directly after Skills. The section is part of the desktop app and the VS Code extension; in the web app it does not appear.
The Hooks settings
Run hooks is the master switch at the top. While it is off, its hint reads When off, no hook runs in any session.
Your hooks is your own hooks file; its hint reads They run in every folder.
Then one group per project folder, with its trust state and the hint They run in sessions in this folder.
Each hook shows its event, the calls it matches (every call when it has no matcher), its command with any arguments, its status message if it has one, and its own switch.
The Recent runs ({count}) button under a hook opens its newest runs; a hook with none shows No runs yet.
Open file opens a file and creates it when it does not exist yet; History opens its saved versions.
A file that does not exist yet carries the Not created yet badge. A file that belongs to Claude Code carries the Claude Code file badge: Oda never writes it, and its hooks still run here once the folder is trusted.
With nothing set up yet, the section reads No hooks yet. Ask DataMind Oda to create one, or add hooks to {path} in the Claude Code format.
Trust a folder's hooks
A project folder's hooks do not run until you trust exactly the set you were shown.
The states are Trusted, Not trusted and Changed since you trusted them. An untrusted folder reads These hooks do not run until you trust this folder. Sessions with Full access run them without asking.
Trust approves exactly the hooks the list showed; if the hooks changed in between, the new set is not trusted. A later change flips a trusted folder to Changed since you trusted them and stops its hooks.
Stop trusting revokes a folder's trust and its hooks stop; the row shows when you trusted the folder.
In a Full access session, a folder's untrusted hooks run without asking, and nothing is stored as trusted.
Your own hooks keep running while a folder's hooks are withheld. In a chat, a banner asks you to trust the folder's hooks; Not now puts the question aside until the hooks change.
Note
Trust covers the hooks as listed, not the programs their commands run.
Turn hooks on or off
Run hooks turns every hook off, in every session.
Each hook's own switch turns that one hook off without touching the others.
Untrusted or changed folders are withheld as a group until you trust them again.
How hooks run
Hooks run at events in a chat: before and after Oda uses a tool, when you send a prompt, when a chat starts, and when a turn stops. The files name these events PreToolUse, PostToolUse, UserPromptSubmit, SessionStart and Stop.
Only command hooks run; other kinds are not run.
Hooks set on the same event run one after another, in the order they are set in the file.
A file that cannot be read keeps its hooks from running; your other hooks keep working, and the problem shows under Problems.
The transcript path a hook receives is always empty: the event data keeps the field for compatibility with Claude Code, but Oda never fills it, so a hook cannot read the chat's log through it. Work from the event data itself.
Each hook may run for up to ten minutes by default; a hook can set its own timeout in seconds.
On Windows, a hook's shell command runs through PowerShell.
The files are read again at each event, so an edit applies without restarting Oda.
A hook can add a reminder Oda reads, block the step it runs on, or ask for your confirmation first. A hook that exits with code 2 blocks its step, and its error output is shown as the reason; when one hook blocks and another allows, the block wins.
A hook that answers with an edited tool input (updatedInput) is recorded and reported as a warning, but the edit is not used: the step runs with its original input.
In a Stop hook, the field that tells the hook it already forced another step (stop_hook_active) always reads false, so a hook that keeps blocking forces a new step every time unless it limits itself.
An answer of {"continue": false} is recorded but does not stop the run.
A SessionStart hook starts without waiting for the first request, so a reminder it adds can arrive after that request.
Hooks follow the access mode of the chat they run in; a read-only chat's hooks cannot write files.
Follow a hook's runs
Recent runs ({count}) lists the newest runs for that hook, newest first, up to the last 20.
Each run shows when it ran, how it ended and how long it took ({ms} ms), with its exit code (exit {code}) and, for a failure, its error output.
Results read like Ran, Added a reminder, Blocked: {reason}, Asked for approval, Asked to stop, Failed with exit code {code} or Could not run.
Open a file, and restore a version
Open file opens the hooks file in your usual editor, and creates it when it does not exist yet.
History opens the saved versions of that file, newest first, each labelled with what produced it: From a chat, From Settings, Restored, Edited outside the app or First version seen, with the hook count and file size.
The version in use is marked Current. Choose View to compare another version with the file as it is now, then Restore to write it back. Oda confirms with Restored the version from {time}.
A version is kept each time Oda or Settings changes the file; the newest ten are kept for each file.
Create, change or delete a hook
There is no hook editor in Settings > Hooks: the section only switches, trusts, opens and restores.
Ask Oda in a chat to create, change or delete a hook. Oda writes only its own files and never changes a Claude Code file.
You can also edit a hooks file yourself with Open file; a change made outside the app shows in History as Edited outside the app.
Fix a problem with a hooks file
A file with a problem shows it under Problems, while your other hooks keep running.
The message names what is wrong, for example The file is not valid JSON: ... or A "<type>" hook on <event> is not supported; only command hooks run.
Open the file with Open file to fix it; if the set of hooks changed, trust the folder again.
The Hooks section is part of the desktop app and the VS Code extension. In the web app it does not appear.
What is the difference between my hooks and a folder's hooks?
Your hooks live in your own hooks file and run in every folder. A folder's hooks come with that project and run only in sessions in that folder.
Do a folder's hooks run without asking?
No. They stay withheld until you trust exactly the set you were shown. In a Full access session they run without asking, and nothing is stored as trusted.
How do I turn every hook off at once?
Turn off Run hooks in Settings > Hooks. While it is off, no hook runs in any session.
Why did a hook stop running?
Check, in order: Run hooks is on; the hook's own switch is on; its folder shows Trusted; and its file has no problem under Problems. A folder that changed stops its hooks until you trust it again.
Can I create or edit a hook in Settings?
No. Settings only switches, trusts, opens and restores. Ask Oda in a chat to create, change or delete a hook, or edit the file yourself with Open file.
How do I undo a change to a hooks file?
Open its History, check the version with View, then choose Restore. Oda confirms with Restored the version from {time}.
What does the Claude Code file badge mean?
The file belongs to Claude Code, and Oda never writes it. Its hooks still run here once the folder is trusted; edit the file in the tool that owns it.
What happens when I edit a hooks file outside Oda?
The change shows in the file's History as Edited outside the app; a folder whose hooks changed stops them until you trust it again.
How long may a hook run?
Ten minutes by default. A hook can set its own timeout in seconds. On Windows, a hook's shell command runs through PowerShell.
Where can I see what a hook did?
Open the hook's Recent runs ({count}) under it in Settings > Hooks to see its newest runs and how each ended.