SkillHub

focus-ai

v1.0.5

本地监控屏幕活动,评估专注度并提供当天工作状态和历史视觉记录查询与分析服务。

Sourced from ClawHub, Authored by HR2AY

Installation

Please help me install the skill `focus-ai` from SkillHub official store. npx skills add HR2AY/focus-ai

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 架构)

检索工作流:

  1. 宏观概览 (省 Token)
  2. 读取对应日期的 report_*.csv
  3. 生成全天活动线图

  4. 微观溯源 (按需触发)

  5. 根据 CSV 时间戳,找到对应 YYYYMMDD_HHMMSS.jpg
  6. 调用视觉模型进行 OCR 和内容分析

🛠️ 初始化与安装

前置要求

FocusAI 需要用户自行配置云端视觉模型API凭证(如通义千问、豆包等)。 - 视觉模型运行在云端,非本地运行 - API key 由用户在本地配置文件中提供,Bot 不接触、不传输用户凭证

安装步骤(用户自行完成)

Bot 不执行安装,仅提供指引。所有以下步骤由用户手动完成:

如果用户要求使用记忆/监控功能,但检测到本地未部署 FocusAI:

  1. Bot 先解释用途和风险
  2. 本地截屏 + 云端视觉模型分析
  3. 截图和API调用会消耗Token/额度
  4. 代码开源在 https://github.com/HR2AY/focusAI,建议用户审查后使用

  5. Bot 明确征求用户同意

  6. 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 持续上升) 不要主动打断
长时间偏离目标 用幽默但严厉的语气提醒
当日无数据 明确告知,引导用户启动监控