AgentStack
SKILL verified Apache-2.0 Self-run

Worklog Ingest

skill-iyuenan3-personal-skills-worklog-ingest · by iyuenan3

worklog 自主 ingest agent。用户睡前说「记录今天 / 记录昨天 / 记录 5 月 X 日 / 补充今天 / 更新日记」+ 附带当天信息时触发,把一天工作素材(本机 git log + yuenan-mbp 工作机桌面所有项目远程扫 + memory + wiki 改动 + 触发消息附带信息)编译成结构化日记 + 更新 wiki + TODO 盘点 + commit + push。全程无人值守、永不阻塞提问: 触发消息即全部输入、没提到的走默认值、用户发完即可去睡。

No reviews yet
0 installs
13 views
0.0% view→install

Install

$ agentstack add skill-iyuenan3-personal-skills-worklog-ingest

✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

Are you the author of Worklog Ingest? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

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 解析(不提问) | D.1 写日记 | D.2 更 wiki | D.3 TODO 盘点 | D.4 commit message | |---|---|---|---|---|---|---| | 新增 | 完整跑 | 解析触发消息附带信息 + 默认值填空 | 整篇 Write(前置:文件不存在) | 全跑(index 头部 / 项目表 / 日记表 + log + 各活跃项目页决策日志) | 全跑(4 态盘点) | ingest: M/D 日记() | | 补充 | 全窗口扫(无增量锚点,靠 D.1 与现有日记比对去重、只 append 未记的) | 解析触发消息的增量信息 + 默认 | append 到现有日记尾部 | 有实质增量工作才跑增量:刷 index 头部当日摘要 + 触及项目页决策日志 + log 追加补记说明;trivial 补充(如补 1 个 docs commit)可只动 diary + 该项目页计数 | 有 TODO 状态变化才跑,否则塌指针(见 E2) | ingest-补: M/D | | 更新 | Skip A | 解析触发消息里要改什么(信息不全则按字面理解 + 标 ⚠️,不提问) | 定向 Edit 已有日记 | 默认 diary-only 不动 wiki;除非订正的是已镜像到 wiki 的事实(计数 / 项目页摘要 / 日期归属),则同步那一处保持一致 | 默认不跑;除非订正本身涉及 TODO 状态 | ingest-改: M/D |

> 补充模式的 wiki 永久漂移注意:次日 ingest 只记次日、不会回捕今天补充时漏更的 wiki 增量 → 补充模式当下该更的 index 摘要 / 项目页决策日志若跳过,就永久漏记(不像 diary 还能再补充)。所以补充模式的 D.2「有实质工作才跑」要从严判断:宁可多刷一句 index 摘要,别留 wiki 与 diary 不一致。trivial 跳过的也要在 commit message 里说清跳了什么。

触发后立刻进入 5 步流程(A–E,= AIREADME/ARCHITECTURE 6 步契约的实现),全程无人值守、永不阻塞提问

Step A: 后台自扫数据源
   │
Step B: 解析触发消息附带的信息 = brain-dump,没提到的项用默认值填空(不向用户提问)
   │
Step C: 一行回执「收到、按这些信息开跑」(回显解析到的 + 默认假设,立即进 Step D)
   │
Step D: 自主跑 (生成日记 / 更新 wiki / TODO 盘点 / commit + push)
   │
Step E: 终端打印完成清单 / 错误状态(用户晨起读)

核心交互模型:睡前无人值守、触发消息即全部输入(2026-06-27 用户定)

使用场景: Maxwell 在睡前触发本 skill,触发消息里附带当天信息(「有什么工作 / 哪台机器没工作 / 发生什么事」),敲回车发送后即去睡觉、不在线。由此:

  • 铁律:永不以提问结尾、永不阻塞等用户回话,一律一口气跑到 commit + push。问一句 = 挂一整晚、什么都不会跑 = 失败。
  • 触发消息 = 完整 brain-dump: 用户说的就是全部输入,直接解析、不回问;纯「记录今天」无任何附带信息时也照默认跑、不挂起(Step E 标一句「未附带信息、按默认跑、请核对」)。
  • 没提到的项一律走默认值(见下表),不追问、不臆造。
  • 遇到任何歧义: 用规则 / 默认自己拍 + 日记标 ⚠️ + 必要时写 .ingest-status.md绝不停下提问
  • Step C 一行回执不是提问,是「边确认边开跑」,用户在不在都不影响。

