Model or dataset
thunlp/ProactiveAgent avatar
thunlp/ProactiveAgent

ProactiveAgent reads your Activity Watcher traces and interrupts you

A LLM-based Agent that predict its tasks proactively.

670 stars61 forksPythonApache-2.0

At a glance

What is it?
A research pipeline from THUNLP that collects desktop activity, trains an LLM to predict which task you are about to need, and interrupts you with a desktop toast. The dataset is small and fully generated, the reward model hookup is an unfinished placeholder, and the install path ignores the lock file.
Who is it for?
ProactiveAgent suits researchers who want the data collection pipeline, the generated datasets and the evaluation scripts rather than a finished assistant. Do not expect the 0.918 F1 reward model to be pluggable today, because the section describing how to connect it is a single placeholder line, and expect the agent to interrupt a real desktop on Windows or macOS with no Safari coverage.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 146 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 4, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The reward model hookup is still a placeholder

The section that promises the better experience is the one that was never written. Under "Connect the Reward Model" the page offers a single line, `__TO BE UPDATE__`, with no steps, no flags and no configuration. That gap matters because the reward model is the component carrying the headline number: the construction pipeline pairs an Environment Gym, a Proactive Agent and a Reward Model, and the README reports the reward model reaching a `0.918` F1 score on the test set. So the measured component and the documented integration are the same component, and the wiring between them is unspecified. Anyone planning to reproduce that figure through the agent itself will find the evaluation scripts under `eval/` instead, with the reward model reachable as a Hugging Face checkpoint.

The documented clone is SSH only and skips submodules

The install starts with an SSH URL and no recursion flag:

bash
git clone [email protected]:thunlp/ProactiveAgent
cd ProactiveAgent

Two consequences follow from that line. The address uses the `[email protected]:` form, so it needs an SSH key on the machine and will not work over plain HTTPS without editing it. It also omits `--recurse-submodules`, while `.gitmodules` sits at the top level of the repository, so any submodule tracked there is left uninitialized by a clone that follows the page exactly. Everything after the clone assumes a Python 3.10 environment created through conda, which pins the interpreter before anything else is installed:

bash
conda create -n activeagent python=3.10
conda activate activeagent
pip install -r requirements.txt

The three commands are unconditional, so a machine with an existing environment either has to be recreated or has to skip the `conda create` line by hand.

pip reads requirements.txt and never touches poetry.lock

The project carries two dependency systems and the documented path picks the weaker one. `pyproject.toml` declares a Poetry build backend, requires `python = "^3.10"`, and pins nine runtime dependencies with caret ranges, including `openai`, `tiktoken`, `tenacity`, `pynput`, `aw-client`, `pyyaml`, `colorlog`, `jsonlines` and `pyperclip`. `requirements.txt` lists twenty-five entries with no version constraints at all, and adds platform markers that the Poetry section does not have: `windows-toasts` for `sys_platform=='win32'` and `macos_notifications` for `sys_platform=='darwin'`. A `poetry.lock` file is present at the top level and is never used by `pip install -r requirements.txt`. The practical result is that the desktop notification path is selected by your operating system at install time, and that the reproducible set the lock file describes is not the set the documented command builds.

Three toast outcomes are the entire feedback loop

Interaction with the agent happens through a desktop toast, and the page defines exactly three answers to it. Accepting means clicking the toast body on Windows or the button on macOS, after which the agent performs the relevant actions. Rejecting means clicking the dismiss control at the top right, and the agent then tries to propose something different on the next turn. Ignoring means doing nothing at all: the toast disappears after an interval, and the agent reads the silence as being busy and reduces how often it proposes afterwards. Nothing here is a text conversation, so the agent's entire feedback channel is which of three UI gestures the user made. That design also explains the evaluation vocabulary, which splits every case into Missed-Needed, Non-Response, Correct-Detection and False-Alarm, matching the two ways a proposal can be right and the two ways it can be wrong.

Activity Watcher has to be verified before the agent means anything

The agent's input is a local trace database, so the install is not finished until that database shows the right windows. The check is a specific page: open `http://localhost:5600/#/timeline` and confirm that four traces appear, named `afk`, `vscode`, `window` and `web`. The browser extension that feeds the `web` trace is not installed from a store here. It ships inside the repository as `aw-watcher-web.zip` under the agent resource folder, and the page walks through downloading it, unzipping it, opening developer mode at `edge://extensions/` or `chrome://extensions/` and choosing load unpacked. Safari is explicitly untested. A separate official extension exists for VS Code and comes from the marketplace as `aw-watcher-vscode`. Getting this wrong is quiet rather than loud: the agent would simply have less to reason over.

