claude-code-ultimate-guide/examples/agents/analytics-with-eval/README.md
Florian BRUNIAUX 9170095320 docs(examples): add YAML frontmatter to 7 README files
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 19:20:57 +01:00

249 lines
5.2 KiB
Markdown

---
title: "Analytics Agent with Built-in Evaluation"
description: "Production-ready analytics agent with automated metrics collection and safety validation"
tags: [agents, template, testing, performance]
---
# Analytics Agent with Built-in Evaluation
**Template**: Production-ready analytics agent with automated metrics collection
**Use Case**: SQL query generation with quality tracking, performance monitoring, and safety validation
**Related Guide**: [Agent Evaluation](../../../guide/agent-evaluation.md)
---
## What's Included
| File | Purpose |
|------|---------|
| `analytics-agent.md` | Agent definition with evaluation criteria |
| `hooks/post-response-metrics.sh` | Automated metrics logging after each response |
| `eval/metrics.sh` | Analysis script for aggregating collected metrics |
| `eval/report-template.md` | Template for monthly evaluation reports |
---
## Setup
### 1. Copy Agent to Project
```bash
# Copy agent definition
cp analytics-agent.md ~/.claude/agents/
# Or for project-specific:
cp analytics-agent.md /path/to/project/.claude/agents/
```
### 2. Install Hook
```bash
# Copy hook to project
cp hooks/post-response-metrics.sh /path/to/project/.claude/hooks/
# Make executable
chmod +x /path/to/project/.claude/hooks/post-response-metrics.sh
```
### 3. Configure Hook Trigger
Add to `.claude/settings.json`:
```json
{
"hooks": {
"postToolUse": [
{
"command": ".claude/hooks/post-response-metrics.sh",
"enabled": true,
"description": "Log analytics agent metrics"
}
]
}
}
```
### 4. Create Logs Directory
```bash
mkdir -p /path/to/project/.claude/logs
```
---
## Usage
### Invoke Agent
```bash
# In Claude Code session
"Use analytics-agent to generate a SQL query for [task description]"
```
### Check Metrics
```bash
# View raw metrics log
cat .claude/logs/analytics-metrics.jsonl
# Run analysis
./examples/agents/analytics-with-eval/eval/metrics.sh
```
### Generate Monthly Report
```bash
# Copy template
cp eval/report-template.md reports/analytics-2026-02.md
# Fill in metrics from metrics.sh output
```
---
## Metrics Collected
The hook automatically logs:
| Metric | Description | Source |
|--------|-------------|--------|
| `timestamp` | ISO 8601 timestamp | System |
| `query` | Generated SQL query | Agent response |
| `exec_time` | Query execution time | Database |
| `safety` | PASS/FAIL for destructive ops | Query analysis |
| `row_count` | Rows returned | Database |
| `error` | Error message if query failed | Database |
**Log format**: JSONL (JSON Lines) in `.claude/logs/analytics-metrics.jsonl`
---
## Example Metrics Output
```bash
$ ./eval/metrics.sh
=== Analytics Agent Metrics Report ===
Period: 2026-02-01 to 2026-02-10
Total queries: 45
Safety checks:
- PASS: 42 (93%)
- FAIL: 3 (7%)
Execution time:
- Mean: 2.3s
- Median: 1.8s
- P95: 5.2s
- P99: 8.1s
Common failures:
1. DELETE without WHERE clause (2 occurrences)
2. DROP TABLE in query (1 occurrence)
Recommendations:
- Review agent instructions to emphasize WHERE clause requirement
- Add explicit prohibition on DROP operations
```
---
## Customization
### Modify Safety Checks
Edit `hooks/post-response-metrics.sh` line 12-16:
```bash
# Add more patterns
if echo "$QUERY" | grep -iE 'DELETE|DROP|TRUNCATE|ALTER'; then
SAFETY="FAIL"
fi
```
### Add Custom Metrics
Extend the JSON log structure:
```bash
echo "{
\"timestamp\":\"$(date -Iseconds)\",
\"query\":\"$QUERY\",
\"your_metric\":\"$VALUE\"
}" >> .claude/logs/analytics-metrics.jsonl
```
### Change Log Location
Update `POST_RESPONSE_LOG` variable in hook script.
---
## Troubleshooting
### Hook Not Triggering
**Check**:
1. Hook is executable: `ls -l .claude/hooks/*.sh`
2. Hook is enabled in settings.json
3. Agent name matches: `analytics-agent` (hyphenated)
**Debug**:
```bash
# Test hook manually
export CLAUDE_RESPONSE='{"content":"SELECT * FROM users;"}'
./.claude/hooks/post-response-metrics.sh
```
### No Metrics in Log
**Check**:
1. Log directory exists: `mkdir -p .claude/logs`
2. Write permissions: `touch .claude/logs/test.log`
3. Query extraction pattern matches your SQL format
### Metrics Analysis Fails
**Check**:
1. `jq` is installed: `which jq`
2. Log file is valid JSONL: `jq . .claude/logs/analytics-metrics.jsonl`
---
## Production Considerations
### Performance
- Hook adds ~50ms overhead per response
- Log file grows ~200 bytes per query
- Rotate logs monthly to prevent bloat
### Privacy
- Logs contain actual SQL queries (may include sensitive data)
- Add to `.gitignore`: `.claude/logs/`
- Consider redacting sensitive values in hook script
### Database Connection
- Hook requires database access for `exec_time` measurement
- Configure connection in hook script or use environment variables
- Ensure read-only credentials for safety
---
## Related Resources
- **[Agent Evaluation Guide](../../../guide/agent-evaluation.md)**: Complete evaluation methodology
- **[Hooks Documentation](../../../guide/ultimate-guide.md#5-hooks)**: Hook system reference
- **[nao Framework](https://github.com/getnao/nao/)**: Production analytics agent framework (inspiration)
---
## License
Same as parent repository (MIT)
**Questions?** Open an issue or discussion in the main repository.