WorkLog 是一个基于窗口活动采集的自动工作日报生成工具:
- 周期性采集当前前台应用与窗口标题
- 将停留时长写入本地 SQLite
- 退出时自动调用 MiniMax 生成日报(Markdown)
- 支持按日期回放当天数据生成日报
当前逻辑为单文件实现,核心脚本:
claude_auto_report_code_minimax.py
claude_auto_report_code_minimax.py:主程序requirements.txt:依赖列表.gitignore:忽略 venv、缓存等~/.worklog/activity.db:本地数据库(运行时自动创建)./reports/:日报输出目录(运行时自动创建)
- Python 3.9+(推荐使用项目内
venv) - macOS / Windows / Linux(支持对应系统窗口采集命令/API)
- macOS 需开启辅助功能权限(辅助功能/可访问性)
- Windows 需安装
psutil与pywin32 - Linux 需安装
xdotool
cd /Users/wangyaomin/Downloads/Projects/AI项目/auto_report
./venv/bin/python3 -m pip install -r requirements.txt说明:若你在 Windows 上直接运行,请再补充安装:
./venv/bin/python3 -m pip install psutil pywin32# 推荐:通用配置(推荐)
export LLM_API_URL="https://api.openai.com/v1/chat/completions"
export LLM_API_KEY="你的 LLM API Key"
export LLM_MODEL="gpt-4o-mini"
# 兼容历史配置(可继续使用)
export MINIMAX_API_KEY="你的 MiniMax API Key"
export MINIMAX_API_URL="https://api.minimaxi.com/v1/text/chatcompletion_v2"
export MINIMAX_MODEL="MiniMax-M2.5-highspeed"说明:
- 新用户优先使用
LLM_*系列环境变量,可接入兼容v1/chat/completions风格的接口。 - 脚本内部会优先读取
LLM_API_URL / LLM_API_KEY / LLM_MODEL。 - 若未配置
LLM_*,自动回退到旧的MINIMAX_*变量,确保兼容。
./venv/bin/python3 claude_auto_report_code_minimax.py- 程序会开始采集窗口活动
Ctrl+C结束时自动生成日报- 默认不显示实时窗口滚动面板;需要实时视图请加
--verbose
./venv/bin/python3 claude_auto_report_code_minimax.py --report # 生成今天日报(不带参数)
./venv/bin/python3 claude_auto_report_code_minimax.py --report 2026-02-24
./venv/bin/python3 claude_auto_report_code_minimax.py --monthly-report # 生成当月月报(不带参数)
./venv/bin/python3 claude_auto_report_code_minimax.py --monthly-report 2026-02在脚本顶部常量区可调参数:
LLM_API_URL:LLM 接口地址(默认兼容 MiniMax)LLM_MODEL:模型,默认MiniMax-M2.5-highspeed(兼容旧字段MINIMAX_MODEL)DB_PATH:数据库路径(默认~/.worklog/activity.db)REPORT_DIR:日报目录(默认./reports)COLLECT_INTERVAL:采集周期(默认 5 秒)MIN_DURATION:最小有效记录时长(默认 5 秒)WINDOW_STABLE_COUNT:窗口稳定判定次数(默认 1)FLUSH_INTERVAL:当前窗口周期落盘间隔(默认 30 秒)WORKLOG_RETENTION_DAYS:历史记录保留天数(默认 31 天)WORKLOG_CLEANUP_INTERVAL_SECONDS:滚动清理间隔(默认 3600 秒,最低 60 秒)WORKLOG_ACTIVITY_LOG:可选,设置为1/true时输出窗口活动明细日志(默认关闭)WORKLOG_VERBOSE:可选,设置为1/true时开启实时窗口显示(默认关闭)WORKLOG_PROGRESS_BAR:可选,默认跟随WORKLOG_VERBOSE,设置为0/false可关闭实时窗口显示WORKLOG_PROGRESS_INTERVAL:可选,非交互终端下仅当窗口变化或超时(秒)时刷新一次(默认 5)WORKLOG_RECENT_RECORDS:可选,终端进度面板里保留最近多少条历史记录(默认 8)
--verbose(或 WORKLOG_VERBOSE=1)时会额外显示当前窗口及最近窗口记录;默认不显示。
BLACKLIST 列表内应用/标题关键字不会计入日报,例如:
- B站/抖音/淘宝/京东/微博
- YouTube/Netflix/Spotify/Apple Music
- App Store、Finder、系统设置等
可按需增删该列表。
日报包含三部分,并且最终会保存为 Markdown 文件(不在控制台展开全文):
- 日期与总有效时长
- 应用汇总(含窗口级明细)
- 时间线(按小时)
- 交给 LLM 生成的结构化日报(
## 今日工作 / 进行中 / 备注)
保存文件示例:
./reports/daily-report-YYYY-MM-DD.md- 终端输出示例:
日报已写入 Markdown:.../daily-report-YYYY-MM-DD.md
因为时长显示策略按更细粒度保留了秒级信息;早期版本四舍五入分钟会出现“0分钟”的错觉。
检查 venv 是否激活,或使用项目解释器直接执行:
./venv/bin/python3 ...工具已支持周期落盘(FLUSH_INTERVAL)和退出时落盘兜底,但像 SIGKILL 的硬终止仍可能无法完全避免。
支持,但需满足平台命令:
- macOS:
osascript - Linux:
xdotool(getactivewindow) - Windows:
psutil与pywin32(pip install psutil pywin32)
rm -rf ~/.worklog仅清理本地采集数据,不影响脚本本身。
- 不要将真实密钥写入代码文件
- 当前版本优先读取
LLM_API_KEY,若未设置会回退MINIMAX_API_KEY .gitignore已默认忽略虚拟环境与本地产物