默认值表(触发消息没提到时按此处理,全部不追问;2026-06-27 用户逐项确认)

| 项 | 默认 | |---|---| | 日期归属 | 永远 7:00 为分割线(00:00-06:59 归前一天,否则当天);连续跨日工作归主推进日。从不询问,有歧义自己拍 + 日记标一句 | | 本机各项目 | 始终扫 git log(窗口内 commit)| | Yuan-MBP / cfr | 默认无工作、不 SSH(cfr 维护模式收尾中、将归档);日记记「cfr 今日无工作」。仅当用户明说「yuan-mbp 有工作」才 SSH §3 抓 | | yuenan-mbp(工作机) | 默认有工作;§3.5 跑 yuenan-scan.sh整个桌面所有工作项目(auto-discover、含新建项目)。仅当用户明说「yuenan-mbp 没工作」才跳过 | | 求职动态 | 无新事件,不单列求职段 | | 对外动作 / 发布 | 无(除非扫描有明显发布类 commit)| | 生活类事务 | 无,生活段写「无」 | | 特殊强调 / 校准 | 无,主线由我按 judgment 提炼 | | 前几天缺口日记 | 默认不补、不追问(用户不在、不替他决定补哪天);§2.1 检测到只在报告里被动标一句 | | commit + push | 始终做(无人值守闭环)|

> 上表 = 「用户没说时」的默认。用户在触发消息里明说的一律覆盖默认(如「今天 petslog 发版了」→ 对外段记;「yuenan 今天没干活」→ 跳过 §3.5;「yuan-mbp 有工作」→ 反转抓 cfr)。


Step A: 自扫数据源

目标:拿到本机 / 远程能扫到的客观素材,与触发消息附带信息对账。

与 Step B 关系: Step A 扫描 + Step B 解析触发消息同回合内连着做(不向用户提问、不等待):后台跑扫描,同时解析用户触发消息里附带的信息,扫完即对账,直接进 Step C/D。客观数据以扫描为准、用户独有信息(求职 / 生活等)以触发消息为准、没说的走默认值表。

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/.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_.md 字面(会漏):ai-knowledge → project_ai_knowledge_kbpetslog → project_petslog_v3maxwell-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 闭区间( petslog \
  short-story  xiaohongshu-tool personal-skills 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 则告警(防双写漂移, banks-data 即此漏网)
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 全量)。雷达全清 ≠ 全库同步。
# 远程项目(cfr / CarysCloud)无本地 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
    # E1 内容新鲜度门(2026-06-27): 该项目 AIREADME/ 今日窗口内有 commit = 项目自己(自有 session, 如 petslog 等)在维护 AIREADME
    #   → 抑制「落后」噪音。根因: worklog 侧 last-synced 锚点不由 worklog bump、对自有 session 项目恒报「落后 N」+ 建议「/aireadme update」(那是项目 session 职责、对 ingest 操作者不可执行)。
    #   用「AIREADME 真实新鲜度」替代「按所有权手维护 skip 名单」: 自动覆盖未来任意自有 session 项目, 且不误伤 worklog 自身这类真该 ingest 维护的(它今日 AIREADME 没 commit → 不抑制)。wc -l 恒 exit 0 防截断。
    aireadme_fresh=$(git -C "$d" log --branches --tags --since="$SINCE" --until="$UNTIL" --oneline -- AIREADME/ 2>/dev/null | wc -l | tr -d ' ')
    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*) : ;;
      *落后*) [ "${aireadme_fresh:-0}" -gt 0 ] || 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 漏记前几天缺口检测(非阻塞;逻辑属 D 计算后,置此因依赖 SCAN_PROJECTS 作用域)----
