🌐 English | 中文说明(直达中文版 README)
Four complementary agent skills for Claude Code / Codex / ZCode-style CLIs. Two of them read your local coding-agent session history (worklog, alllog). One reads git history only (change-report). The fourth (changelog) turns what actually changed — proven by files, diffs, commits, tests, or cloud records — into a numbered handoff table a mentor can read without reading your conversation.
They are instruction skills (SKILL.md + references + fixtures). There is no server to run. Copy a skill folder into your agent’s skills directory and the agent follows the file when you invoke it.
| Skill | Job | Trigger style | Storage grain |
|---|---|---|---|
| worklog | What did I do this week, written for a manager? | Auto-route from everyday phrases, or /worklog |
One week, named by Monday |
| alllog | What is worth putting on a résumé, grouped by project? | Manual /alllog only |
All time, named by record day |
| change-report | What did this git range change, written for a manager? | Everyday phrases or /change-report |
One git range, named by the oldest commit date |
| changelog | What actually changed, as a numbered mentor handoff table? | /changelog or everyday phrases |
Nothing on disk by default (optional image export) |
They never share files. worklog writes under your workspace 报告文档/需求/. change-report writes under workspace 报告文档/代码/<project>/. alllog writes under a user-configurable data root (ALLLOG_DATA_ROOT, default ~/alllog). changelog prints to the conversation and only writes anything (a PNG) if you ask for the export.
Prefer pictures over prose? Each skill has a dedicated ELI5 explainer page, in both Chinese and English — the links below go to the rendered pages served by GitHub Pages. (The eli5/*.html files in the repo are the same sources; GitHub’s file view shows HTML as code, not as a page.)
| Explainer | Skill | What it covers |
|---|---|---|
| 中文 · English | worklog | four-source mining → numbered candidates → gate confirmation → demand-narrative weekly report |
| 中文 · English | alllog | full-history résumé mining, coverage receipt, journal/digest layout |
| 中文 · English | change-report | pick a range → formal memo, read-only git, honest status labels |
| 中文 · English | changelog | 本次 vs 本功能 scope, final-state vs per-iteration, readability gate, three-value delivery status |
worklog (packaged as lzl-worklog) answers “what did I ship this week?” It can:
~/worklog global store vs workspace ./报告文档/需求/) and persist it.记录一下:…).docx skill is installed. Standup wording (站会 / 晨会) appends Scrum’s three questions.A scan checkpoint (.last-scan, one date line) lets the next mine start “from last scan” instead of re-asking you for a window. Logs are append-only; regenerating a report writes under 周报/ and never rewrites 日志/.
The report step can spawn up to four light agents — one per source (Agent-CC / Agent-Codex / Agent-Zcode / Agent-Minimax, see lzl-worklog/references/agent-team-contract.md). A skipped source spawns no agent and produces no empty draft.
alllog answers “what from my agent history belongs on a résumé?” It can:
全量记一下:… / 记简历:…).素材/整理/<today>.md); résumé-making reads only the newest digest.alllog never starts from casual chat. The words “素材库” or “记简历” in a normal conversation must not auto-invoke it. You have to type /alllog (or name the skill explicitly).
change-report answers “what did this git range change, in language a manager can read?” It is read-only on git (status / log / diff). It never commits, pushes, or resets.
--record / --range / --commit). Ask, then stop. Do not default to “last N commits” without saying so.docs/change-log.md for background.变更记录.md, write the markdown report, and ask a docx skill to render Word.Status labels are honest: draft (dirty tree), local-commit, pushed, or unknown. The skill will not invent a git state to make a workflow look complete.
It is also composable and resumable — the V3 execution model, which outranks any conflicting rule in the skill: you may invoke it before a commit, before a push, after a push, or retroactively to backfill a record; there is no required order. Re-invoking the same range shows or updates the markdown draft and re-renders it; the md source stays in md形式/. An optional local state index may record reported and the output paths, but neither the index nor the report content is ever auto-committed or auto-pushed.
changelog answers “what actually changed — and can a mentor who skipped this conversation understand each row?” It reads the conversation plus the smallest relevant evidence set (files, git, commits, PRs, tests, CI, cloud records, runtime logs — routed by intent, see changelog/references/evidence-routing.md).
Proof rule: a plan, a suggestion, or a discussion-only decision is never an item. If nothing provable changed, the skill prints exactly 本次未发现已经落实的改动,不生成变更表格。 and emits no empty table.
| worklog | alllog | change-report | changelog | |
|---|---|---|---|---|
| Audience | Manager / standup / weekly review | Future you writing a résumé | Manager / “what shipped in this diff” | Mentor receiving a handoff |
| Input | Agent session logs + your notes | Agent session logs + your notes | Git only (status / log / diff) |
Conversation + smallest relevant evidence (git / PR / tests / CI / cloud) |
| Who may start it | Everyday phrases or /worklog |
Only /alllog / an explicit name |
Everyday phrases or /change-report |
/changelog or everyday phrases |
| Time grain | This week (Monday-based file name) | All time (today’s date on each journal file) | One git range (oldest commit date) | This conversation or the effort’s full lifecycle (本次 / 本功能) — asked, never guessed |
| Dedup | Same [需求名] tag in this week’s log is skipped |
Same project and same point across all journal files is skipped | Same theme in that project’s 变更记录.md is skipped |
Evidence decides: no record, no row |
| Output shape | One demand: 背景 / 方案 / 落地 / 结果 | One project: 背景 / 技术栈 / 亮点 / 结果 / 素材记录 | One memo: 一句话目标 / 背景 / 本次改动 / 改动文件 / 验证结果 | Numbered table: 改动事项 / 原背景 / 本次实际改动 / 交付状态 / 验证结果 + file sections |
| Persistence | Workspace 报告文档/需求/ |
$ALLLOG_DATA_ROOT (default ~/alllog) |
Workspace 报告文档/代码/<project>/ |
Conversation only; optional PNG export |
Use all four. worklog is “what I owe this week.” change-report is “what this git range did.” changelog is “what actually changed, in mentor-readable rows.” alllog is “what I want on a résumé.”
Clone this repository, then copy each skill directory into the skills folder of every agent CLI you use. Do not copy the repo root; copy lzl-worklog/ (or worklog/), alllog/, change-report/, and changelog/ so each folder has its own SKILL.md at the top.
git clone https://github.com/solplum/log-skill.git
mkdir -p ~/.claude/skills
cp -R log-skill/lzl-worklog ~/.claude/skills/lzl-worklog
cp -R log-skill/alllog ~/.claude/skills/alllog
cp -R log-skill/change-report ~/.claude/skills/change-report
cp -R log-skill/changelog ~/.claude/skills/changelog
Windows PowerShell:
git clone https://github.com/solplum/log-skill.git
New-Item -ItemType Directory -Force "$env:USERPROFILE\.claude\skills" | Out-Null
Copy-Item -Recurse -Force log-skill\lzl-worklog "$env:USERPROFILE\.claude\skills\lzl-worklog"
Copy-Item -Recurse -Force log-skill\alllog "$env:USERPROFILE\.claude\skills\alllog"
Copy-Item -Recurse -Force log-skill\change-report "$env:USERPROFILE\.claude\skills\change-report"
Copy-Item -Recurse -Force log-skill\changelog "$env:USERPROFILE\.claude\skills\changelog"
git clone https://github.com/solplum/log-skill.git
mkdir -p ~/.codex/skills
cp -R log-skill/lzl-worklog ~/.codex/skills/lzl-worklog
cp -R log-skill/alllog ~/.codex/skills/alllog
cp -R log-skill/change-report ~/.codex/skills/change-report
cp -R log-skill/changelog ~/.codex/skills/changelog
Windows PowerShell:
git clone https://github.com/solplum/log-skill.git
New-Item -ItemType Directory -Force "$env:USERPROFILE\.codex\skills" | Out-Null
Copy-Item -Recurse -Force log-skill\lzl-worklog "$env:USERPROFILE\.codex\skills\lzl-worklog"
Copy-Item -Recurse -Force log-skill\alllog "$env:USERPROFILE\.codex\skills\alllog"
Copy-Item -Recurse -Force log-skill\change-report "$env:USERPROFILE\.codex\skills\change-report"
Copy-Item -Recurse -Force log-skill\changelog "$env:USERPROFILE\.codex\skills\changelog"
Restart the CLI after copying so it reloads skills.
Optional: set alllog’s data root before the first run (any absolute path you own):
export ALLLOG_DATA_ROOT="$HOME/Documents/resume-materials"
$env:ALLLOG_DATA_ROOT = "$env:USERPROFILE\Documents\resume-materials"
If you skip this, alllog uses ~/alllog (%USERPROFILE%\alllog on Windows).
| You type | Mode |
|---|---|
| First run | Gate ⓪ — pick storage location (~/worklog recommended vs ./报告文档/需求/) |
/lzl-worklog or /worklog with no extra words |
Gate ① — agent asks: full scan / mine recent work / quick note / weekly report? |
全量扫描 / 全量梳理 / 建初始底账 |
Mode A — full scan all history (skips Gate ② directly) |
记录一下:… / 记一下:… |
Mode B — quick capture |
梳理一下最近做了什么 / 梳理一下 |
Mode A — mine sessions |
周报 / 汇报 / 产出 / 站会 / 晨会 |
Report (standup adds Scrum’s three questions) |
| You type | Mode |
|---|---|
/alllog with no extra words |
Gate ① — agent asks: one line / mine material / roll up the library? |
全量记一下:… / 记简历:… |
Mode B — quick capture |
全量梳理 / 挖简历素材 |
Mode A — mine sessions |
接着上次挖 / 从上次停的地方继续 |
Mode A with “resume from last stop point” pre-selected |
素材库 / 汇总简历素材 / 出简历素材库 |
Rollup (only after /alllog is already running) |
Phrases in the alllog table are arguments to /alllog, not global auto-triggers.
| You type | Mode |
|---|---|
/change-report with no extra words |
Gate ① — pick a git range (uncommitted / unpushed / pushed-unmerged, or a SHA / range / record id) |
提交报告 / 改动报告 / 给上级的报告 / 这次改了什么 / change report |
Same skill; still stops at the range gate unless you already named a range |
本周工作总结 |
Same skill if you mean a git memo. If you mean a weekly narrative from sessions, use /worklog instead |
You can also pass --record <ID>, --range <base>..<head>, or --commit <SHA> so the agent skips the range picker.
| You type | What happens |
|---|---|
/changelog |
Scope gate first: 本次 or 本功能? Then granularity if iterations were superseded |
记录本次改动 / 比较本地与云端 / 有哪些还没提交 / 有哪些还没推送 |
Same skill; the scope gate still applies unless your wording already pins the scope (e.g. a cloud comparison) |
这个 PR 改了什么 / 今天改了什么 |
Routed to the named evidence set; conversation scope still asked when ambiguous |
发现页改造这个事做得怎么样 |
本功能全周期: effort lifecycle from its anchored origin to now |
changelog (this skill) is a report, not a CHANGELOG.md writer: it never creates or edits that file, never commits, pushes, merges, resets, or deploys.
date +%u, Monday = 1).报告文档/需求/日志/<Monday>.md.## MM-DD:## 08-12
- [记住我] 设计了登录勾选逻辑 + 30 天 token 续期
Never overwrite an older bullet.
## MM-DD section so recorded items are skipped) / last 7 days / from last scan (reads the .last-scan checkpoint; if absent, says so and re-offers the other options) / custom range. Ask, then stop.报告文档/需求/.last-scan..last-scan checkpoint.worklog/references/agent-team-contract.md). A skipped source spawns no agent and produces no empty draft.报告文档/需求/周报/md形式/<start>.md and delete all intermediate drafts (<start>-cc-draft.md, -codex-, -zcode-, -minimax-).报告文档/需求/周报/word形式/<start>.docx if a docx skill exists.Template (humanized 3-stage narrative, ready to speak in meetings):
# 产出汇报(<start> ~ <end>)
## 1. <action-driven result title>
- **痛点问题**:… # previous pain point or friction
- **关键改动**:… # key actions taken (no low-level config/command clutter)
- **实际效果**:… # outcome / missing → 待补充, never invent
## 下周重点与协作项
- **下周规划**:…
- **需要协调**:…
$TODAY=$(date +%F).$ALLLOG_DATA_ROOT/素材/日志/$TODAY.md.- [项目名] … under ## MM-DD.alllog/SKILL.md (CC session scan, Codex index-first, ZCode SQLite read-only, MiniMax Code messages.jsonl). Keep exclusion counts for the receipt.directory first and ask which projects. Ask, then stop. Do not default to “all projects.” The count must be the four-source total, never one source alone. MiniMax Code sessions carry no directory — cluster them into projects by topic keywords instead.素材/日志/.Read every 素材/日志/*.md (the journal is the only source of truth), group by [项目名], and write $ALLLOG_DATA_ROOT/素材/整理/<today>.md (today’s digest; same-day regeneration overwrites, the journal is never touched). If the journal is empty, tell you to capture or mine first. After writing, report the project count, the entry count and the file path, and note that résumé-making only needs this newest digest.
# 简历素材库(生成于 <YYYY-MM-DD HH:MM>,共 <N> 项目 <M> 条)
## 项目:<name>
- **背景**:…
- **技术栈**:…
- **亮点/难点**:…
- **结果/量化**:… # missing → 待补充
- **素材记录**:
- <MM-DD original lines>
git status --short or commits on the trunk). If not, stop.origin/main → main → master. Only if none exist, fall back to the last 5 commits and say so.docs/change-log.md.git diff --stat, selected file diffs, and git log <trunk>..HEAD. Missing “why” → 原因待确认. Missing tests → 未验证. Never invent either.变更记录.md (append-only). Write md形式/<range-start>.md. Ask a docx skill for word形式/<range-start>.docx. Keep the markdown source; if rendering fails, say so and leave the md for a manual retry. Finish by reporting the .docx path plus a short digest (one-line goal + theme list).<range-start> is git show -s --format=%cs <oldest-in-range>. Uncommitted-only ranges use today. If the target file already exists, confirm before overwrite.
Template:
# 变更报告 · YYYY-MM-DD
## 一句话目标
本次完成了<什么>,达成了<什么>。
## 背景
<1–2 formal sentences>
## 本次改动
**<theme>**
原因:<problem this theme fixes>
- <file/place + what changed + effect>
## 改动文件
<paths only, grouped by module>
## 验证结果
- <how + result, or 未验证>
Rules the skill will not bend:
git diff --name-only <trunk>..HEAD, grouped by module — paths only, one per line.changelog/references/evidence-routing.md (conversation for scope/reason; files, git, PR, tests, CI, cloud records, runtime logs only where the request makes them relevant). A conversation claim alone never proves a file changed.删除 2、4 / 合并 2 和 3 / 把 5 放到最前面): apply, renumber continuously, update file sections, return the full clean report.Cloud comparison (相比云端有哪些改动) splits the table into 本地未提交改动 / 本地独有改动 / 云端独有改动 with a 比较概览 count line and a 云端状态 header stating whether fresh remote metadata was actually obtained.
Highest priority in all four skills. After the agent shows options or candidates it must ask then stop. It must not scan, mine, write, or spawn helpers until you answer in a later turn.
| worklog | alllog | change-report | changelog | |
|---|---|---|---|---|
| ① | Bare /worklog (which mode?) |
Bare /alllog (which mode?) |
Which git range? | Scope: 本次 or 本功能? (+ granularity when iterations were superseded) |
| ② | Date range | Date range | Confirm the draft (especially “why”) | — (evidence routed by intent, not chosen by you) |
| ③ | Which log / report rows? | Which projects (when the set is large)? | — | — |
| ④ | — | Which résumé bullets? | — | — |
| closing | — | — | — | Remove items / export PNG |
Rules that are easy to violate and are therefore written in the skills:
都行, 好, 随便, “sure”, “whatever”) are not a choice. Ask again.报告文档/需求/
├── .last-scan # scan checkpoint, one YYYY-MM-DD line
├── 日志/<Monday>.md
└── 周报/
├── md形式/<start>.md
└── word形式/<start>.docx
Monday is computed as:
DOW=$(date +%u) # 1 = Monday
MONDAY=$(date -d "$(date +%F) -$((DOW-1)) days" +%F)
Any call during the week hits the same log file.
$ALLLOG_DATA_ROOT/ # default ~/alllog
└── 素材/
├── 日志/<YYYY-MM-DD>.md # append-only journal — the only source of truth
└── 整理/<YYYY-MM-DD>.md # per-project digest snapshot, regenerated per day
Resolve the root the same way the shipped helper does:
export ALLLOG_DATA_ROOT="$HOME/Documents/resume-materials"
python alllog/scripts/paths.py # prints the root
python alllog/scripts/paths.py --journal 2026-08-17 # journal file for that day
python alllog/scripts/paths.py --digest 2026-08-17 # digest file for that day
python alllog/scripts/paths.py --latest # newest journal day (resume-from stop point)
Put data outside the skill folder so a later git pull / recopy cannot wipe it.
报告文档/代码/
├── _projects.json # optional { "<git-root-path>": "<folder-name>" }
└── <project>/
├── 变更记录.md
├── md形式/<range-start>.md
└── word形式/<range-start>.docx
<project> is the mapped name in _projects.json, or the git root directory name. Same rule as the shipped helper:
python change-report/scripts/project_name.py /path/to/repo 报告文档/代码/_projects.json
changelog writes nothing to disk. The table lives in the conversation; the only file it may ever create is the PNG you explicitly request at the closing question, saved where you tell it.
worklog and alllog read the same four local stores. A missing store is skipped with a note. change-report does not read these stores; it only reads git. changelog reads them only when the routed evidence calls for it.
| Source | Path | Clock |
|---|---|---|
| Claude Code (CC) | ~/.claude/projects/**/*.jsonl |
"timestamp" in the JSONL, UTC. alllog dates a whole session by its last timestamp (multi-day sessions are not dropped); worklog filters individual records |
| Codex — alllog | ~/.codex/session_index.jsonl preferred (thread name + updated_at), folder scan as fallback |
index updated_at, UTC |
| Codex — worklog | ~/.codex/sessions/YYYY/MM/DD/*.jsonl + archived_sessions/ (flat, top level). Does not read the index — in real runs its thread_name is usually a useless “你好” |
file/folder names, local |
| ZCode | ~/.zcode/cli/db/db.sqlite (session / message / part) |
session.time_updated, epoch milliseconds |
| MiniMax Code | ~/.minimax/v2/sessions/YYYY/MM/DD/HH-MM-SS-mmm-session_*/messages.jsonl |
last message.timestamp in the file, epoch milliseconds — never the folder date |
| Antigravity (lzl-worklog) | Desktop (~/.gemini/antigravity/) + CLI (~/.gemini/antigravity-cli/) conversation_summaries.db & brain/*/transcript.jsonl |
last_modified_time, UTC (dual-source scan) |
Timezone (this is what drops Monday-morning work if you skip it):
date -d "<TS>" +%F) before comparing it to “this week” or “since START.”2026-08-12T02:00:00.000Z is 2026-08-12 10:00 in UTC+8. If you compare the raw Z date, 00:00–07:59 local land on the previous calendar day and disappear from the filter.astimezone() before comparing); Codex file names are already local.$START_MS=$(( $(date -d "$START 00:00:00" +%s) * 1000 )). “All history” uses 0. For MiniMax Code, filter by the last in-file timestamp, not the folder date — cross-day sessions would be dropped otherwise.Open the ZCode database read-only (mode=ro). The CLI keeps it open; a write handle will fight WAL. The same query lives in each SKILL.md and in */scripts/zcode_sessions.py (used by the unit tests).
User messages in those logs sometimes contain tokens or passwords. Candidates and written files must redact or drop them.
date -d. On macOS, use gdate or an equivalent.docx skill. If it is missing, the agent should say so and stop. change-report keeps the markdown source either way.CHANGELOG.md and never commits, pushes, merges, resets, or deploys. Its PNG export needs a browser screenshot capability; without one it says so.本周工作总结 is ambiguous: git memo → /change-report; weekly session narrative → /worklog; mentor handoff rows → /changelog.job-tailored-resume as a possible next skill. That skill is not in this repository.jsonl / SQLite dumps. Fixtures under */test/fixtures/ are fake.lzl-worklog/ # copy this folder into ~/.claude/skills/ and ~/.codex/skills/
SKILL.md
references/agent-team-contract.md
scripts/zcode_sessions.py
test/test-worklog.md
test/fixtures/
alllog/
SKILL.md
scripts/paths.py # ALLLOG_DATA_ROOT resolver + journal/digest paths
scripts/zcode_sessions.py
test/test-alllog.md
test/fixtures/
change-report/
SKILL.md
scripts/project_name.py # _projects.json → folder name
changelog/
SKILL.md
references/evidence-routing.md
references/output-format.md
agents/openai.yaml
eli5/ # one self-contained explainer page per skill (Chinese + English)
worklog.html
worklog.en.html
alllog.html
alllog.en.html
change-report.html
change-report.en.html
changelog.html
changelog.en.html
tests/ # unittest checks for this repo
From the repo root (Python 3.10+, standard library only):
python -m unittest discover -s tests -v
The suite calls the shipped paths.py, zcode_sessions.py, and project_name.py entry points, and checks that each SKILL.md still names its modes, gates, sources, and output templates — including changelog’s scope/granularity gates and delivery-status vocabulary — and that no published file contains author-machine paths.
Manual agent walkthroughs (fixtures only, no live sessions) are in worklog/test/test-worklog.md and alllog/test/test-alllog.md.
MIT. See LICENSE.
🌐 ↑ English(回到英文版顶部) | 中文
四个互补的 Claude Code / Codex / ZCode 系 agent 技能:从本机会话里整理给别人看的周报(worklog)和给简历用的项目素材(alllog);只读 git 的给上级看的变更备忘(change-report);以及把实际改动整理成带序号 Mentor 交接表的 changelog。
它们是 SKILL.md 指令技能,没有后台服务。把技能目录拷进 agent 的 skills 文件夹后,用对应斜杠命令即可。
| 技能 | 干什么 | 怎么触发 | 时间粒度 |
|---|---|---|---|
| worklog | 本周做了什么,写成需求叙事周报 | 日常口令或 /worklog |
按本周一归档 |
| alllog | 哪些内容值得写进简历,按项目归组 | 只能手动 /alllog |
按记录当天追加,全量积累 |
| change-report | 这段 git 改动改了什么,写成给上级的备忘 | 日常口令或 /change-report |
按范围内最旧 commit 日期命名 |
| changelog | 实际发生了什么改动,整理成带序号的交接表 | /changelog 或日常口令 |
本次对话或本功能全周期(每次必问) |
四者文件互不干扰。worklog 写在 报告文档/需求/;change-report 写在 报告文档/代码/<项目>/;alllog 写在你自己配置的数据根(环境变量 ALLLOG_DATA_ROOT,默认 ~/alllog);changelog 默认只输出在对话里,仅在你要求时导出 PNG。
看文字嫌累? 每个技能配了中英双语的大白话讲解页——下面的链接直达 GitHub Pages 渲染版(仓库里的 eli5/*.html 是同一批源文件;GitHub 的文件页对 HTML 只显示源码不渲染,别从那里点):
| 讲解页 | 技能 | 讲什么 |
|---|---|---|
| 中文 · English | worklog | 四源挖掘 → 候选清单 → 闸口确认 → 需求叙事周报 |
| 中文 · English | alllog | 全量挖简历素材、覆盖度回执、日志/整理双层布局 |
| 中文 · English | change-report | 圈范围 → 正式备忘、只读 git、诚实状态标记 |
| 中文 · English | changelog | 本次 vs 本功能、终态 vs 迭代、可读性闸门、交付状态三值 |
worklog(本仓库对应 lzl-worklog)回答「这周交差写什么」。特性:首次使用自动引导选择存储目录(推荐全局 ~/worklog 或工作区 报告文档/需求/ 并持久化记忆);支持一键「全量扫描(建初始底账)」(直接从全量历史起扫,不再重复询问时间段);日常用法支持口述一句就记(随手记)、扫描 CC / Codex / ZCode / MiniMax Code 四源会话(主动梳理,支持断点续扫)以及把本周日志收成「需求背景 / 方案 / 落地 / 结果」周报,需要的话再导出 Word,汇报时可并行派最多 4 个轻量 agent 分源提炼(契约见 lzl-worklog/references/agent-team-contract.md)。日志只追加;重跑周报只动 周报/,不动 日志/。
alllog 回答「哪些能写进简历」。三种用法:口述一条项目素材;挖历史会话(量大先按目录聚项目,每次候选必附四源覆盖度回执,杜绝静默漏挖);把 素材/日志/ 全量汇总成按项目归组的 素材/整理/<当天>.md 快照。对话里出现「素材库」「记简历」不得自动启动本技能,必须先打 /alllog。
change-report 回答「这段 git 改动,给上级怎么写」。只读 git status / log / diff,绝不 commit / push / reset。先圈范围(未提交 / 未推送 / 已推送未合并,或 --record / --range / --commit),起草正式备忘,你确认「为什么」之后才落 变更记录.md + md 报告,再委托 docx skill 出 Word。推断不出原因就标「原因待确认」,没跑测试就标「未验证」,绝不编造。它还是可组合、可恢复的(V3 执行模型,优先于技能内任何冲突规则):commit 前 / push 前 / push 后 / 补记都能调用,没有规定顺序;重复调用同一范围默认展示或更新 md 草稿再重渲染,md 源保留在 md形式/;可选的本地状态索引可记 reported 与输出路径,但索引和报告内容都绝不自动 commit / push。
changelog 回答「实际改了什么,导师没看对话能不能看懂每一行」。每次必问范围(本次会话的实际改动 vs 本功能全周期)、有被替代的迭代时再问粒度(只记终态 vs 逐版各一行),按 changelog/references/evidence-routing.md 路由到最小证据集(对话定范围和理由;文件、git、PR、测试、CI、云端记录只在请求涉及时才看——聊天里说改了不算改,必须有记录)。产出编号主表(改动事项 / 原背景 / 本次实际改动 / 交付状态 / 验证结果)+ 每条对应的「具体改动文件」小节;交付前逐行过可读性闸门(没读过对话的人一句白话能复述);交付状态只有 未上传 → 已上传 → 已部署 三值,验证结果必须写明来自哪个环境(本地 / CI / 云端 / 线上);部署依赖第三方拉取重建时保持 已上传 并附一行「部署说明」(谁拉哪个分支重建后才在线上生效)。交付后固定追问:删改哪几条、要不要把表格导出成图片。查无实据时只输出一句「本次未发现已经落实的改动,不生成变更表格」,绝不生成空表。
| worklog | alllog | change-report | changelog | |
|---|---|---|---|---|
| 读者 | 老板 / 站会 / 周报 | 以后写简历的自己 | 老板 / 「这次 diff 改了啥」 | 接手工作的导师 |
| 输入 | 助手会话 + 你口述 | 助手会话 + 你口述 | 只有 git | 对话 + 最小相关证据(git / PR / 测试 / CI / 云端) |
| 谁能启动 | 口令或 /worklog |
只有 /alllog 或点名 |
口令或 /change-report |
/changelog 或口令 |
| 时间 | 本周,文件名是周一 | 全量,文件名是今天 | 一段 git 范围,文件名是最旧 commit 日期 | 本次对话或本功能全周期(必问,不猜) |
| 去重 | 本周日志里相同 [需求名] 跳过 |
全部日志里「同项目且同要点」才跳过 | 该项目 变更记录.md 里同主题跳过 |
证据说了算:无记录 = 无条目 |
| 成稿 | 每个需求四段:背景 / 方案 / 落地 / 结果 | 每个项目五段:背景 / 技术栈 / 亮点 / 结果 / 素材记录 | 一句话目标 / 背景 / 本次改动 / 改动文件 / 验证结果 | 编号主表 + 具体改动文件小节 |
| 落盘 | 报告文档/需求/ |
$ALLLOG_DATA_ROOT(默认 ~/alllog) |
报告文档/代码/<项目>/ |
默认不落盘,仅按要求导出 PNG |
四个一起用:worklog 管「这周欠老板什么」,change-report 管「这段 git 干了什么」,changelog 管「实际改动怎么交接」,alllog 管「什么值得写上简历」。
先 clone,再把 技能目录本身 拷进各 CLI 的 skills 目录(目录顶层要有 SKILL.md)。
git clone https://github.com/solplum/log-skill.git
mkdir -p ~/.claude/skills
cp -R log-skill/lzl-worklog ~/.claude/skills/lzl-worklog
cp -R log-skill/alllog ~/.claude/skills/alllog
cp -R log-skill/change-report ~/.claude/skills/change-report
cp -R log-skill/changelog ~/.claude/skills/changelog
git clone https://github.com/solplum/log-skill.git
mkdir -p ~/.codex/skills
cp -R log-skill/lzl-worklog ~/.codex/skills/lzl-worklog
cp -R log-skill/alllog ~/.codex/skills/alllog
cp -R log-skill/change-report ~/.codex/skills/change-report
cp -R log-skill/changelog ~/.codex/skills/changelog
Windows PowerShell 与英文节同构,把四个目录 Copy-Item -Recurse 过去即可。拷完重启 CLI 重新加载技能。
可选:首次运行前设 alllog 数据根(任意你拥有的绝对路径):
export ALLLOG_DATA_ROOT="$HOME/Documents/resume-materials"
$env:ALLLOG_DATA_ROOT = "$env:USERPROFILE\Documents\resume-materials"
不设就用 ~/alllog(Windows 为 %USERPROFILE%\alllog)。
| 你输入 | 模式 |
|---|---|
| 首次运行 | 闸口⓪——选择存储目录(推荐全局 ~/worklog 或工作区 ./报告文档/需求/) |
/lzl-worklog 或 /worklog(不带别的字) |
闸口①——问:全量扫描 / 梳理最近做了什么 / 随手记 / 出周报? |
全量扫描 / 全量梳理 / 建初始底账 |
模式 A——全量挖掘历史全部会话(直接开始,免除闸口②) |
记录一下:… / 记一下:… |
模式 B——随手记录 |
梳理一下最近做了什么 / 梳理一下 |
模式 A——挖会话 |
周报 / 汇报 / 产出 / 站会 / 晨会 |
出周报(站会加 Scrum 三问) |
| 你输入 | 模式 |
|---|---|
/alllog(不带别的字) |
闸口①——问:记一条 / 挖素材 / 出素材库? |
全量记一下:… / 记简历:… |
模式 B——随手记录 |
全量梳理 / 挖简历素材 |
模式 A——挖会话 |
接着上次挖 / 从上次停的地方继续 |
模式 A,预选「从上次停点续挖」 |
素材库 / 汇总简历素材 / 出简历素材库 |
汇总(仅在 /alllog 已运行时) |
上表短语都是 /alllog 的参数,不是全局自动触发词。
| 你输入 | 模式 |
|---|---|
/change-report(不带别的字) |
闸口①——选 git 范围(未提交 / 未推送 / 已推送未合并,或 SHA / 区间 / 记录号) |
提交报告 / 改动报告 / 给上级的报告 / 这次改了什么 / change report |
同一技能;未点名范围时仍停在范围闸口 |
本周工作总结 |
指 git 备忘时归它;指会话叙事周报请用 /worklog |
也可传 --record <ID> / --range <base>..<head> / --commit <SHA> 跳过范围选择。
| 你输入 | 行为 |
|---|---|
/changelog |
先过范围闸口:本次还是本功能?有被替代的迭代再问粒度 |
记录本次改动 / 比较本地与云端 / 有哪些还没提交 / 有哪些还没推送 |
同一技能;话里已钉死范围的(如云端对比)不再重复问 |
这个 PR 改了什么 / 今天改了什么 |
按语义路由到对应证据集;范围仍歧义时先问 |
发现页改造这个事做得怎么样 |
本功能全周期:从事物起点锚定到现在的完整演进 |
本技能(changelog)是报告,不是 CHANGELOG.md 写手:绝不创建/编辑那个文件,绝不 commit / push / merge / reset / 部署。
date +%u,周一=1)。报告文档/需求/日志/<周一>.md。## MM-DD 节下追加 - [需求] 一句话。只追加,绝不覆盖旧条目。.last-scan 断点;无断点则说明并重新给其余选项)/ 自定义。问完即停。报告文档/需求/.last-scan。.last-scan 断点。worklog/references/agent-team-contract.md)。某源跳过就不派、不出空草稿。周报/md形式/<起点>.md,删除全部中间草稿(-cc- / -codex- / -zcode- / -minimax-)。周报/word形式/<起点>.docx。模板(人话三段式,组会直接念):
# 产出汇报(<起点> ~ <终点>)
## 1. <动宾平实成果标题>
- **痛点问题**:… # 之前有什么痛点、阻碍或低效
- **关键改动**:… # 本周采取了什么关键解决动作,去配置流水账
- **实际效果**:… # 现在达到了什么状态,带来什么实际改变;缺失标「待补充」
## 下周重点与协作项
- **下周规划**:…
- **需要协调**:…
$TODAY=$(date +%F)。$ALLLOG_DATA_ROOT/素材/日志/$TODAY.md。## MM-DD 节下追加 - [项目名] …。alllog/SKILL.md 内嵌的给死脚本扫描(CC 会话扫 / Codex 索引优先 / ZCode 只读 SQLite / MiniMax messages.jsonl),留存排除计数供回执。directory 聚项目问「挖哪些」。判断必须用四源合计数,禁止单看一个源。素材/日志/。读 素材/日志/*.md 全量(日志是唯一事实底账),按 [项目名] 归组,写 $ALLLOG_DATA_ROOT/素材/整理/<今天>.md(同日重生成覆盖,绝不动日志)。日志为空则提示先记先挖。生成后回执项目数、素材条数、文件路径,并注明「制作简历只需读这份最新整理快照」。
模板(五段:背景 / 技术栈 / 亮点/难点 / 结果/量化 / 素材记录)见上方英文节。
git status --short 或主干有 commit),否则退出。origin/main → main → master 第一个存在的;都没有才退回最近 5 条 commit 并说明。docs/change-log.md 补背景。git diff --stat、选中文件 diff、git log <主干>..HEAD 起草。缺「为什么」标 原因待确认,没测试标 未验证。变更记录.md(只追加)→ 写 md形式/<范围起点>.md → 委托 docx skill 出 Word,md 源保留;渲染失败要说明并保留 md 供手动重试。最后回执 .docx 路径 + 简要摘要(一句话目标 + 大点列表)。<范围起点> = 范围内最旧 commit 的 %cs 日期;纯未提交改动用今天;目标文件已存在先确认覆盖。
硬规矩:正式书面语;只写 文件/位置 + 改动 + 效果,报告里不出现代码、行号、命令;不带任何凭据与内网地址;主题最多 1–3 个,超了问你怎么砍;正文一页以内、每行 ≤ 25 字;小点按依赖链排序(设计/数据库 → 后端 → 前端);改动文件清单取自 git diff --name-only <主干>..HEAD,按模块分组、每行一个路径。
changelog/references/evidence-routing.md 路由最小证据集(对话定范围与理由;文件 / git / PR / 测试 / CI / 云端 / 运行日志只在请求涉及时看)。聊天说改了 ≠ 改了。云端对比(相比云端有哪些改动)分 本地未提交改动 / 本地独有改动 / 云端独有改动 三组,带 比较概览 计数行和 云端状态 头(如实写明是否真拿到了云端最新版本信息)。
四个技能的最高优先级规则。展示过选项/候选后必须 ask then stop(问完即停):你下一轮回复之前,禁止任何扫描、深读、落盘、派 agent。
| worklog | alllog | change-report | changelog | |
|---|---|---|---|---|
| ① | 裸 /worklog 问模式 |
裸 /alllog 问模式 |
选 git 范围 | 本次还是本功能(+ 迭代粒度) |
| ② | 日期范围 | 日期范围 | 确认草稿(尤其「为什么」) | —(证据按意图路由,不让你选通道) |
| ③ | 记哪些条? | 挖哪些项目? | — | — |
| ④ | — | 记哪些条目? | — | — |
| 收尾 | — | — | — | 删改条目 / 导出图片 |
写在技能里防违规的细则:
都行 / 好 / 随便)≠ 选择,必须再问。报告文档/需求/
├── .last-scan # 扫描断点,一行 YYYY-MM-DD
├── 日志/<周一>.md
└── 周报/
├── md形式/<起点>.md
└── word形式/<起点>.docx
DOW=$(date +%u) # 1=周一
MONDAY=$(date -d "$(date +%F) -$((DOW-1)) days" +%F)
周内任意调用都定位到同一份日志。
$ALLLOG_DATA_ROOT/ # 默认 ~/alllog
└── 素材/
├── 日志/<YYYY-MM-DD>.md # 只追加日志——唯一事实底账
└── 整理/<YYYY-MM-DD>.md # 按项目归组的汇总快照,每日重生成
export ALLLOG_DATA_ROOT="$HOME/Documents/resume-materials"
python alllog/scripts/paths.py # 打印数据根
python alllog/scripts/paths.py --journal 2026-08-17 # 该日日志文件
python alllog/scripts/paths.py --digest 2026-08-17 # 该日整理快照
python alllog/scripts/paths.py --latest # 最新日志日(续挖停点)
数据放技能目录外面,防止以后 git pull / 重新拷贝时被清掉。
报告文档/代码/
├── _projects.json # 可选 { "<git根路径>": "<目录名>" }
└── <项目>/
├── 变更记录.md
├── md形式/<范围起点>.md
└── word形式/<范围起点>.docx
<项目> = _projects.json 里的映射名,未映射用 git 根目录名。同款规则的脚本:
python change-report/scripts/project_name.py /path/to/repo 报告文档/代码/_projects.json
表格只在对话里。唯一可能产生的文件是你在收尾问题里明确要的 PNG,存到你指定的位置。
worklog 和 alllog 读同一批本地存储,缺哪个源跳过并提示。change-report 不读这些存储,只读 git。changelog 只在路由到的证据需要时才读。
| 源 | 路径 | 时间基准 |
|---|---|---|
| Claude Code(CC) | ~/.claude/projects/**/*.jsonl |
JSONL 内 "timestamp",UTC;alllog 以末条 timestamp 定会话日期(跨天会话不漏),worklog 按单条记录过滤 |
| Codex——alllog | ~/.codex/session_index.jsonl 首选(thread 名 + updated_at),目录扫描兜底 |
索引 updated_at 是 UTC |
| Codex——worklog | ~/.codex/sessions/YYYY/MM/DD/*.jsonl + archived_sessions/(顶层平铺);不读索引——实测索引 thread_name 多为「你好」 |
目录/文件名内嵌本地时间 |
| ZCode | ~/.zcode/cli/db/db.sqlite(session / message / part 三表) |
session.time_updated,epoch 毫秒 |
| MiniMax Code | ~/.minimax/v2/sessions/YYYY/MM/DD/HH-MM-SS-mmm-session_*/messages.jsonl |
文件内末条 message.timestamp,epoch 毫秒——禁用目录名日期过滤 |
| Antigravity(lzl-worklog) | 桌面端 ~/.gemini/antigravity/ + CLI ~/.gemini/antigravity-cli/ 双端同构(conversation_summaries.db + transcript.jsonl) |
last_modified_time,UTC |
时区(漏掉这步,周一早上的活就丢了):
date -d "<TS>" +%F)再和「本周 / 起点」比较。2026-08-12T02:00:00.000Z 在 UTC+8 是 08-12 10:00——直接比 Z 日期,本地 00:00–07:59 的记录会掉进前一天消失。astimezone() 转本地);目录/文件名已是本地时间。$START_MS=$(( $(date -d "$START 00:00:00" +%s) * 1000 )),挖全部传 0。MiniMax 必须用文件内末条时间戳过滤,跨天会话按目录名会漏。ZCode 库只读打开(mode=ro)——CLI 运行时正占用它,写句柄会和 WAL 打架。同一查询内嵌在两个 SKILL.md 里,*/scripts/zcode_sessions.py 是可执行副本(单测直接驱动)。
会话日志的用户消息里可能贴过密钥/token/密码:候选与落盘一律脱敏或省略。
date -d;macOS 请换 gdate。docx skill,缺了要说并停;change-report 无论如何保留 md 源。CHANGELOG.md,绝不 commit / push / merge / reset / 部署;PNG 导出需要浏览器截图能力,缺了要说明。本周工作总结 有歧义:git 备忘 → /change-report;会话叙事周报 → /worklog;交接表条目 → /changelog。job-tailored-resume 作为下游技能;那个技能不在本仓库。jsonl / SQLite 导出提交进仓库;*/test/fixtures/ 里都是假数据。lzl-worklog/ # 整个目录拷进 ~/.claude/skills/ 与 ~/.codex/skills/
SKILL.md
references/agent-team-contract.md
scripts/zcode_sessions.py
test/test-worklog.md
test/fixtures/
alllog/
SKILL.md
scripts/paths.py # ALLLOG_DATA_ROOT 解析 + 日志/整理路径
scripts/zcode_sessions.py
test/test-alllog.md
test/fixtures/
change-report/
SKILL.md
scripts/project_name.py # _projects.json → 目录名
changelog/
SKILL.md
references/evidence-routing.md
references/output-format.md
agents/openai.yaml
eli5/ # 每个技能一篇自包含讲解页(中英双语各一)
worklog.html
worklog.en.html
alllog.html
alllog.en.html
change-report.html
change-report.en.html
changelog.html
changelog.en.html
tests/ # 本仓库的 unittest 检查
仓库根目录(Python 3.10+,仅标准库):
python -m unittest discover -s tests -v
测试直接驱动随附的 paths.py、zcode_sessions.py、project_name.py,并检查每个 SKILL.md 仍写明自己的模式、闸口、数据源与输出模板——包括 changelog 的范围/粒度闸口与交付状态三值——以及任何发布文件里都没有作者机器路径。
手动 agent 走查(只用 fixtures,不碰真实会话)见 worklog/test/test-worklog.md 与 alllog/test/test-alllog.md。
MIT。见 LICENSE。