npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

lots-aw-bridge

v0.7.2

Published

Lokaler Stdio-MCP-Server: ActivityWatch → LOTS Zeiterfassung. AW-Daten verlassen niemals die lokale Maschine.

Downloads

179

Readme

lots-aw-bridge

Lokaler Stdio-MCP-Server für die automatische Zeiterfassung in LOTS. Liest Events einer lokalen ActivityWatch-Instanz aus, wendet eine lernende Knowledge-Base an und stellt Claude Tools bereit, mit denen der tägliche Buchungs-Workflow in Sekunden erledigt ist.

Vollständige Anleitung & Einrichtung

Privacy-Grundsatz: ActivityWatch-Daten verlassen niemals die lokale Maschine. LOTS erhält nur die Zeiteinträge, die der Nutzer explizit bestätigt — niemals Window-Titel oder URLs.


Wie es funktioniert

ActivityWatch läuft im Hintergrund und protokolliert, welche Anwendungen und Websites aktiv sind. Die Bridge liest diese Events via REST aus, wendet Privacy-Filter an (Titel werden gestutzt, sensible Apps geblockt) und stellt sie Claude als strukturierte Sessions bereit.

Claude gleicht die Sessions mit einer lernenden Knowledge-Base ab — persönliche Regeln, die mit jedem korrigierten Eintrag schärfer werden — und schlägt fertige Zeiteinträge vor. Der Nutzer bestätigt, korrigiert oder ergänzt im Chat. LOTS bucht anschließend via LOTS-MCP.

Die Bridge selbst kommuniziert ausschließlich mit localhost:5600 (ActivityWatch). Kein Telemetrie, kein Cloud-Roundtrip für AW-Daten.


Installation

curl -fsSL https://lots.lilapixel.de/install.sh | bash

Der Installer richtet Homebrew, Node.js, ActivityWatch und die Bridge in einem Schritt ein und konfiguriert Claude Desktop automatisch.

Techie-Pfad (Node.js und ActivityWatch bereits vorhanden):

npx lots-aw-bridge install   # trägt Bridge in claude_desktop_config.json ein
npx lots-aw-bridge doctor    # prüft Konfiguration und AW-Verbindung

Claude Desktop neu starten — fertig.

Voraussetzungen:


Empfohlener Tages-Workflow

1. aw_get_sessions({date, timezone})                     → Sessions mit start/end (lokal)
2. list_my_kb_rules            [LOTS-MCP]                → persönliche Regeln
3. list_projects               [LOTS-MCP]                → Projekte mit matchHints
4. kb_match({events, accountRules, teamHints})           → Vorschläge mit start/end
5. Nutzer bestätigt / korrigiert
6. create_time_entry({startTime, duration, ...})         [LOTS-MCP] → gebucht
7. kb_record_correction(...)  + upsert_my_kb_rule        [LOTS-MCP] → KB lernt

aw_get_day_summary liefert alternativ aggregierte Tages-Übersichten (inkl. firstStart/lastEnd pro Bucket), ohne Einzel-Sessions — nützlich für einen schnellen Überblick oder bei sehr vielen kurzen Fenstern.

Claude führt den Workflow automatisch durch, sobald man z. B. schreibt:

„Buche meinen heutigen Tag bitte."


MCP-Tools

| Tool | Zweck | | --- | --- | | bridge_version | Installierte vs. verfügbare npm-Version — einmal pro Session aufrufen. | | aw_list_buckets | Übersicht aktiver ActivityWatch-Watcher (window / afk / web). | | aw_get_sessions | Empfohlen. Gemergte Sessions mit start/end (ISO-8601 + Offset), AFK-aware. | | aw_get_day_summary | Tages-Aggregation zu Buckets inkl. firstStart/lastEnd. | | aw_get_afk_events | AFK-Slices für Plausibilitätschecks. | | kb_match | Wendet KB-Regeln (5 Schichten) auf Events oder Sessions an — gibt Projektvorschläge zurück. | | kb_record_correction | Lernt aus Nutzer-Korrekturen (Sigmoid-Konfidenz, idempotent via correctionId). |


Knowledge-Base & Lernmechanismus

Die Bridge lernt mit jeder Korrektur dazu. Wenn Claude einen Eintrag falsch zuordnet und der Nutzer das richtige Projekt nennt, speichert kb_record_correction eine Regel lokal (~/.config/lots-aw-bridge/kb.json). Bei der nächsten Session mit derselben App/demselben Titel-Muster greift die Regel automatisch.

Zusätzlich können Regeln via upsert_my_kb_rule (LOTS-MCP) in der Cloud gespeichert werden — so greifen sie geräteübergreifend und überleben eine Neuinstallation.

Wissens-Schichten (Priorität hoch → niedrig):

| Schicht | Quelle | Beschreibung | | --- | --- | --- | | 0 | Lokal | Geblockte Apps — werden immer ignoriert, keine Timestamps | | 1 | Lokal | Manuelle Overrides (overrides.json) | | 2a | Lokal | Persönliche KB (~/.config/lots-aw-bridge/kb.json) | | 2b | LOTS-Cloud | Persönliche Regeln aus Firestore (list_my_kb_rules) | | 3 | LOTS-Cloud | Team-Hints aus Projekten (list_projects → matchHints) |


Privacy & Sicherheit

  • awUrl muss localhost, 127.0.0.1 oder ::1 sein — sonst Hard-Fail CONFIG_PRIVACY_VIOLATION
  • Window-Titel werden vor der Ausgabe auf einen titleStem reduziert (E-Mail-Adressen, API-Tokens und lange Pfade werden entfernt)
  • Geblockte Apps liefern weder Titel noch Timestamps an Claude
  • create_time_entry läuft direkt über LOTS-MCP — nicht durch die Bridge
  • Die Bridge baut keine Verbindung zu externen Hosts auf (außer npm-Registry für bridge_version)

Sensible Apps (z. B. Banking, Passwort-Manager) können in overrides.json unter blockedApps eingetragen werden und tauchen dann in keiner Ausgabe auf.


Konfiguration

| Datei | Zweck | | --- | --- | | ~/.config/lots-aw-bridge/config.json | awUrl (Standard: http://localhost:5600), Logging | | ~/.config/lots-aw-bridge/overrides.json | blockedApps, redactTitlePatterns, manualOverrides | | ~/.config/lots-aw-bridge/kb.json | Lokal gelernte Match-Regeln (wird automatisch verwaltet) |

Beispiel overrides.json

{
  "blockedApps": ["1Password", "Banking App"],
  "redactTitlePatterns": ["token=[^&]+"],
  "manualOverrides": [
    {
      "when": { "app": "Figma" },
      "then": { "projectId": "proj_abc123" }
    }
  ]
}

Diagnose

npx lots-aw-bridge doctor

Prüft (7 Schritte): Config-Datei, Privacy-Constraint, AW-Erreichbarkeit, Window-Bucket, AFK-Bucket, Claude-Desktop-Konfiguration, npm-Version.


Entwicklung

npm install
npm test        # Vitest, alle Tests
npm run build   # esbuild → dist/cli.mjs

Konventionen: ESM, Node ≥ 18, Vitest, TDD. Vollständige Spezifikation: SPEC.md.


Lizenz

AGPL-3.0-only — Copyright 2026 Thomas Soring / LILAPIXEL Grafikdesign.

Nutzung, Modifikation und Weitergabe erlaubt; Änderungen müssen unter derselben Lizenz veröffentlicht werden.