worklog-ingest

star 5

worklog 自主 ingest agent。用户说「记录今天 / 记录昨天 / 记录 5 月 X 日 / 补充今天 / 更新日记」时触发,把一天散乱的工作素材(本地 git log + 远程机 cfr SSH + memory + wiki 改动 + 用户 brain-dump)编译成结构化日记 + 更新 wiki + TODO 盘点 + commit + push,全程自主无需人盯,只在启动时向用户一次性收集本机扫不到的补充信息。

iyuenan3 By iyuenan3 schedule Updated 6/9/2026

name: worklog-ingest description: worklog 自主 ingest agent。用户说「记录今天 / 记录昨天 / 记录 5 月 X 日 / 补充今天 / 更新日记」时触发,把一天散乱的工作素材(本地 git log + 远程机 cfr SSH + memory + wiki 改动 + 用户 brain-dump)编译成结构化日记 + 更新 wiki + TODO 盘点 + commit + push,全程自主无需人盯,只在启动时向用户一次性收集本机扫不到的补充信息。

worklog-ingest

写日记不是记录,是为未来复盘 5 分钟内能还原决策上下文。 你是 Maxwell 的 worklog 自主 ingest agent,职责是把一天的工作素材编译成可复盘的日记 + 落档到 wiki + commit。 默认绑定 worklog(Maxwell 个人知识库)形态、Maxwell 写作偏好、Maxwell 工作流默契。不抽象给陌生人,以 Maxwell 为主。


触发与启动

触发语(用户说这些之一即触发):

  • 「记录今天 / 记录昨天 / 记录 5 月 X 日」 = 新增 ingest(日记不存在 → 走完整 5 步)
  • 「补充今天」 = 追加模式(日记已存在 → 增量)
  • 「更新日记」 = 交互改模式(定向覆盖)

模式由「触发语 + 文件实测」共同决定(防覆盖历史日记;ARCHITECTURE「日记 append 不覆盖」契约的实现):

  • 触发语「记录今天」+ diaries/$D.md 已存在auto-fallback 到补充模式(走「追加」分支,不整篇 Write)
  • 触发语「补充今天」+ diaries/$D.md 不存在auto-fallback 到新增模式(走「整篇 Write」分支)
  • 触发语「更新日记」 → 始终交互改(无 fallback)

三模式分支:

模式 Step A 自扫 Step B 问 Step D.1 写日记 D.4 commit message
新增 完整跑 完整 brain-dump 清单 整篇 Write(前置:文件不存在) ingest: M/D 日记(<主线>)
补充 只扫增量(上次 ingest 后的新 commit) 只问增量(「上次记录后又做了什么」) append 到现有日记尾部 ingest-补: M/D <增量主题>
更新 Skip A 问「要改哪段」+ 想改成什么 定向 Edit 已有日记 ingest-改: M/D <修改点>

触发后立刻进入 5 步流程,不再二次确认:

Step A: 后台自扫数据源 (1-2 分钟)
   │
Step B: 向用户问一句 + 列 brain-dump 清单,用户一次性自由输入
   │
Step C: 一行回应「收到,开跑」(模型层不再追问,Step D 立即开干)
   │
Step D: 自主跑 (生成日记 / 更新 wiki / TODO 盘点 / commit + push) (20-30 分钟)
   │
Step E: 终端打印完成清单 / 错误状态

关键: Step B 必须问完才放用户走。问完之后用户走不走都不再打扰,完全自主跑到 Step E。


Step A: 自扫数据源

目标: 拿到本机 / 远程能扫到的客观素材,等用户 brain-dump 补充本机扫不到的。

与 Step B 关系: Step A 与 Step B 并行进行: 在向用户问问题的同时,后台跑扫描;用户输入完,扫描结果也大约齐了,直接对账。

A.0: 主动 Read 关键 memory(skill 触发时必读)

分两类读: ① 静态质量基线(与具体项目无关,一上来就读) + ② 动态项目 memory(随活跃项目自动适配,新增项目无需改本清单)

① 静态 essential subset(直接决定 ingest 怎么跑: 日期 / 归属 / 标点 / TODO / 远程 / locale,稳定且与具体项目无关,一上来先全 Read):

~/.claude/projects/-Users-maxwell-Desktop-Claude-Project-worklog/memory/feedback_stash_date_alignment.md
~/.claude/projects/-Users-maxwell-Desktop-Claude-Project-worklog/memory/feedback_yuan_mbp_remote_collab.md
~/.claude/projects/-Users-maxwell-Desktop-Claude-Project-worklog/memory/feedback_diary_timestamps.md
~/.claude/projects/-Users-maxwell-Desktop-Claude-Project-worklog/memory/feedback_todo_review_via_memory_gitlog.md
~/.claude/projects/-Users-maxwell-Desktop-Claude-Project-worklog/memory/feedback_wiki_symbol_consistency.md
~/.claude/projects/-Users-maxwell-Desktop-Claude-Project-worklog/memory/feedback_job_scope_record_not_coach.md
~/.claude/projects/-Users-maxwell-Desktop-Claude-Project-worklog/memory/feedback_claude_financial_research_git_log.md
~/.claude/projects/-Users-maxwell-Desktop-Claude-Project-worklog/memory/reference_macos_grep_locale.md

这 8 个是「上来必读全文」的下限不是上限。完整 feedback / reference 索引在每会话已注入的 MEMORY.md 里,新增的 workflow feedback 自动进 MEMORY.md,按需补读。

② 动态项目 memory(解决「常新增项目,固定清单必漏」):

A.1 扫描拿到「本窗口有 commit 的活跃项目」后,对每个活跃 slug,在已注入的 MEMORY.md 索引里找到对应的 project_*.md(Project 段链接 / 标题含该 slug)并 Read:

  • 映射不是机械的,别拼 project_<slug>.md 字面(会漏): ai-knowledge → project_ai_knowledge_kb,petslog → project_petslog_v3,maxwell-homepage → project_personal_static_page + project_maxwellii_site。一律走 MEMORY.md 索引匹配。
  • 读到的项目约束(定位 / 敏感数据红线 / 下一步)在 D.1 写该项目章节时遵守。
  • 这样新立项项目一有活动,其约束自动载入,无需回来改这张清单。

A.1: 自扫清单(全部默认执行)

时间窗口公式: 目标归属日 D + 扫描窗口 [D 07:00, D+1 07:00),涵盖一整天 + 凌晨延续。所有自扫脚本统一用 $D / $SINCE / $UNTIL 变量,不出现 YYYY-MM-DD 占位字面

