macOS용 자체 호스팅 AI 워크스페이스를 만들었습니다 — Odysee를 만나보세요
출처: Dev.to
나는 Odysseus를 일상에서 사용하는 AI 인터페이스로 사용하고 있다— 로컬 LLM, 문서 RAG, 이메일 분류, 캘린더 동기화까지. 웹 기반 FastAPI 앱이라 브라우저에서는 잘 동작하지만, Dock에서 바로 실행하고 DMG 형태로 배포할 수 있는 정식 macOS 앱이 필요했다.
그래서 직접 만들었다. 아래는 앱이 하는 일과 패키징 방법이다.
💬 멀티 프로바이더 채팅 — LM Studio, Ollama, DeepSeek, SiliconFlow, Anthropic, OpenAI
🤖 AI 에이전트 — MCP 도구, 웹 브라우징, 쉘 접근이 가능한 커스텀 어시스턴트
📄 문서 RAG — PDF, Office 파일, 마크다운을 전체 텍스트 + 벡터 검색으로 지원
📧 이메일 클라이언트 — IMAP/SMTP와 AI 분류 기능
📅 캘린더 — CalDAV 동기화 (Nextcloud, Apple, Fastmail)
🍳 쿠크북 — llama.cpp / vLLM을 통해 모델 다운로드 및 서빙
🔬 딥 리서치 — 다단계 소스 합성
🧠 메모리 & 스킬 — 지속적인 벡터 메모리, 에이전트가 시간에 따라 학습
| Layer | Tool |
|---|---|
| Web framework | FastAPI (Python 3.11) |
| Frontend | Vanilla JS + CSS (PWA) |
| LLM providers | LM Studio, Ollama, DeepSeek, SiliconFlow, OpenAI, Anthropic |
| Vector store | ChromaDB + fastembed |
| Model serving | llama.cpp / vLLM |
| macOS app | Shell launcher + pywebview + DMG |
기본 프로젝트에는 이미 build-macos-app.sh 스크립트가 있었지만, 나는 이를 다시 작성해 누구나 빌드할 수 있는 정식 .app 번들과 .dmg를 만들었다:
./build-macos-app.sh
이 스크립트는 두 가지를 만든다:
-
dist/Odysseus.app— macOS 앱 번들. 실행 파일은 쉘 스크립트이며, 다음을 수행한다:- Python 백엔드(
uvicorn app:app) 시작 - 벡터 검색을 위한 ChromaDB 실행
- UI를 크롬 없는 창으로 열기(pywebview 사용, 없을 경우 Chromium으로 폴백)
- 창을 닫으면 모든 서비스 정리
- Python 백엔드(
-
dist/Odysseus.dmg— 배포용 드래그‑투‑Applications 디스크 이미지.
.app은 단순 런처일 뿐이며, 파이썬을 내장하거나 바이너리를 번들링하지 않는다. 레포지토리 디렉터리의 가상 환경을 그대로 사용한다.
핵심 파일은 scripts/app_window.py이며, pywebview를 이용해 웹 UI를 네이티브 macOS 창에서 열어준다—브라우저 크롬이 없고 진짜 앱 같은 느낌이다. pywebview가 없을 경우 --app= 옵션을 사용해 크롬 없는 Chromium 창을 연다.
창을 닫으면 웹 서버, ChromaDB, 모든 자식 프로세스가 종료된다. 런처 스크립트에 있는 정리 트랩이 남아 있는 파이썬 프로세스를 남기지 않는다.
Odysee/
├── app.py # FastAPI 진입점
├── src/ # 핵심 로직
│ ├── llm_core.py # 멀티 프로바이더 LLM 추상화
│ ├── agent_loop.py # 에이전트 실행 루프
│ ├── chat_handler.py # 채팅 처리
│ ├── model_discovery.py # 로컬 모델 자동 탐지
│ └── mcp_manager.py # MCP 서버 관리
├── routes/ # API 엔드포인트
├── services/ # 백그라운드 서비스
├── static/ # 프론트엔드 (JS/CSS/HTML)
├── scripts/ # CLI 도구 + app_window.py
├── tests/ # 약 350개의 테스트
└── data/ # 최초 실행 시 생성
uvicorn app:app --host 127.0.0.1 --port 7860
Flask 스타일 백엔드는 localhost:7860에서 실행된다. 프론트엔드는 빌드 단계가 없는 Vanilla JS이며, index.html을 열면 바로 동작한다.
git clone https://github.com/AlexDesign420/Odysee-MacOS-App.git
cd Odysee-MacOS-App
python3.11 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python setup.py
./venv/bin/uvicorn app:app --host 127.0.0.1 --port 7860
http://127.0.0.1:7860을 열면 첫 부팅 시 관리자 계정이 생성된다.
macOS 앱을 빌드하려면:
./build-macos-app.sh
open dist/Odysseus.dmg
GitHub: AlexDesign420/Odysee-MacOS-App