Install
$ agentstack add skill-iyuenan3-personal-skills-worklog-ingest ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo 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.
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_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 闭区间( 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.shglob~/Desktop/*自动发现所有工作项目 + 按口径分流(digest / yuenan 分支 git-log)+*/.gitglob 自动发现子仓,新项目 / 新仓零改 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.
- Author: iyuenan3
- Source: iyuenan3/personal-skills
- License: Apache-2.0
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.