#!/usr/bin/env bash
set -euo pipefail
PROJECT_ROOT="${CLAUDE_PROJECT_DIR:-$(pwd)}"
STATE_DIR="${PROJECT_ROOT}/.claude/state"
LEDGER="${STATE_DIR}/skill-trigger-stats.jsonl"
if [ "${HARNESS_SKILL_TELEMETRY_DISABLE:-0}" = "1" ]; then
exit 0
fi
mkdir -p "${STATE_DIR}"
INPUT="$(cat)"
if [ -z "${INPUT}" ]; then
exit 0
fi
SKILL_NAME="$(printf '%s' "${INPUT}" | jq -r '.skill_name // ""' 2>/dev/null || echo "")"
TRIGGER="$(printf '%s' "${INPUT}" | jq -r '.invocation_trigger // ""' 2>/dev/null || echo "")"
SESSION_ID_RAW="$(printf '%s' "${INPUT}" | jq -r '.session_id // ""' 2>/dev/null || echo "")"
DURATION_MS="$(printf '%s' "${INPUT}" | jq -r '.duration_ms // 0' 2>/dev/null || echo "0")"
if [ -z "${SKILL_NAME}" ] || [ -z "${TRIGGER}" ]; then
exit 0
fi
case "${TRIGGER}" in
human|model|skill-chain) ;;
*)
TRIGGER="other"
;;
esac
SESSION_ID="${SESSION_ID_RAW:0:12}"
SETTINGS_LOCAL="${PROJECT_ROOT}/.claude/settings.local.json"
if [ -f "${SETTINGS_LOCAL}" ]; then
EXCLUDED="$(jq -r --arg s "${SKILL_NAME}" '.harness.skill_telemetry_exclude // [] | map(select(. == $s)) | length' "${SETTINGS_LOCAL}" 2>/dev/null || echo "0")"
if [ "${EXCLUDED}" != "0" ]; then
exit 0
fi
fi
TIMESTAMP="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
RECORD="$(jq -nc \
--arg timestamp "${TIMESTAMP}" \
--arg skill_name "${SKILL_NAME}" \
--arg trigger "${TRIGGER}" \
--arg session_id "${SESSION_ID}" \
--argjson duration_ms "${DURATION_MS}" \
'{timestamp:$timestamp, skill_name:$skill_name, invocation_trigger:$trigger, session_id:$session_id, duration_ms:$duration_ms}')"
printf '%s\n' "${RECORD}" >> "${LEDGER}"