
개인 개발로 AI 데스크톱을 만들었더니, 채팅만으로 cron / 병렬 배치 / 편집 가능한 .pptx 생성까지 가능해졌다
요약
개인 개발자가 만든 로컬 AI 워크스페이스 'Praxia Desktop'을 소개합니다. 자연어 명령만으로 cron 스케줄링, 병렬 배치 작업, .pptx 생성 등을 수행하며, 로컬 환경에서 데이터 보안을 유지하며 다양한 LLM을 활용할 수 있습니다.
핵심 포인트
- 자연어를 POSIX cron 식으로 자동 변환하여 스케줄링 지원
- LLM 레이트 리밋을 고려한 에이전트 병렬 배치(Parallel Batch) 실행
- OpenAI, Anthropic, Ollama 등 다양한 LLM 프로바이더 및 MCP 대응
- 데이터를 서버로 전송하지 않는 로컬 완결형 보안 구조
Praxia Desktop이라는 Windows용 로컬 AI 워크스페이스를 만들어 Microsoft Store에 무료로 공개했습니다.
무엇을 할 수 있는가를 한마디로 요약하면:
채팅으로 말하는 것만으로 cron 스케줄 등록 · 여러 파일에 대한 병렬 배치 (Parallel Batch) 실행 · 편집 가능한 네이티브 .pptx 출력까지 일괄적으로 실행할 수 있습니다.
특징을 정리하면:
로컬 완결— 문서도 대화 이력도 디스크 내에 존재하며, 서버로 전송하지 않음 -
무료— Microsoft Store 0엔, Apache 2.0 OSS -
8개 언어 UI— 일본어 포함 -
20+ SaaS 커넥터— GitHub / Slack / Notion / kintone / etc. -
임의의 LLM 프로바이더— OpenAI / Anthropic / Azure / Gemini / Ollama (로컬) / LM Studio -
MCP 대응— Claude Desktop / Cursor용 MCP 서버를 그대로 실행
이하, 구체적으로 무엇을 할 수 있는지 3가지 유스케이스(Use Case)로 소개합니다.
흔한 상황: "매주 이 자료의 변경점을 요약해서 팀에 공유하고 싶다". 보통이라면:
- 셸 스크립트 (Shell Script) 작성
- crontab으로 시간 지정
- 메일 전송 로직 작성
- 디버깅
- 작동하지 않아서 Slack 알림으로 교체
- 결국 포기
Praxia Desktop이라면 이렇게:
사용자: 매주 월요일 아침 9시에 Documents 폴더 내 문서의
변경점을 요약해서, 결과를 workspace/weekly-summary.md에 써줘
이것을 Chat 탭에 던지면:
- LLM이 "이것은 매주 반복 실행해야 하는 태스크"라고 판단
- POSIX cron 식 (
0 9 * * 1)으로 변환 - Schedules 탭에 등록됨
실행 시간이 되면 Praxia가 자동으로 동작:
- Documents 폴더의 diff를 추출
- LLM에게 요약 시킴
- 워크스페이스에 쓰기 (승인제 — 상세 내용은 후술)
인간이 cron 식을 쓸 필요가 없음. 나중에 "역시 수요일 아침에도 추가해줘"라고 말하면, 다시 자연어로 수정할 수 있습니다.
니치 포인트(Niche Point): "자연어 → POSIX cron 변환" 자체는 드물지 않지만,
"cron으로 기동한 후, Praxia 내부에서 에이전트 루프(Agent Loop)가 돌아가고, 출력을 사용자 승인제로 디스크에 쓰는 것"까지 하나의 앱으로 완결되는 것은 꽤 드물다고 생각합니다.
"채용 후보자로부터 PDF 이력서가 50건 도착했다. 각각의 강점과 약점을 추출해서 매트릭스로 정리하고 싶다".
보통이라면:
- 50건을 하나씩 ChatGPT에 던짐
- 혹은 Python 스크립트를 작성하여 API를 호출
- 둘 다 번거로움
Praxia Desktop이라면 이렇게:
사용자: Documents/candidates/에 있는 PDF 각각에 대해,
강점과 약점, 기술 스택, 권장 포지션을 추출해서
매트릭스로 정리해줘
Praxia의 동작:
- PDF 50건을 검출
50개의 에이전트를 병렬로 스폰(Spawn) (LLM provider 측의 레이트 리밋(Rate Limit) 범위 내에서) - Batches 탭에서 라이브 진행 상황을 확인 가능
- 모든 건이 끝나면 결과를 집계
도중에 "8번째 것만 실패했다"와 같은 상태도 보이므로, 개별적으로 재실행할 수 있습니다.
완료 후에 채팅으로 "결과를 하나의 표로 정리해줘"라고 말하면, 각 후보자의 비교표가 한 화면에 나타납니다. 나아가 "Q3 채용 인원을 위해 상위 5명을 추려줘"라고 말하면 LLM이 랭킹(Ranking)을 매겨 이유와 함께 답변해 줍니다.
니치 포인트: 병렬도(Parallelism) 제어를
LLM provider의 레이트 리밋(Rate Limit)에 따라 자동으로 조정하고 있는 점이 미묘하지만 중요합니다. OpenAI / Anthropic / Gemini 중 무엇을 설정하더라도, 각각의 TPM/RPM에 맞춰 자동으로 병렬도가 변합니다.
이것이 개인적으로 가장 재미있는 기능입니다. **"Praxia가 화면의 스크린샷을 저장한다"**가 아니라, **"실제로 편집 가능한 .pptx 파일이 디스크에 생성된다"**는 점입니다.
사용자: 지난주 Documents/sales/ 의 변화를 Q3 회고 자료로 만들어줘. 차트 3장, 요약 슬라이드 1장, 넥스트 액션 1장으로. 기업 컬러는 네이비와 화이트 기조로.
Praxia의 동작:
- Plan— LLM이 슬라이드 구성 (outline)을 결정
- Generate— LLM이 python-pptx를 사용하는 Python 코드를 생성
- Render— 해당 코드를 Praxia 내부에서 실행하여
.pptx출력 - Review— 생성된 슬라이드를 PNG로 변환하여 vision-LLM (GPT-4o / Claude 3.5 Sonnet 등)에게 "레이아웃이 깨지지 않았나? 글자가 넘치지 않나? 배색이 일관적인가?"라고 질문
- Iterate— 문제가 있으면 수정 코드를 재생성
워크스페이스에 생성된 .pptx는 완전히 편집 가능합니다. PowerPoint에서 열어 텍스트 변경, 차트 편집, 도형 추가를 일반적인 방식대로 할 수 있습니다.
니치 포인트(Niche point): vision-LLM으로 생성된 .pptx를 체크하고 자동 수정하는 루프까지 구현한 데스크톱 앱은 아마 일본 국내에서도 거의 없을 것입니다. Microsoft 365 Copilot의 "PowerPoint 작성" 기능도 생성만 할 뿐, 자기 점검 루프(self-check loop)는 포함되어 있지 않습니다.
대화 기록도 문서도 모두 자신의 디스크 내에 있습니다. Praxia가 운영하는 중앙 서버는 존재하지 않습니다.
LLM 프로바이더(Provider)로의 전송은 사용자가 Settings에서 선택한 단 한 곳뿐입니다. OpenAI를 선택하면 OpenAI로, Ollama를 선택하면 로컬의 Ollama 인스턴스로 전송됩니다. 완전히 오프라인으로 사용하고 싶다면 Ollama 또는 LM Studio로 전환하면 되며, 이 경우 인터넷으로 단 1바이트도 나가지 않습니다.
이는 "로컬 AI"를 표방하는 다른 앱들과 달리 진정한 의미의 로컬 완결형입니다. Anthropic / OpenAI로의 전송조차 "사용자가 명시적으로 선택한 경우에만" 이루어집니다.
게다가 디스크 쓰기는 전부 승인제입니다. LLM이 "workspace/output.pptx를 만들고 싶다"라고 요청하면, 다이얼로그가 나타나 사용자가 Apply 또는 Reject를 선택합니다. 멋대로 파일이 생성되는 일은 없습니다.
UI는 처음부터 8개 언어를 지원합니다: 영어 / 일본어 / 중국어 간체 / 한국어 / 스페인어 / 프랑스어 / 독일어 / 포르투갈어 (BR).
일본어로 채팅하면 일본어로 답장이 오고, 영어로 쓰면 영어로 답장이 옵니다. 표시 언어 전환도 Settings에서 즉시 가능합니다.
이는 개인 개발로서 은근히 힘든 작업으로, UI 문자열 200개 × 8개 언어 = 1,600개를 관리해야 합니다. 다만 기계 번역이 아니라, 각 언어의 네이티브 체크를 거쳤습니다.
GitHub / Slack / Notion / Google Drive / Dropbox / OneDrive / Linear / Jira / Trello / Asana / kintone / Salesforce / HubSpot / Confluence / Zendesk / Intercom / Discord / Telegram / Zoom / Microsoft Teams
각 커넥터(Connector)는 per-user OAuth로 연결됩니다. "Alice가 Notion에서 볼 수 없는 페이지는 Praxia를 통해서도 볼 수 없다"라는 ACL(Access Control List) 투명성을 보장합니다. 서비스 계정 방식(일반적인 SaaS의 편의적 구현)과 달리, 사용자 간의 데이터 혼선이 발생하지 않는 설계입니다.
여기에 더해 **MCP (Model Context Protocol)**도 지원합니다. Claude Desktop이나 Cursor용으로 작성한 MCP 서버 (stdio / HTTP/SSE 모두)가 Praxia에서도 그대로 동작합니다.
대략적인 구성:
┌──────────────────────────────────┐
│ Tauri 2 쉘 (Rust + Svelte) │
│ └─ 자식 프로세스로 spawn │
...
- 쉘 (Shell): Tauri 2 (Rust + Svelte 4). WebView2 기반으로 Electron보다 가벼움 -
사이드카 (Sidecar): Python (FastAPI + uvicorn). PyInstaller로 프리징(freezing)된 단일 바이너리 -
에이전트 (Agent): LLM 구동 tool-use loop -
메모리 (Memory): 5-layer stack (personal / consolidation / shared / frozen / graph) 설계로 개인의 지식이 조직의 지식으로 승격됨 -
검증 (Verification): hallucination(환각) 탐지 + retrieval eval(검색 평가) 내장
LLM이 "무엇을 호출할지" 스스로 결정하며, 15종의 도구를 자율적으로 조합합니다. 코드 편집 AI가 file_read / file_write를 선택하는 것과 동일한 메커니즘입니다.
이 내용만으로도 한 편의 글을 쓸 수 있지만, 마지막으로 요약하자면:
-
MSIX 패키징 → Partner Center 업로드 →
Microsoft가 Store identity로 재서명해주는 구조를 통해 SmartScreen 경고가 발생하지 않음 -
runFullTrust에 대한 정당성(justification)을 진지하게 5가지 항목으로 작성했더니 첫 심사에서 4일 만에 통과 - 인증 후 즉시 Store 공개, 시간이 조금 흐른 뒤 Submission 2에서
**Store용 updater (= GitHub 자동 업데이트 비활성화)**를 추가
Microsoft Store: https://apps.microsoft.com/detail/9p9lsr34hzf3?hl=ja-JP&gl=JP (무료) -
GitHub (Apache 2.0): https://github.com/praxia-dev/praxia -
PyPI (CLI 버전을 원하는 분들을 위해): pip install praxia
4분 데모 영상 (일본어 나레이션): https://youtu.be/ZMieRZZPn_Q -
공식 사이트: https://praxia.tools/
질문, 요청, 또는 "이런 기능이 있으면 좋겠다" 하는 점이 있다면 GitHub Discussions나 X (@praxia_dev)로 편하게 연락해 주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기