# 6/17 拖到 6/18 才补、靠用户提醒的教训。最近 7 天内逐日查: 无日记但各项目当天有 commit → Step E 被动标一行(默认不补、不追问、晨起自行决定)。
# 逐日查日记存在性(非「最后一篇之后」), 尾部缺口 + 中间空洞(6/15、6/17 有但 6/16 无)都能抓。
# ⚠️ B2 局限(2026-06-27 标注): gtot 只数本地 .git commit, 对「只做了远程主线(CarysCloud / cfr)、本地 0 commit」的缺口日恒判 gtot=0、原本静默 = 假 all-clear(漏记最高价值工作流)。
#   故对每个无日记缺口日: gtot>0 → 报本地 commit 数; gtot==0 → 仍打一行常驻提示(本地无 commit 不等于没干活、远程未计入), 让用户自行回忆远程是否漏记。无 git 项目同理只能靠这行兜。
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" /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
    # 默认不补、不追问(用户睡前不在、不替他决定补哪天, 2026-06-27 定): 只在 Step E 报告被动标一行供晨起参考
    if [ "$gtot" -gt 0 ]; then
      echo "ℹ️ 缺口: $g 无日记但各项目当天本地共 $gtot 个 commit → Step E 被动标一句(默认不补、不追问、晨起自行决定)"
    else
      echo "ℹ️ 缺口: $g 无日记、本地 0 commit → 仅基于本地 git、远程未计入(默认不补、不追问)"
    fi
  fi
  g="$gend"
done

# ---- 3. Yuan-MBP cfr 远程(默认无工作、不 SSH;2026-06-27 用户定:cfr 维护模式收尾、将归档)----
# 默认: 直接记「cfr 今日无工作」、跳过本块 SSH。仅当触发消息明说「yuan-mbp 有工作」, agent 把 CFR_SCAN=1 才跑下面的块抓 cfr git log。
# 哨兵 CFR_REACHABLE 剥「可达 0 commit vs 不可达」; ConnectTimeout=8 防休眠挂; cfr 路径见 memory 。
CFR_SCAN=""   # 仅当用户明说 yuan-mbp 有工作时由 agent 置 1(默认空 = 不 SSH)
if [ -n "$CFR_SCAN" ]; then
  cfr=$(ssh -o ConnectTimeout=8 yuan-mbp "P=''; \
    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 ⚠️ Yuan-MBP 可达但 cfr 路径失效(疑似改名/迁移) → 引言块标、勿当可达 0 commit ===" ;;
    CFR_REACHABLE*) printf '=== cfr (Yuan-MBP 可达) ===%s\n' "${cfr#CFR_REACHABLE}" ;;
    *) echo "=== cfr ⚠️ Yuan-MBP 不可达(休眠/网络) → 日记引言块标 ⚠️ 远程待 D+1 补抓 ===" ;;
  esac
else
  echo "=== cfr 默认无工作(维护模式收尾)、未 SSH; 用户未提 yuan-mbp 有工作 → 日记记『cfr 今日无工作』 ==="
fi

