mode
mode is set per feature, under features.emDash.mode, features.aiWriting.mode, and features.dictionary.mode. It takes confirm, ask, or deny. When more than one feature fires on one call, the strictest mode wins (deny over ask over confirm) and one message carries every part.
confirm is the default. The flow:
- The first write carrying a finding is denied. The reason names the file, the line, the flagged text, the category, the fix, and a reference path.
- To keep the text, send the identical write again. The hook allows it and reports
[concise] Kept after confirmation: <summary>in asystemMessageand inadditionalContext. - To fix the text, send different text. The hook checks the new text from the start.
- A third identical write starts a new episode and is denied again.
ask uses Claude Code’s native permission prompt and also sends the finding to the agent. Codex does not support that hook decision, so Concise denies the call and tells the agent to revise or request your approval. After approval, the agent retries with concise-ignore; repeating the unchanged call stays denied. On Stop, ask behaves as confirm.
deny denies until maxRetries is passed, then allows the write and flags it, the same as the 3 core checks.