Skip to content

docs: add ActivityWatch + Activity Frames side-by-side guide - #183

Closed
TimeToBuildBob wants to merge 1 commit into
ActivityWatch:masterfrom
TimeToBuildBob:docs/activity-frames-integration
Closed

TimeToBuildBob wants to merge 1 commit into
ActivityWatch:masterfrom
TimeToBuildBob:docs/activity-frames-integration

Conversation

@TimeToBuildBob

Copy link
Copy Markdown
Contributor

Adds a new page documenting how to use ActivityWatch alongside Activity Frames (MIT, Python, MCP; arXiv:2608.05784).

What the page covers

  • Role split: AW = capture/query layer; Activity Frames = compile/memory layer. The two compose without merging.
  • macOS quick start: native aframes recorder + MCP setup in three commands.
  • Linux setup: AW as the capture engine via $AFRAMES_DB — the adapter seam the upstream docs describe as "run your own recorder."
  • Replay degradation caveat: get_steps (element-grounded click scripts) relies on the macOS Accessibility API; an AW-backed Linux engine degrades to URL/app grounding only for replay. Context discovery still works fully.
  • MCP tools reference table: six tools, what each returns, typical use.
  • Privacy notes: local-only, typed text excluded by default, window titles treated as data not instructions.

Background

The research/docs#181 thread (now merged) noted that Activity Frames cites ActivityWatch as related work rather than using it as an instrument. This page is the natural companion: ActivityWatch users who want agent memory and workflow replay, and Activity Frames users on Linux who need a capture engine.

Ref: ErikBjare/bob#1253

Covers:
- What each tool does and how they compose (AW=capture, aframes=compile)
- macOS quick start with the native aframes recorder
- Linux setup using ActivityWatch as the capture engine via $AFRAMES_DB
- MCP tools reference table
- Honest replay-degradation caveat for Linux (URL/app grounding only)
- Privacy notes

Ref: https://github.com/nossa-y/activity-frames, arXiv:2608.05784
Git-Session-Id: 92bd
@greptile-apps

greptile-apps Bot commented Sep 17, 2026

Copy link
Copy Markdown
Contributor

RetriggerConfidence Score: 1/5

The PR is not safe to merge until the unusable Linux integration instructions, nonexistent screenshot input, and misleading MCP privacy guarantee are corrected.

Findings

  1. P1 Adapter Script Is Unavailable
  2. P1 Screenshot Events Do Not Exist
  3. P1 Security MCP Can Transmit Activity Data
  4. P2 Privacy Reference Is Unresolved
  5. P2 Title Adornments Are Too Short

Summary

The PR adds a side-by-side ActivityWatch and Activity Frames guide, including platform setup, MCP tools, replay limitations, and privacy guidance, and exposes it through the main documentation toctree.

  • The macOS path documents Activity Frames’ native recorder and MCP command.
  • The Linux path proposes transforming ActivityWatch events into an Activity Frames SQLite database.
  • The new page also describes MCP tools, replay limitations, and local-data considerations.
  • The Linux workflow currently depends on an unavailable adapter and names screenshot input that ActivityWatch does not produce.
  • The privacy wording overlooks transmission by cloud-backed MCP clients, and the page introduces two Sphinx warnings.

Diagram

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    W[ActivityWatch watchers] -->|window, URL, AFK events| S[ActivityWatch server]
    S -->|HTTP API| A[Required adapter]
    A -->|schema conversion| D[(AFRAMES_DB)]
    D --> F[Activity Frames compiler]
    F --> M[Local MCP server]
    M --> C[MCP client]
    C -->|tool results when cloud-backed| P[Model provider]
Loading

Reviews (1) · Last reviewed commit: "docs: add ActivityWatch + Activity Frame..."

Comment thread src/activity-frames.rst
database schema. The recommended approach:

1. Run ActivityWatch normally (``aw-qt`` or ``aw-server`` + watchers).
2. Run the adapter script that reads from the AW API and writes to ``$AFRAMES_DB``.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Adapter script is unavailable

The Linux procedure tells readers to run “the adapter script,” but no script, package, link, API mapping, or conversion procedure is supplied. The following note also confirms that the reference adapter has not shipped. A Linux user therefore cannot create the required $AFRAMES_DB or complete the advertised integration without independently designing the adapter.

