macOS용 자체 호스팅 AI 워크스페이스를 만들었습니다 — Odysee를 만나보세요

발행: (2026년 6월 5일 PM 10:20 GMT+9)
5 분 소요
원문: Dev.to

출처: 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을 통해 모델 다운로드 및 서빙
🔬 딥 리서치 — 다단계 소스 합성
🧠 메모리 & 스킬 — 지속적인 벡터 메모리, 에이전트가 시간에 따라 학습

LayerTool
Web frameworkFastAPI (Python 3.11)
FrontendVanilla JS + CSS (PWA)
LLM providersLM Studio, Ollama, DeepSeek, SiliconFlow, OpenAI, Anthropic
Vector storeChromaDB + fastembed
Model servingllama.cpp / vLLM
macOS appShell launcher + pywebview + DMG

기본 프로젝트에는 이미 build-macos-app.sh 스크립트가 있었지만, 나는 이를 다시 작성해 누구나 빌드할 수 있는 정식 .app 번들과 .dmg를 만들었다:

./build-macos-app.sh

이 스크립트는 두 가지를 만든다:

  1. dist/Odysseus.app — macOS 앱 번들. 실행 파일은 쉘 스크립트이며, 다음을 수행한다:

    • Python 백엔드(uvicorn app:app) 시작
    • 벡터 검색을 위한 ChromaDB 실행
    • UI를 크롬 없는 창으로 열기(pywebview 사용, 없을 경우 Chromium으로 폴백)
    • 창을 닫으면 모든 서비스 정리
  2. 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

0 조회
Back to Blog

관련 글

더 보기 »

모바일 한여름 열풍

!Cover image for Mobile Midsommer Madnesshttps://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploa...