repl: pre/post CMD hooks via config.hooks (closes #3)
Optional shell scripts trigger around every CMD: execution. Use cases:
audit logging, auto-format-after-edit, custom safety gates beyond the
existing confirm_cmd boolean.
Config shape:
hooks = {
pre_cmd = "/path/to/pre-script",
post_cmd = "/path/to/post-script",
}
Contract per hook invocation:
- The command line is piped to the hook on stdin.
- Env vars: AISH_CMD (the command), AISH_TURN (#ctx.turns at the
moment of dispatch), AISH_CWD (libc.getcwd() result).
- Hook stdout is streamed live to the terminal via executor.exec
(so the user sees its output regardless of exit status).
Pre-hook: non-zero exit aborts the command and emits a status line
including the exit code. last_exec_code is set to the hook's exit
so the {last_status} prompt template variable reflects the abort.
Post-hook: exit code is ignored (the spec says so); only the visible
stdout matters. Runs after the command's exec_end frame.
Tested with success, abort, and stdin-matches-env paths.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+10
@@ -61,6 +61,16 @@ return {
|
||||
dir = (os.getenv("HOME") or ".") .. "/.local/share/aish",
|
||||
},
|
||||
|
||||
-- Issue #3: pre/post CMD hooks. Optional shell scripts triggered around
|
||||
-- every CMD: execution. Each hook receives the command on stdin and
|
||||
-- AISH_CMD / AISH_TURN / AISH_CWD as env vars. Non-zero exit on pre_cmd
|
||||
-- aborts execution; post_cmd's exit code is ignored but its stdout is
|
||||
-- logged. Default off (no hooks). Uncomment to enable.
|
||||
-- hooks = {
|
||||
-- pre_cmd = (os.getenv("HOME") or ".") .. "/.aish/hooks/pre-cmd",
|
||||
-- post_cmd = (os.getenv("HOME") or ".") .. "/.aish/hooks/post-cmd",
|
||||
-- },
|
||||
|
||||
-- Phase 2 (docs/PHASE2.md): MCP server registry + tool-call policy.
|
||||
-- The block is OFF by default — connect-at-startup happens only when
|
||||
-- `servers` is non-empty. Uncomment + adjust per your fleet.
|
||||
|
||||
Reference in New Issue
Block a user