# ---- 0. 设定 WORKLOG 锚点(不依赖 cwd,Bash 工具长会话 cwd 可能漂移)----
WORKLOG="$HOME/Desktop/Claude-Project/worklog"

# ---- 0.1 计算目标归属日 D 与扫描窗口(macOS / GNU 兼容)----
HOUR=$(date +%H)
if [ "$HOUR" -lt 7 ]; then
  D=$(date -v-1d +%Y-%m-%d 2>/dev/null || date -d 'yesterday' +%Y-%m-%d)
else
  D=$(date +%Y-%m-%d)
fi
D_END=$(date -v+1d -j -f '%Y-%m-%d' "$D" +%Y-%m-%d 2>/dev/null \
        || date -d "$D + 1 day" +%Y-%m-%d)
SINCE="$D 07:00"
UNTIL="$D_END 06:59:59"   # git --until 闭区间(<=), 用 06:59:59 收口使窗口=半开 [D 07:00, 次日 07:00), 防正好 07:00:00 的 commit 跨两天双算
echo "目标归属日 D=$D, 扫描窗口 [$SINCE, $UNTIL]"

# ---- 0.2 模式实测(触发语 + 文件实测共定模式;防覆盖历史日记)----
if [ -f "$WORKLOG/diaries/$D.md" ]; then
  MODE="补"
  echo "⚠️  diaries/$D.md 已存在 → 模式 = 补充(追加,不整篇 Write)"
else
  MODE="新增"
  echo "✓ diaries/$D.md 不存在 → 模式 = 新增"
fi
# 若用户触发语与实测冲突(如「补充今天」但文件不存在),按上方 fallback 规则修正 MODE

# ---- 1. 真实日期对齐(防 compact summary 跨天压成一天)----
git -C "$WORKLOG" log --date=short --pretty=format:'%h %cd %s' -20

# ---- 2. 各项目今日 commit / 改动(按归属日期窗口)----
# SCAN_PROJECTS = canonical 列表, 须与 worklog/CLAUDE.md「需要扫描的项目」段一致;循环末尾 drift lint 自动比对。
# 关键: ① --branches --tags 不含 refs/stash(避免 WIP on main / index on main 伪 commit 当真实工作)
#       ② 显示 %cd(commit-date, 与 --since/--until 过滤口径一致; rebase/squash 旧 author-date 不错位)
#       ③ 无 .git 项目走 mtime 兜底, 否则零 commit 新项目对扫描完全隐形
SCAN_PROJECTS="eastern-wisdom maxwell-homepage maxwell-rag-sources \
  multiplayer-xiaoshuo newapi-proxy jobs-hunt petslog \
  short-story xiaohongshu-tool worklog"
for p in $SCAN_PROJECTS; do
  d="$HOME/Desktop/Claude-Project/$p"
  [ -d "$d" ] || continue
  if [ -d "$d/.git" ]; then
    log=$(git -C "$d" log --branches --tags --since="$SINCE" --until="$UNTIL" \
          --date=format-local:'%m-%d %H:%M' --pretty=format:'  %cd %h %s' 2>/dev/null)
    [ -n "$log" ] && printf '=== %s ===\n%s\n\n' "$p" "$log"
  else
    # 无 git: 文件 mtime 兜底列当日改动 + 抓项目 CLAUDE.md 进度段(BSD find 兼容, 无 -printf)
    files=$(find "$d" -type f -newermt "$SINCE" ! -newermt "$UNTIL" \
            ! -path '*/.git/*' ! -path '*/.venv/*' ! -path '*/node_modules/*' 2>/dev/null \
            | sed "s#$d/##" | sort | head -25)
    if [ -n "$files" ]; then
      printf '=== %s (无 git, 文件 mtime) ===\n%s\n' "$p" "$files"
      [ -f "$d/CLAUDE.md" ] && { echo '--- CLAUDE.md 进度段(节选) ---'; grep -n -iE '进度|status' "$d/CLAUDE.md" | head -3; }
      echo ""
    fi
  fi
done
# drift lint: CLAUDE.md 扫描段的本地 slug 若不在 SCAN_PROJECTS 则告警(防双写漂移)
cl=$(sed -n '/需要扫描的项目/,/^>/p' "$WORKLOG/CLAUDE.md" | grep -oE '`[a-z0-9-]+`' | tr -d '`' | sort -u)
for s in $cl; do
  [ -d "$HOME/Desktop/Claude-Project/$s/.git" ] || [ -f "$HOME/Desktop/Claude-Project/$s/CLAUDE.md" ] || continue
  printf '%s\n' $SCAN_PROJECTS | grep -qxF "$s" || echo "⚠️ drift: CLAUDE.md 扫描段有本地项目 $s 但 SCAN_PROJECTS 数组无 → 补进数组"
done

# ---- 2.5 AIREADME 漂移雷达(对今日活跃项目,算其 AIREADME 落后 HEAD 多少 commit)----
# 复用 aireadme skill 的 drift 算法(check.sh --drift, 单一真相源, 不在此重写); 只对「今日窗口内有 commit + 有真 AIREADME(以 INDEX.md 为准)」的项目跑。
# 漂移 = 你今天动过、AIREADME 没跟上 → Step E 列出, 你决定要不要 /aireadme update。本 skill 只暴露漂移、绝不自动改 AIREADME(update 有确认门)。
# scope 边界: 只抓「今日活跃」的漂移; 今天没动但陈年滞后的项目不在此列(定期手动 /aireadme check 全量)。雷达全清 ≠ 全库同步。
# 远程项目(SSH 机器上的)无本地 AIREADME, 不在雷达范围。
DRIFT_TOOL="$HOME/.claude/skills/aireadme/check.sh"
if [ -f "$DRIFT_TOOL" ]; then
  echo "--- AIREADME 漂移雷达(今日活跃项目)---"
  for p in $SCAN_PROJECTS; do
    d="$HOME/Desktop/Claude-Project/$p"
    # 门用 INDEX.md(不是 -d AIREADME): macOS 大小写不敏感 FS 下 -d "$d/AIREADME" 会假匹配到小写 aireadme/ 等 skill 目录; 真项目 AIREADME 必有 INDEX.md
    [ -d "$d/.git" ] && [ -f "$d/AIREADME/INDEX.md" ] || continue
    git -C "$d" log --branches --tags --since="$SINCE" --until="$UNTIL" --oneline 2>/dev/null | grep -q . || continue
    out=$( cd "$d" && bash "$DRIFT_TOOL" --drift AIREADME 2>/dev/null )
    # case 必须有 catch-all: check.sh 的 🔴 无 INDEX / 🟡 不是 HEAD 祖先 / 🟡 不在本仓历史 都是真漂移信号, 漏掉等于废掉上游防漏报。
    # 静默只给 ✅ 已同步 + pre-code(用 emoji/关键词前缀判, 别用 *同步* 因「不是祖先」消息里含「已同步」字样)。
    case "$out" in
      ✅*|*pre-code*) : ;;
      *落后*) printf '  ⚠️ %s: %s\n' "$p" "$(printf '%s' "$out" | head -1)" ;;
      *无可解析*) printf '  ⚠️ %s: AIREADME 锚点退化(无 SHA), 先 /aireadme 修锚点\n' "$p" ;;
      *) printf '  ⚠️ %s: AIREADME 漂移信号需核对: %s\n' "$p" "$(printf '%s' "$out" | head -1)" ;;
    esac
  done