Knowledge Base Used:

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Comment thread src/activity-frames.rst
recorder and point ``$AFRAMES_DB`` at its database". ActivityWatch is exactly that
recorder.

A minimal adapter maps ActivityWatch ``aw-watcher-window`` and screenshot events into

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Screenshot events do not exist

The page says the adapter maps ActivityWatch screenshot events, but standard ActivityWatch watchers do not produce screenshots. The window watcher records application and title information, the AFK watcher records status, and browser-specific capture can provide URLs. The described screenshot input therefore does not exist in a normal ActivityWatch installation, so the claimed Activity Frames capture pipeline cannot be implemented as written.

Knowledge Base Used: Watchers and data capture

Comment thread src/activity-frames.rst
claude mcp add activity-frames -- aframes mcp

Any other MCP-capable client: command ``aframes``, args ``["mcp"]``. The server reads the
local capture database; nothing leaves the machine.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 security MCP can transmit activity data

“Nothing leaves the machine” is incorrect for the cloud-backed MCP clients this section recommends. Although the MCP subprocess reads a local database, the client forwards returned activity context to the model provider. This absolute wording can cause users to expose screen-derived activity data under a false local-only expectation; clarify that Activity Frames does not initiate uploads while connected clients may transmit MCP results.

How this was verified: The documented flow serves local activity records to an external agent client, placing returned records beyond ActivityWatch’s local data boundary.

Knowledge Base Used: Privacy and security

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Comment thread src/activity-frames.rst
- `Activity Frames SPEC.md <https://github.com/nossa-y/activity-frames/blob/main/SPEC.md>`_ — the deterministic two-tier compile contract
- `arXiv:2608.05784 <https://arxiv.org/abs/2608.05784>`_ — the companion paper measuring Routine Overhead Ratio (how much agents overpay rediscovering workflows you've already demonstrated)
- :ref:`watchers` — ActivityWatch watchers that capture the data Activity Frames builds on
- :ref:`privacy` — ActivityWatch's local-first privacy model

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Privacy reference is unresolved

The privacy cross-reference has no matching explicit label or section title. The destination page is titled “Privacy Policy” and therefore receives the automatic label privacy-policy. Sphinx emits an undefined-label warning and renders a non-functional link in the Further reading list.

Suggested change
- :ref:`privacy` — ActivityWatch's local-first privacy model
- :ref:`privacy-policy` — ActivityWatch's local-first privacy model

Comment thread src/activity-frames.rst
Comment on lines +3 to +5
*****************************
Using ActivityWatch with Activity Frames
*****************************

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Title adornments are too short

Both title adornments are only 29 characters long while the title is 40 characters. This violates reStructuredText’s heading-adornment rule and produces title-length warnings on every Sphinx build.

Suggested change
*****************************
Using ActivityWatch with Activity Frames
*****************************
****************************************
Using ActivityWatch with Activity Frames
****************************************

Comment thread src/index.rst
directories
features
watchers
activity-frames

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Doesn't belong in top-level index, this is a very niche page, arguably doesn't belong in core AW docs at all (then where?).

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fair. The page is niche, and worse: the Linux path depends on an adapter that doesn't exist yet, so it documents a pipeline users can't actually run. My read on "then where?":

  • Not core AW docs — agreed, pulling the src/index.rst entry.
  • Not upstream aframes docs either (nossa-y/activity-frames is third-party; not our place to advertise an AW adapter we haven't built).
  • Right home for now: the draft stays on the branch (docs/activity-frames-integration) and in the tracking task (ErikBjare/bob#1253). If the AW→AFRAMES_DB adapter ever gets built, the guide moves into that adapter's repo/README — the docs page then documents something that ships.

Closing this PR as premature rather than polishing a page for a nonexistent adapter. Easy to reopen retargeted if you'd rather it live somewhere specific.

@TimeToBuildBob

Copy link
Copy Markdown
Contributor Author

Closing per the review discussion above: the Linux integration documents an adapter that doesn't exist, and this page doesn't belong in core AW docs (see @ErikBjare's note on src/index.rst). The draft stays on the branch and in the tracking task (ErikBjare/bob#1253); revisit when the AW→AFRAMES_DB adapter actually ships.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants