From 44934e685a3a6f932d3dc28303e3109f1661abba Mon Sep 17 00:00:00 2001 From: Levi Neely Date: Wed, 18 Feb 2026 22:35:27 +0100 Subject: [PATCH] Make agent-hook support direct invocation - Added dual-mode support: JSON stdin or event name as argument - Updated agent config to use agent-hook with event names - Centralizes all hook logic in one script - Works with both wrapper scripts and direct Kiro hooks --- kiro-cli/agent/anvillm-agent.json | 6 +++--- scripts/agent-hook | 34 +++++++++++++++++-------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/kiro-cli/agent/anvillm-agent.json b/kiro-cli/agent/anvillm-agent.json index e7da033..549b4aa 100644 --- a/kiro-cli/agent/anvillm-agent.json +++ b/kiro-cli/agent/anvillm-agent.json @@ -7,17 +7,17 @@ "hooks": { "agentSpawn": [ { - "command": "cat ~/.kiro/SKILLS_PROMPT.md" + "command": "agent-hook agentSpawn" } ], "userPromptSubmit": [ { - "command": "echo running | 9p write agent/$AGENT_ID/state 2>/dev/null || true" + "command": "agent-hook userPromptSubmit" } ], "stop": [ { - "command": "echo idle | 9p write agent/$AGENT_ID/state 2>/dev/null || true" + "command": "agent-hook stop" } ] } diff --git a/scripts/agent-hook b/scripts/agent-hook index 88a1e57..152bca4 100755 --- a/scripts/agent-hook +++ b/scripts/agent-hook @@ -1,22 +1,26 @@ #!/usr/bin/env bash set -euo pipefail -# Kiro (and many other agents) pass JSON payload to hook on stdin -TIMEOUT=$(command -v gtimeout 2>/dev/null || command -v timeout 2>/dev/null || :) -payload=$(${TIMEOUT:+"$TIMEOUT" 3} jq -c . 2>/dev/null || :) +# Support two modes: +# 1. JSON on stdin (for wrapper scripts) +# 2. Event name as first argument (for direct invocation) -# Debug: log what we received -echo "[agent-hook] Received payload: $payload" >> /tmp/agent-hook.log - -[[ $payload ]] || exit 0 # Just exit - -event='' -cwd=$PWD -IFS=$'\t' read -r _event _cwd < <(jq -r '"\(.hook_event_name // "")\t\(.cwd // "")"' <<<"$payload") || : -[[ ${_event:-} ]] && event=$_event -[[ ${_cwd:-} ]] && cwd=$_cwd - -echo "[agent-hook] Parsed event: $event, cwd: $cwd" >> /tmp/agent-hook.log +if [[ $# -gt 0 ]]; then + # Direct invocation: event name passed as argument + event="$1" + cwd="${2:-$PWD}" +else + # JSON mode: parse from stdin + TIMEOUT=$(command -v gtimeout 2>/dev/null || command -v timeout 2>/dev/null || :) + payload=$(${TIMEOUT:+"$TIMEOUT" 3} jq -c . 2>/dev/null || :) + [[ $payload ]] || exit 0 + + event='' + cwd=$PWD + IFS=$'\t' read -r _event _cwd < <(jq -r '"\(.hook_event_name // "")\t\(.cwd // "")"' <<<"$payload") || : + [[ ${_event:-} ]] && event=$_event + [[ ${_cwd:-} ]] && cwd=$_cwd +fi # Helper for anvillm state transitions anvillm_set_state() {