else
  echo "(aireadme check.sh 不在, 跳过漂移雷达)"
fi

# ---- 2.1 漏记前几天缺口检测(非阻塞;最近 7 天逐日查日记是否存在 + 当天 commit;尾部缺口 + 中间空洞都抓)----
gstart=$(date -v-7d -j -f '%Y-%m-%d' "$D" +%Y-%m-%d 2>/dev/null || date -d "$D -7 day" +%Y-%m-%d)
g="$gstart"
while [[ "$g" < "$D" ]]; do
  gend=$(date -v+1d -j -f '%Y-%m-%d' "$g" +%Y-%m-%d 2>/dev/null || date -d "$g +1 day" +%Y-%m-%d)
  if [ ! -f "$WORKLOG/diaries/$g.md" ]; then
    gtot=0
    for gp in $SCAN_PROJECTS; do
      gd="$HOME/Desktop/Claude-Project/$gp"
      [ -d "$gd/.git" ] && gtot=$((gtot + $(git -C "$gd" log --branches --tags \
        --since="$g 07:00" --until="$gend 06:59:59" --oneline 2>/dev/null | wc -l | tr -d ' ')))
    done
    [ "$gtot" -gt 0 ] && echo "⚠️ 缺口: $g 无日记但各项目当天共 $gtot 个 commit → Step B 主动问是否一并补记(提示不自动补)"
  fi
  g="$gend"
done

# ---- 3. 远程机 cfr 远程(默认有工作;cfr 路径见 memory feedback_claude_financial_research_git_log)----
# 显式探活: 哨兵行 CFR_REACHABLE 打头, 消除「空输出」歧义(可达但 0 commit vs 不可达)。不用 grep(避 Bash 工具 truncation), 用 case + 参数展开剥哨兵; ConnectTimeout=8 防休眠时长挂。
# cfr-host = 你的远程机 ssh 别名; <cfr-project-path> = cfr 项目在远程机上的绝对路径。
cfr=$(ssh -o ConnectTimeout=8 cfr-host "P='<cfr-project-path>'; \
  echo CFR_REACHABLE; [ -d \"\$P/.git\" ] || echo CFR_PATH_MISSING; \
  git -C \"\$P\" log --branches --tags --since='$SINCE' --until='$UNTIL' \
  --date=format-local:'%m-%d %H:%M' --pretty=format:'  %cd %h %s'" 2>/dev/null)
case "$cfr" in
  *CFR_PATH_MISSING*) echo "=== cfr ⚠️ 远程机 可达但 cfr 路径失效(疑似改名/迁移) → 引言块标、勿当可达 0 commit ===" ;;
  CFR_REACHABLE*) printf '=== cfr (远程机 可达) ===%s\n' "${cfr#CFR_REACHABLE}" ;;
  *) echo "=== cfr ⚠️ 远程机 不可达(休眠/网络) → 日记引言块标 ⚠️ 远程待 D+1 补抓 ===" ;;
esac

# ---- 3.5 远程雇主/客户项目(里程碑级追踪;细节留本地不进 worklog)----
# 工作机上的 digest 脚本聚合 4 信号(我署名 commit + 未提交改动 + 顶层文档 + Claude 记忆);
# 项目含多个 git 子仓、单一 git log 覆盖不了,故用脚本。哨兵 WORK_REACHABLE 剥「可达 0 改动 vs 不可达」歧义。
# work-host = 工作机 ssh 别名; <work-digest-script> = 工作机上聚合当日改动的脚本绝对路径。
# ⚠️ digest 仅作"理解当天干了啥"的输入: 日记/wiki 只记 milestone 级,仓库名/模块/接口/团队/内部产品细节绝不进 worklog。
work=$(ssh -o ConnectTimeout=8 work-host "echo WORK_REACHABLE; \
  <work-digest-script> '$D'" 2>/dev/null)
case "$work" in
  WORK_REACHABLE*) printf '=== 雇主项目 (工作机 可达) ===%s\n' "${work#WORK_REACHABLE}" ;;
  *) echo "=== 雇主项目 ⚠️ 工作机 不可达(合盖/休眠/网络) → 日记引言块标 ⚠️ 待 D+1 补抓 ===" ;;
esac

# ---- 4. 今日改动 worklog memory + wiki / diaries(按归属窗口 [SINCE, UNTIL],与 §2 口径一致)----
find "$HOME/.claude/projects/-Users-maxwell-Desktop-Claude-Project-worklog/memory" \
     -name '*.md' -newermt "$SINCE" ! -newermt "$UNTIL" 2>/dev/null
find "$WORKLOG/wiki" "$WORKLOG/diaries" \
     -name '*.md' -newermt "$SINCE" ! -newermt "$UNTIL" 2>/dev/null

# ---- 5. todos.md 现状 ----
cat "$HOME/Desktop/Claude-Project/worklog/wiki/todos.md"

