focusAI
本地监控屏幕活动,评估专注度并提供当天工作状态和历史视觉记录查询与分析服务。
Description
FocusAI - 视觉记忆中枢与上下文管理器
YAML 定义 (技能元数据)
name: focusai
version: 1.0.0
description: 本地视觉监控与专注力管理工具,提供屏幕活动记录、专注度评分和历史追溯能力
author: HR2AY
license: MIT
# 技能能力声明
capabilities:
- name: monitor_focus
description: 监控用户屏幕活动并评估专注度
requires_user_consent: true
requires_user_setup: true
privacy_note: |
会定期截屏并发送至用户配置的视觉模型API(如通义千问、豆包等)进行分析。
视觉模型运行在云端,非本地运行。
- name: query_history
description: 查询历史专注数据和屏幕活动记录
condition: "仅在当天使用过 focusAI 时调用"
- name: analyze_activity
description: 分析特定时间段的工作内容和效率
condition: "仅在当天使用过 focusAI 时调用"
# 所需凭证(由用户自行配置,Bot 不存储)
credentials:
- name: cloud_vision_api_key
description: 云端视觉模型 API 密钥(如通义千问、豆包等)
provided_by: user
storage_location: "~/.openclaw/workspace/focusAI/config.json(用户本地文件,Bot 仅检查是否存在,不读取内容)"
# 触发意图
intents:
- pattern: "我今天.*忙.*什么|总结.*工作流|今天都干了.*"
action: query_history
requires_data: true
- pattern: "下午.*点.*看.*PDF|刚才.*看.*什么|之前.*窗口.*内容"
action: analyze_activity
requires_data: true
- pattern: "效率.*低|时间.*花在哪|分心.*多久"
action: query_history
requires_data: true
- pattern: "打开.*专注.*模式|开始.*监控|监控.*写代码"
action: start_monitor
requires_consent: true
- pattern: "刚才.*分心.*|现在.*专注.*|当前.*状态"
action: check_status
- pattern: "切换.*模型|改成.*豆包|改成.*通义|换成.*GPT"
action: switch_provider
- pattern: "停止.*监控|结束.*专注|关闭.*focus|不.*监控.*了"
action: stop_monitor
- pattern: "换.*目标|目标.*改|开始.*做.*|我要.*写|接下来.*做"
action: update_goal
- pattern: "昨天.*做.*什么|前天.*忙.*啥|上周.*工作|之前.*数据"
action: query_past_history
requires_data: true
# 调用前提条件
prerequisites:
check_command: |
$today = Get-Date -Format 'yyMMdd'
Test-Path "~/Desktop/FocusOS_Data/$today/*.csv"
skip_if_false: |
今天还没有使用过 FocusAI,暂无数据可供查询。
如需开始监控,请说"打开专注模式"或运行 start.bat。
技能定位
不要将 FocusAI 仅仅视为一个"计时器"。它是你的视觉记忆中枢和上下文管理器。
当用户询问他们过去的数字活动、工作状态、或者需要你回忆某一时段的屏幕内容时,FocusAI 就是你的"眼睛"和"日记本"。
重要约束
当日未使用时不调用
如果当天没有使用过 FocusAI(即没有数据文件),不要尝试调用或分析。直接告知用户:
"今天还没有使用过 FocusAI,暂无数据可供查询。如需开始监控,请说'打开专注模式'或运行 start.bat。"
隐私与权限
| 场景 | 要求 |
|---|---|
| 后台监控 | 必须告知用户截屏行为、内存和 API 使用情况 |
| 前端 GUI | 启动前需询问用户,告知 UI 会置顶,需在任务栏关闭 |
启动流程(标准交互)
当用户表达"开始记录今日工作"、"开始专注"等意图时:
前置检查 - FocusAI 已安装配置?
def check_focusai_ready():
"""仅检查程序目录是否存在,不读取配置文件内容"""
program_path = os.path.expanduser("~/.openclaw/workspace/focusAI/start.bat")
return os.path.exists(program_path)
- 如果未安装 → 引导用户先完成安装步骤(包括自行配置 API 凭证)
- 注意:API 密钥由用户在本地
config.json中配置,Bot 不读取、不传输该文件内容
Step 1 - Bot 主动询问
"可以使用 FocusAI 来辅助监控你的工作状态。需要启动吗?
- 后台静默 - 只在后台记录,无界面干扰
- 唤起 UI - 打开可视化监控面板(窗口置顶)"
⚠️ 注意:FocusAI 会将截图发送至你配置的云端视觉模型(消耗API额度)
Step 2 - 用户选择后,Bot协助启动
- 用户选择「后台静默」→ Bot 询问用户"是否现在启动 FocusAI?",获得明确确认后执行启动命令
- 用户选择「唤起 UI」→ Bot 询问用户"是否现在启动 FocusAI?",获得明确确认后执行启动命令
Step 3 - 启动命令(用户明确确认后,Bot执行)
# Bot 仅在用户明确说"启动"或"好的"后执行:
# 后台静默启动(最小化)
Start-Process -FilePath "~/.openclaw/workspace/focusAI/start.bat" -WindowStyle Minimized
# 或唤起 UI(正常窗口)
Start-Process -FilePath "~/.openclaw/workspace/focusAI/start.bat"
操作边界说明:
- Bot 不会自动执行启动命令,必须获得用户明确口头/文字确认
- Bot 不会读取用户的
config.json文件内容- Bot 不会传输用户的 API 凭证到任何外部服务器
⚠️ 启动前必须确认:
- 用户已同意隐私条款(截屏、API 调用)
- 用户已配置 API 凭证
🗣️ 唤醒触发词
当用户的意图匹配以下自然语言时,你应立刻意识到需要调用 FocusAI:
查询类 (需当日有数据)
- "我今天一天都在忙些什么?总结一下我的工作流。"
- "我下午两点左右看的那篇 PDF 主要是关于什么的?"
- "我感觉今天效率很低,帮我分析一下我把时间都花在哪了。"
- "我刚才是不是分心了?"
控制类
- "打开专注模式,监控我接下来的写代码状态。"
- "把我的视觉监控模型切换成豆包/通义千问。"
- "帮我保持工作时的注意力"
📖 Agent 操作指南
前置检查 (必须)
在尝试查询历史或分析活动前,先检查今日是否有数据:
import os
from datetime import datetime
def has_today_data():
today = datetime.now().strftime('%y%m%d')
data_dir = os.path.expanduser(f'~/Desktop/FocusOS_Data/{today}')
return os.path.exists(data_dir) and any(f.endswith('.csv') for f in os.listdir(data_dir))
如果返回 False,立即停止,不要尝试调用 API 或读取文件。
实时控制与状态获取 (HTTP API)
Base URL: http://127.0.0.1:8765/api
| 方法 | 端点 | 说明 |
|---|---|---|
| GET | /focus/score |
获取当前分数、目标和运行状态 |
| GET | /history |
获取程序本次启动以来的所有活动记录 |
| POST | /start |
启动监控(可附带 {"goal": "工作目标"}) |
| POST | /stop |
停止监控 |
| POST | /config |
覆写配置(切换模型或截图间隔) |
中途修改目标
用户想切换工作内容时,无需重启,直接 POST 新目标即可覆盖:
requests.post("http://127.0.0.1:8765/api/start",
json={"goal": "写论文 - 文献综述部分"})
Bot 回复示例:
"已更新目标为「写论文 - 文献综述部分」。专注分数会基于新目标重新评估。"
查询历史日期
支持自然语言解析:
def resolve_date(query):
"""把自然语言解析成 yyMMdd 格式"""
today = datetime.now()
if "昨天" in query:
return (today - timedelta(1)).strftime('%y%m%d')
if "前天" in query:
return (today - timedelta(2)).strftime('%y%m%d')
# 支持「上周三」「3月5号」等扩展...
Bot 回复示例(无数据时):
"昨天没有使用 FocusAI,暂无数据。需要我帮你启动今天的监控吗?"
数据存储位置
| 类型 | 路径 | 说明 |
|---|---|---|
| 数据文件 | ~/Desktop/FocusOS_Data/ |
截图 + CSV 报告,按日期分文件夹(如 260310/) |
| 程序本体 | 用户自选克隆路径 | 推荐 ~/.openclaw/workspace/focusAI/ 或 ~/projects/focusAI/ |
| 配置文件 | 程序目录下的 config.json |
运行时自动生成,可手动修改 |
注意:除了截图和 CSV,FocusAI 不会在本地生成其他持久化文件。
服务异常处理
当 API 无响应时的处理流程:
def check_service():
try:
r = requests.get("http://127.0.0.1:8765/api/focus/score", timeout=3)
return r.ok
except:
return False
def handle_exception():
if not is_process_running("focusAI"):
return "FocusAI 似乎没有运行。需要我帮你启动吗?"
else:
return "服务似乎卡住了,建议重启。要我现在关掉重新启动吗?"
后台监控的主动提醒
当用户选择后台静默模式时,Clawbot 需在对话中通过提醒策略让用户知道运行中的事实:
- 首次启动后 5 分钟:轻量确认「FocusAI 正在后台记录你的工作状态」
- 运行时间过长(>1.5h):用户可能忘了监控还在运行,及时提醒
"已经专注 1.5 小时了,还在后台记录着。需要休息一下吗?"
提醒策略示例
| 场景 | 语气示例 |
|---|---|
| 短暂分心 | "嘿,回来一下~" |
| 持续偏离(>10min) | "你已经刷了 10 分钟微博了,那个报告还在等你。" |
| 运行超 1.5h(后台模式) | "专注 1.5 小时了,还在后台记录着。要停了吗?" |
| 目标完成 | "专注 45 分钟,不错。要休息一下还是继续?" |
长期记忆检索 (RAG 架构)
检索工作流:
-
宏观概览 (省 Token)
- 读取对应日期的
report_*.csv - 生成全天活动线图
- 读取对应日期的
-
微观溯源 (按需触发)
- 根据 CSV 时间戳,找到对应
YYYYMMDD_HHMMSS.jpg - 调用视觉模型进行 OCR 和内容分析
- 根据 CSV 时间戳,找到对应
🛠️ 初始化与安装
前置要求
FocusAI 需要用户自行配置云端视觉模型API凭证(如通义千问、豆包等)。
- 视觉模型运行在云端,非本地运行
- API key 由用户在本地配置文件中提供,Bot 不接触、不传输用户凭证
安装步骤(用户自行完成)
Bot 不执行安装,仅提供指引。所有以下步骤由用户手动完成:
如果用户要求使用记忆/监控功能,但检测到本地未部署 FocusAI:
-
Bot 先解释用途和风险
- 本地截屏 + 云端视觉模型分析
- 截图和API调用会消耗Token/额度
- 代码开源在
https://github.com/HR2AY/focusAI,建议用户审查后使用
-
Bot 明确征求用户同意
-
Bot 提供安装指引(用户自行执行):
# === 用户自行执行以下步骤 ===
# 1. 克隆仓库到本地(用户自选路径)
git clone https://github.com/HR2AY/focusAI ~/.openclaw/workspace/focusAI
# 2. 编辑配置文件,填入你的API凭证
# Bot 不会读取此文件内容,仅由 FocusAI 程序本身读取
code ~/.openclaw/workspace/focusAI/config.json
# 配置项示例:
# {
# "api_key": "YOUR_API_KEY_HERE",
# "model_provider": "dashscope",
# "model_name": "qwen-vl-max"
# }
# 3. Windows 运行 start.bat 启动服务
cd ~/.openclaw/workspace/focusAI && start.bat
安全与隐私声明:
项目 说明 安装 由用户手动执行,Bot 不自动运行任何安装命令 API 凭证 用户自行配置在本地 config.json,Bot 不读取、不传输该文件内容截图数据 存储在用户本地 ~/Desktop/FocusOS_Data/,Bot 仅在用户查询时读取已生成的 CSV/图片程序控制 Bot 仅在用户明确同意后,通过 HTTP API 或启动命令与本地服务交互
⚡ 交互原则
| 场景 | 行为 |
|---|---|
| 状态极佳 (Score 持续上升) | 不要主动打断 |
| 长时间偏离目标 | 用幽默但严厉的语气提醒 |
| 当日无数据 | 明确告知,引导用户启动监控 |
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!