oxi · macOS · Tauri 2 · Rust
oximemo
생각이 사라지기 전에 잡아라. macOS에서 ⌘⇧N(기본 안내 단축키) — 또는 ⌥ 더블탭(Accessibility 권한 필요) — 한 번이면 1프레임(≤16ms) 안에 떠오르는 카드 메모. 사람은 GUI로, AI 에이전트는 같은 CLI로 같은 vault를 다룬다.
1. 핵심 약속
"생각을 잡는 속도"가 이 프로젝트가 보호하는 유일한 가치다. AI 요약·자동 태깅·챗봇은 그 속도와 신뢰성을 끌어내리므로 일부러 두지 않는다.
인간 시나리오
macOS 어디서든 ⌘⇧N → 한 줄 입력 → Esc로 dismiss → 작업으로 복귀. (보조: ⌥ 더블탭 — press+release 1쌍을 threshold 350ms 이내로 2회)
에이전트 시나리오
코딩 에이전트/로컬 스크립트가 같은 vault를 CLI로 안전하게 읽고 쓴다 (중복 방지).
2. 아키텍처: 3계층 스토리지
oximemo reindex로 언제든 재구축.
인덱스 레이어에 SQLite/C 의존성 없음.
oximemo-core
도메인 로직 · plain .md I/O · redb 인덱스 · tantivy BM25 · TOML frontmatter
oximemo-cli
CLI — human은 table, agent는 JSON/NDJSON
oximemo-capture
오버레이 캡처 윈도우 — off-screen warm-up으로 1프레임 표시. ⌥ 더블탭 트리거 (Accessibility 권한 필요)
apps/desktop (Tauri 2)
macOS 네이티브 데스크탑 셸 — core 위의 얇은 표현 계층. ⌘⇧N 전역 단축키를 tauri-plugin-global-shortcut으로 항상 등록 (권한 불필요 — 기본 안내 단축키)
3. CLI 우선
CLI는 권위 있는 인터페이스다 — 데스크탑 앱과 동일한 oximemo-core를 사용한다.
# 한 줄 메모
oximemo new "Ship the redb bump before the freeze" --tag backlog --category todo
# 최근 메모 (table for humans, ndjson for agents)
oximemo list --limit 10
oximemo list --favorites --format ndjson
# 한 개 읽기 (JSON 기본, --md로 raw 파일)
oximemo get 019fa927-a897-7e12-9102-8a8c7ebbb594 --md
# BM25 전문 검색
oximemo search "redb upgrade" --limit 5 --format ndjson
# 동기화 (에이전트용 — body-less manifest)
oximemo export --since <cursor>
# → { id, hash, updated_at, deleted }[] 4. Hash-based 동기화
oximemo export는 본문 없는 매니페스트({id, hash, updated_at, deleted})를 출력한다.
에이전트가 해시를 비교해 변경된 것만 가져오고 cursor를 전진시킨다. ARG_MAX(대용량 ID 리스트 한계)는
--ids-file/--ids-stdin으로 우회.
5. 캡처 속도 최적화
"트리거에서 1프레임"을 만들기 위해 캡처 윈도우는 항상 떠 있되 화면 밖에 parked 상태로 유지된다.
cold-start 비용 없이 warm한 윈도우가 즉시 보인다. 두 트리거(⌘⇧N 단축키 / ⌥ 더블탭) 어느 쪽이든 같은 capture:show 이벤트를 emit한다. 다음은 트리거 → dismiss까지의 4단계:
capture:show 이벤트 emit.
Step 3 Tauri 메인 스레드 핸들러가 capture 윈도우를 1프레임(≤16ms) 안에 show().
Step 4 한 줄 입력 → Esc로 dismiss. 윈도우는 다시 hidden으로 parked (destroy 아님).
- 오버레이 윈도우를 off-screen에 미리 띄워 warm-up — 트리거 시 1프레임(≤16ms) 표시
- fs watcher가 외부 쓰기(에디터, iCloud)를 감지 → 부분 쓰기에 재시도
- 인덱서 크래시 없음 — notify + debounce + retry
- OKLCH 색상 라벨 — 인지적으로 균일, 라이트/다크 모두 자연스러움
6. 시스템 요구사항 & 비범위
- 지원: macOS 14+ on Apple Silicon (
aarch64-apple-darwin) - v1 범위 밖: Windows · Linux · 모바일 (의도적)
- v1 범위 밖: AI 요약 · 자동 태깅 · 챗봇 (속도와 신뢰성을 깎는다고 판단)