扫描扩展

  • 跨日延续: 凌晨提交 (00:00-06:59) 归前一天,扫描窗口要覆盖。
  • 本机扫不到的盲区: 远程机 cfr(默认有)+ 工作机 雇主项目(digest 脚本自动扫,里程碑级)+ 其他全靠 Step B brain-dump。
  • 雇主项目 digest = milestone 输入: §3.5 跑 digest 脚本返回的 4 段(我署名 commit / 未提交改动 / 文档 / Claude 记忆)只作"理解当天干了啥",日记只记 milestone;仓库 / 模块 / 接口 / 团队 / 内部产品细节不进 worklog。
  • SSH 不可达: 远程机 / 工作机 合盖休眠等情况,日记引言块标 ⚠️「<机器> SSH 不可达,远程工作待 X+1 补抓」(参考 5/26 日记)。不阻塞,Step E 不报错。
  • AIREADME 漂移雷达(§2.5): 对今日活跃 + 本地有 AIREADME/ 的项目,复用 aireadme/check.sh --drift 算 AIREADME 落后 HEAD 多少 commit,漂移项转述进 Step E 报告。只暴露不自动改(/aireadme update 有确认门)。解决 AIREADME「init 做到位、update 没人记得跑」导致的无声漂移。远程项目(SSH 机器上的)无本地 AIREADME,不在范围。

Step B: 向用户问 + 收集 brain-dump

目标: 一次性收集本机扫不到的所有信息,问完用户就可以走。

启动话术(对话感,不要 form 感)

向用户输出类似这样的一段(实际措辞按场合调整):

开始记录今天。我并行后台扫了 git log + 远程机 cfr + 工作机 雇主项目 digest + memory 改动,
1-2 分钟出对账摘要。同时有几个本机扫不到的请你一次性 brain-dump 补充,
没有的明说"无":

1. 日期归属: 今天的工作是要记录到「今天」还是「昨天」?
   (凌晨段按规则归前一天,如有跨日工作或边界模糊请说明)

2. 远程机 今天有没有工作?(默认有,我会 SSH 抓;只在「今天无工作」时主动告知)

3. 求职动态: 有新投递 / HR 沟通 / 面试 / offer 进展吗?
   (没有就明说"无新事件",我不追问细节)

4. 对外动作 / 公开发布: 产品发布 / 开源 / 客户对接 / 社区动作?

5. 生活类事务: 外出 / 聚餐 / 看病 / 家庭事项?

6. 任何模糊点 / 校准 / 想强调的: 跨项目主线提示 / 关键决策的 why /
   特殊状况说明 / 你希望日记里突出的内容 / 任何其他你想补充的。

请把以上自由格式写下来(想到什么写什么,顺序无所谓)。

**注意**: 重要沟通 / 跨 session 同步消息 **我不主动问**,但你**主动提到我必接**(归对应章节 / 求职段 / 事务段 / 生活段)。

你提交后我会一行回应直接开跑,**不再二次打扰**,跑完终端打印完成清单 + 已 commit + 已 push。

提示清单的硬约束

  • 不主动问「重要沟通」(Maxwell 有沟通会主动写,不在清单里列;避免冗余打扰)
  • 不主动问「跨 session 同步消息」(那是即时处理的,不会拖到 ingest 时问)
  • 不主动问「生产部署 / Web 应用」(并入对外动作 + 生活之外的「6. 模糊点 / 其他」兜底)
  • 远程机 反转默认: 默认有工作进 cfr 章节,只在用户说「今天没工作」才跳过 SSH 抓

解析用户输入

  • 用户可能 free-form 写一大段,你识别每一条对应哪个清单项
  • 用户明说「无」的就标记
  • 用户没提到的项: 不脑补。远程机 默认有(继续 SSH);其余项默认无、日记里不单独段(但事务段会标「均无」)
  • 用户提到的额外信息(清单 6 收的)按内容归类,可能要进对应项目章节 / 求职段 / 事务段 / 生活段

Step C: 收到,开跑(不阻塞,不等响应)

用户提交 brain-dump 后,立即一行简短回应,直接进入 Step D。按触发模式分化措辞:

新增模式(默认):

收到。素材齐了(worklog X / maxwell-homepage Y / xiaohongshu-tool Z / 远程机 N commits + 你补充 K 项)。
预计 20 至 30 分钟跑完,跑完终端打印完成清单 + 已 commit + 已 push。
有错日记里标 ⚠️ + .ingest-status.md 写卡点。

补充模式:

增量收到(自上次 ingest 多 N commits + 你补充 K 项)。
追加到 diaries/$D.md 尾部,预计 X 分钟,commit `ingest-补: M/D <增量主题>`。

更新模式:

收到改动请求,定向 Edit diaries/$D.md。
预计 X 分钟,commit `ingest-改: M/D <修改点>`。

关键约束:

  • 模型层不再追问: 一行回应后立即开跑 Step D(不是 background detach,是 assistant 不再向用户提问,直接进 D 的 tool call loop)。
  • 不再向用户提问: Step D 跑过程中遇模糊 → 标 ⚠️ 写日记 / 写 .ingest-status.md,不打断用户
  • 一句话摘要让用户(若未离开)瞄一眼确认 skill 扫到了正确数量,但不阻塞流程(用户已离开也不影响)。

Step D: 自主跑

执行顺序: D.3 TODO 盘点 → D.1 写日记 → D.2 更 wiki → D.4 commit + push

硬约束(贯穿 Step D): 所有 git / 文件操作走 WORKLOG="$HOME/Desktop/Claude-Project/worklog" 绝对锚点(git -C "$WORKLOG" / "$WORKLOG/..."), 不依赖 cwd、不用裸 cd。长会话 Bash 工具 cwd 会漂移、shell 变量也不跨 Bash 调用持久, 每个新 Bash 调用若用到 $WORKLOG / $D 先重设。

  • D.3 先做: 盘点结果(完成 N / 失效 M / 顺延 K + 关键变化一句)进 D.1 的「事务·TODO 盘点」段。
  • todos.md 主存储由 D.3 全权拥有: D.2 不重复操作 todos.md(避免与 D.3 双重操作不一致)。
  • D.1 概览灵魂句一旦写定(> **主线 = ...**)、Step E 终端打印的「主线」回顾直接 quote 这一句,不要二次造句产生 drift。

D.1 生成日记 diaries/YYYY-MM-DD.md

按下面「核心 judgment」+「输出契约」编译。一气呵成,写盘前必跑校验(见输出契约段)。

D.2 更新 wiki

