feat(TASK-033): add hook config schema across all scopes
Introduce src/hooks.rs as a types-only module (HookDef, HooksMap) and plumb hooks:/global_hooks: config fields through every scope: - Config + AppConfig hooks field, both Default impls, the manual from_config copy, and a COYOTE_HOOKS env override - Role frontmatter: hand-parsed hooks arm, private field, getter, and JSON-inline re-serialization in Role::export (malformed maps degrade to None) - AgentConfig + Graph: hooks + global_hooks on both structs, copied in AgentConfig::from_graph, with a per-agent global_hooks env override - paths::hooks_dir() = <config_dir>/hooks with COYOTE_HOOKS_DIR override - Commented hooks: block in the global config template (global scope only; no global_hooks key) No engine or dispatch logic yet; existing configs parse unchanged.
This commit is contained in:
12 files changed
+344
-1
No files matched your search
@@ -149,6 +149,18 @@ mcp_tools: null # Per-server MCP tool allowlists (glob patterns
|
||||
# - list_*
|
||||
# slack: []
|
||||
|
||||
# ---- Hooks ----
|
||||
# Fire-and-forget external commands that run when lifecycle events fire. Each event name
|
||||
# maps to a list of named hooks; every listed hook's command runs when that event fires.
|
||||
# Hooks never block coyote and never change its output or exit code.
|
||||
# See the [Hooks documentation](https://github.com/Dark-Alex-17/coyote/wiki/Hooks) for more details
|
||||
hooks: {} # Event -> list of named hook commands (default: none)
|
||||
# Example:
|
||||
# hooks:
|
||||
# turn.completed:
|
||||
# - name: notify
|
||||
# command: ./hooks/notify.sh
|
||||
|
||||
# ---- Auto-Continue (Todo System) ----
|
||||
# The auto-continue system provides built-in task tracking for improved reliability.
|
||||
# When enabled, the model can create todo lists and the system will automatically
|
||||
|
||||
Reference in new issue
Block a user