The agent needs a completions endpoint before it can run

Configuration is a file copy, and the keys you must edit are named. Start from the shipped example:

bash
cp example_config.toml private.toml

Then replace `default_completions_model`, `api_key` and `base_url` with your own values. There is no environment-variable path described and no offline mode, so a reachable completions endpoint is a precondition for the agent producing anything at all, and the copy step is what keeps your key out of version control. The run instructions then leave the top-level page entirely: you are told to enter the `./agent` directory and follow `agent/README.md`. The same pattern holds elsewhere, with `gym/README.md` covering the environment gym and `dataset/README.md` covering collection and annotation, so the repository spreads its operational detail across subdirectory readmes rather than keeping it in one place.

136 instances and 6790 events, all machine generated

The dataset is small and its provenance is stated without hedging. The table breaks the release into coding, writing and daily life settings with 46, 46 and 44 instances for a total of 136, and 2275, 2354 and 2161 events for a total of 6790. Every training instance was generated from the GYM pipeline rather than collected from real users, while Activity Watcher was used to gather the human traces that the pipeline reasons over and to annotate the test set. The scope caveat is equally direct: the data targets coding, writing and daily life only, is distributed under Apache License 2.0, and should not be read as reflecting the opinions of the creators, owners or contributors. A further feature listed alongside the pipeline is an annotation platform for aligning agent responses with human annotators.

News stops in 2025 while commits continue into 2026

The timeline on the page and the repository history do not line up. The news list holds two entries: the model release dated 2025/03/21 and the ICLR 2025 acceptance dated 2025/01/22, with the paper on arXiv at 2410.12361 and the model weights hosted under the YancyLee ProactiveAgent tree. The most recent push to the default branch `main` is dated 2026-05-12, and the repository publishes no GitHub releases at all, so there is no tag to anchor a version to. The Poetry metadata still reads `version = "0.1.0"` even though the page describes the pipeline, the datasets and the evaluation scripts as released together. For anyone reproducing the work, that combination means pinning to a commit rather than a release and reading `CHANGELOG.md`-style history in the git log instead of a version list.

Editorial conclusion

ProactiveAgent suits researchers who want the data collection pipeline, the generated datasets and the evaluation scripts rather than a finished assistant. Do not expect the 0.918 F1 reward model to be pluggable today, because the section describing how to connect it is a single placeholder line, and expect the agent to interrupt a real desktop on Windows or macOS with no Safari coverage. Before running anything, check that Activity Watcher reports the four expected traces, confirm your platform matches the `windows-toasts` or `macos_notifications` marker in `requirements.txt`, and read `agent/README.md`, since the top-level page stops short of the actual run steps. The last push is dated 2026-05-12 and there are no tagged releases.

Frequently asked questions

How do I connect the reward model in ProactiveAgent?

The README does not document it. The "Connect the Reward Model" section contains only a placeholder line, so the reward model that reaches a `0.918` F1 score on the test set is not wired into the agent through any documented step.

What has to be running before the ProactiveAgent agent works?

Activity Watcher, verified at `http://localhost:5600/#/timeline`, where four traces should appear: `afk`, `vscode`, `window` and `web`. The web trace needs the bundled `aw-watcher-web.zip` extension loaded unpacked in Chrome or Edge, and Safari is not tested.

Which ProactiveAgent configuration values do I have to change?

Copy `example_config.toml` to `private.toml`, then set `default_completions_model`, `api_key` and `base_url` to your own. After that you enter the `./agent` directory and follow `agent/README.md` for the run steps.

How large is the ProactiveAgent dataset?

136 instances and 6790 events in total, split across coding, writing and daily life settings with 46, 46 and 44 instances. All training instances were generated from the GYM pipeline, with Activity Watcher used to collect the underlying human traces.

How does the ProactiveAgent toast tell whether the user wants help?

Three gestures: clicking the toast body on Windows or the button on macOS accepts, clicking the dismiss control at the top right rejects, and doing nothing ignores it. The agent reduces how often it proposes after an ignore and changes approach after a reject.

Official sources

  1. Issues
  2. License: Apache-2.0
  3. README
  4. thunlp/ProactiveAgent on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/thunlp-proactiveagent.svg)](https://hysenlabs.com/projects/thunlp-proactiveagent)