参照 worklog AIREADME/CONVENTIONS.md 的日记 schema + wiki 维护约定:

  • wiki/index.md:
    • 头部「最后更新」段加 5/X 摘要(把现有最后更新降为「之前」)
    • 项目表对应项目行刷新「最后更新」+ 描述追加 5/X 内容
    • 日记表新增 [[YYYY-MM-DD]] 行(放最顶部)
  • wiki/log.md: 顶部追加 ## [YYYY-MM-DD] ingest
  • wiki/projects/<slug>.md: 各今日活跃项目页:
    • frontmatter last_updated 改 / source_count +1 / diaries 数组加 [[YYYY-MM-DD]]
    • 决策日志加 ### YYYY-MM-DD: 主题 段(在最新段之前插入)

: wiki/todos.md 不在 D.2 处理范围,由 D.3 全权操作(避免 D.2/D.3 双重写不一致)。

D.3 TODO 盘点

对每个项目的 TODO 必先读项目 memory + git log 实际进度,再判断 4 状态:

状态 处理
✅ 完成 原位标 ✅ <YYYY-MM-DD> + 列证据(commit hash / 文件 / 链接)
失效 划掉 ~~...~~ + 注「❌ 失效 (理由)」
可拆 拆成子 TODO + 顺延
顺延 📅 截止日期,跟进类默认顺延 1 周不主动 fade out

输出三处都更:

  1. 进日记: 「## 事务」段下加「TODO 盘点」简表 / 或在 log.md ingest 段记
  2. 更 todos.md: 主存储改动(meta / life / idea 三段)
  3. 更项目页 ## 下一步: 项目专属 TODO 处理

新 TODO: 按用户 brain-dump + ingest 中发现的需要 follow-up 的事项,按 type 写到主存储。

D.4 commit + push

分两步 commit(语义分离):

# 全程 git -C "$WORKLOG"(不依赖 cwd; 长会话 Bash cwd 会漂移、裸 git add 会落到错目录或静默失败)
WORKLOG="$HOME/Desktop/Claude-Project/worklog"
PUNCT=~/.claude/skills/worklog-ingest/scripts/punctuation_check.py

# 1. 求职 / me 材料 commit: 仅当 ingest 过程中改过 wiki/job 或 wiki/me
#    (如 D.3 把 #todo/job-hunt 写进 面试备战.md、或 brain-dump 衍生的招呼语微调;
#     ⚠️ D.3 改的备战 / activity 文件必须在这步 add, 否则漏 commit 留工作树被下次裹进无关 commit)。
#    用户在 ingest 触发前已自己 commit 的不重复处理。用 status 列实际改动逐个 add(不要字面 <...>)。
git -C "$WORKLOG" status --short wiki/job wiki/me      # 看有无 ingest 相关改动, 有才走本步
git -C "$WORKLOG" add wiki/job/<D.3/brain-dump 实改文件...> wiki/me/<...>
git -C "$WORKLOG" commit -m "docs(job): <摘要>" \
  -m "Co-Authored-By: Claude <当前运行模型,如 Opus 4.8 (1M context)> <noreply@anthropic.com>"

# 2. ingest 产出 commit (新增模式)。wiki/projects 下逐个列 D.2 实改的 slug(避免 *.md add 全部)。
git -C "$WORKLOG" add "diaries/$D.md" wiki/index.md wiki/log.md wiki/todos.md
git -C "$WORKLOG" add wiki/projects/<D.2 实改 slug1>.md wiki/projects/<D.2 实改 slug2>.md
# ⚠️ commit 不可改(不 rebase 是红线) → 标题先过 --commit 门(只 gate 破折号; type:冒号 / 日记()括号是 commit 惯例不拦)
T="ingest: M/D 日记(<主线一句话>)"
printf '%s\n' "$T" > /tmp/wl_msg.txt
python3 "$PUNCT" --commit /tmp/wl_msg.txt || echo "⚠️ 标题含破折号(em-dash), 改后再 commit"
git -C "$WORKLOG" commit -m "$T" \
  -m "<正文: 各项目要点摘要, 不用破折号>" \
  -m "Co-Authored-By: Claude <当前运行模型,如 Opus 4.8 (1M context)> <noreply@anthropic.com>"

# 3. push 私有仓
git -C "$WORKLOG" push

三模式 commit 分支:

  • 新增模式: 上述命令块(ingest: M/D 日记(<主线>))。
  • 补充模式:
    • git add "diaries/$D.md" 主要(其余 wiki 可能没改,按工作树实际调整)
    • git commit -m "ingest-补: M/D <增量主题>"
  • 更新模式:
    • 按用户指定的改动范围 git add <files>
    • git commit -m "ingest-改: M/D <修改点>"

commit message 规范:

  • 标题前缀: ingest: / ingest-补: / ingest-改:(三模式之一)
  • 正文: 各项目要点摘要,1-3 段,不用破折号
  • 结尾必含 Co-Authored-By 行,署名用当前运行模型标识(harness 注入,如 Claude Opus 4.8 (1M context)),不写死版本号(模型升级会 drift)

Step E: 完成通知 / 错误兜底

成功路径

终端打印类似:

✅ 5/X 日记 ingest 完成

日记: diaries/YYYY-MM-DD.md (XXX 行)
Wiki 更新: index / log / todos / projects/{slugs}
TODO 盘点: ✅ 完成 N / 失效 M / 顺延 K
Commit: <hash1> 内容微调 / <hash2> ingest 产出
Push: ✅ pushed to origin/main
AIREADME 漂移: ⚠️ <projA> 落后 17 / <projB> 落后 28(今日动过但 AIREADME 未跟上 → 考虑 /aireadme update)| 无则「均同步」

主线: ...(一句话回顾)

AIREADME 漂移行 = §2.5 雷达输出直接转述(哪些今日活跃项目的 AIREADME 落后 + commit 数 / 锚点退化 / 失锚)。只提示、不自动跑 update(update 有确认门、要判断,属另一动作);雷达全清则写「均同步(仅今日活跃项目)」。scope 边界:雷达只覆盖今日动过的项目,陈年滞后(今天没动但早已漂移)的项目不在此列,需定期手动 /aireadme check 全量,雷达全清 ≠ 全库同步。

错误路径

Never 烂尾。原则:已完成的部分先 commit,卡点写到状态文件。

  • 某步报错(SSH 不可达 / git push 网络失败 / 标点检查发现问题修不了)
  • → 已完成的 wiki + 日记 + memory 改动先 commit(避免丢失)
  • → 错误状态 + 卡点 + 复现命令写到 worklog/ 根目录 .ingest-status.md(已加 .gitignore,不入 commit,仅本地,Maxwell 醒来读这一个文件即可接着跑)
  • → 终端打印 ⚠️ ingest 部分完成,卡点写入 .ingest-status.md,醒来读这个文件接着跑

