关于 ContextSearch
ContextSearch 是用于检索 LifeOS 过往工作的技能,面向需要找回会话、ISA 或对话记录的人。它并行搜索五类来源,结合词语重合度与时间新近度排序,并支持日期筛选。
主要功能
- 01并行搜索五类历史来源
- 02按词语重合度与新近度排序
- 03解析日期短语并筛选
- 04输出摘要或 JSON 结果
适用场景
- 01找回近期某主题的工作记录
- 02按日期浏览历史会话
- 03为新请求查找相关上下文
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ danielmiessler/ lifeos --skill contextsearch安装后在 Claude Code 中输入/contextsearch确认已加载。
附带文件Tools/ContextSearch.ts
详细介绍
ContextSearch
自定义
执行前,请检查用户自定义设置:
~/.claude/LIFEOS/USER/CUSTOMIZATIONS/SKILLS/ContextSearch/
如果此目录存在,请加载并应用其中的 PREFERENCES.md、配置或资源。这些设置会覆盖默认行为。如果目录不存在,则使用技能默认设置。
功能
按主题、部分词语或“昨天”“上周”等日期短语,查找之前的 LifeOS 工作——会话、ISA 和对话。一个确定性的 Bun CLI 会并行搜索五个来源,按词元重叠度乘以近期程度评分,应用日期筛选,并返回带有片段的排序结果。
问题
工作分散在会话、ISA 和对话日志中,一周后你可能就记不起某个项目在哪里,或者它叫什么了。子串搜索找不到它,因为你记得的是大意,而不是确切标题。你需要通过几个词,或“我昨天做的那件事”之类的描述,快速回忆起模糊记得的工作,并且无需手动重读所有内容,就能从上次中断处继续。
工作原理
搜索之前的工作:$ARGUMENTS
技能正文会委派给一个确定性的 Bun CLI。该工具会并行搜索五个来源,按词元重叠度 × 近期程度评分,应用日期筛选,并返回排序结果。
工作流路由
单工具技能——没有 Workflows/ 目录。每次调用都会路由到唯一的 CLI:
| 工作流 | 触发条件 | 文件 |
|---|---|---|
| 搜索(内联) | context search、/cs、prior work、recall、find session、resume、日期短语 | Tools/ContextSearch.ts |
运行搜索
bun run ~/.claude/skills/ContextSearch/Tools/ContextSearch.ts "$ARGUMENTS" --pretty --limit 10
该工具会自动检测 TTY 以确定输出模式;显式使用 --pretty,可在从 Claude Code 会话内部调用技能时保留易读的文本块(此时 stdout 并非真正的 TTY)。使用管道传入 --json,可将结构化输出交给 jq。
常用标志模式
# Limit results
bun run ~/.claude/skills/ContextSearch/Tools/ContextSearch.ts "$ARGUMENTS" --limit 5
# Constrain by date
bun run ~/.claude/skills/ContextSearch/Tools/ContextSearch.ts "$ARGUMENTS" --since 2026-05-01
# JSON for programmatic use
bun run ~/.claude/skills/ContextSearch/Tools/ContextSearch.ts "$ARGUMENTS" --json | jq '.results[0]'
该工具还会内联解析日期短语:"yesterday markdown" 会转换为仅限昨天的起始/截止日期,并搜索词元 markdown。
使用模式
- 独立使用——运行搜索,展示易读文本块,并说:“已加载关于 [topic] 的上下文。最近的内容:[X]。你想做什么?”
- 与请求配合使用——先运行搜索,再结合找到的上下文执行请求。如果某条结果的
path看起来有用,请读取它以了解完整详情。
输出格式
易读文本块:
═══ CONTEXT: <query> ═══════════════════════
📋 RESULTS (N, newest+best first):
• <slug>
task: ... | phase: ... | progress: ... | effort: ... | <recency>d ago | score: ... | sources: ...
↳ "<snippet from matched source>"
<path to ISA or jsonl>
Searched: work.json=N, names=N, dirs=N, isa=N, jsonl=N
════════════════════════════════════════════════
JSON:{ query, cleaned_query, tokens, since, until, stats, results: [{ source[], slug, sessionUuid, name, task, phase, progress, effort, score, recencyDays, snippet, path }] }
注意事项
- 基于令牌重叠评分,而非子字符串匹配。 查询
markdown extended可以找到名为Research Type Markdown Extended Images的会话,尽管「markdown extended」并非该名称的子字符串。查询会被拆分为令牌(转为小写,按[^a-z0-9]+拆分,移除停用词),任何候选项只要共享 ≥1 个非停用词令牌,就会获得评分。 - 日期短语是一等筛选条件。
today、yesterday、day before yesterday、last week、last month、N days ago和YYYY-MM-DD会从查询中解析为有界日期筛选条件;剩余令牌仍会针对内容评分。yesterday和today使用单日窗口(同时设置 since 和 until);last week使用滚动 7 天窗口。 - JSONL 来源日期取自第一条用户消息的时间戳,而非文件 mtime。 Conversation jsonl 文件会在 Claude Code 重新读取时更新,因此 mtime 会漂移。工具会解析第一条
type:"user"行的timestamp,以还原实际会话开始日期——日期筛选条件会以此为准。 - 对于 jsonl 内容,搜索仅限于
~/.claude项目在~/.claude/Projects/下自己的对话目录(目录名称在运行时根据$HOME生成——路径中的/和.会映射为-)。设计上不会搜索同一台机器上的其他 Claude 项目目录。 - 没有持久化索引。 每次查询都会重新扫描磁盘。使用 ripgrep 搜索约 9k 个 jsonl 文件可在约 1s 内完成;查询总延迟通常为 1–2s,在交互体验可接受的范围内。如果未来规模变化导致这种方式无法使用,v2 将采用可选择启用的缓存索引(例如,每个 jsonl 文件记录首条用户消息的时间戳和词频映射)。
- 单独调用与配对调用。 用户单独调用 ContextSearch(
/cs <topic>)时,展示结果并询问他们想做什么。当它作为无关请求的配套预检步骤调用时,静默执行搜索,并用排名靠前的结果作为回答依据——除非用户提出要求,否则不要将搜索结果块直接输出到回答中。
显示结果后
单独调用:「已加载关于 [topic] 的上下文。最近的结果:[X]。你想做什么?」
**配对调用:**继续处理用户的请求,并以排名第一的结果作为上下文依据。如果需要更多细节,请读取工具返回的具体路径。
示例
示例 1:继续处理特定主题的工作
User: "what did we do with the Telegram bot?"
→ bun run Tools/ContextSearch.ts "telegram bot"
→ Tokens [telegram, bot] hit work.json + ISA bodies + jsonl
→ Returns telegram-monitor-revival, fix-telegram-channels-plugin-broken, ranked by recency
示例 2:查找模糊记忆中的会话
User: "open up that test extended markdown document that you made yesterday"
→ bun run Tools/ContextSearch.ts "test extended markdown document yesterday"
→ Date phrase 'yesterday' parses out → since/until = 2026-05-07 only
→ Tokens [test, extended, markdown, document] hit jsonl content
→ Returns "Research Type Markdown Extended Images" session in top-3 with snippet
示例 3:仅按日期浏览
User: "what did I work on last week?"
→ bun run Tools/ContextSearch.ts "last week"
→ Date phrase parses to since=7d-ago, no token filter
→ Returns all sessions from the past 7 days, newest first
执行日志
完成任何工作流后,追加一条 JSONL 记录:
echo '{"ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","skill":"ContextSearch","workflow":"Search","input":"8_WORD_SUMMARY","status":"ok|error","duration_s":SECONDS}' >> ~/.claude/LIFEOS/MEMORY/SKILLS/execution.jsonl