6 new issues for Claude Code hook improvements: - 012: Test output filtering (reduce noise, show failures only) - 013: Stop verification (verify work complete before stopping) - 014: Auto-test on edit (async tests after code changes) - 015: Session context injection (git/issues/CI on startup) - 016: Silent auto-formatting (suppress formatter output) - 017: Expose/hide policy (define what to show vs suppress) Based on Claude Code hooks documentation: - PostToolUse with suppressOutput for noise reduction - Stop hooks with agent verification - Async hooks for background testing - SessionStart for context injection - additionalContext for exposing important info Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.1 KiB
2.1 KiB
feat(hooks): SessionStart context injection
Summary
Add SessionStart hooks that inject relevant project context at the start of each session.
Problem
Claude starts each session without knowing:
- Recent git changes
- Open issues assigned to the user
- CI status
- Current branch and uncommitted work
This leads to repeated context-gathering at the start of every session.
Solution
SessionStart hook that runs core commands to gather context and inject it.
Hook Configuration
{
"hooks": {
"SessionStart": [
{
"matcher": "startup|resume",
"hooks": [
{
"type": "command",
"command": "core ai session-context",
"timeout": 30
}
]
}
]
}
}
Context to Gather
core ai session-context should collect:
-
Git status:
BRANCH=$(git branch --show-current) CHANGES=$(git status --short | head -10) -
Recent activity:
COMMITS=$(git log --oneline -5) -
Open issues (if gh available):
ISSUES=$(core dev issues --assignee @me --limit 5) -
CI status:
CI=$(core qa health --brief) -
Restored session state:
if [ -f ~/.claude/sessions/scratchpad.md ]; then # Include previous session context fi
Output Format
{
"hookSpecificOutput": {
"hookEventName": "SessionStart",
"additionalContext": "## Session Context\n\n**Branch:** feature/foo\n**Uncommitted:** 3 files\n\n**Recent commits:**\n- abc123 fix: resolve test flake\n- def456 feat: add new endpoint\n\n**Your issues:**\n- #42 Bug in login flow\n- #38 Add caching\n\n**CI:** All green ✓"
}
}
Environment Variables
Also set useful env vars via CLAUDE_ENV_FILE:
if [ -n "$CLAUDE_ENV_FILE" ]; then
echo "export PROJECT_ROOT=\"$(pwd)\"" >> "$CLAUDE_ENV_FILE"
echo "export GIT_BRANCH=\"$BRANCH\"" >> "$CLAUDE_ENV_FILE"
fi
Conditional Context
Only inject what's relevant:
- Skip CI status if not in a repo with workflows
- Skip issues if gh not authenticated
- Skip session restore if >3 hours old