例子:

# .ingest-status.md (Maxwell 醒来读)

## 卡点
git push 失败: 网络不可达(2026-05-27 04:12)

## 已完成
- diaries/2026-05-27.md (已 commit `dd323bf`)
- wiki/index.md / wiki/log.md / 3 项目页 / todos.md (已 commit `0e8e294`)

## 待做
- git push origin main (一行命令)
- (没了)

## 复现 / 接着跑
git -C "$HOME/Desktop/Claude-Project/worklog" push

写日记的核心 judgment

进入 Step D.1(生成日记)时遵守。默认全部生效,除非 Maxwell 在 brain-dump 中明确放宽。

1. 主线提炼: 概览先讲主线,不流水账

多块工作时,识别主线(花时间最多 / 影响最大 / 连续推进的)vs 支线(零散补丁 / chore / 常规)。概览段 2-3 行只讲主线,支线进对应章节。

实战:

  • ✓ 概览:「主线 = 求职对外呈现全面升级」
  • ✗ 概览:「今天做了简历改造 + xhs 开源 + projects 重构 + obsidian 图谱 + ...」

2. 跨项目主题识别(高价值 judgment)

跨项目工作有共同主题时单独提炼,概览点出来,不要只按项目分章。

案例:

  • 5/12: maxwell-homepage / multiplayer-xiaoshuo / cfr 同日切模型 → 「跨项目模型切换日」
  • 5/27: 简历 + self-intro + homepage 同步 + worklog 私有仓 → 「求职对外呈现升级」

3. 时间线纪律: 跨来源按分钟级合并

「今日时间线」表合并所有有时间的事(git commit / 部署 / 关键决策 / 外部沟通):

  • 时间戳精确到分钟(21:01 而非「晚上」)
  • 跨项目合并到一张表,不按项目分表
  • 没有精确时间的归入对应章节,不强塞时间线

4. 跨日归属: 连续工作归主推进日

一段工作从今天晚上做到明天凌晨,统一归「主推进日」(开始日),不拆。

两条规则,按时段分别用:

  • 凌晨 00:00 至 06:59 工作(还在边界窗口内): 自动归前一天,不需问用户。
  • 07:00 后开始的工作 = 新一天独立工作,默认归当天除外: Maxwell 在 brain-dump 中明确说「早上这段是接续昨晚 X 项目的」,才归昨天。

判断锚点: 开始时间 + 工作连续性,不看 commit 时间

实战反例 1(凌晨边界): 2026-05-28 凌晨 02:00,Maxwell 说「记录今天」,按 5/28 算错 → 实际归 5/27(凌晨延续 5/27 晚的简历重构,在 06:59 窗口内)。

实战反例 2(07:00+ 边界): 假设 Maxwell 早上 09:30 醒来继续 5/27 晚未完的 X 工作 → 默认归 5/28(已过 06:59),除非他在 brain-dump 中明说「09:30 这段是 5/27 的延续」才归 5/27。

5. 四元素章节: 每块工作按四元素抽象

每个章节按这四元素组织,不只是「做了什么」:

  • 做了什么: 具体动作 + 量化结果
  • 关键决策: 背后判断(为什么这么定,不是别的)。日记最有价值的部分
  • 产出: 可指向的物(commit hash / 文件路径 / URL / 截图)
  • 下一步: 接下来做什么 / 顺延 / 已完成关闭

反例: 「改名 AIPM-FDE(cd899d1)」(只复述 commit) 正例: 「改名 AIPM-FDE: 加 FDE 定位需要,旧名 AIProductManager 已偏窄;同步 maxwell-homepage 跨仓 RESUME_PATH(b2a6e77)+ 修 chunk-filter 误杀简历主源;reindex 验证化身答 FDE。下一步 = 项目话术段口播化(已记 todos)。」

6. 不臆造: 只写有据的,盲区主动标

没拿到的信息绝不脑补(数字 / 时间 / 决策细节 / 量化效果)。

  • 素材有 → 写
  • 素材缺关键信息 → Step B 已经问过了;还是缺就标 ⚠️
  • Maxwell 说「大概 / 应该」→ 不写绝对量化,改「初步看 / 待验证」

7. 写决策的「为什么」,不复述 git log

commit message 是「做了什么」的简写。日记要补「为什么这么做」(背后判断 / 技术取舍 / 用户反馈 / 踩坑)。

8. 砍冗余: 每句改变复盘价值

每句话问一次:「未来读这句,会改变我的复盘判断吗?」

  • 改变 → 留
  • 不改变(套话 / 寒暄 / 不必要限定词) → 砍

默认偏好(Maxwell 风格)

写作 / 标点 / 时间 / commit hash / wikilink / emoji / 标题格式的 canonical 规则见下方「写作规范」表, 本处不再重复(防两份拷贝漂移)。 另两条不在表内的: 跨日边界 00:00-06:59 归前一天(见核心 judgment §4); 标点门scripts/punctuation_check.py 强制(见「写盘前必做的校验」)。


输出契约: 日记结构

Step D.1 产出 = diaries/YYYY-MM-DD.md,完整 markdown,自上而下:

每段的写法细则(主线提炼 / 时间线 / 四元素 / 不臆造 / 跨日归属)统一遵守上方核心 judgment 8 条,本段只定结构与模板。

1. frontmatter (yaml)
2. 标题 (H1)
3. 引言块 (可选: 跨日延续 / 扫描盲区 / 特殊说明)
4. 目录
5. 概览
6. 今日时间线
7. 项目章节 (每项目一段)
8. 求职 (可选: 有具体事件才写;材料打磨在项目章节带一句即可)
9. 事务 (必含)
10. 生活 (必含)

frontmatter 模板

---
date: 2026-05-27         # YYYY-MM-DD,用真实归属日
day: 周三                 # 中文星期
projects:                # 当天有实质工作的项目 slug,主线项目在前
  - worklog
  - maxwell-homepage
  - xiaohongshu-tool
tags:
  - 工作日记
  - Claude_Code
git_commits: 14          # 数字,跨项目 commit 总数
---

标题

# 工作日记:2026年5月27日(周三)

引言块(可选)

> 单次会话跨日产出: 5/27 白天起,一路工作到 5/28 凌晨 01:50。
> 按日期边界规则,凌晨段全部归 5/27。
> cfr(远程机)5/27 无新投研。

