DEV Community

Phaneendra Kanduri
Phaneendra Kanduri

Posted on

Using AI to Build Your Year-End Performance Case

Most engineers lose their appraisals in June. Not because they underperformed — because they forgot what they shipped. Your manager tracks 8-12 reports across 40 weeks. If you walk into December with "I think I did good work?" you've already lost.

The problem is mechanical. Brag documents require weekly discipline most people don't have. Miss one week, friction compounds, you stop forever. Claude can automate this if you build the right scaffold.

This article walks through a working system: a bash hook that captures daily commits, a Claude prompt that extracts signal, and a cron job that writes progress summaries every hour. By December you have timestamped evidence of shipped work your manager can't dispute.

The Hook

#!/bin/bash
# ~/.git-hooks/post-commit

PROGRESS_FILE="$HOME/.work-progress/$(date +%Y-%m).jsonl"
COMMIT_MSG=$(git log -1 --pretty=%B)
TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")

echo "{\"timestamp\":\"$TIMESTAMP\",\"message\":\"$COMMIT_MSG\"}" >> "$PROGRESS_FILE"
Enter fullscreen mode Exit fullscreen mode

Fires after every commit. Appends to monthly JSONL file. No Claude yet, just durable capture.

The Summary Layer

#!/bin/bash
# ~/.work-progress/summarize.sh

COMMITS=$(cat "$HOME/.work-progress/$(date +%Y-%m).jsonl")

curl -s https://api.anthropic.com/v1/messages \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "content-type: application/json" \
  -d "{
    \"model\": \"claude-sonnet-4-20250514\",
    \"max_tokens\": 2000,
    \"messages\": [{
      \"role\": \"user\",
      \"content\": \"Extract work from these commits. Group: shipped features, infrastructure, cross-team contributions, bugs. Ignore: deps, formatting. Output markdown bullets.\n\n$COMMITS\"
    }]
  }" | jq -r '.content[0].text' > "$HOME/.work-progress/$(date +%Y-%m)-summary.md"
Enter fullscreen mode Exit fullscreen mode

Add to cron: 0 * * * * $HOME/.work-progress/summarize.sh

Runs hourly. Claude rebuilds your summary all month.

What You Get

## Shipped Features
- OAuth2 migration with PKCE (Nov 3-7)
- FCP 1.8s → 0.4s via lazy loading (Nov 12)
- WCAG 2.1 AA modal system (Nov 18)

## Infrastructure
- Pre-commit hooks block console.log (Nov 5)
- CI: 12min → 6min build time (Nov 20)
Enter fullscreen mode Exit fullscreen mode

Timestamped, categorized, backed by Git history.

Beyond Commits

Extend the JSONL for non-code work:

{"timestamp":"2025-11-15T14:30:00Z","type":"mentorship","summary":"Debugged Redux with Sarah, 2hrs"}
{"timestamp":"2025-11-18T10:00:00Z","type":"incident","summary":"Fixed payment 502s, 8% of checkouts"}
Enter fullscreen mode Exit fullscreen mode

Update the prompt to handle these. Now you're logging the IC2→IC3 behavior managers actually reward.

December: The Final Pass

cat $HOME/.work-progress/*-summary.md | \
curl -s https://api.anthropic.com/v1/messages [...] \
  -d '{"messages":[{"role":"user","content":"Rewrite into self-assessment. Lead with impact, quantify, group by velocity/quality/leadership."}]}' \
  > self-assessment-2025.md
Enter fullscreen mode Exit fullscreen mode

Consolidates 12 months into one appraisal document. Copy-paste into your company's form.


Why It Works

Removes two failure modes:

  1. Retroactive memory (March work recalled in November is lossy)
  2. Manual upkeep friction (one missed week = death spiral)

Hook captures everything, Claude filters signal, zero ongoing effort. Manager reads a structured promotion case in their language, verified in Git.

Extend to JIRA (story points, cycle time), Zendesk (tickets closed), Slack (incidents resolved). Same pattern: auto-capture, Claude extracts narrative, deliver when it matters.

Top comments (0)