关于 opencode-memory
OpenCode Memory Browser 是只读技能,可在需要时查询本地 OpenCode 历史中的会话、计划和决策。它使用有针对性的 SQLite 查询并总结相关发现,不会默认注入历史内容。
主要功能
- 01只读访问 OpenCode 历史
- 02搜索会话与消息文本
- 03查询计划和提示历史
- 04使用有限结果的定向 SQLite 查询
- 05总结相关发现
适用场景
- 01回忆先前会话中的决策
- 02结合项目既有上下文继续工作
- 03检查问题是否曾经出现
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ carson2222/ skills --skill opencode-memory安装后在 Claude Code 中输入/opencode-memory确认已加载。
附带文件references/storage-format.md
详细介绍
OpenCode 记忆浏览器
只读查询本地 OpenCode 历史记录。仅在先前的会话、计划或决策会有所帮助时使用。不要默认注入历史记录。
使用场景
- 用户询问历史记录、之前的会话、上次、计划、回忆或记忆。
- 恢复某个项目,且先前的 OpenCode 上下文可能有所帮助。
- 调试可能曾出现过的重复问题。
如果仓库文件或 git 已能回答问题,或任务是全新的,请勿使用。
规则
- 只读。绝不修改 OpenCode 数据库或文件。
- 使用
sqlite3和只读 URI。不要使用文件读取工具读取数据库。 - 使用
LIMIT和有针对性的LIKE,控制结果数量。 - 总结相关发现;不要倾倒原始历史记录。
- 避开身份验证/提供方表:
account、credential、control_account、account_state。
设置
先在 bash 中运行:
DATA_ROOT="${XDG_DATA_HOME:-$HOME/.local/share}/opencode"
STATE_ROOT="${XDG_STATE_HOME:-$HOME/.local/state}/opencode"
DB="$(opencode db path 2>/dev/null || true)"
[ -n "$DB" ] || DB="${OPENCODE_DB:-$DATA_ROOT/opencode.db}"
case "$DB" in :memory:|/*) ;; *) DB="$DATA_ROOT/$DB" ;; esac
if [ ! -f "$DB" ]; then
for candidate in "$DATA_ROOT"/opencode*.db; do
[ -f "$candidate" ] && DB="$candidate" && break
done
fi
DB_URI="file:${DB}?mode=ro"
有用的文件:
- 计划:
$DATA_ROOT/plans/*.md - 提示词历史记录:
$STATE_ROOT/prompt-history.jsonl - 会话差异:
$DATA_ROOT/storage/session_diff/<session-id>.json
查询
摘要
sqlite3 "$DB_URI" "
SELECT 'projects', COUNT(*) FROM project
UNION ALL SELECT 'main sessions', COUNT(*) FROM session WHERE parent_id IS NULL
UNION ALL SELECT 'messages', COUNT(*) FROM message
UNION ALL SELECT 'parts', COUNT(*) FROM part
UNION ALL SELECT 'todos', COUNT(*) FROM todo;
"
最近的会话
sqlite3 "$DB_URI" "
SELECT s.id, COALESCE(s.title, 'untitled') AS title,
COALESCE(p.name, p.worktree, '') AS project,
datetime(s.time_updated/1000, 'unixepoch', 'localtime') AS updated,
(SELECT COUNT(*) FROM message m WHERE m.session_id = s.id) AS messages
FROM session s
LEFT JOIN project p ON p.id = s.project_id
WHERE s.parent_id IS NULL
ORDER BY s.time_updated DESC
LIMIT 10;
"
搜索文本
先替换 SEARCH_TERM。
sqlite3 "$DB_URI" "
SELECT s.id, COALESCE(s.title, 'untitled') AS title,
json_extract(m.data, '$.role') AS role,
datetime(m.time_created/1000, 'unixepoch', 'localtime') AS time,
substr(json_extract(p.data, '$.text'), 1, 200) AS snippet
FROM part p
JOIN message m ON m.id = p.message_id
JOIN session s ON s.id = m.session_id
WHERE s.parent_id IS NULL
AND json_extract(p.data, '$.type') = 'text'
AND json_extract(p.data, '$.text') LIKE '%SEARCH_TERM%'
ORDER BY m.time_created DESC
LIMIT 10;
"
读取会话文本
先替换 SESSION_ID_HERE。仅包含文本部分;工具、补丁、文件、推理或 V2 内部信息请参阅参考文档。
sqlite3 "$DB_URI" "
SELECT json_extract(m.data, '$.role') AS role,
datetime(m.time_created/1000, 'unixepoch', 'localtime') AS time,
GROUP_CONCAT(json_extract(p.data, '$.text'), char(10)) AS text
FROM message m
LEFT JOIN part p ON p.message_id = m.id
AND json_extract(p.data, '$.type') = 'text'
WHERE m.session_id = 'SESSION_ID_HERE'
GROUP BY m.id
ORDER BY m.time_created ASC
LIMIT 50;
"
计划与提示词历史记录
ls -lt "$DATA_ROOT"/plans/*.md 2>/dev/null | head -20
tail -20 "$STATE_ROOT"/prompt-history.jsonl 2>/dev/null
提示词历史记录条目目前使用 input、mode 和 parts[];不要假定根级字段是 text。
深入参考
仅在需要了解表详情、部分/工具结构、旧版 JSON 路径或调试查询时,使用 references/storage-format.md。
评论
支持 Markdown