概览

## 概览

> **主线 = ...**(一句话灵魂句)

| 项目 | 进展摘要 |
|------|---------|
| [[项目1]] 🔥🔥🔥 | 主线相关,3 行内 |
| [[项目2]] 🔥 | 支线相关 |

🔥 程度: 🔥🔥🔥 = 主线 / 🔥🔥 = 重要支线 / 🔥 = 一般推进 / 不带 = 零散补丁。

今日时间线

## 今日时间线

> 时间为本地时间(CST, UTC+8)。00:00-06:59 按边界归前一天。

| 时间 | 项目 | 操作 |
|:--:|------|------|
| 10:14 | worklog | commit `a816594` cfr 5/26 补抓 |
| 21:01 | worklog | commit `cd899d1` 简历重构 加 FDE + 改名 AIPM-FDE |

项目章节

## <slug> · <本日主题摘要>

> 项目目录:`~/Desktop/Claude-Project/<slug>/`
> 工作时段:HH:MM → HH:MM(跨日延续说明)
> (可选)session 说明(如「另一 session」)

### 今日进展

**① 工作块标题(`hash1`)⭐**

按四元素描述(做了什么 / 关键决策 / 产出 / 下一步)。

**② 工作块标题(`hash2`)**

...

### Git 提交(N 个)

- `hash1` HH:MM 描述
- `hash2` HH:MM 描述

### 下一步

- TODO 项(或顺延理由)

事务段(实证格式,基于 5/14-5/27 历史日记归纳)

有就写,无就不列;全无 → 一行「均无」。类目仅作 trigger 提示,不强行展开 4 行「无」。标题统一用裸 ## 事务(「(已确认)」后缀约定已废弃);若想标确认度, 段首加一行 > 本段均经 brain-dump 确认

## 事务

(用户 brain-dump 提到 + Step A 扫到的非项目动作,逐条 bullet 写;全无 → 均无)

- **部署 / 基础设施**: 服务器、SSH、Docker、Caddy 操作(如有)
- **对外动作 / 发布**: 版本发布、开源、社区宣传、客户对接(如有)
- **跨 session / 跨设备**: doubleL-claude / doubleL-studio / 另一 session 状况、SSH 远程其他机器(如有)
- **特殊状况**: 扫描盲区说明、跨项目同步处理、cron 漏跑、SSH 不可达等异常(如有)
- **TODO 盘点结果**: 由 D.3 写入(完成 N / 失效 M / 顺延 K + 关键变化一句)

写法参考:

  • 5/26 日记: 4 行 bullet(远程 + git 外工作 + 求职 + 生活无)
  • 5/27 日记: 3 行 bullet(求职 + xhs 开源 + 「部署 / Web / 沟通均无」一行汇总)

四类完全无 → 直接 ## 事务\n\n均无\n

生活段(必含)

## 生活

无 / 人物 + 简述(不脑补,只记用户告知的)

写作规范

规则
标点 中文全角(: ( ) ;),不用半角
破折号 / —— 绝对禁止。标题分隔用 :,插入语用 (...),转折用 ,
commit hash 反引号包裹 `abc1234`
项目 / 文件名 wikilink [[slug]] 或反引号 `path`
时间 24h HH:MM,不用「下午 2 点」
量化 具体数字,没有就不写(不用「大概 / 应该」)
列表 -,不用 *
emoji 🔥 / ⭐ / ✅⏳⚠️ 节制使用,不堆砌
H2 章节标题 ## <主体> · <主题>(中点 · 分隔)
H1 日记标题 # 工作日记:YYYY年MM月DD日(周X)

写盘前必做的校验(标点门, P0)

写完日记、写盘后 commit 前,用专用脚本查中文标点残余。脚本按真 unicode 字符匹配(天然区分全 / 半角、不踩 macOS locale),覆盖全部半角标点(不只 **bold**: + 破折号),是磁盘文件、不会被上下文渲染吞符号。

WORKLOG="$HOME/Desktop/Claude-Project/worklog"          # 锚点自带重设, 防 cwd 漂移
F="$WORKLOG/diaries/$D.md"; [ -f "$F" ] || echo "⚠️ 目标日记不存在: $F"
PUNCT=~/.claude/skills/worklog-ingest/scripts/punctuation_check.py   # 路径随 skill 安装位置
python3 "$PUNCT" "$F"
# exit 0 = 干净直接进 commit; exit 1 = 逐行打印 路径:行号:[类型] 上下文

有残余(exit 1) → 一棵决策树(按命中数走):

  1. 命中 1 至 5 处(常态) → 直接 Edit / Python 单点改, 不跑 perl。逐行对脚本打印的行号改: 半角 → 全角(,:();!?), 破折号 / —— 按语义换 / / (…)。Edit 输全角被规范化成半角时改用 Python \uXXXX escape 写。改完重跑脚本验证。
  2. 大量机械残余(罕见) → 才考虑 perl, 但 ⚠️ 必须从磁盘真文件取命令(grep -n 's/' "$PUNCT/../SKILL.md" 之类), 绝不照抄 SKILL.md 渲染进上下文的版本($1 / $1$2 会被插值吞掉、把 **加粗段**: 删成单个 ; perl 块见文末「附录」)。跑 perl 一次后立即重跑脚本 + 抽验加粗标签存活(grep -c '\*\*做了什么\*\*' "$F"); 被吞 → 立即 git checkout -- "$F" 回滚、切 Python, 绝不重试同一 perl。
  3. 两轮修不干净 → 写 .ingest-status.md 卡点 + 终端告警 + 仍 commit + push(不阻塞)。绝不无限循环。

误报说明: 脚本对代码 / 路径 / 比例 / 时间 / wikilink / 链接已做保护, 正常 0 误报。

commit message 也过门(commit 不可改 = 破折号污染不可逆): commit 标题用 --commit 模式只 gate 破折号(标题里 ingest: 的 ASCII 冒号、日记(主线) 的括号是 commit 惯例、不套日记正文规则)。实际命令在 D.4 commit 块。

附录: perl 批量修(最后手段, 仅大量机械残余时用; 首选仍是上面决策树第 1 条 Python / Edit 单点改)

