ChronicleRemoteSummarizer chronicle-remote-summarizer

自动化跨系统汇总Chronicle会议工作流程的工具,适用于在没有Gemini API访问权限的系统上进行会议总结。

DevOps 0 次安装 0 次浏览 更新于 3/3/2026

Chronicle Remote Summarizer

这个技能自动化了跨系统汇总Chronicle会议的工作流程(例如,FreeBSD开发机 → 装有Gemini API的Mac)。

自动激活

这个技能自动激活! (里程碑 #13)

提示如“在远程总结会议”或“从FreeBSD导入会议”会自动触发这个技能!

触发模式: 远程,freebsd,导入会议,远程总结 查看: docs/HOOKS.md 了解完整详情

何时使用这个技能

当:

  • 你在没有配置Gemini API的远程系统上有Chronicle会议
  • 你想在你的本地机器上总结这些会议(该机器有Gemini API)
  • 你需要将摘要传回原始系统
  • 你在多个开发环境(FreeBSD,Linux,macOS)中工作

常见场景:FreeBSD开发服务器(无Gemini API)→ 装有Gemini API密钥的macOS笔记本电脑

工作原理

Chronicle提供import-and-summarize --quiet,它:

  1. 创建临时会议,带有负ID(例如,-3
  2. 使用Gemini生成AI摘要
  3. 自动清理:删除临时会议和文件
  4. 输出干净的JSON到stdout(使用--quiet时没有状态消息)

系统间无污染 - 远程会议保留在远程系统上,只有摘要被传输。

推荐工作流程:一键命令

先决条件:

  • 本地机器到远程机器的SSH访问权限
  • 两个系统上都安装了Chronicle
  • 本地机器上配置了Gemini API密钥(chronicle config ai.gemini_api_key YOUR_KEY
  • 可选:Chronicle配置中的远程系统(自动主机名/路径)

步骤1:配置远程系统(一次性设置)

# 配置FreeBSD远程系统
chronicle config remote_systems.freebsd.hostname "chandlerhardy-dev.aws0.pla-net.cc"
chronicle config remote_systems.freebsd.chronicle_path "/home/chandlerhardy/.local/bin/chronicle"

# 验证配置
chronicle config --list | grep freebsd

步骤2:使用技能

当Claude使用这个技能并找到远程系统配置时,它会自动构建命令:

ssh chandlerhardy-dev.aws0.pla-net.cc "/home/chandlerhardy/.local/bin/chronicle export-session 7" | chronicle import-and-summarize --quiet 2>&1 | grep -A 999999 '^{$' | ssh chandlerhardy-dev.aws0.pla-net.cc "/home/chandlerhardy/.local/bin/chronicle import-summary"

如果没有找到配置,Claude会询问主机名,并交互式地构建命令:

命令(手动):

ssh <remote-host> "chronicle export-session <id>" | chronicle import-and-summarize --quiet 2>&1 | grep -A 999999 '^{$' | ssh <remote-host> "chronicle import-summary"

示例:

ssh freebsd "chronicle export-session 7" | chronicle import-and-summarize --quiet 2>&1 | grep -A 999999 '^{$' | ssh freebsd "chronicle import-summary"

注意: grep -A 999999 '^{$' 过滤掉了即使使用--quiet2>/dev/null也可能泄露的Google库警告。

这是做什么的:

  1. 远程 → 本地:将会议7导出为JSON
  2. 本地:导入,使用Gemini总结,自动清理临时会议
  3. 本地 → 远程:将摘要JSON发送回去
  4. 远程:用摘要更新会议7

为什么--quiet有效:

  • 抑制来自汇总器的所有状态消息
  • 只输出到stdout的干净JSON(对管道传输至关重要)
  • 无需手动从详细输出中提取JSON
  • 2>/dev/null抑制Google库警告(无害)

时间: 大型会议通常需要30-60秒(取决于记录大小)

替代方案:手动3步工作流程

如果SSH管道挂起或你需要检查中间文件:

步骤1:从远程导出会议

ssh <remote-host> "chronicle export-session <id>" > /tmp/session_<id>.json

示例:

ssh freebsd "chronicle export-session 7" > /tmp/session_7.json

步骤2:在本地总结(临时)

cat /tmp/session_<id>.json | chronicle import-and-summarize --quiet 2>/dev/null > /tmp/summary.json

示例:

cat /tmp/session_7.json | chronicicle import-and-summarize --quiet 2>/dev/null > /tmp/summary.json

会发生什么:

  • 创建临时会议(负ID,如-3
  • 使用Gemini生成摘要
  • 自动清理:删除临时会议和记录文件
  • 输出摘要JSON到/tmp/summary.json

步骤3:将摘要传回远程

cat /tmp/summary.json | ssh <remote-host> "chronicle import-summary"

示例:

cat /tmp/summary.json | ssh freebsd "chronicle import-summary"

结果:

  • ✅ 摘要存储在与原始会议链接的远程数据库中
  • ✅ 本地系统保持清洁(临时会议自动删除)
  • ✅ 系统间无数据污染

实际上发生了什么(幕后)

import-and-summarize --quiet上:

  1. 导入:从stdin读取会议JSON
  2. 创建临时会议
    • 分配负ID(例如,-1-2-3
    • ~/.ai-session/sessions/session_-3.cleaned中存储记录
    • 创建数据库条目,is_session=True
  3. 总结
    • 使用Gemini API运行summarize_session_chunked()
    • 以块(每块10,000行)处理大型记录
    • 使用AI生成的摘要更新会议
  4. 输出JSON
    {
      "version": "1.0",
      "original_id": 7,
      "summary": "AI-generated summary...",
      "summary_generated": true,
      "keywords": ["feature", "implementation", "testing"]
    }
    
  5. 自动清理
    • 删除记录文件(session_-3.cleaned
    • 删除数据库条目(临时会议)
    • 只有摘要JSON保留(管道传输到stdout)

import-summary(远程端)上:

  1. 读取JSON:从stdin读取摘要
  2. 查找会议:通过original_id查找会议(例如,7)
  3. 更新:设置response_summarysummary_generated=Truekeywords
  4. 完成:会议7现在有了AI摘要

会议示例

测试过:

  • 会议1:16.3分钟,系统测试
  • 会议2:66.7分钟,大型会议
  • 会议4:23KB JSON导出

所有会议都完美地适用于这个工作流程。

故障排除

SSH管道挂起

症状: 命令无限期挂起

解决方案: 使用手动3步工作流程代替:

# 步骤1:导出到文件
ssh freebsd "chronicle export-session 7" > /tmp/session.json

# 步骤2:在本地处理
cat /tmp/session.json | chronicle import-and-summarize --quiet > /tmp/summary.json

# 步骤3:传回
cat /tmp/summary.json | ssh freebsd "chronicle import-summary"

Gemini API未配置

症状: ImportError: google-generativeai package not installed

解决方案: 在本地机器上配置Gemini API密钥:

chronicle config ai.gemini_api_key YOUR_API_KEY_HERE

获取免费API密钥:https://ai.google.dev/

会议未找到

症状: 会议7未找到

解决方案: 检查远程端会议是否存在:

ssh freebsd "chronicle sessions --limit 20"

摘要已存在

行为: import-and-summarize覆盖现有摘要

注意: 这是设计如此 - 如有需要,你可以重新总结会议。

提示

  • 使用--quiet标志:对于管道传输至关重要 - 抑制状态消息
  • 抑制stderr:添加2>/dev/null以隐藏Google库警告
  • 检查SSH路径:远程Chronicle可能在~/.local/bin/chronicle
  • 检查文件:使用3步工作流程保存中间JSON以进行调试
  • 大型会议:10K+行记录自动分块(无需操作)
  • 网络故障:对于不稳定的连接使用3步工作流程
  • 批量处理:你可以编写脚本来处理多个会议

Claude如何使用这个技能

当被调用时,Claude应该:

  1. 检查远程系统配置:

    chronicle config --list | grep remote_systems
    
  2. 如果配置存在(例如,remote_systems.freebsd.hostname):

    • 读取主机名:chronicle config remote_systems.freebsd.hostname
    • 读取Chronicle路径:chronicle config remote_systems.freebsd.chronicle_path
    • 自动构建命令
    • 宣布:“找到FreeBSD配置,使用:<hostname>
  3. 如果没有配置存在:

    • 询问用户:“你的远程系统主机名是什么?”
    • 询问:“FreeBSD上的Chronicle路径是什么?(默认:Chronicle)”
    • 可选建议:“我可以将其保存到配置中以供将来使用”
    • 使用用户提供的值构建命令
  4. 运行命令并监控输出

  5. 确认成功或处理错误

示例用法

用户: “我在FreeBSD开发机上有会议7需要总结,但FreeBSD没有Gemini API。你能在我的Mac上总结它吗?”

助手(有配置):

  1. 检查配置:chronicle config remote_systems.freebsd.hostname
  2. 找到:chandlerhardy-dev.aws0.pla-net.cc
  3. 宣布:“找到FreeBSD配置,使用chandlerhardy-dev.aws0.pla-net.cc
  4. 运行命令:
    ssh chandlerhardy-dev.aws0.pla-net.cc "/home/chandlerhardy/.local/bin/chronicle export-session 7" | chronicle import-and-summarize --quiet 2>&1 | grep -A 999999 '^{$' | ssh chandlerhardy-dev.aws0.pla-net.cc "/home/chandlerhardy/.local/bin/chronicle import-summary"
    
  5. 确认:“会议7已成功总结,摘要已导入回FreeBSD”

助手(无配置):

  1. 检查配置:chronicle config --list | grep remote_systems
  2. 未找到FreeBSD配置
  3. 询问:“你的FreeBSD主机名是什么?”
  4. 用户提供:chandlerhardy-dev.aws0.pla-net.cc
  5. 询问:“FreeBSD上的Chronicle路径是什么?(按Enter为默认’Chronicle’)”
  6. 用户提供:/home/chandlerhardy/.local/bin/chronicle
  7. 建议:“我可以将其保存到配置中以供将来使用。你想让我这样做吗?”
  8. 使用提供的值运行命令
  9. 如果用户同意,下次保存配置

如果一键命令挂起:

  1. 退回到3步工作流程
  2. 导出到/tmp/session_7.json
  3. 在本地处理 → /tmp/summary.json
  4. 将摘要导入回远程
  5. 确认成功

高级用法

批量总结多个会议

# 在远程列出未总结的会议
ssh freebsd "chronicle sessions --limit 50" | grep "No summary"

# 对每个会议ID(7, 8, 9):
for id in 7 8 9; do
  echo "Summarizing session $id..."
  ssh freebsd "chronicle export-session $id" | \
    chronicle import-and-summarize --quiet 2>/dev/null | \
    ssh freebsd "chronicle import-summary"
done

在导入前检查摘要

# 导出并总结
ssh freebsd "chronicle export-session 7" | \
  chronicle import-and-summarize --quiet 2>/dev/null > /tmp/summary.json

# 查看摘要
cat /tmp/summary.json | jq '.summary'

# 如果满意,导入
cat /tmp/summary.json | ssh freebsd "chronicle import-summary"

调试详细输出

如果你需要看到发生了什么,去掉--quiet

ssh freebsd "chronicle export-session 7" | chronicle import-and-summarize
# 显示:"导入会议...","总结...","清理...",然后是JSON

注意: 没有--quiet,JSON不在第一行,所以它不会干净地管道传输到import-summary

相关命令

  • chronicle export-session <id> - 导出会议为JSON
  • chronicle import-session - 导入会议(永久的,获得新ID)
  • chronicle import-and-summarize - 导入 + 总结 + 自动清理(临时的)
  • chronicle import-summary - 使用摘要更新现有会议
  • chronicle session <id> - 查看会议详情和摘要

另见

  • REMOTE_SUMMARIZE_WORKFLOW.md - 完整的工作流程文档和示例
  • tests/test_import_export.py - 17个测试涵盖所有导入/导出场景
  • chronicle-session-documenter - 在总结后将会议记录到Obsidian库