跳至主要内容

博客

On-Device Behavior Learning: A Core ML Stack for Your Timeline

功能Core MLRSSExperimental

Sidefy is adding an on-device engagement learning pipeline—Create ML training, NLModel inference, and implicit signal collection—that learns RSS interest from how you browse, with no cloud uploads.

Sidefy is adding on-device behavior learning (Engagement Learning) — a Core ML pipeline that infers RSS interest from how you actually browse, without explicit ratings or cloud training.

Note: This is an experimental feature. Choose Enable Experimental Features from the Help menu, then open Experimental Features from the menu bar (under ADVANCED). Turn on Enable Behavior Learning inside that window. Disabling experimental features turns behavior learning off immediately; collected samples and the trained model are kept until you tap Clear.

The Problem

Timeline feeds grow faster than manual curation. Rules help, but they are static. We wanted a layer that adapts to your habits while keeping all data and inference on your Mac.

The Stack

  1. Signal collectionBubbleEngagementTracker turns implicit actions into weighted samples: selection dwell, confirm-open, page turns, reader engagement, and more. Positive and negative signals roll up into local SQLite records.
  2. Create ML trainingBehaviorModelTrainer builds an MLTextClassifier (maxEnt) from event title + notes prefix. Training starts at 25 samples; with an existing model, 10 new samples since the last run can trigger automatic retraining.
  3. NLModel inferenceBehaviorClassifierService loads the compiled model via NaturalLanguage, scores each event (interest − disinterest), and applies presentation in the bubble: smart sort and dim low-interest rows — no network round trip.

Samples, model, and inference all stay on device.

What It Learns From

Signals are behavioral, not explicit thumbs-up/down:

  • Lingering on an event vs. quick page turns
  • Opening an item vs. dismissing the bubble immediately
  • Time spent in the reader (optional via Include Reader Signals)

Currently scoped to RSS plugin events only — calendar and reminders are excluded.

How to Use It

In Experimental Features → Behavior Learning:

OptionWhat it does
Enable Behavior LearningMaster toggle; must be on for collection or apply
Collect OnlyCollect samples without reordering or dimming bubble rows
Collect and ApplyCollect samples and sort + dim rows inside the event bubble
Include Reader SignalsAdd reader dwell and navigation to the sample mix
Automatic / Manual trainingRetrain on a schedule, or tap Train / Retrain (manual mode only)
ClearDelete all samples and the trained model

Sample Stats shows a total count only (e.g. 42 samples) — not individual records or interest/disinterest breakdown. Manual mode surfaces brief train success/failure messages; automatic training runs in the background.

What Changes on Screen

  • Bubble — In Collect and Apply mode, event order and row opacity inside the popover follow the learned interest score. Dimming applies here only.
  • Timeline color bar — Sorting may change segment order within a group because events are reordered at the data layer. The bar itself is not dimmed.

Risk Notice

Warning: With Collect and Apply enabled, the model may reorder bubble rows and dim low-interest items based on your browsing habits. With few samples or noisy signals, results can feel unexpected — or like the bubble is slipping out of your control.

Use Collect Only if you want background sampling without changing bubble presentation; settings will only show whether the sample total is growing. Switch to Collect and Apply when you are ready for sort/dim behavior. You can change modes, disable experimental features, or Clear samples and the model at any time.


Shipping as an experimental feature in an upcoming Sidefy release.