Velvt
v0.1 · macOS · private beta

The observer
that does not flatter you.

Velvt sits quietly in your menu bar, sealing every observation on-device and modeling how you actually work. Once or twice a day, it tells you something specific about your focus — in the voice of a neutral data scientist, not a cheerleader.

Read the spec
data / day
≈ 576 KB
data / year
< 200 MB
alerts / day
max 3
Notification Center
Velvt·Threshold
now

You've switched away from your task 18 times in the last 30 minutes — 3× your usual rate.

VS Code ⇄ Discord ⇄ Twitter · cluster detected

Velvt·Inactivity
now

You haven't done anything that looks like focused work in 2 hours and 14 minutes.

Last FOCUS_WORK event: 14:46 · Safari, Reddit since

Velvt·Evening Summary
now

Your longest focus block today was 18 minutes. Your personal record is 94 minutes — that was last Thursday.

Daily heartbeat · 8:00 PM

~/velvt/events.sqlite
tail -f · abstracted
timeapptitlecategory
no screenshotsno keyloggingno content capturelocal sqliteuser-auditableabstracted titles100% offline modeopen-source agentno screenshotsno keyloggingno content capturelocal sqliteuser-auditableabstracted titles100% offline modeopen-source agent
01 · the panel

The product is the notification. This is everything else.

A single window, a single gauge, a single timeline. No streaks. No scoreboards. No emoji.

Today · day 12 of 14

Timeline

ProductiveCompromisedIdle
Pure Productive
Compromised
Unlogged / Idle
00:0004:0008:0012:0016:0020:0024:00
Focus Fragmentation
0/ 100
Switches / hr47
Longest block8m
vs 14d baseline+184%
ClusterVSC ⇄ DSC
Threshold

You've switched away from your task 18 times in the last 30 minutes — 3× your usual rate.

Inactivity

You haven't done anything that looks like focused work in 2 hours and 14 minutes.

Evening Summary

Your longest focus block today was 18 minutes. Your personal record is 94 minutes — that was last Thursday.

02 · architecture

Four quiet layers. Nothing leaves unless you say so.

Collection is open-source so you can audit it. Modeling and insight live above an obfuscation pipeline.

  1. L1

    Collection Agent

    Passive macOS background process. Logs active window titles, app names, timestamps via the Accessibility API. ~1 event per 5s of active use.

    SwiftAccessibility APIopen-source
  2. L2

    Behavioral Modeling

    Computes Focus Fragmentation, Switching Clusters, and Proportionality. Days 1–14 are rule-based; from Day 15 it deviates against a rolling 14-day baseline.

    SQLiterolling baseline2× anomaly
  3. L3

    Insight Generation

    Lightweight LLM (or local inference) translates metrics into one objective sentence. Falls back to deterministic syntactic phrases if offline.

    GPT-5 minilocal fallbackneutral voice
  4. L4

    Delivery

    Menu bar app, native notifications, three timeline tracks. No dashboards. No streaks. Maximum three alerts per day.

    menu barnotificationsopen-source
abstraction pipeline
"AP Lang Research Paper""Document: B"
"#general — engineering""Channel: A"
"velvt/agent.swift""File: F"

The mapping dictionary lives only on your machine. Insights are reverse-translated locally before they ever appear on screen.

seed classifier · O(1)
FOCUS_WORK
VS Code · Docs · Notion
PASSIVE_CONSUMPTION
YouTube · Netflix
SOCIAL_FEED
Reddit · X · Instagram
COMMUNICATION
Slack · Discord · Mail
TASK_MANAGEMENT
Linear · Jira · Asana
REFERENCE
Wikipedia · MDN · SO
SYSTEM
Finder · Settings
UNLOGGED
→ inline classify
03 · dispatch logic

Three alerts. No more, ever.

A hybrid scheduler: one event-driven anomaly, one inactivity threshold, one fixed evening heartbeat.

01capped 1 / day

Threshold

when · 2× margin against rolling 14-day baseline

Fires the moment a switching cluster or fragmentation anomaly crosses the line. Real-time. Dynamic.

02user-configured · default 90m

Temporal Inactivity

when · 0 events matching FOCUS_WORK

The guilt engine. When you haven't done anything that looks like work for as long as you said you wouldn't.

03fixed · 8:00 PM

Evening Summary

when · single most fascinating deviation

The non-negotiable daily heartbeat. One sentence. The thing you'd rather not hear.

automation hooks
if temporal_inactivity > 90m
run ~/.velvt/scripts/close_safari.sh
on cluster(VS Code ⇄ Discord) ≥ 12/30m
enable focus_lock → mute Discord 25m
04 · pricing

Pay once. Pay monthly. Or don't pay at all.

The collection agent is free and open-source. Pay only if you want the longer memory.

open-source core

Unsealed

$0
  • Collection agent (auditable source)
  • Local fragmentation metrics
  • 7-day rolling memory
  • Sealed on-device · zero network
recommended
the everyday seal

Velvt Vault

$6/ mo
  • Full behavioral modeling engine
  • Cross-application pattern libraries
  • 1-year encrypted local history
  • Weekly sealed behavioral reports
  • Optional end-to-end encrypted sync
lifetime · airgapped

Sovereign

$49once
  • Full feature set, permanent license
  • Local-only file processing
  • On-device model inference
  • Hardware-bound key, no cloud path