#!/usr/bin/env bash # get-identity.sh — Read identity.json and export user/machine vars for attribution # # Source this at the start of any skill that needs attribution (bot alerts, commits, # logs, RMM operations). Exports $USER_NAME, $USER_SHORT, $MACHINE, $USER_EMAIL. # # Usage: # source .claude/scripts/get-identity.sh # echo "[RMM] $USER_SHORT deployed to X machines..." # # Soft-fails: if identity.json is missing, exports "Unknown" values and returns 1 # (but does NOT exit, so the caller continues). This ensures skills never break on # missing identity - they just attribute to "Unknown". # Resolve the repo root from this script's own location (mirrors vault.sh) so callers # don't have to know it. An already-set CLAUDETOOLS_ROOT still wins, and identity.json's # claudetools_root overrides both. Never hardcode a drive letter. if [ -z "${CLAUDETOOLS_ROOT:-}" ]; then export CLAUDETOOLS_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" fi IDENTITY_FILE="$CLAUDETOOLS_ROOT/.claude/identity.json" if [ ! -f "$IDENTITY_FILE" ]; then echo "[WARNING] identity.json not found at $IDENTITY_FILE - attribution will be 'Unknown'" >&2 export USER_NAME="Unknown User" export USER_SHORT="unknown" export MACHINE="unknown-machine" export USER_EMAIL="unknown@unknown.com" return 1 fi export USER_NAME=$(jq -r '.full_name // .user // "Unknown"' "$IDENTITY_FILE" 2>/dev/null || echo "Unknown") export USER_SHORT=$(jq -r '.user // "unknown"' "$IDENTITY_FILE" 2>/dev/null || echo "unknown") export MACHINE=$(jq -r '.machine // "unknown"' "$IDENTITY_FILE" 2>/dev/null || echo "unknown") export USER_EMAIL=$(jq -r '.email // "unknown@unknown.com"' "$IDENTITY_FILE" 2>/dev/null || echo "unknown@unknown.com") # identity.json is authoritative for the root and the vault location. _root_override=$(jq -r '.claudetools_root // empty' "$IDENTITY_FILE" 2>/dev/null) [ -n "$_root_override" ] && [ -d "$_root_override" ] && export CLAUDETOOLS_ROOT="$_root_override" export VAULT_ROOT=$(jq -r '.vault_path // empty' "$IDENTITY_FILE" 2>/dev/null) unset _root_override # Success return 0