session-recorder
Session Recorder
Records all Claude Code session interactions using a hybrid approach: automated hooks capture user messages and tool calls, while explicit self-reporting captures summaries of completed work.
How It Works
The session recorder uses two complementary mechanisms:
Automated Recording (via Hooks)
Four hooks automatically capture events without any action required:
| Hook | Event | What It Records |
|---|---|---|
SessionStart |
Session begins | Creates log file, records session ID and start time |
UserPromptSubmit |
User sends message | Records user message content and timestamp |
PostToolUse |
Tool completes | Records tool name, arguments, and result |
SessionEnd |
Session ends | Updates end timestamp, calculates statistics |
Self-Reporting (Explicit)
Self-report summaries of completed work to capture reasoning and context that hooks cannot observe. This provides the "why" behind the "what" recorded by hooks.
Self-Reporting Instructions
When to Self-Report
Report after completing significant work:
- Multi-step operations - After completing a sequence of related actions
- Feature implementations - After implementing new functionality
- Bug fixes - After identifying and resolving issues
- Refactoring - After restructuring code
- Configuration changes - After modifying settings or environment
- Research conclusions - After investigating and reaching decisions
How to Self-Report
Execute the helper script with summary information:
bash ${CLAUDE_PLUGIN_ROOT}/skills/session-recorder/scripts/add_assistant_response.sh \
--summary "Brief description of what was accomplished" \
--actions "Specific actions taken" \
--tools "Tool1,Tool2,Tool3"
Arguments
| Argument | Required | Description |
|---|---|---|
--summary |
Recommended | Brief description of accomplishment (1-2 sentences) |
--actions |
Optional | Comma-separated list of specific actions taken |
--tools |
Optional | Comma-separated list of tools used |
Examples
After implementing a feature:
bash ${CLAUDE_PLUGIN_ROOT}/skills/session-recorder/scripts/add_assistant_response.sh \
--summary "Implemented user authentication with JWT tokens" \
--actions "Created auth middleware, added token validation, updated routes" \
--tools "Write,Edit,Bash"
After fixing a bug:
bash ${CLAUDE_PLUGIN_ROOT}/skills/session-recorder/scripts/add_assistant_response.sh \
--summary "Fixed race condition in database connection pool" \
--actions "Added mutex lock, implemented connection timeout" \
--tools "Edit,Read"
After research and decision:
bash ${CLAUDE_PLUGIN_ROOT}/skills/session-recorder/scripts/add_assistant_response.sh \
--summary "Analyzed performance bottleneck - recommending Redis caching" \
--actions "Profiled application, identified database queries as bottleneck"
After configuration:
bash ${CLAUDE_PLUGIN_ROOT}/skills/session-recorder/scripts/add_assistant_response.sh \
--summary "Configured CI/CD pipeline with GitHub Actions" \
--actions "Created workflow file, added test and deploy stages" \
--tools "Write"
Log File Structure
Logs are stored in .claude/session_logs/session_YYYY-MM-DD.json:
{
"session_id": "UUID",
"start_timestamp": "ISO-8601",
"end_timestamp": "ISO-8601",
"project_path": "/absolute/path",
"interactions": [
{
"interaction_id": "UUID",
"timestamp": "ISO-8601",
"type": "user_message|tool_call|tool_result|assistant_summary",
"content": "...",
"metadata": {}
}
]
}
Interaction Types
| Type | Source | Content |
|---|---|---|
user_message |
UserPromptSubmit hook | User's message text |
tool_call |
PostToolUse hook | Tool name and arguments |
tool_result |
PostToolUse hook | Tool output (truncated if large) |
assistant_summary |
Self-reporting | Summary, actions, tools used |
Best Practices
Effective Summaries
Write summaries that capture intent and context:
-
Good: "Refactored authentication to use middleware pattern for better separation of concerns"
-
Poor: "Changed some files"
-
Good: "Fixed XSS vulnerability by sanitizing user input in comment form"
-
Poor: "Fixed bug"
When NOT to Self-Report
Skip self-reporting for:
- Simple file reads (already captured by hooks)
- Single tool calls (already captured by hooks)
- Trivial operations with no decision-making
- Intermediate steps within a larger operation (report at completion)
Frequency
Self-report at natural completion points, not after every action. One summary per logical unit of work is ideal.
Troubleshooting
Logs Not Created
Verify jq is installed:
which jq
Check directory permissions:
ls -la .claude/session_logs/
Self-Report Fails
Ensure script is executable:
chmod +x ${CLAUDE_PLUGIN_ROOT}/skills/session-recorder/scripts/add_assistant_response.sh
Test manually:
bash ${CLAUDE_PLUGIN_ROOT}/skills/session-recorder/scripts/add_assistant_response.sh --summary "Test"
Dependencies
jq- JSON processing (required)uuidgen- UUID generation (usually pre-installed)
Install on Ubuntu/Debian:
sudo apt-get install jq uuid-runtime
Install on macOS:
brew install jq
Additional Resources
Reference Files
references/log-analysis.md- Guide to analyzing session logsreferences/integration.md- Integrating with external tools
Scripts
scripts/add_assistant_response.sh- Self-reporting helperhooks/session_init.sh- Session initializationhooks/record_user_prompt.sh- User message recordinghooks/record_tool_result.sh- Tool usage recordinghooks/session_finalize.sh- Session finalization