任务命名规则管理
WorkBuddy 左侧任务列表(含已归档)统一用 前缀——对象 压缩版命名,便于一眼定位。
规则与工具都在 scripts/ 下,跟人走不跟工作区走。
安全说明
本技能完全本地运行,不联网、不改系统配置。
| 检查项 | 情况 |
|---|---|
| 网络请求 | 无。全部代码不发起任何网络连接 |
| 命令执行 | 无。只用 SQLite 的 cur.execute() 读写本地数据库,不调用任何系统命令 |
| 数据范围 | 仅读写 ~/.workbuddy/workbuddy.db 的 custom_title 字段,原始 title 全程保留 |
| 备份 | 每次写入前自动备份为 workbuddy.db.backup-YYYY-MM-DD-HHMM,可整库还原 |
| 写操作默认 | dry-run。加 --apply 才真写入,先备份再改 |
| 第三方依赖 | 无。仅用 Python 标准库 |
⚠️ 配置到底改哪一份
脚本按优先级加载,用户级覆盖内置:
| 优先级 | 路径 | 说明 |
|---|---|---|
| 1(生效) | ~/.workbuddy/naming_rules.json |
改这份。跟人走,技能升级不会被覆盖 |
| 2(兜底) | <技能目录>/scripts/naming_rules.json |
bundled 内置版,技能更新会被还原 |
踩过:改动写进了 scripts/ 下那份,技能一升级就回滚(2026-09-09 发现 v2.7 改动消失)。
pin / add / rename 等命令会自动写入用户级那份,手动编辑前先确认路径。
核心原则
- 配置是唯一事实源 —
~/.workbuddy/naming_rules.json。改规则只改它,不要动task_name.py - 写操作默认 dry-run — 加
--apply才真写入,且自动先备份数据库 - 改完跑
doc— 规则文档从配置生成,杜绝文档与配置不同步
命令速查
PY="<python 解释器路径>" # 例:~/.workbuddy/binaries/python/versions/3.13.12/python.exe
DIR="<本技能目录>/scripts" # 例:~/.workbuddy/skills/task-naming-rules/scripts
cd "$DIR"
$PY task_name.py list # 前缀池 + 各前缀任务数
$PY task_name.py check # 检查无前缀 / 配置外前缀
$PY task_name.py auto --apply # 自动归类(只写高/中置信)
$PY task_name.py explain 小A 论文 -v # 预演归属,打印命中的词
$PY task_name.py verify --all # 回验已归类任务,列出判定不同的
$PY task_name.py set 年会 关系 --obj "协助小A修改年会请示文档" # 手动归类
$PY task_name.py pin 保险视频 公司 --note "核心是业务" # 人工裁决,verify 跳过
$PY task_name.py unpin 保险视频
$PY task_name.py add 投资 --domain 副业 --desc "股票基金" --kw 股票,基金 --strong 股票
$PY task_name.py rename 自媒体 IP号 --apply # 批量改前缀
$PY task_name.py doc # 重新生成规则文档
$PY task_name.py backup # 备份数据库
> 路径按你的实际安装位置替换。命令行里别写 /d/... 这种 Git Bash 路径,
> Python 不认,用 D:/... 或 ~/.workbuddy/...。
拿不准某个任务该归哪类时,先跑 explain 任务名 -v,它会列出所有命中的词、谁锁定、谁被压过。
四种变更场景
> 每种改完都跑一遍 verify --all,确认历史任务没被规则改动带偏。
1. 新增前缀
$PY task_name.py add 投资 --domain 副业 --desc "股票基金等" --kw 股票,基金,ETF
$PY task_name.py doc
--domain 必须是已有领域之一:主业 / 学业 / 副业 / 工具 / 生活。
要加新领域得手动改配置里的 domains 数组。
2. 前缀改名
$PY task_name.py rename 自媒体 IP号 --apply # 先迁移历史任务
# 再手动改 naming_rules.json 里的 name 字段,最后 doc
⚠️ 顺序不能反:先 rename 再改配置,否则 check 会报一堆配置外前缀。
3. 前缀合并(A 并入 B)
$PY task_name.py rename A B --apply # 历史任务全迁到 B
# 再删掉配置里 A 的整条,然后 doc
4. 前缀拆分(A 拆成 A1 / A2)
配置里加好 A1、A2 各自关键词 → 删掉 A → check 会报配置外前缀 → 人工或跑 auto 重新归类。
注意 auto 只处理无前缀和配置外前缀的任务,已合规的不会被改动。
归类维度:为谁做 > 属于哪条线 > 做什么
同一个任务常能从多个维度归类,不定义优先级就会各判各的。
「教小 A 订酒店」= 帮某人做(person) / 社群业务(biz) / 教学内容(content)。
| 维度 | 含义 | 词表字段 | 优先级 |
|---|---|---|---|
| person | 为谁做(具体人名、关系称谓) | person |
最高 |
| biz | 属于哪条线(平台/项目/业务专有名词) | strong |
中 |
| content | 做什么内容/手段 | keywords |
低 |
跨维度按优先级裁决,不转人工;同一维度内才比字数或转人工。
这条规则解决了「给小 A 做保险计划书」判冲突的问题 —— 人物压过业务,直接归关系。
手段让位给目的
同层命中多个前缀时,is_means: true 的前缀(工具/手段)让位给目的型前缀。
> 用工具做什么,归「做什么」。
配置里给智能体标了 is_means: true(WorkBuddy / Skill 本质是手段,不是归属):
| 输入 | 命中 | 结果 |
|---|---|---|
| 用Skill做抖音短视频 | Skill(智能体,手段) + 抖音/短视频(自媒体) | 自媒体 |
| 用WorkBuddy扫描招聘岗位 | WorkBuddy(手段) + 岗位(求职) | 求职 |
| 调试WorkBuddy的Skill配置 | 只命中智能体 | 智能体 |
仍平手(两个都是目的型,或两个都是手段型)才转人工。
匹配逻辑:三层,不是比字数
字数只是代理指标,真正的信号是词的排他性。所以分三层:
| 层级 | 规则 | 置信度 | 会否自动写入 |
|---|---|---|---|
1 强特征词 strong |
命中即锁定,不比字数;命中多个不同前缀 → 判冲突 | 高 / 冲突 | 高 → 写;冲突 → 转人工 |
2 普通词 keywords |
按字数降序,>=3 字中置信,<=2 字证据弱 | 中 / 低 | 中 → 写;低 → 转人工 |
3 兜底 fallback |
都没命中 | 低 | 转人工 |
关键:2 字的强特征词(如「美团」「健身」)照样高置信锁定,3 字的普通词(如「自动化」)也只是中置信。
strong 和 keywords 怎么分:
- strong = 排他性强的专有名词(人名、平台名、产品名、专有动作)
小 A、某公司、WorkBuddy、某量化平台、某机构、计划书、简历、面试 - keywords = 会跨领域出现的通用词(论文、课程、客户、自动化、保险)
- 拿不准就放 keywords,让字数和人工兜一层
冲突检测(只在同维度内触发)
判断是否算冲突,先看命中词落在哪个维度 —— 跨维度不叫冲突,按优先级裁决就行,别一律转人工:
| 情况 | 处理 | 例 |
|---|---|---|
| 命中词分属不同维度 | 按 person > biz > content 裁决,不转人工 | 「给小 A 做保险计划书」→ 计划书(公司·biz)vs 小 A(关系·person)→ 归关系 |
| 命中词同属一个维度却指向不同前缀 | 判冲突,转人工 | 两个目的型前缀不相上下、或两个人物称谓分属不同关系时 |
同维度冲突时输出长这样:
「<任务名>」
? 无法判定 [冲突]
同层强特征词冲突(A → 前缀一 vs B → 前缀二)
系列命名豁免(自带体系的命名,不加前缀)
有些任务自带编号体系,硬套 前缀——对象 反而破坏识别度(如「KB-① 新项目知识召回」)。
配置里加 exempt_patterns(正则列表)即可:
"exempt_patterns": ["^KB-"]
效果:check 算合规不报警、auto 不会给它强加前缀、doc 自动输出豁免段。
匹配的是显示名开头,写 ^KB- 不要写成 KB-(后者会误伤标题中间出现的 KB-)。
⚠️ 别用 pinned 代替豁免 —— pin 是指定前缀,任务仍会被判"无前缀"。
人工裁决(pinned)
规则判不准的任务,用 pin 把裁决结果写进配置,verify 以后跳过它:
$PY task_name.py pin 保险视频 公司 --note "核心是保险业务,自动化只是手段"
配置里长这样:
"pinned": [
{"match": "保险视频自动化托管", "prefix": "公司", "note": "...", "date": "2026-01-01"}
]
match 是任务名里的片段,一条可以覆盖多条任务。解除用 unpin。
⚠️ pin 只用于规则表达不了的特例,不要用它表达"我不同意规则"。
踩过一次:规则把「教小 A 订酒店」判为关系(人物维度),我擅用 pin 改成社群,被用户纠正。
规则判对了就该听规则的,pin 不是个人意见的覆盖层。
手动归类:规则判不出来时
auto 判成低置信/兜底的任务不会自动归类,用 set 手动指定:
$PY task_name.py set "年会" 关系 --obj "协助小 A 修改年会请示文档" --apply
--obj 是重点:顺手把人物信息补进标题。这样以后——
- 规则能命中(小 A 是 person 词,最高维度)
- 搜「小 A」能找到这条任务
- 万一任务跑偏,verify 也认得出来
有一次的实例:任务原名「修改年会请示文档」,看不出是帮谁做的,我按内容推了公司 →
用户纠正说是协助小 A → 用 set 改成「关系——协助小 A 修改年会请示文档」。
教训:任务名里缺失关键维度信息时,规则必然猜错,这时候该补信息而不是硬猜。
验证:归类后必须回验
规则改完一定要跑 verify,它会用当前规则重新判定所有已归类任务:
- 强特征词判定不同 → 建议改,
verify --apply会修正 - 普通词判定不同 → 默认只提示不自动改;加
--force连中置信判定一起改 - 冲突无法判定 → 列出来人工看
- 人工锁定 → 已裁决的,跳过
--force 用于"我就是要按规则跑,不要人工特例"的场景:
$PY task_name.py verify --force --apply # 连普通词判定也一并改掉
$PY task_name.py verify --all # 只列出普通词分歧供参考
改规则的完整流程:
改 naming_rules.json → verify 回验 → 有分歧就 pin 裁决 → doc 更新文档
什么时候必须问用户,别自己拍板
如果用户风格是执行层直接干,但有四类决策猜必错:
- 分类归属判断 —— 这个任务/文件归哪一类(踩过:把「教小 A 订酒店」判成社群,用户要的是关系)
- 维度优先级 —— person / biz / content 哪个优先
- 价值取舍 —— 规则判不准时偏向哪边
- 涉及他人 —— 家人、客户、同事相关的归类或措辞
问的方式:列选项 + 我的推荐 + 依据,一句话就能回,比猜错再返工快。
数据库
- 路径
~/.workbuddy/workbuddy.db,表sessions - 显示名优先级:
custom_title>title - 工具只改
custom_title,保留原始title摘要,方便回溯 - 每次
--apply自动备份为workbuddy.db.backup-YYYY-MM-DD-HHMM
注意事项
- 改完数据库要刷新 WorkBuddy 界面才看得到新名字
- 已归档任务(
status='archived')同样会被扫到,不用单独处理 - 要撤销就用备份文件覆盖
workbuddy.db - 规则文档输出路径在配置的
doc_path字段
配置示例(一份真实配置的脱敏版)
13 个前缀,5 大领域:
| 领域 | 前缀 |
|---|---|
| 主业 | 考编 / 公司 / 求职 |
| 学业 | 硕士 / 考证 |
| 副业 | 独立站 / 社群 / 自媒体 / 量化 |
| 工具 | 智能体 |
| 生活 | 健康 / 关系 / 生活(兜底) |
易混:考编→考编类,社招→求职;认证考试→考证(不归健康);
WorkBuddy/Skill/自动化→智能体;判断不了→生活。
这只是参考结构。拿到技能后按自己的领域和项目重新配置,
前缀池控制在 10-15 个——再多就失去"一眼定位"的意义。
完整表格跑 list,或看配置 doc_path 指向的文档。
变更记录
- v1.1.0(2026-09-09):
- 新增「系列命名豁免」:配置
exempt_patterns(正则列表)后,自带编号体系的系列(如KB-①)
不加前缀也算合规,check不报警、auto不强行加前缀(详情见「系列命名豁免」一节); - 补充「配置到底改哪一份」:用户级配置优先于随包内置版,手动改配置要改用户级那份
(踩过:改动写进了技能目录内的那份,技能一升级就被还原)。