Initial commit: AI conversation impact methodology and toolkit
CC0-licensed methodology for estimating the environmental and social costs of AI conversations (20+ categories), plus a reusable toolkit for automated impact tracking in Claude Code sessions.
This commit is contained in:
commit
0543a43816
27 changed files with 2439 additions and 0 deletions
82
.claude/hooks/annotate-impact.sh
Executable file
82
.claude/hooks/annotate-impact.sh
Executable file
|
|
@ -0,0 +1,82 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# annotate-impact.sh — Annotate the most recent impact log entry with
|
||||
# positive impact data.
|
||||
#
|
||||
# Usage: ./annotate-impact.sh
|
||||
# Interactive: prompts for value assessment of the last logged session.
|
||||
#
|
||||
# This adds value-side data to complement the cost data captured
|
||||
# automatically by the PreCompact hook.
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "$0")/../.." && pwd)}"
|
||||
LOG_FILE="$PROJECT_DIR/.claude/impact/impact-log.jsonl"
|
||||
|
||||
if [ ! -f "$LOG_FILE" ]; then
|
||||
echo "No impact log found. Run a conversation with compaction first."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Show the last entry
|
||||
LAST=$(tail -1 "$LOG_FILE")
|
||||
echo "Last log entry:"
|
||||
echo "$LAST" | jq .
|
||||
echo ""
|
||||
|
||||
SESSION_ID=$(echo "$LAST" | jq -r '.session_id')
|
||||
TIMESTAMP=$(echo "$LAST" | jq -r '.timestamp')
|
||||
|
||||
echo "Annotating session $SESSION_ID (snapshot $TIMESTAMP)"
|
||||
echo ""
|
||||
|
||||
# Gather value data
|
||||
read -rp "Brief summary of value produced: " VALUE_SUMMARY
|
||||
|
||||
read -rp "Estimated reach (number of people affected) [1]: " REACH
|
||||
REACH=${REACH:-1}
|
||||
|
||||
echo "Counterfactual (would the user have achieved this without the conversation?):"
|
||||
echo " 1. Yes, same speed (no value added)"
|
||||
echo " 2. Yes, but slower"
|
||||
echo " 3. Yes, but lower quality"
|
||||
echo " 4. No (could not have done it alone)"
|
||||
read -rp "Choice [2]: " CF_CHOICE
|
||||
CF_CHOICE=${CF_CHOICE:-2}
|
||||
case "$CF_CHOICE" in
|
||||
1) COUNTERFACTUAL="same_speed" ;;
|
||||
2) COUNTERFACTUAL="slower" ;;
|
||||
3) COUNTERFACTUAL="lower_quality" ;;
|
||||
4) COUNTERFACTUAL="impossible" ;;
|
||||
*) COUNTERFACTUAL="unknown" ;;
|
||||
esac
|
||||
|
||||
echo "Net assessment:"
|
||||
echo " 1. Clearly net-positive"
|
||||
echo " 2. Probably net-positive"
|
||||
echo " 3. Uncertain"
|
||||
echo " 4. Probably net-negative"
|
||||
echo " 5. Clearly net-negative"
|
||||
read -rp "Choice [3]: " NET_CHOICE
|
||||
NET_CHOICE=${NET_CHOICE:-3}
|
||||
case "$NET_CHOICE" in
|
||||
1) NET_ASSESSMENT="clearly_positive" ;;
|
||||
2) NET_ASSESSMENT="probably_positive" ;;
|
||||
3) NET_ASSESSMENT="uncertain" ;;
|
||||
4) NET_ASSESSMENT="probably_negative" ;;
|
||||
5) NET_ASSESSMENT="clearly_negative" ;;
|
||||
*) NET_ASSESSMENT="unknown" ;;
|
||||
esac
|
||||
|
||||
# Write annotation as a separate log entry linked by session_id
|
||||
ANNOTATION_FILE="$PROJECT_DIR/.claude/impact/annotations.jsonl"
|
||||
|
||||
ANNOT_TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
cat >> "$ANNOTATION_FILE" <<EOF
|
||||
{"timestamp":"$ANNOT_TIMESTAMP","snapshot_timestamp":"$TIMESTAMP","session_id":"$SESSION_ID","value_summary":"$VALUE_SUMMARY","estimated_reach":$REACH,"counterfactual":"$COUNTERFACTUAL","net_assessment":"$NET_ASSESSMENT"}
|
||||
EOF
|
||||
|
||||
echo ""
|
||||
echo "Annotation saved to $ANNOTATION_FILE"
|
||||
Loading…
Add table
Add a link
Reference in a new issue