원클릭으로
session-chronicle
Session log provenance tracking. TRIGGERS - who created, trace origin, session archaeology, ADR reference.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Session log provenance tracking. TRIGGERS - who created, trace origin, session archaeology, ADR reference.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
user wants to send a WhatsApp message, share a link or document via WhatsApp, generate a wa.me click-to-chat link, or message a contact on WhatsApp by phone number.
Claude Code hooks development guide. TRIGGERS - create hook, PostToolUse, PreToolUse, Stop hook, hook lifecycle, decision block.
Deploy static HTML files to Cloudflare Workers with 1Password credential management.
Dual-channel notifications on watchexec events. TRIGGERS - watchexec alerts, Telegram+Pushover, file change notifications.
Generate custom Claude Code slash commands via guided question flow. TRIGGERS - create slash command, generate command, custom command.
Send Pushover notifications with UUID-linked verbatim JSONL audit trail. TRIGGERS - pushover notify, send pushover, observability alert, verbatim notification, fleet alert, pushover-lookup, audit log notification, push notification with UUID
| name | session-chronicle |
| description | Session log provenance tracking. TRIGGERS - who created, trace origin, session archaeology, ADR reference. |
| allowed-tools | Read, Grep, Glob, Bash, AskUserQuestion |
Excavate Claude Code session logs to capture complete provenance for research findings, ADR decisions, and code contributions. Traces UUID chains across multiple auto-compacted sessions.
CRITICAL PRINCIPLE: Registry entries must be self-contained. Record ALL session UUIDs (main + subagent) at commit time. Future maintainers should not need to run archaeology to understand provenance.
S3 Artifact Sharing: Artifacts can be uploaded to S3 for team access. See S3 Sharing ADR.
Self-Evolving Skill: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
| Directory | Committed? | Purpose |
|---|---|---|
findings/registry.jsonl | YES | Master index (small, append-only NDJSON) |
findings/sessions/<id>/iterations.jsonl | YES | Iteration records (small, append-only) |
outputs/research_sessions/<id>/ | NO | Research artifacts (large, gitignored) |
tmp/ | NO | Temporary archives before S3 upload |
S3 eonlabs-findings/sessions/<id>/ | N/A | Permanent team-shared archive |
Key Principle: Only findings/ is committed. Research artifacts go to gitignored outputs/ and S3.
Verify session storage, find project sessions, and check required tools (jq, brotli, aws, op).
Full scripts: Preflight Scripts
Summary of steps:
~/.claude/projects/ exists.jsonl filesjq, brotli, aws, op are installedRaw Claude Code session JSONL files are dangerous to share. They commonly contain real credentials (AWS keys, GitHub PATs, Telegram bot tokens, Tailscale API keys, 1Password service tokens), internal hostnames, Tailscale CGNAT IPs, emails, and other infrastructure secrets that leak into prompts via screenshots, env dumps, and shell commands.
Before zipping + uploading to S3, run the sanitizer:
SKILL_DIR="$(find $HOME/.claude/plugins/marketplaces/cc-skills -type d -name session-chronicle | head -1)"
"$SKILL_DIR/scripts/sanitize_sessions.py" \
--input /path/to/raw/claude-sessions-export-raw \
--output /path/to/sanitized/claude-sessions-export \
--report /path/to/redaction_report.txt
The sanitizer is field-aware (does not destroy UUIDs, tool-use IDs, or forex decimals — v1 had a 92% phone-regex false-positive rate that murdered structural identifiers) and covers:
tskey-*), CGNAT IPs (100.64–127.x.x), tailnet DNS (*.ts.net), tailnet namesops_*), op:// URLs, 32-char item IDs after op CLI contextCF_AppSessiondp.*), Docker PAT (dckr_pat_*), npm (npm_*), Supabase (sbp_*), SendGrid (SG.*)<bot_id>:<secret> format) — catches tokens pasted into env dumps.internal hostnames, 172.25.x.x private rangepassword=, api_key=, secret= declarations in JSON/YAML/env formatOutput: a redaction report listing per-pattern counts. Review before packaging to confirm nothing important was destroyed (sanity check: UUID integrity should be preserved).
S3 upload sequence: always raw → sanitize → zip → S3 → presigned URL. Never upload -raw/ directly.
When the skill is triggered, first identify what the user wants to trace:
AskUserQuestion:
question: "What do you want to trace provenance for?"
header: "Target"
multiSelect: false
options:
- label: "Research finding/session"
description: "Document a research session with full session context for reproducibility"
- label: "Specific code/feature"
description: "Trace who created a specific function, feature, or code block"
- label: "Configuration/decision"
description: "Trace when and why a configuration or architectural decision was made"
- label: "Custom search"
description: "Search session logs for specific keywords or patterns"
CRITICAL: Every registry entry MUST have GitHub username attribution.
AskUserQuestion:
question: "Who should be attributed as the creator?"
header: "Attribution"
multiSelect: false
options:
- label: "Use git config user (Recommended)"
description: "Attribute to $(git config user.name) / $(git config user.email)"
- label: "Specify GitHub username"
description: "I'll provide the GitHub username manually"
- label: "Team attribution"
description: "Multiple contributors - list all GitHub usernames"
CRITICAL: Default to ALL sessions. Registry must be self-contained.
AskUserQuestion:
question: "Which sessions should be recorded in the registry?"
header: "Sessions"
multiSelect: false
options:
- label: "ALL sessions (main + subagent) (Recommended)"
description: "Record every session file - complete provenance for future maintainers"
- label: "Main sessions only"
description: "Exclude agent-* subagent sessions (loses context)"
- label: "Manual selection"
description: "I'll specify which sessions to include"
IMPORTANT: Always default to recording ALL sessions. Subagent sessions (agent-*)
contain critical context from Explore, Plan, and specialized agents. Omitting them
forces future maintainers to re-run archaeology.
Before writing, show the user the full session_contexts array, then confirm:
AskUserQuestion:
question: "Review the session_contexts array that will be recorded:"
header: "Review"
multiSelect: false
options:
- label: "Looks correct - proceed"
description: "Write this to the registry"
- label: "Add descriptions"
description: "Let me add descriptions to some sessions"
- label: "Filter some sessions"
description: "Remove sessions that aren't relevant"
- label: "Cancel"
description: "Don't write to registry yet"
AskUserQuestion:
question: "What outputs should be generated?"
header: "Outputs"
multiSelect: true
options:
- label: "registry.jsonl entry (Recommended)"
description: "Master index entry with ALL session UUIDs and GitHub attribution"
- label: "iterations.jsonl entries"
description: "Detailed iteration records in sessions/<id>/"
- label: "Full session chain archive (.jsonl.br)"
description: "Compress sessions with Brotli for archival"
- label: "Markdown finding document"
description: "findings/<name>.md with embedded provenance table"
- label: "Git commit with provenance"
description: "Structured commit message with session references"
- label: "Upload to S3 for team sharing"
description: "Upload artifacts to S3 with retrieval command in commit"
AskUserQuestion:
question: "Link this to an existing ADR or design spec?"
header: "ADR Link"
multiSelect: false
options:
- label: "No ADR link"
description: "This is standalone or ADR doesn't exist yet"
- label: "Specify ADR slug"
description: "Link to an existing ADR (e.g., 2025-12-15-feature-name)"
- label: "Create new ADR"
description: "This finding warrants a new ADR"
Scan ALL session files, build the session_contexts array, and optionally trace UUID chains.
Full scripts: Archaeology Scripts
Summary of steps:
Two NDJSON files track provenance:
findings/registry.jsonl - Master index, one self-contained JSON object per linefindings/sessions/<id>/iterations.jsonl - Iteration-level tracking per sessionFull schema, examples, and field reference: Registry Schema Reference
| Field | Format |
|---|---|
id | YYYY-MM-DD-slug |
type | research_session / finding / decision |
created_at | ISO8601 timestamp |
created_by.github_username | MANDATORY GitHub username |
session_contexts | MANDATORY Array of ALL session UUIDs |
Brotli compression for session archival and structured git commit messages with provenance.
Full scripts and templates: Output Generation
Summary:
outputs/research_sessions/<id>/*.jsonl.br (gitignored)manifest.json with target_id, count, timestampALWAYS show the user what will be written before appending:
AskUserQuestion:
question: "Ready to write to registry. Confirm the entry:"
header: "Confirm"
multiSelect: false
options:
- label: "Write to registry"
description: "Append this entry to findings/registry.jsonl"
- label: "Edit first"
description: "Let me modify some fields before writing"
- label: "Cancel"
description: "Don't write anything"
Before this question, display:
After writing, verify:
# Validate NDJSON format
tail -1 findings/registry.jsonl | jq . > /dev/null && echo "Valid JSON"
# Show what was written
echo "Entry added:"
tail -1 findings/registry.jsonl | jq '.id, .created_by.github_username, (.session_contexts | length)'
1. PREFLIGHT
├── Verify session storage location
├── Find ALL sessions (main + subagent)
└── Check required tools (jq, brotli)
2. ASK: TARGET TYPE
└── AskUserQuestion: What to trace?
3. ASK: GITHUB ATTRIBUTION
└── AskUserQuestion: Who created this?
4. ASK: SESSION SCOPE
└── AskUserQuestion: Which sessions? (Default: ALL)
5. BUILD session_contexts ARRAY
├── Enumerate ALL main sessions
├── Enumerate ALL subagent sessions
└── Collect metadata (entries, timestamps)
6. ASK: PREVIEW session_contexts
└── AskUserQuestion: Review before writing
7. ASK: OUTPUT FORMAT
└── AskUserQuestion: What to generate?
8. ASK: ADR LINK
└── AskUserQuestion: Link to ADR?
9. GENERATE OUTPUTS
├── Build registry.jsonl entry (with iterations_path, iterations_count)
├── Build iterations.jsonl entries (if applicable)
└── Prepare commit message
10. ASK: FINAL CONFIRMATION
└── AskUserQuestion: Ready to write?
11. WRITE & VERIFY
├── Append to registry.jsonl
├── Append to sessions/<id>/iterations.jsonl
└── Validate NDJSON format
12. SANITIZE (MANDATORY before any S3 share)
├── Run scripts/sanitize_sessions.py on the staging directory
├── Review redaction_report.txt (verify no structural destruction)
└── Produce sanitized/ directory for downstream packaging
13. (OPTIONAL) S3 UPLOAD
├── Package sanitized/ directory (zip or brotli per-file)
└── Upload compressed archives, generate presigned URL if sharing externally
created_by.github_username always presentjq validation| Issue | Cause | Solution |
|---|---|---|
| Session storage not found | Claude Code not initialized | Start a Claude Code session first |
| No sessions in project | Wrong path encoding | Check encoded path matches ~/.claude/projects/ |
| jq parse error | Malformed JSONL | Validate each line with jq -c . individually |
| brotli not found | Missing dependency | Install with brew install brotli |
| S3 upload fails | Missing AWS credentials | Configure AWS CLI or use 1Password injection |
| UUID chain broken | Session compacted | Check related sessions for continuation |
| GitHub username missing | Attribution not set | Always require github_username in registry entry |
| Registry entry invalid | Missing required fields | Verify id, type, created_at, session_contexts exist |
After this skill completes, check before closing:
Only update if the issue is real and reproducible — not speculative.