# ---- 3.5 yuenan-mbp 工作机(默认有工作,自动发现桌面所有工作项目)----
# 调 yuenan-mbp 上的 yuenan-scan.sh(glob ~/Desktop/* 自动发现所有工作项目)。yuenan-mbp = 工作机, 桌面所有项目都是雇主团队工作项目。
# 2026-06-27 起根治:取代原 §3.5/§3.5b/§3.5c「每新增 CarysCloud 工作区粘一块 §3.5x」的跑步机 + 桌面新目录/新项目首日盲(6/12 AllinOne、6/27 DAG 两次首日漏扫)。
# 脚本结构: 每个项目 = 多 git 子仓容器(若干后端/前端子仓, 不写死、*/.git glob 自动发现)。
# 口径分流: 有 daily-digest.sh 的工作区(旧 CarysCloud)跑 digest 4 信号; 其余枚举子仓跑 yuenan 分支 git-log:
#   --branches='*yuenan*' glob 抓所有名字含 yuenan 的分支(只我的分支、排除同事/基线/dev、跨多分支单次 walk 去重) + 越南/yuenan 署名过滤(团队共享仓必须过滤排除同事) + AIREADME/CHANGELOG 头部。LC_ALL=C 防漏 CJK 署名。
# 默认有工作 = 始终跑; 仅当触发消息明说「yuenan-mbp 没工作」, agent 把 YUENAN_SKIP=1 才跳过。
# 哨兵 YUENAN_REACHABLE 剥「可达 0 改动 vs 不可达」; 脚本尾 YUENAN_SCAN_WORKSPACES=N 确认真跑到 + 发现 N 个工作区; YUENAN_SCAN_MISSING = 可达但脚本没部署/坏。
# ⚠️ 2026-06-08 起雇主项目私仓内与其他项目同等详记(日记 + caryscloud.md/对应项目页);保留:① 项目页 RAG 排除(挡公开主页) ② 团队成员真名抽象
#    ③ 公开镜像同步时按既定脱敏策略处理。
# 脚本本体只活在 yuenan-mbp(含雇主目录/仓名/分支模式/署名),不进 worklog 仓、不进公开镜像(同 daily-digest.sh 先例);改扫描逻辑改远端脚本、新项目零改 skill(auto-discover)。
YUENAN_SKIP=""   # 仅当用户明说 yuenan-mbp 没工作时由 agent 置 1(默认空 = 始终扫)
if [ -z "$YUENAN_SKIP" ]; then
  yc=$(ssh -o ConnectTimeout=8 yuenan-mbp "echo YUENAN_REACHABLE; \
    if [ -x ~/Desktop/yuenan-scan.sh ]; then ~/Desktop/yuenan-scan.sh '$D'; else echo YUENAN_SCAN_MISSING; fi" 2>/dev/null)
  case "$yc" in
    *YUENAN_SCAN_MISSING*) echo "=== yuenan-mbp ⚠️ 可达但 yuenan-scan.sh 缺失/不可执行 → 引言块标、勿当 0 改动 ===" ;;
    YUENAN_REACHABLE*) printf '=== yuenan-mbp 工作机 (可达) ===%s\n' "${yc#YUENAN_REACHABLE}" ;;
    *) echo "=== yuenan-mbp ⚠️ 不可达(合盖/休眠/网络) → 日记引言块标 ⚠️ 待 D+1 补抓 ===" ;;
  esac
else
  echo "=== yuenan-mbp 用户明说今日无工作 → 跳过扫描、日记记无 ==="
fi

