[MARDI]
v0.1 · greenfield · macOS·apr 2026
⣿ ⣿ ⣿ ⣿⣿⣿⣿ ⣿⣿⣿⣿ ⣿⣿⣿⣿⣿⣿⣿ ⣿⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿⣿⣿⣿⣿ ⣿⣿⣿⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿ ⣿⣿⣿⣿ ⣿⣿⣿⣿⣿

a second brain
that lives in the
corner of your screen.

pull your cursor into the corner. mardi pops in and asks what to keep — a url, a snippet, an ssh command, a prompt, a signature, a note. he auto-tags it, writes a title, and drops it into a plain markdown vault you already control.

“Hi. I'm Mardi. I'll remember things for you.”
— first greeting
⣿⣿ mardi · fishbowlidle

Still here.

now shipping in v0
summon·save·recall·obsidian-compatible vault·local embeddings · on-device·your keys · your data·⌘⇧m anywhere·summon·save·recall·obsidian-compatible vault·local embeddings · on-device·your keys · your data·⌘⇧m anywhere·
[pitch]

three beats. that's the whole app.

step 01summon

summon.

pull your cursor into the top-right corner. mardi dwells for ~400ms, then pops in — no shortcuts to memorize, no clutter on your menubar.

macOS · top-right· idle

“Save something?”

step 02save

save.

paste a url, a snippet, a command. mardi asks an llm (claude or openrouter) to title it and tag it, then writes it as obsidian-friendly markdown.

capture · url· ready
url: 
tags: 
vault⠒⠒⠒⠒⠒⠒⠒⠒

“Got it. Saved.”

step 03recall

recall.

hit ⌘⇧m anywhere. hybrid search — local embeddings + fts5 — surfaces what you meant, not just what you typed. enter copies the top hit.

⌘⇧m · global search· typing
› 

“Here. The top one.”

[what you save]

eight memory types. each with its own accent, folder, and recall rule.

·typewhere it comes fromexample
  • urlsafari · chrome · arc · brave · edgeanthropic.com/research
  • snippetany text selectionregex \[bracketed\] tokens
  • sshcommand + hostssh root@staging.box
  • promptyour favourite llm promptsexplain this code in one line
  • signatureemail sign-offs— seb, sent from the couch
  • replycanned repliesthanks — circling back friday
  • notefree-form thoughtsthe cache ttl is 5 minutes.
  • ocrselect mode · drag a box(pulled from the screen)
[how it works]

four stages. every one is local except the tagging call you configured.

  1. stage 01⠿⠿⠿⠿

    hot corner

    polled mouse location. no accessibility api. no input monitoring. mardi just notices you're in the corner.

  2. stage 02⣶⣶⣶⣶

    capture form

    the clipboard pre-fills for you. pick a type or let mardi infer one. zero fields are required.

  3. stage 03⣿⣾⣽⣯

    llm tagging

    claude or openrouter writes a title, three tags, and a one-line summary. fallback titles if the api is down.

  4. stage 04⣿⣿⣿⣿

    vault write

    plain markdown with obsidian-compatible yaml. one file per memory. your folder, your disk, your backups.

[under the hood]

local-first by default. your keys, your data, your machine.

no cloud. no account. no telemetry. the vault is a folder of markdown files you can delete with rm.

mardi is a one-binary macos app that stores everything in ~/Documents/MARDI-Vault/. open it in obsidian. back it up with time machine. sync it with whatever you sync with. when you leave, you leave with everything.

offline-firstowned filesno lock-inbring-your-own-llm
⣿⣿ spec sheetv0.1.0
platform
native swift 6 · swiftui · macos 15+
storage
sqlite + sqlite-vec + fts5
embeddings
apple naturallanguage · on-device
llm
claude · openrouter · your api key
vault
obsidian-compatible markdown
search
hybrid · reciprocal rank fusion
perms
automation · screen · notifications
not used
accessibility · input monitoring