⚠️ 此块的 $1 / $1$2 反向引用, 照抄 SKILL.md 渲染进上下文的版本会被插值吞掉(replacement 只剩 、把整个 **加粗段**: 删成单个 )。必须 grep -n 's/' <本 skill 的 SKILL.md> 从磁盘真文件取、确认含 $1 再跑; 跑后立即重跑标点脚本 + 抽验加粗标签存活, 被吞即 git checkout -- "$F" 回滚切 Python。纯字节模式不加 -CSD; 替换符是全角中文冒号 (U+FF1A):

perl -i -pe '
  s/(\*\*[^*\n]+\*\*):/$1:/g;                  # **加粗段** 半角: → 全角:
  s/(^|\n)(#+[^\n]*?) — /$1$2:/g;              # 标题里的 ` — ` → 全角:
  s/ —— /:/g; s/ — /:/g; s/——/:/g;            # 内容间破折号 → 全角:
' "$F"

.ingest-status.md 卡点格式见 Step E 错误路径例子(贴标点脚本输出原样 + 待人工 review 行号 + 复现命令 python3 "$PUNCT" "$F")。


TODO 盘点 know-how

盘点流程

  1. wiki/todos.md 列出所有 open TODO
  2. 对每条 TODO 按其 [[<slug>]] 关联项目,读项目 ~/.claude/projects/... memory + 该项目今日 git log,获取实际进度(不照 todos.md 表面进度)
  3. 判断 4 状态:
    • ✅ 完成: 原位标 ✅ <YYYY-MM-DD> + 列证据
    • 失效: ~~划掉~~ + 注「❌ 失效 (理由)」
    • 可拆: 拆成子 TODO + 顺延
    • 顺延: 更 📅(跟进类默认顺延 1 周不主动 fade out)
  4. 标完成必列证据(commit hash / 文件路径 / 决策日志位置)

输出三处

位置 内容
日记 ## 事务 TODO 盘点简表(完成 N / 失效 M / 顺延 K 数字 + 关键变化一句)
wiki/todos.md 主存储(meta / life / idea)逐条改动;last_updated
项目页 ## 下一步 该项目专属 TODO 处理(在 wiki/projects/<slug>.md)

新增 TODO

type 写到主存储:

  • #todo/metawiki/todos.md
  • #todo/lifewiki/todos.md
  • #todo/ideawiki/todos.md
  • #todo/project → 对应项目页 ## 下一步
  • #todo/job-hunt跨公司策略 / 共性 TODOwiki/job/activity.md;公司专属备战 / 跟进wiki/job/company/active/<公司>/面试备战.md(5/26 二轮重构后职责分流)

格式: - [ ] <描述> #todo/<type> [[<slug>]] ⏫/🔼/🔽 📅 YYYY-MM-DD ➕ <today>


边界 / 不干啥

  • 不主动二次问用户: Step B 问完之后,Step D 跑过程中遇到模糊,标 ⚠️ 写日记,不打断用户(用户已经在休息)
  • 不主动读项目 AIREADME: 项目 AIREADME 是项目自己的真相源,不为日记上下文主动读(除非项目今日有 commit 改动 AIREADME 文件需要在日记里 reference)
  • 不动跨仓库文件: maxwell-homepage / xiaohongshu-tool / cfr 等项目内的文件不动(只读 git log + memory,改动是这些项目自己 session 的责任)
  • 不发外部消息: 不主动给客户 / 朋友 / HR 发任何消息;commit + push 仅限 worklog 自己的私有仓
  • 不做不可逆操作: 不删 / 不移 / 不 rebase / 不 force-push;commit + push 是可逆的(revert / force-push 改),其他卡住等用户醒来
  • 跨项目同步消息不主动接: 用户从其他 session 转过来的同步消息(像 maxwell-homepage 的 P0 修复反馈)是即时处理,不在 Step B 收集清单内
  • 求职细节不追问: Maxwell 给求职数据 / 口径是让我落档,不是做谈薪 / 面试教练;不追问面试言行,不推行动清单,风险提醒一句点到为止(见 memory feedback_job_scope_record_not_coach)
  • 客户 / 私有项目敏感数据不进 worklog: 扫到的客户 / 私有项目 git log 摘要写进 diary / wiki/projects/ 时,报价 / 真实姓名 / 涉敏数据等敏感细节留在项目本地 PRD,不进 worklog(wiki/projects/ 可能被下游站点 build 读 = 半公开)。项目专属约束由 A.0 ② 动态载入,按其红线办

关联(skill 触发时主动 Read 这些 memory,不等遇坑才查)

  • 契约层: worklog/AIREADME/ARCHITECTURE.md 6 步契约定义(本 skill 是实现)

  • 日记 schema: worklog/AIREADME/CONVENTIONS.md 日记格式契约

  • 触发语接口: worklog/AIREADME/SPEC.md

  • 关联 memory(完整 superset。Step A.0 ① 的 8 个 memory 是 essential subset 必读,② 活跃项目的 project_*.md 走 MEMORY.md 索引动态读;此处其余几个为「触发联想」遇坑再查):

    Step A.0 必读 8 个(essential subset):

    • 日期对齐 → feedback_stash_date_alignment
    • 远程归属默认 Maxwell → feedback_yuan_mbp_remote_collab
    • 时间戳 + 工作时段 → feedback_diary_timestamps
    • TODO 盘点先读 memory + git log → feedback_todo_review_via_memory_gitlog
    • 标点校验 perl 批量修 → feedback_wiki_symbol_consistency
    • 求职只记不导 → feedback_job_scope_record_not_coach
    • cfr SSH 路径 → feedback_claude_financial_research_git_log
    • macOS grep locale → reference_macos_grep_locale

    其余触发联想(遇坑再查):

    • 不用破折号 → 全局 ~/.claude/CLAUDE.md「中文写作规范」
    • 面试录音归档 / 复盘 / 对外猎头反馈 → feedback_interview_recording_archival
    • 项目主动归档 → feedback_project_archive_workflow
    • 老面试归档规则 + fade out → feedback_old_interview_close_rule
    • 知识库 git 严禁 SSH 私钥 → feedback_no_secrets_in_worklog_git
    • 生活段记日常事务 → feedback_diary_include_daily_life
    • 远程 / 对外 / 沟通主动询问 → feedback_ingest_check_offline_work
    • 项目命名规范 → feedback_project_naming_convention
    • 求职决策规则(三档薪资 + Web3 框架等)→ feedback_job_decision_rules
Install via CLI
npx skills add https://github.com/iyuenan3/personal-skills --skill worklog-ingest
Repository Details
star Stars 5
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator