.claude/skills/session-end/SKILL.md
End development session cleanly. Updates Linear tickets, checks Git compliance, ensures clean state for next session.
npx skillsauth add lucidlabs-hq/agent-kit session-endInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Clean up and sync state before ending a development session.
┌─────────────────────────────────────────────────────────────────┐
│ SESSION END CHECKLIST │
├─────────────────────────────────────────────────────────────────┤
│ [ ] 0. Time Tracking - Session gespeichert │
│ [ ] 1. Git Status Clean │
│ [ ] 2. Linear Ticket Updated │
│ [ ] 3. Work Summary Added │
│ [ ] 4. PROJECT-STATUS.md Updated │
│ [ ] 5. No Uncommitted Changes (or WIP commit) │
└─────────────────────────────────────────────────────────────────┘
0a. Stop Heartbeat (before anything else):
TIME_DIR="$HOME/.claude-time"
PROJECT_NAME=$(basename "$(pwd)")
SESSION_FILE="$TIME_DIR/sessions/$PROJECT_NAME.json"
CURRENT_SESSION="$TIME_DIR/current-session.txt"
HEARTBEAT_PID_FILE="$TIME_DIR/heartbeat-${PROJECT_NAME}.pid"
HEARTBEAT_FILE="$TIME_DIR/heartbeat-${PROJECT_NAME}.txt"
# Stop heartbeat background process
if [ -f "$HEARTBEAT_PID_FILE" ]; then
HEARTBEAT_PID=$(cat "$HEARTBEAT_PID_FILE")
kill "$HEARTBEAT_PID" 2>/dev/null
rm -f "$HEARTBEAT_PID_FILE" "$HEARTBEAT_FILE"
fi
0b. Calculate session duration (epoch-based):
if [ -f "$CURRENT_SESSION" ]; then
START_EPOCH=$(grep "^Started:" "$CURRENT_SESSION" | awk '{print $2}')
END_EPOCH=$(date +%s)
DURATION_SECONDS=$((END_EPOCH - START_EPOCH))
# Cap at 8 hours for plausibility
MAX_SESSION_SECONDS=28800
if [ "$DURATION_SECONDS" -gt "$MAX_SESSION_SECONDS" ]; then
DURATION_SECONDS=$MAX_SESSION_SECONDS
fi
DURATION_MINUTES=$((DURATION_SECONDS / 60))
# Extract human-readable times
START_ISO=$(grep "^StartISO:" "$CURRENT_SESSION" | awk '{print $2}')
START_TIME=$(echo "$START_ISO" | cut -dT -f2 | cut -d: -f1-2)
END_TIME=$(date "+%H:%M")
SESSION_DATE=$(date "+%Y-%m-%d")
fi
0c. Save session and cleanup:
After saving the session entry to $SESSION_FILE (append to sessions array), clean up:
# Remove current-session marker
rm -f "$CURRENT_SESSION"
# Update developer.json aggregates
# Read current total, add DURATION_MINUTES, write back total_minutes_all_time
Session-Zusammenfassung anzeigen (KOMPAKT):
┌─────────────────────────────────────────────────────────────────────────────────┐
│ SESSION BEENDET [project-name] │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ BEARBEITETE TICKETS ZEIT: 3h 30min │
│ ───────────────────────────────────────────────────────────────────────────── │
│ ✓ CUS-42 Login Feature implementieren Delivery 2h 15min │
│ ◐ CUS-45 Error Handling verbessern In Progress 1h 15min │
│ │
│ COMMITS (4) │
│ ───────────────────────────────────────────────────────────────────────────── │
│ abc1234 feat(auth): implement login flow │
│ def5678 fix(api): handle edge cases │
│ ghi9012 feat(prime): add ASCII banner │
│ jkl3456 docs: update time tracking │
│ │
│ BUDGET: ████████████████████░░░░░░░░░░░░░░░░░░░░░ 48% (48h/100h) │
│ │
└─────────────────────────────────────────────────────────────────────────────────┘
Wichtig: Diese Zusammenfassung ist bewusst KOMPAKT gehalten. Details werden in Report-Datei gespeichert.
Session-Daten speichern:
Die Session wird in ~/.claude-time/sessions/[project].json gespeichert:
{
"sessions": [
{
"date": "2026-01-28",
"start": "14:00",
"end": "17:30",
"duration_minutes": 210,
"linear_issue": "CUS-42",
"commits": ["abc1234", "def5678", "ghi9012"],
"synced_to_productive": false
}
]
}
Frage nach Productive.io Sync:
Soll ich die Session zu Productive.io synchronisieren? [Y/n]
→ JA: /time-sync wird ausgeführt
→ NEIN: Session bleibt als "pending" markiert
# Show current branch and status
git branch --show-current
git status --short
# Check for uncommitted changes
git diff --stat
If uncommitted changes exist:
/commitgit commit -am "WIP: [description]"# Show last commit
git log -1 --oneline
# Check commit message format
git log -1 --format="%s"
Verify:
feat:, fix:, docs:, etc.)cd frontend && pnpm run validate
If validation fails:
Query current active issue and update:
Use Linear MCP:
1. Get current issue (from PROJECT-STATUS.md or ask)
2. Update status if needed:
- Still in Exploration? Stay there
- Exploration complete? → Decision
- Implementing? → Delivery
- Ready for review? → Review
3. Add comment with work summary
Comment Format:
## Session Update - [Date]
### Completed
- [What was done]
### Next Steps
- [What needs to happen next]
### Blockers (if any)
- [Any issues blocking progress]
# Project Status
**Last Updated:** [timestamp]
**Linear Issue:** [ABC-123]
**Status:** [Current status]
## Last Session
- [Summary of work done]
## Next Session
- [What to pick up]
## Active Plan
- File: `.agents/plans/[plan].md`
- Progress: [X/Y tasks]
## Session End Report
### Git Status
- Branch: `feature/xyz`
- Last Commit: `abc1234 feat: implement feature`
- Working Tree: Clean ✓
### Validation
- TypeScript: ✓
- ESLint: ✓
- Build: [not run / ✓]
### Linear
- Issue: ABC-123
- Status: Exploration → Delivery
- Comment: Added work summary
### Ready for Next Session
- PROJECT-STATUS.md updated
- Linear ticket current
- No pending changes
**Quick Resume:** [One sentence for next session]
WICHTIG: Dieser Schritt analysiert die Session und gibt dem Entwickler konkrete Verbesserungsvorschläge.
Analysiere während der Session:
┌─────────────────────────────────────────────────────────────────────────────────┐
│ IMPROVEMENT ANALYZER │
├─────────────────────────────────────────────────────────────────────────────────┤
│ │
│ SESSION SCORE: ████████░░ 78/100 │
│ │
│ TOP 3 VERBESSERUNGEN FÜR NÄCHSTE SESSION: │
│ ───────────────────────────────────────────────────────────────────────────── │
│ │
│ 1. [!] Mehr Kontext bei Feature-Requests │
│ → Nächstes Mal: "Kontext: [Situation], Problem: [X], Ziel: [Y]" │
│ │
│ 2. [!] Akzeptanzkriterien definieren │
│ → Nächstes Mal: Was muss funktionieren, damit Feature "fertig" ist? │
│ │
│ 3. [!] Scope klar eingrenzen │
│ → Nächstes Mal: "Nur X, nicht Y" explizit angeben │
│ │
│ ───────────────────────────────────────────────────────────────────────────── │
│ --> Vollständiger Report: ~/.claude-time/reports/[project]-[date].md │
│ │
└─────────────────────────────────────────────────────────────────────────────────┘
Speichere detaillierten Report in ~/.claude-time/reports/[project]-YYYY-MM-DD.md:
# Session Report: [project-name]
**Datum:** 2026-01-28
**Dauer:** 3h 30min
**Entwickler:** Adam
---
## Bearbeitete Tickets
| Ticket | Titel | Status | Zeit |
|--------|-------|--------|------|
| CUS-42 | Login Feature | ✓ Erledigt | 2h 15min |
| CUS-45 | Error Handling | ◐ In Progress | 1h 15min |
---
## Commits
- `abc1234` feat(auth): implement login flow
- `def5678` fix(api): handle edge cases
- `ghi9012` feat(prime): add ASCII banner
- `jkl3456` docs: update time tracking
---
## Improvement Patterns Analyzer
### Top Recurring Issues (diese Session)
| Pattern | Häufigkeit | Zeit-Impact |
|---------|------------|-------------|
| Missing Context | 3x | ~15min |
| Vage Anforderungen | 2x | ~10min |
| Fehlende Beispiele | 1x | ~5min |
### Detaillierte Analyse
#### 1. Missing Context (3x gefunden)
**Was passiert ist:**
- Anfrage ohne Hintergrund-Information
- Claude musste Rückfragen stellen
**Beispiele aus dieser Session:**
- ❌ "Mach das Feature fertig"
- ❌ "Fix den Bug"
**Besser nächstes Mal:**
✅ "Kontext: [aktuelle Situation] Problem: [konkretes Problem] Ziel: [gewünschtes Ergebnis] Einschränkungen: [falls vorhanden]"
**Geschätzter Zeitgewinn:** ~5min pro Anfrage
---
#### 2. Vage Anforderungen (2x gefunden)
**Was passiert ist:**
- Anforderungen waren interpretierbar
- Mehrere Implementierungen wären möglich gewesen
**Beispiele aus dieser Session:**
- ❌ "Mach die UI besser"
- ❌ "Optimiere das"
**Besser nächstes Mal:**
✅ "Ändere den Button von grau auf blau" ✅ "Reduziere die Ladezeit von 3s auf unter 1s"
**Geschätzter Zeitgewinn:** ~5min pro Anfrage
---
## Session-Metriken
| Metrik | Wert | Benchmark |
|--------|------|-----------|
| Nachfragen von Claude | 4 | < 2 ideal |
| Scope-Änderungen | 1 | 0 ideal |
| Rework nötig | 0 | 0 ideal |
| Effizienz-Score | 78% | > 85% ideal |
---
## Empfohlene Templates
### Feature Request Template
Kontext: [Was ist die aktuelle Situation?] Problem: [Was funktioniert nicht / fehlt?] Ziel: [Was soll am Ende rauskommen?] Akzeptanzkriterien:
### Bug Report Template
Erwartetes Verhalten: [Was sollte passieren?] Aktuelles Verhalten: [Was passiert stattdessen?] Reproduktion: [Schritte zum Reproduzieren] Relevanter Code: [Datei:Zeile oder Snippet]
---
*Report generiert: 2026-01-28 17:30*
Die Improvement Patterns werden in ~/.claude-time/patterns/[project].json aggregiert:
{
"project": "customer-portal",
"patterns": {
"missing_context": {
"total_occurrences": 34,
"sessions_affected": 12,
"trend": "improving",
"last_30_days": 8
},
"vague_requirements": {
"total_occurrences": 26,
"sessions_affected": 10,
"trend": "stable",
"last_30_days": 6
}
},
"overall_score_trend": [72, 75, 78, 80, 78]
}
| Pattern | Erkennung | |---------|-----------| | Missing Context | Claude fragt "Was meinst du mit...?" oder "Kannst du mehr Kontext geben?" | | Vage Anforderungen | Mehrere Interpretationen möglich, Claude fragt nach Präferenz | | Fehlende Beispiele | Claude fragt "Hast du ein Beispiel?" | | Scope Creep | Anforderungen ändern sich während Implementierung | | Fehlende Akzeptanzkriterien | Unklar wann Feature "fertig" ist |
Consider running /session-end when:
If skipping (e.g., quick break):
⚠️ Skipping session-end. Remember to run it before long breaks!
This skill invokes the session-closer agent for:
The agent runs automatically when /session-end is called.
development
Deploy invoice-accounting-assistant to HQ server. Runs tests first (TDD), then builds and deploys. Use when ready to push changes to staging/production.
testing
Visual UI verification with agent-browser. Use after implementing UI components to take screenshots, verify interactions, and self-check your work. FASTER than E2E tests.
documentation
Update README with current project status and features. Use after completing features.
tools
--- name: time-report description: Cross-project time report. Aggregates all session data from ~/.claude-time/sessions/. Use to see how much time was spent across all projects. disable-model-invocation: true allowed-tools: Bash, Read argument-hint: [all | this-week | this-month | last-month | {project-name}] --- # Time Report: Cross-Project Session Overview ## Objective Read ALL session files from `~/.claude-time/sessions/*.json` and produce an aggregated time report. Supports filtering by pe