ai-conversation-impact/impact-toolkit/install.sh
claude eaf0a6cbeb Add review delta tool to measure human review effort
New show-review-delta.sh compares AI-edited files (from impact log)
against git commits to show overlap percentage. High overlap means
most committed code was AI-generated with minimal human review.
Completes Phase 2 of the quantify-social-costs plan.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 15:12:49 +00:00

88 lines
2.9 KiB
Bash
Executable file

#!/usr/bin/env bash
#
# install.sh — Install the impact tracking toolkit for Claude Code.
#
# Copies hook scripts and configures the PreCompact hook in your
# Claude Code settings. Safe to run multiple times (idempotent).
#
# Usage: ./install.sh [--user | --project]
# --user Install to user-level settings (~/.claude/settings.json)
# --project Install to project-level settings (.claude/settings.json)
# Default: --project
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
SCOPE="${1:---project}"
# Check dependencies
if ! command -v jq &>/dev/null; then
echo "Error: jq is required but not installed."
echo "Install it with: apt install jq / brew install jq / etc."
exit 1
fi
if ! command -v python3 &>/dev/null; then
echo "Error: python3 is required for token extraction."
echo "Install Python 3 or ensure it is on your PATH."
exit 1
fi
# Determine target directories
if [ "$SCOPE" = "--user" ]; then
SETTINGS_DIR="$HOME/.claude"
HOOKS_DIR="$SETTINGS_DIR/hooks"
echo "Installing to user-level settings ($SETTINGS_DIR)"
else
# Project-level: use current working directory
SETTINGS_DIR="$(pwd)/.claude"
HOOKS_DIR="$SETTINGS_DIR/hooks"
echo "Installing to project-level settings ($SETTINGS_DIR)"
fi
# Create directories
mkdir -p "$HOOKS_DIR"
mkdir -p "$SETTINGS_DIR/impact"
# Copy hook scripts
cp "$SCRIPT_DIR/hooks/pre-compact-snapshot.sh" "$HOOKS_DIR/"
cp "$SCRIPT_DIR/hooks/show-impact.sh" "$HOOKS_DIR/"
cp "$SCRIPT_DIR/hooks/show-aggregate.sh" "$HOOKS_DIR/"
cp "$SCRIPT_DIR/hooks/show-review-delta.sh" "$HOOKS_DIR/"
chmod +x "$HOOKS_DIR/pre-compact-snapshot.sh"
chmod +x "$HOOKS_DIR/show-impact.sh"
chmod +x "$HOOKS_DIR/show-aggregate.sh"
chmod +x "$HOOKS_DIR/show-review-delta.sh"
echo "Copied hook scripts to $HOOKS_DIR"
# Configure settings.json
SETTINGS_FILE="$SETTINGS_DIR/settings.json"
HOOK_CMD="$HOOKS_DIR/pre-compact-snapshot.sh"
if [ -f "$SETTINGS_FILE" ]; then
# Check if PreCompact hook already configured
if jq -e '.hooks.PreCompact' "$SETTINGS_FILE" &>/dev/null; then
echo "PreCompact hook already configured in $SETTINGS_FILE — skipping."
else
# Add hooks to existing settings
jq --arg cmd "$HOOK_CMD" \
'.hooks.PreCompact = [{"hooks": [{"type": "command", "command": $cmd}]}]' \
"$SETTINGS_FILE" > "${SETTINGS_FILE}.tmp" && mv "${SETTINGS_FILE}.tmp" "$SETTINGS_FILE"
echo "Added PreCompact hook to $SETTINGS_FILE"
fi
else
# Create new settings file
jq -n --arg cmd "$HOOK_CMD" \
'{"hooks": {"PreCompact": [{"hooks": [{"type": "command", "command": $cmd}]}]}}' \
> "$SETTINGS_FILE"
echo "Created $SETTINGS_FILE with PreCompact hook"
fi
echo ""
echo "Installation complete."
echo "Impact metrics will be logged to $SETTINGS_DIR/impact/impact-log.jsonl"
echo "on each context compaction."
echo ""
echo "To view per-session impact: $HOOKS_DIR/show-impact.sh"
echo "To view aggregate dashboard: $HOOKS_DIR/show-aggregate.sh"