会话状态监视器(Session State Watch)
何时使用:
当您有cron任务将结果写入SESSION-STATE.md文件时
当您希望主会话自动检测和响应后台任务输出时
当您需要在隔离的cron会话和主会话之间同步状态时
解决的问题:
cron任务运行在隔离的会话中,它们的输出写入文件对主会话不可见。
问题描述:
cron任务(隔离会话)→ 写入SESSION-STATE.md → 主会话(不知道它已经改变!)
没有这个技能:
梦幻学习(04:30 cron)结果被写入但从未被看到
盘后学习(15:05 cron)更新被忽略
任何后台任务输出都有效地丢失了
解决方案架构:
该技能实现了一个轻量级的文件mtime跟踪机制:
跟踪文件:~/.openclaw/workspace/data/.session_state_tracker.json存储最后已知的mtime
检测脚本:scripts/check_session_state.sh比较mtime并报告更改
集成规则:添加到AGENTS.md - 在实质性答案之前检查
快速入门:
该技能文件已经在~/.openclaw/workspace/skills/session-state-watch/中。
mkdir -p ~/.openclaw/workspace/data
cat > ~/.openclaw/workspace/data/.session_state_tracker.json << 'EOF'
{
"last_known_mtime": 0,
"last_known_mtime_human": "never",
"last_check_time": "$(date -Iseconds)",
"session_start_mtime": 0
}
EOF
将此部分添加到您的~/.openclaw/workspace/AGENTS.md文件中:
##
问题:cron任务(梦幻学习04:30,盘后学习15:05)修改SESSION-STATE.md,但主会话不会自动知道这些更改。
解决方案:在实质性答案之前(不是简单的确认),检查SESSION-STATE.md是否已被修改:
\
# 检查SESSION-STATE.md是否更新
MTIME=$(stat -c %Y /root/.openclaw/workspace/SESSION-STATE.md)
TRACKER=$(cat /root/.openclaw/workspace/data/.session_state_tracker.json | python3 -c "import json,sys; d=json.load(sys.stdin); print(d['last_known_mtime'])")
if [ "$MTIME" -gt "$TRACKER" ]; then
echo "SESSION-STATE.md已被更新!"
# 读取文件并总结更改
fi
\
实现:
- 跟踪文件:data/.session_state_tracker.json存储最后已知的mtime
- 检查答案:在实质性响应之前运行检查
- 如果更改:读取SESSION-STATE.md,总结新内容,更新跟踪器
- 更新跟踪器:在读取后更新跟踪器中的last_known_mtime为当前mtime
cron任务集成:
cron任务修改SESSION-STATE.md不需要更新跟踪器。跟踪器仅由主会话在读取更改后更新。这使得检测变得简单:cron写入 → mtime更改 → 主会话检测不匹配。
为什么有效:
- 无需修改OpenClaw核心
- 基于文件的跟踪是简单可靠的
- 在会话和重启之间起作用
- 将智能放在代理(而不是基础设施)中
- 使用检查脚本
该技能包括scripts/check_session_state.sh脚本:
# 检查SESSION-STATE.md是否更改(报告和更新跟踪器)
bash ~/.openclaw/workspace/skills/session-state-watch/scripts/check_session_state.sh
# 强制重新读取,即使未更改
bash ~/.openclaw/workspace/skills/session-state-watch/scripts/check_session_state.sh --force
# 更新跟踪器而不报告
bash ~/.openclaw/workspace/skills/session-state-watch/scripts/check_session_state.sh --update
包含的文件:
文件目的
SKILL.md 本文档
scripts/check_session_state.sh 检测脚本(mtime比较 + 报告)
examples/SESSION-STATE-update.py 示例:cron任务如何写入更新
cron任务如何写入更新
当cron任务(如梦幻学习或盘后学习)希望通知主会话时:
# 示例:realtime_data_learning.py
def _write_to_session_state(self, report: str):
"""将学习报告写入SESSION-STATE.md以便主会话检测。"""
session_state_path = "/root/.openclaw/workspace/SESSION-STATE.md"
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
with open(session_state_path, "a", encoding="utf-8") as f:
f.write(f"\n## 学习更新 {timestamp}\n\n")
f.write(report)
f.write("\n\n---\n")
# 注意:不要在这里更新跟踪器 - 让主会话检测mtime更改
与替代方案的比较:
解决方案 优点 缺点
本技能(文件mtime) 轻量级,无外部依赖,简单 手动检查答案
openclaw-watchdog 自动恢复中断会话 重(Python,systemd),不同目的
cron --announce 原生OpenClaw功能 仅发送消息,不持久状态
agent-memory-mcp 完全内存服务器 复杂设置,不同用例
发布到ClawHub:
要发布此技能,请登录ClawHub:访问https://c