mcpField
C
ContextSearch

ContextSearch

github.com/danielmiesslerAgent 工作流19.6k54 次安装1 天前更新
代码仓库

关于 ContextSearch

ContextSearch 是用于检索 LifeOS 过往工作的技能,面向需要找回会话、ISA 或对话记录的人。它并行搜索五类来源,结合词语重合度与时间新近度排序,并支持日期筛选。

主要功能

  1. 01并行搜索五类历史来源
  2. 02按词语重合度与新近度排序
  3. 03解析日期短语并筛选
  4. 04输出摘要或 JSON 结果

适用场景

  1. 01找回近期某主题的工作记录
  2. 02按日期浏览历史会话
  3. 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。

使用模式

  1. 独立使用——运行搜索,展示易读文本块,并说:“已加载关于 [topic] 的上下文。最近的内容:[X]。你想做什么?”
  2. 与请求配合使用——先运行搜索,再结合找到的上下文执行请求。如果某条结果的 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

评论

支持 Markdown