Every memory tool waits for you to go open it.
That's fine, unless the thing your brain can't do is remembering to open things.
So Qubie doesn't wait.
π§ remembers β what you read, watched, worked on. You don't file anything. π¨ builds β ask for a tool, get a widget. It's Lua. Open it. Change it. π watches β on-device, 1β2Hz, nothing leaves the Mac. π¬ speaks up β on his own, when something's actually worth it.
flowchart LR
A([π sees<br/>1β2 Hz]) --> B{worth<br/>saying?}
B -->|no, 99% of the time| A
B -->|yes| C([π¬ bubble])
C --> D{did you<br/>care?}
D -->|kept| E[(π learn<br/>say more like that)]
D -->|dismissed| F[(π€« learn<br/>say less like that)]
E --> A
F --> A
style B fill:#fef3c7,stroke:#d97706,color:#000
style C fill:#dbeafe,stroke:#2563eb,color:#000
style E fill:#dcfce7,stroke:#16a34a,color:#000
style F fill:#fee2e2,stroke:#dc2626,color:#000
Every bubble he fires becomes training data for whether he should have.
The hard part isn't knowing things. It's knowing when to shut up.
| rule | value |
|---|---|
| π max interruptions | 3 / hour |
| β³ quiet between them | 8 min |
| π€ while you're talking | never |
| π€ told "not worth it" | hushes 2 min |
| π«οΈ bubbles | vanish, no inbox |
A thing that talks constantly gets closed on day one.
flowchart TD
subgraph mac ["π₯οΈ your Mac β all of it, all the time"]
S["πͺ Swift shell<br/><i>floating window Β· gaze Β· screen</i>"]
R["βοΈ Rust sidecar<br/><i>one binary, every organ</i>"]
G[("πΈοΈ Kuzu graph<br/><i>every noun is a node</i>")]
P["π§Ώ perception<br/><i>MobileCLIP Β· ANE Β· 5ms</i>"]
L["π¨ Lua widgets<br/><i>he writes them, you edit them</i>"]
end
C["βοΈ big model<br/><i>only when he talks</i>"]
S <--> R
R <--> G
P --> R
R --> L
R -.optional.-> C
style mac fill:#f8fafc,stroke:#94a3b8
style G fill:#ede9fe,stroke:#7c3aed,color:#000
style P fill:#ccfbf1,stroke:#0d9488,color:#000
style C fill:#f1f5f9,stroke:#cbd5e1,color:#000,stroke-dasharray: 4 3
Watching is free β it runs on the Neural Engine. He only costs money when he speaks.
./build.sh # swift build + cargo release + sign β dist/Qub.app
open dist/Qub.appFirst run asks for mic + screen recording. Models download once into home/.
Quit a running Qubie first β build.sh starts by deleting the old bundle.
early alpha. He lives on one machine and that machine is mine.
| β works | memory Β· voice Β· widgets Β· watching Β· unprompted bubbles |
| π§ rough | packaging, notarization, first-run, anything not-my-Mac |
| π next | the learned model that decides when to speak (today it's a rule I tuned by hand) |
| β not yet | speaking bubbles out loud Β· iPhone |
| path | what |
|---|---|
native/ |
AppKit shell β floating window, cursor gaze, carry detection, ScreenCaptureKit |
web/ |
the character β WebGL body, SVG face, the talk loop |
sidecar-rs/ |
the engine. One Rust binary on :8787. Ears, mouth, memory, agent, widgets |
home/ |
his brain. The graph, models, ontology. Yours, gitignored, never leaves |
docs/ |
why things are the way they are |
bench/ |
evals. qubeval/ is the live one β it fails the build on regression |
spike/ |
the proofs. Small runnable crates that had to pass before a big decision was allowed |
Apache 2.0. Take him apart.