<div align="center">
<img src="https://raw.githubusercontent.com/epinethrone/apricity/main/mempalace_dashboard/static/apricity-logo.png" alt="Apricity" width="148" />
<h1>Apricity</h1>
<p>
<strong>MemPalace를 위한 로컬이며, 의존성(dependency)이 없는 프론트엔드입니다. 브라우저에서 개인 메모리 저장소와 지식 그래프를 탐색하고, 검색하며, 작성하고, 편집하고, 큐레이션할 수 있습니다.</strong></p>
<p>
<a href="LICENSE"><img alt="License: MIT" src="https://img.shields.io/badge/license-MIT-blue.svg" /></a>
<a href="https://pypi.org/project/apricity/"><img alt="PyPI" src="https://img.shields.io/pypi/v/apricity.svg?label=pypi" /></a>
<img alt="Python 3.11+" src="https://img.shields.io/badge/python-3.11%2B-3776ab.svg" />
<img alt="런타임 의존성 없음" src="https://img.shields.io/badge/runtime-stdlib%20only-brightgreen.svg" />
<img alt="로컬 우선(Local-first)" src="https://img.shields.io/badge/data-local--first-success.svg" />
<a href="https://github.com/epinethrone/apricity/releases"><img alt="최신 릴리스" src="https://img.shields.io/github/v/release/epinethrone/apricity?include_prereleases&sort=semver" /></a>
</p>
</div>
<img width="1727" height="957" alt="Design" src="https://github.com/user-attachments/assets/37a0e30c-a853-47de-84bc-31a88394abb4" />
Apricity란 무엇인가?
MemPalace는 AI 어시스턴트에게 구조화되고 지속 가능한 메모리(wings, rooms, drawers 및 지식 그래프)를 제공하며, 이 모든 것이 로컬에 저장됩니다. Apricity가 바로 그 프론트엔드입니다. 수백 개의 메모리를 갖게 되면, SQL을 사용하거나 MCP 셸 안에 머무르지 않고도 그것들을 보고, 검색하고, 큐레이션할 방법이 필요합니다. Apricity는 바로 그런 역할을 합니다.
이는 자체적인 메모리 시스템은 아닙니다. 공식 mempalace 패키지를 통해 동일한 컴퓨터에 설치된 기존 MemPalace 인스턴스를 읽고 쓰기만 할 뿐입니다. 마치 당신의 궁전으로 통하는 창문과 같다고 생각하시면 됩니다.
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
- 🏠 로컬 우선(Local-first).
127.0.0.1에 바인딩됩니다. 원격 측정(telemetry), 클라우드 계정, 또는 메모리 데이터 업로드가 없습니다. 선택적 릴리스 확인 기능을 비활성화할 수 있습니다.
- 🪶 런타임 의존성 없음(Zero runtime dependencies). 순수 Python 표준 라이브러리 서버와 일반 HTML/CSS/바닐라 JS 프론트엔드로 구성됩니다.
pip install, npm, Docker, 빌드 단계가 필요 없습니다.
- 🛡️ 구조적으로 안전함(Safe by construction). 모든 쓰기 작업은 공식
mempalace Python 패키지를 거칩니다. 모든 파괴적인 동작은 스냅샷 처리되며 복구 가능합니다. ETag 동시성 제어는 편집 내용 손실을 방지합니다.
- ⚡ 빠름(Fast). SQLite/Chroma 백엔드를 직접 읽습니다. 로컬 저장소 캐시(localStorage cache), gzip, 그리고 서버 시간 최소화(serve-time minification) 덕분에 새로고침이 즉각적으로 느껴집니다.
- ⌨️ 키보드 기반(Keyboard-driven). 검색은
⌘K, 편집은 E, 최대화/탐색은 F를 사용합니다. 핵심 동작들은 재할당(remappable)이 가능합니다.
⚠️ Apricity는 동일한 장치에 설치 및 초기화된 MemPalace 인스턴스를 전제로 합니다. MemPalace 자체를 포함하여 배포하지 않으므로, 먼저 MemPalace/mempalace에서 설치해야 합니다.
목차 (Contents)
기능 (Features)
탐색 및 이동 (Browse & navigate)
<div align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/apricity-search-dark.svg" />
<source media="(prefers-color-scheme: light)" srcset="assets/apricity-search-light.svg" />
<img alt="Apricity's search bar: a rotating ring sweeps the border while a query is typed in" src="https://raw.githubusercontent.com/epinethrone/apricity/HEAD/assets/apricity-search-light.svg" width="660" />
</picture>
<br />
<sub>항상 돌아가는 검색창 링 — Apricity의 ‘살아 숨 쉬고 듣는’ 기능성(affordance). 어디서든 <code class="kbd">⌘K</code>로 접근합니다. </sub>
</div>
- 콘텐츠 및 메타데이터 전반을 검색하고, 작성자별로 필터링하며, 날짜 또는 제목별로 정렬할 수 있습니다(사용자 설정 가능한 기본값 포함). <code class="kbd">⌘K</code>를 누르면 어디서든 검색창에 포커스가 맞춰지며, <code class="kbd">Enter</code> 키는 첫 번째 일치 항목으로 이동합니다.
- 세 개의 패널 — Rooms 사이드바(wings → rooms, iOS 스타일의 드릴다운), Memories 목록, 그리고 상세 보기(Detail view)로 구성됩니다.
- 탐색 모드 (Browse mode) — Memories 패널을 적응형 다중 컬럼 그리드로 최대화할 수 있으며, <code class="kbd">F</code> 키로 전환합니다.
- Wiki 스타일 링크 — 메모리 콘텐츠 내의
[[drawer_id|Display Title]] 형식 참조는 클릭 가능한 링크로 변환되어 연결된 메모리로 이동하며, 원클릭으로 이전 화면으로 돌아갈 수 있습니다.
- URL 상태 (URL state) — 현재 보고 있는 wing / room / memory / query / sort 정보가 페이지 새로고침에도 유지되며 링크를 통해 접근 가능합니다.
작성 및 편집 (Write & edit)
<div align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/apricity-editor-dark.svg" />
<source media="(prefers-color-scheme: light)" srcset="assets/apricity-editor-light.svg" />
<img alt="Apricity's inline editor: a circular formatting toolbar applying bold and italic, a Markdown heading autoformatting, and a callout block" src="https://raw.githubusercontent.com/epinethrone/apricity/HEAD/assets/apricity-editor-light.svg" width="660" />
</picture>
<br />
<sub>인라인 WYSIWYG 에디터 — 원형 툴바, 실시간 볼드/이탤릭 적용, <code class="kbd">## </code>을 이용한 제목 자동 포맷팅, 그리고 콜아웃 블록. 모달 창이나 순수 Markdown의 왕복 과정을 거치지 않습니다.</sub>
</div>
- 인라인 비주얼 에디터 (Inline visual editor) — 굵게/기울임꼴, 제목, 목록, 링크, 콜아웃을 위한 WYSIWYG 에디터로, Markdown 자동 포맷팅 및 저장 시 HTML→Markdown 변환 기능을 제공합니다. 모달 창이나 원시(raw) Markdown 왕복 과정이 없습니다.
- 메타데이터 편집 (Edit metadata) — 콘텐츠, 제목, 윙(wing), 방(room)을 변경하거나 메모리를 방 간에 이동할 수 있으며, 동시 편집 시 충돌을 막기 위해 content-hash ETag 보호 기능을 갖추고 있습니다.
- 낙관적 저장 (Optimistic saves) — 수정 사항이 즉시 적용되며, 서버가 이를 거부할 경우 자동으로 되돌아가고(알림 및 재시도 기능 제공), 사용자에게 알립니다.
- 초안 받은 편지함 (Drafts inbox) — 부분적인 메모리를 준비하고, 제자리에 편집한 후, 준비가 되면 궁전(palace)에 보관할 수 있습니다.
정리 및 복구 (Curate & recover)
<div align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/apricity-recover-dark.svg" />
<source media="(prefers-color-scheme: light)" srcset="assets/apricity-recover-light.svg" />
<img alt="Apricity의 삭제 및 복구 흐름: 메모리 카드가 Memories에서 Recently deleted로 슬라이드되어 Restore 버튼을 얻고, 다시 돌아오는 모습" src="https://raw.githubusercontent.com/epinethrone/apricity/HEAD/assets/apricity-recover-light.svg" width="660" />
</picture>
<br />
<sub>어떤 것도 영원히 사라지지 않습니다 — 모든 삭제는 <strong >Recently deleted</strong>에 스냅샷으로 저장되며, 원클릭으로 복구할 수 있습니다.</sub>
</div>
- 단일 메모리, 전체 방(room), 또는 전체 윙(wing)을 삭제 (Delete) 할 경우 — 모든 삭제는 복구 가능한 로그로 스냅샷됩니다.
- 최근 삭제됨 (Recently deleted) — 원클릭으로 삭제된 메모리를 복원하거나, 로그를 완전히 비울 수 있습니다.
- 지식 그래프 (Knowledge graph) — 트리플(triples)을 확인하고, 새로운 사실을 추가하며, 오래된 사실을 무효화하고, 힘의 방향이 지정된(force-directed) 그래프 시각화를 탐색할 수 있습니다.
- 터널 (Tunnels) — 방 간/윙 간 링크가 인라인으로 방 칩(room chips) 형태로 표시됩니다. 터널을 생성 및 삭제하고, 특정 메모리에 바인딩하며, 전용 터널 페이지에서 검사할 수 있습니다.
지속적인 연결 유지 (Stay in the loop)
<div>
<picture>
<source media="(prefers-color-scheme: dark)" srcset="assets/apricity-notify-dark.svg" />
<source media="(prefers-color-scheme: light)" srcset="assets/apricity-notify-light.svg" />
<img alt="Apricity's notification bell ringing as toasts from Claude, Codex, and Gemini cascade in, each tagged created or updated" src="https://raw.githubusercontent.com/epinethrone/apricity/HEAD/assets/apricity-notify-light.svg" width="660" />
</picture>
<br />
<sub>각 모델이 메모리를 파일하거나 수정할 때 종이 울립니다 — 모델별 아바타, 한눈에 *생성됨(created)* vs *업데이트됨(updated)* 표시.</sub>
</div>
-
알림 (Notifications) — 원본 모델의 아바타(Claude, Codex 등)와 함께 새로 생성되거나 업데이트된 메모리를 보여주며, 생성됨과 업데이트됨을 구분합니다.
-
최근 업데이트 표시기 (Recently-updated markers) — 최근에 접근한 메모리에는 상대 시간 마커가 붙으며, 이를 확인하면 사라집니다.
-
실시간 폴링 (Live polling) — 선택적 백그라운드 새로고침(15 / 30 / 60초) 기능으로, 탭이 숨겨지면 일시 중지되며, 선택적 사운드와 LAN 전체의
-
도구 패널 (Tools panel) — MemPalace의 MCP 도구를 노출하는 파워 유저 시트입니다: 지식 그래프 쿼리 + 타임라인, 터널(tunnels) (목록 보기, 생성, 삭제, 찾기, 팔로우, 순회), 다이어리(diary) (읽기/쓰기), 통계(stats), 및 유지보수(maintenance) (분류법, 중복 확인, 훅 설정, 동기화, 재연결, AAAK 사양). 기본적으로 숨겨져 있으며, 설정(Settings)에서 활성화할 수 있습니다. 근본적인 엔드포인트는 API 참조를 참고하세요.
-
설정 (Settings) — 사이드바 탐색이 적용된 개편된 시트입니다: 표시(Display) (테마, 애니메이션 감소, 상대 시간, 제목/이름 다듬기, 패널 제어 공개), 알림(Notifications), 재매핑 가능한 키보드 단축키(remappable keyboard Shortcuts), 휴지통(Trash), 백업(Backup), 계정(Account), 그리고 업데이트 가능 여부를 확인하는 정보(About) 창을 포함합니다.
-
테마 (Theme) — 자동 / 밝게 / 어둡게를 지원하며, 시스템 기본 설정을 덮어쓰거나 따르며 사용자의 선택이 유지됩니다.
-
인증 (Auth) — PBKDF2-SHA256 해싱과 HTTP 전용 세션 쿠키(기본 12시간, '나를 기억하기' 30일)를 사용하는 실패 폐쇄형(fail-closed) 사용자 이름 + 비밀번호 보호 기능을 제공합니다.
빠른 시작 (Quickstart)
필수 조건 (Prerequisites)
- Python 3.11 이상 버전 (Apricity 자체는 표준 라이브러리만 사용하므로
pip install이 필요하지 않습니다).
- 자체 venv를 가진 작동하는 MemPalace 설치본. Apricity가 쓰기를 위해 이를 호출(shells out)해야 하므로,
$MEMPALACE_PYTHON_BIN에서 가져올 수 있어야 합니다.
클론된 곳에서 실행 (설치 단계 없음)
전체 서버가 표준 라이브러리 Python의 단일 파일로 구성되어 있어, Apricity를 실행하는 가장 간단한 방법은 체크아웃(checkout) 위치에서 직접 실행하는 것입니다:
git clone https://github.com/epinethrone/apricity
cd apricity
python3 server.py
서버가 일회성 설정 비밀번호를 출력합니다. http://127.0.0.1:8765로 이동하여 **설정(Settings) → 계정(Account)**으로 가서 해당 비밀번호를 입력하여 소유자 계정을 생성하세요.
명령어로 설치 (Install as a command)
격리되고 PATH에 있는 설치본을 선호하시나요? pipx (또는 uv tool install)를 사용하세요:
pipx install apricity
apricity
[!NOTE]
PyPI에 apricity로 게시되었습니다 — pip install apricity 또는 uv tool install apricity도 작동합니다.
빌드 단계나 외부 런타임 종속성이 전혀 없습니다. 이 패키지는 설치만 하면 되는 단일 명령어로 배포되었습니다. MemPalace가 비표준 위치에 설치된 경우, .env.example을 .env로 복사하거나 (또는 셸에서 변수를 내보내고) 실행 전에 경로를 조정하십시오.
첫 실행 체크리스트
- ✅ MemPalace 자체가 설치되었으며, 이를 통해 최소한 하나의 메모리를 성공적으로 기록했습니다.
- ✅
~/.mempalace/palace/chroma.sqlite3와 ~/.mempalace/knowledge_graph.sqlite3 파일이 존재합니다 (또는 MEMPALACE_PALACE_DB / MEMPALACE_KG_DB가 실제로 위치한 곳을 가리키도록 설정했습니다).
- ✅
MEMPALACE_PYTHON_BIN이 mempalace를 가져올 수 있는 Python 경로를 가리킵니다.
- ✅ 서버 로그에서 설정 시크릿(setup secret)을 복사하고, 설정 → 계정으로 이동하여 소유자 계정을 생성했습니다.
구성
모든 파일 시스템 경로는 기본 MemPalace 홈(~/.mempalace)을 따릅니다. 설치가 다른 경우 환경 변수를 사용하여 재정의하십시오 (시작 파일을 보려면 .env.example를 참조하세요):
| 변수 | 기본값 | 용도 |
|---|
PORT | 8765 | Apricity가 수신하는 포트입니다. |
| ... | | |
Apricity 보안 설정
- 서버를 시작하고, 시작 로그에서 생성된 설정 시크릿을 복사합니다.
- UI를 열고 설정 → 계정으로 이동합니다.
- 설정 시크릿을 입력하고, 사용자 이름과 비밀번호(≥ 8자)를 선택한 후 저장합니다.