[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. unfortunately for both of us.

⠿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 01⠿ summon

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 02⠿ save

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 03⠿ recall

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 · edge›anthropic.com/research
  • ⣿snippetany text selection›regex \[bracketed\] tokens
  • ⣯sshcommand + host›ssh root@staging.box
  • ⣻promptyour favourite llm prompts›explain this code in one line
  • ⣽signatureemail sign-offs›— seb, sent from the couch
  • ⣟replycanned replies›thanks — circling back friday
  • ⡿notefree-form thoughts›the 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