logging-session — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited logging-session (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill records coding session summaries to a local SQLite database stored in your local path, so you can later query and summarize your work across projects and time periods.
Coding sessions produce valuable knowledge — decisions made, problems solved, approaches tried and abandoned. Without capturing these, each session starts from scratch. This skill turns conversations into searchable, summarizable records that feed into daily standups, weekly reviews, and long-term project memory.
The database path is defined by db_path in config.json, defaulting to:
~/Library/Mobile Documents/iCloud~md~obsidian/Documents/vault4life/dev_knowledge.dbTo customize, edit <skill-path>/config.json.
If the database doesn't exist yet, initialize it:
python3 <skill-path>/scripts/init_db.pyThe script reads the path from config.json automatically. You can also specify a path manually:
python3 <skill-path>/scripts/init_db.py /path/to/your/dev_knowledge.dbCREATE TABLE dev_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
project_name TEXT NOT NULL,
session_id TEXT NOT NULL,
parent_id INTEGER DEFAULT NULL,
task_category TEXT,
user_query TEXT NOT NULL,
thought_process TEXT,
final_result TEXT,
file_paths TEXT,
git_hash TEXT,
extra_metadata TEXT,
FOREIGN KEY (parent_id) REFERENCES dev_logs (id)
);Record a session log entry when:
Do NOT record trivial interactions (quick questions, simple lookups, clarifications) unless the user asks.
When recording, you need to synthesize the conversation into a structured entry. Don't just copy-paste — distill the essence.
Collect these fields from the conversation and environment:
| Field | Source | Notes |
|---|---|---|
project_name | Current working directory's folder name | Use basename $(pwd) or equivalent |
session_id | Generate from date + random suffix | Format: YYYYMMDD_xxxx (e.g., 20260513_a3f2) |
parent_id | If this continues a previous log entry, use that entry's ID | Otherwise null |
task_category | Classify the task: bugfix, feature, refactor, debug, setup, docs, test, other | |
user_query | The user's original question or task description | In the user's own words when possible |
thought_process | Your analysis approach, alternatives considered, key decisions | Concise but informative — this is the "how" |
final_result | What was actually done, the outcome | Include key code changes, file paths, or resolution |
file_paths | Files that were created or modified | Comma-separated |
git_hash | Current HEAD commit hash if in a git repo | Run git rev-parse --short HEAD |
extra_metadata | Any additional context as JSON | Optional |
Run the save script:
python3 <skill-path>/scripts/save_log.py \
--project "<project_name>" \
--session "<session_id>" \
--query "<user_query>" \
--thought "<thought_process>" \
--result "<final_result>" \
--category "<task_category>" \
--files <file1> <file2> \
--git "<git_hash>"For fields with spaces or special characters, wrap in quotes. The --parent, --category, --files, --git, and --meta flags are optional.
After saving, tell the user:
Example: "Session logged as #5 — recorded the auth bug fix in project my-app."
When the user asks for a summary (daily, weekly, or custom range):
# Last 7 days for current project
python3 <skill-path>/scripts/query_logs.py \
--project "<project_name>" \
--days 7 \
--format markdown
# Today's logs across all projects
python3 <skill-path>/scripts/query_logs.py \
--days 1 \
--format markdown
# Specific date range (YYYYMMDD format, inclusive)
python3 <skill-path>/scripts/query_logs.py \
--start-date 20260501 \
--end-date 20260515 \
--format markdown
# Specific session's full thread
python3 <skill-path>/scripts/query_logs.py \
--session "<session_id>" \
--format aimarkdown — structured Markdown with headers by date (good for reports and Obsidian)ai — plain text blocks, compact (good for feeding back to AI)json — raw JSON array (good for programmatic processing)When the user asks to summarize work by project for the past week or generate a weekly report, use weekly_summary.py. This script groups entries by project, shows task category breakdowns, and lists individual session details — all in a clean markdown table format.
Trigger phrases: "总结过去一周的工作", "本周工作总结", "生成周报", "项目周报", "weekly summary", "summarize past week's work"
# All projects, past 7 days
python3 <skill-path>/scripts/weekly_summary.py --days 7 --format markdown
# Single project, past 14 days
python3 <skill-path>/scripts/weekly_summary.py --project "my-app" --days 14
# Specific date range (YYYYMMDD format, inclusive)
python3 <skill-path>/scripts/weekly_summary.py \
--start-date 20260501 \
--end-date 20260515 \
--format markdown
# Export to Obsidian
python3 <skill-path>/scripts/weekly_summary.py \
--format markdown \
--output ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/vault4life/周报-$(date +%Y-W%V).md
# JSON for programmatic use
python3 <skill-path>/scripts/weekly_summary.py --format jsonThe markdown output includes an overview section (total entries, projects involved, time period) and per-project sections with task category distribution tables and session detail tables.
When the user wants to save the summary as an Obsidian note:
python3 <skill-path>/scripts/query_logs.py \
--days 7 \
--format markdown \
--output ~/Library/Mobile\ Documents/iCloud~md~obsidian/Documents/vault4life/Weekly-$(date +%Y-W%V).mdWhen triggered by the Stop hook (session is ending), you are the last action in this conversation. Your job: synthesize the entire conversation into one log entry and write it to the database.
The Stop hook is configured in ~/.claude/settings.json. See references/hooks-guide.md for full setup details.
| Category | Description |
|---|---|
bugfix | Fixed a bug or error |
feature | Added new functionality |
refactor | Restructured code without changing behavior |
debug | Investigated an issue (may not have fixed it) |
setup | Project setup, configuration, dependencies |
docs | Documentation work |
test | Writing or fixing tests |
other | Anything else |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.