# ---- 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) 归前一天,扫描窗口要覆盖。
  • 本机扫不到的盲区: Yuan-MBP cfr(默认无、维护收尾,仅用户提才抓)+ yuenan-mbp 工作机(默认有,yuenan-scan.sh 自动发现桌面所有工作项目扫,私仓详记)+ 其他全靠触发消息附带信息。
  • yuenan-mbp scan = 输入: §3.5 调远端 yuenan-scan.sh $D 返回的各工作项目段(有 digest 的工作区跑 digest 4 信号 / 其余跑 yuenan 分支 git-log + CHANGELOG)作当天理解输入;2026-06-08 起与其他项目同等详记(私仓),保留对应项目页 RAG 排除 + 团队成员真名抽象 + 公开镜像脱敏。
  • yuenan-mbp 桌面 auto-discover(2026-06-27 起根治): yuenan-mbp = 工作机,桌面工作项目会持续增多(现 3 个 CarysCloud 工作区,每个含多 git 子仓;未来会建新项目)。不再每新增一个工作区粘一块 §3.5x(6/12 AllinOne、6/27 DAG 两次首日漏扫的教训):远端 yuenan-scan.sh glob ~/Desktop/* 自动发现所有工作项目 + 按口径分流(digest / yuenan 分支 git-log)+ */.git glob 自动发现子仓,新项目 / 新仓零改 skill 自动纳入;非工作区目录(如 feishu 文档缓存)自动跳过。CarysCloud 系归 [[caryscloud]] 项目页分子线记;新发现的非 CarysCloud 项目按内容判断归属(caryscloud 子线 vs 新建项目页),拿不准 Step E 标一句让用户晨起定,默认按工作机私有处理。脚本本体只活在 yuenan-mbp(雇主目录 / 仓名 / 分支模式 / 署名都在远端),故 SKILL.md 内无逐项目雇主坐标,公开镜像 personal-skills 只需脱敏 §3.5 一块的主机名 + 脚本名。
  • SSH 不可达: Yuan-MBP / yuenan-mbp 合盖休眠等情况,日记引言块标 ⚠️「 SSH 不可达,远程工作待 X+1 补抓」(参考 5/26 / 6/4 日记)。不阻塞,Step E 不报错。
  • AIREADME 漂移雷达(§2.5): 对今日活跃 + 本地有 AIREADME/ 的项目,复用 aireadme/check.sh --drift 算 AIREADME 落后 HEAD 多少 commit,漂移项转述进 Step E 报告。只暴露不自动改/aireadme update 有确认门)。解决 AIREADME「init 做到位、update 没人记得跑」导致的无声漂移。远程项目(cfr / CarysCloud)无本地 AIREADME,不在范围。内容新鲜度门(2026-06-27 加): 报「落后」前先查该项目 AIREADME/ 今日窗口内有无 commit,有则抑制(= 自有 session 项目如 [[petslog]] / [[]] 自己在维护 AIREADME、worklog 侧锚点不 bump 致恒报「落后」是噪音;建议的 /aireadme update 也是项目 session 职责、非 ingest 操作者能跑)。用真实新鲜度替代按所有权手维护 skip 名单,自动覆盖未来项目,且不误伤 worklog 自身(今日 AIREADME 没 commit → 照常报)。

Step B: 解析触发消息(不提问、不等待)

目标:把用户触发消息里附带的信息解析成 brain-dump,没提到的项用上方[默认值表](#默认值表触发消息没提到时按此处理全部不追问2026-06-27-用户逐项确认)填空。绝不向用户提问、绝不等待回话(用户睡前发完即离线,见「核心交互模型」)。

解析触发消息

触发消息形如「记录今天 + 」,附带信息自由格式(「有什么工作 / 哪台机器没工作 / 发生什么事」)。逐句识别对应项:

  • 机器工作状态:「yuan-mbp 有工作」→ agent 置 CFR_SCAN=1(默认空 = 不抓);「yuenan-mbp 没工作」→ 置 YUENAN_SKIP=1(默认空 = 扫);没提 = 按默认(cfr 不抓 / yuenan 扫)。
  • 当天主线 / 项目提示:「今天主要在 X 项目 / 新建了 Y」→ 作主线识别 + 归属判断输入(auto-discover 已兜底发现,用户点一句更准)。
  • 求职 / 对外 / 生活 / 特殊强调:用户提到的归对应段;没提到的按默认(无)。
  • 日期 / 模式:「记录昨天 / 5 月 X 日」→ 对应归属日;「补充 / 更新」→ 对应模式。日期边界永远 7:00、从不问。

解析规则

  • 客观数据以扫描为准、用户独有信息以触发消息为准:扫描扫到的项目工作照常记(不依赖用户提);用户独有、扫不到的信息(求职 / 生活 / 对外 / 强调)只认触发消息说的。
  • 用户明说的覆盖默认(「petslog 今天发版」→ 对外段记;「yuan-mbp 有工作」→ 反转抓 cfr)。
  • 用户没提到的项一律走默认值表,不脑补、不追问;日记对应段写「无」/「均无」。
  • 纯「记录今天」无任何附带信息 → 全部走默认(cfr 无 / yuenan 扫 / 求职·对外·生活无),照跑,Step E 标一句「未附带信息、按默认跑、请核对」。
  • 重要沟通 / 跨 session 同步:不主动找,但用户在触发消息里提到的必接(归对应段)。
  • 遇到任何歧义:用规则 / 默认自己拍 + 日记标 ⚠️,绝不停下提问
  • §2.1 报缺口(前几天有 comm

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet — be the first.

Versions

  • v0.1.0 Imported from the upstream source.