HermesOffice는 Docs·Sheets·Slides·PDF를 하나의 Electron 셸로 묶고, 각 앱의 AI 패널을 로컬 Hermes Agent 게이트웨이에 연결하려는 오픈소스 오피스 스위트 포크다. 핵심 차별점은 문서에 챗봇을 덧붙이는 데 그치지 않고, Hermes의 메모리·스킬·도구·MCP·세션을 문서 편집 흐름의 실행면으로 사용하려는 설계다.
한눈에 보기
- 공식 성격:
criptogus/HermesOffice는 GenOffice 계열에서 포크한 Apache-2.0 TypeScript/Electron 프로젝트다. - 앱 표면:
.docx문서,.xlsx스프레드시트,.pptx프레젠테이션, PDF 편집기와 이를 호스팅하는 통합 셸을 제공한다. - AI 연결: 고정 커밋의 포크 계층에서는
hermesprovider가 기본값이며,http://127.0.0.1:8642/v1의 Hermes API 서버를 OpenAI-compatible endpoint로 사용한다. - 에이전트 실행:
packages/agent-core가 ReAct 루프, 도구 호출, 취소, 컨텍스트 압축, 입력 오류 재시도, 변경 전 snapshot, 문서별 세션 ID를 공통 제공한다. - 파일 철학: README와 엔진 설명은 원본 OOXML을 기준으로 dirty block만 좁게 패치해
.docx·.xlsx·.pptx의 미변경 부분을 보존하는 방향을 제시한다. - 중요한 경계: 현재 저장소가 내장 MCP 호스트/서버를 이미 제공한다는 뜻은 아니다.
ROADMAP.md는 앱별 embedded MCP server를 Phase 2의 설계 단계 keystone으로 둔다.
공식 확인 — 제품과 엔진 구조
하나의 Electron 셸, 네 개의 편집기
README의 앱 표와 고정 커밋의 패키지 구조를 종합하면 구성은 다음과 같다.
| 표면 | 역할 |
|---|---|
apps/docs | .docx 편집기. paragraph patch, tracked changes, comments, styles, equations, ink 등을 포함한다고 설명한다. |
apps/sheets | .xlsx 편집기. Univer 기반 UI, Rust sidecar(calamine + IronCalc), 차트·pivot·slicer·조건부 서식·formula tracing을 조합한다. |
apps/slides | .pptx 파싱·렌더링·편집 엔진. masters, charts, cropping, ink, HarfBuzz 기반 text shaping을 포함한다고 설명한다. |
apps/pdf | pdf.js + pdf-lib 기반 PDF viewer/editor. annotations, forms, outlines, stamps, signatures, page operations를 다룬다. |
apps/shell | home 화면, 탭 호스팅, 단일 인스턴스·파일 연결·메뉴 전환·업데이트를 맡는 통합 셸이다. |
apps/shell/src/main/index.ts는 하나의 BrowserWindow 안에 각 모듈을 탭으로 호스팅하는 구조와 packaged/dev 모듈 경로, userData 분리를 보여준다. 루트 package.json은 apps/*와 packages/* workspace, 전체 typecheck·test·build·배포 스크립트를 정의한다.
바이트 보존 편집 모델
README가 제시하는 Docs 흐름은 다음과 같다.
- 원본
.docxarchive를 hash 기준으로 보관한다. word/document.xml의 top-level element를 파싱한다.- 각 block에
docxIndex와 원본 XML slice를 연결한다. - 수동/AI 편집으로 dirty block만 표시한다.
- dirty block만 OOXML fragment로 생성한다.
- 원본
document.xml에 해당 fragment를 splice하고, 나머지 ZIP entry는 그대로 복사한다.
이는 “AI가 파일 전체를 재생성”하는 방식이 아니라, 원본 파일을 source of truth로 두고 변경 범위를 좁히는 편집 엔진이라는 점에서 중요하다. 다만 이 부분은 캡처 커밋의 문서와 소스 구조를 읽은 결과이며, 실제 Word 호환성·바이트 보존율을 이번 인제스트에서 재현한 것은 아니다.
Hermes Agent 통합
요청 경로
docs/hermes-integration.md와 packages/ai-provider를 기준으로 한 기본 경로는 다음과 같다.
HermesOffice Docs/Sheets/Slides/PDF
└─ ai:stream (provider = hermes)
└─ POST http://127.0.0.1:8642/v1/chat/completions
└─ Hermes API server / gateway
└─ Hermes Agent: memory · skills · tools · MCP고정 커밋의 provider 코드에서 확인되는 값은 다음과 같다.
- provider ID:
hermes - 기본 모델명:
hermes-agent - 기본 base URL:
http://127.0.0.1:8642/v1 - OpenAI-compatible streaming/one-shot chat routing
- gateway root
/healthprobe - health 성공 캐시: 30초
- health probe timeout: 2초
- 매 문서의 안정적인 세션 ID를
X-Hermes-Session-Id로 전달하는 인터페이스
hermes-health.ts는 /v1 suffix를 제거한 root /health를 확인하고, 실패 시 친절한 offline 오류를 반환한다. apps/shell/src/main/hermes-launcher.ts는 게이트웨이가 응답하지 않고 host에 hermes CLI가 있을 때만 동의를 묻고, 사용자가 허용한 경우에 한해 hermes gateway start를 detached process로 실행하도록 구현되어 있다. 자동 시작 always와 비활성화 never 설정도 userData에 보관한다.
스킬 배포
hermes/skills/에는 다음 세 스킬이 포함된다.
hermesoffice: 세션 연속성, in-app 도구와 file-level 도구의 구분, save-and-reload contracthermesoffice-documents:templates/docs를 활용한 Word 문서 생성·편집hermesoffice-decks:plan_deck/generate_deck와templates/decks를 활용한 프레젠테이션 생성
저장소 README는 이 디렉터리를 Hermes의 skills 폴더에 복사하거나 symlink하라고 설명한다. 따라서 현재는 compile-time AgentSkill 구성과 저장소 제공 스킬이 중심이며, ROADMAP.md가 말하는 dynamic runtime plugin system은 아직 계획 항목이다.
공통 에이전트 하네스
packages/agent-core/src/loop.ts에서 정적 확인한 공통 제어면은 다음과 같다.
| 제어면 | 구현상 확인 |
|---|---|
| ReAct loop | 사용자 메시지 → 모델 turn → tool call 실행 → 결과 주입 → plain-text 응답까지 반복 |
| turn/history 제한 | 기본 maxTurns 8, maxHistory 40 |
| context compaction | UTF-8 byte 예산 기준, 기본 256KB에서 압축하고 최근 약 96KB를 유지 |
| 도구 입력 복구 | JSON parse 실패를 모델에 error result로 되돌리고 최대 3회 연속 실패를 제한 |
| 중단 | run별 AbortController와 transport cancel |
| 변경 안전성 | 첫 mutating tool 전에 snapshot을 캡처해 rollback UI hook 제공 |
| 세션 연속성 | sessionId 문자열/getter를 transport로 넘겨 Hermes 세션과 연결 |
| 모델 품질 경계 | turn limit, token truncation, cancelled 상태를 별도 result로 표시 |
이 구조는 오피스 앱마다 별도의 “AI 채팅 구현”을 만드는 대신, 문서·시트·슬라이드·PDF가 공유하는 agent runtime을 분리한 것이다. 사용자 관점에서는 모델보다 도구 계약, 상태 snapshot, 압축, 취소, 세션 continuity가 편집 경험의 안정성을 좌우하는 구조로 읽을 수 있다.
신뢰·보안 경계
SECURITY.md와 구현 문서에서 공식적으로 확인한 방어선은 다음과 같다.
- 모든 Electron renderer에
contextIsolation: true,nodeIntegration: false,sandbox: true를 적용한다고 명시한다. - renderer → main 통신은 typed/validated IPC를 거치며, Sheets는 zod를 end-to-end로 사용한다고 설명한다.
- 외부 링크는
http/https중심의 sharedsafeExternalUrlgate를 통과시키고file:,javascript:, custom scheme을 거부한다고 명시한다. - API key를 코드에 하드코딩하지 않고 OS-level settings store에 둔다고 설명한다.
- Slides의 AI layout script는
eval/Function/VM에 넘기지 않고 Acorn parser와 제한된 AST interpreter에서 실행한다고 설명한다. - AI-generated HTML export용 hidden BrowserWindow는 sandbox, context isolation, node integration off, preload 없음, watchdog timeout을 적용한다고 설명한다.
단, 이것들은 문서와 소스에 방어 로직·정책이 존재한다는 확인이다. sandbox escape, IPC 우회, 악성 문서, renderer exploit에 대한 독립 침투 테스트나 보안 감사를 수행한 것은 아니다.
인증·네트워크 경로의 이중 구조
현재 커밋은 Hermes 기본 provider를 추가했지만, 기존 Genspark 계층을 제거한 것은 아니다.
packages/ai-provider에는 Hermes, Genspark, Anthropic, Gemini, DeepSeek, OpenAI, Custom provider가 함께 선언되어 있다.packages/ai-search에는 Genspark 우선 검색 → Serper → DuckDuckGo fallback이 남아 있다.hermesoffice-auth.ts는hermesoffice라는 별도 device-code login과 API key를~/.hermesoffice/auth.json에 저장하는 흐름을 구현한다.- 해당 로컬 인증 파일은 mode
0600으로 쓰고, logout 시 서버 revoke를 best-effort로 시도한 뒤 로컬 key를 제거한다고 설명한다.
따라서 “HermesOffice가 완전히 외부 AI 의존성을 제거했다”라고 읽으면 안 된다. Hermes는 새 fork 계층의 기본 native AI 경로이고, Genspark 검색·legacy 인증·upstream provider 경로가 병존한다는 것이 고정 커밋에서 확인되는 정확한 상태다. 또한 루트 README의 AI provider 설명은 Genspark 계정 기반 흐름을 여전히 전면에 두고 있어, fork 문서의 Hermes 기본값과 설명 시점 차이가 존재한다.
MCP와 roadmap의 현재 경계
docs/hermes-integration.md는 Hermes gateway가 memory·skills·tools·MCP를 포함한 전체 Hermes Agent를 실행한다고 설명한다. 그러나 ROADMAP.md의 정직한 진단은 다음과 같다.
- 현재
AgentSkill+composeSkills()는 사실상 compile-time plugin system이다. - 아직 MCP host와 user scripting, automation API가 정식으로 완성된 상태는 아니다.
- 앱 내부 도구를 외부 MCP agent에 노출하는 embedded MCP server per app가 Phase 2의 P0 keystone 설계 항목이다.
- 외부 agent가 문서를 수정할 때도 동일한 proposed-change/approval/audit pipeline을 통과시키는 것이 목표다.
즉 지금의 HermesOffice는 “MCP를 쓰는 Hermes Agent를 앱 안에서 기본 AI로 사용”하는 단계이며, “어떤 MCP client든 HermesOffice를 문서 도구 서버로 호출”하는 단계는 roadmap에 남아 있다.
로드맵과 구조적 공백
ROADMAP.md는 다음 순서를 제시한다.
- Phase 1 — Trusted Foundation: signed release, 녹색 CI, provider/health/session hardening, 보안 문서화.
- Trusted Agent Actions: Docs·Slides·PDF에도 Sheets의
propose_operations → diff preview → atomic apply모델을 확장하고 agent authorship을 기록. - Phase 2 — Agent-Native Office: full-document context, document role agents, project memory, artifact generation, embedded MCP, side-effect permission, dynamic plugin, local-first live meeting minutes.
- Phase 3 — Human + Agent Collaboration: Hermes를 collaboration server로 삼아 shared project, presence, CRDT/협업 편집, human/agent audit trail을 제공.
- Phase 4 — Open Platform: plugin/SDK, agent marketplace, living documents, consent-based proactive agent, cross-generation pipeline.
로드맵이 스스로 인정하는 현재 공백은 다음과 같다.
- 앱별 AI trust UX가 일관되지 않는다.
- CRDT/OT/sync/presence가 없고 collaboration은 아직 존재하지 않는다.
- MCP host·runtime plugin·automation API가 정식화되지 않았다.
- agent는 health check·launcher·session continuity를 얻었지만 아직 문서의 완전한 participant는 아니다.
agent-core,slides-skill, E2E의 상대적 테스트 커버리지가 부족하다고 진단한다.
해석 — 이 프로젝트의 의미
HermesOffice는 단순한 “AI가 들어간 LibreOffice 대안”보다, 파일 포맷 엔진을 보존한 채 agent runtime을 문서 편집기에 심는 실험으로 보는 편이 정확하다.
- 문서가 agent state의 표면이 된다. Hermes의 메모리·세션·스킬이 별도 채팅창에만 머무르지 않고, 문서·시트·슬라이드의 tool contract와 연결된다.
- 신뢰 UX가 모델보다 앞선다. snapshot, diff, proposal, rollback, session ID가 실제 편집에서 모델의 자유도를 통제하는 핵심 장치다.
- MCP는 최종 외부화 경계다. 내부 AI 패널용 도구를 외부 agent에도 같은 approval pipeline으로 공개하려는 방향이어서, 앱을 “agent가 조작하는 파일 편집기”에서 “agent tool surface”로 확장하려 한다.
- 로컬 우선은 아직 목표와 구현이 섞여 있다. Hermes loopback 경로는 로컬-first이지만 Genspark legacy 검색·인증 계층도 남아 있고, collaboration은 미래 단계다.
- 파일 보존과 에이전트 자율성 사이의 절충이 핵심이다. OOXML byte-preserving 엔진은 좁은 mutation을 선호하고, roadmap의 trusted action·approval 모델은 그 mutation을 감사 가능한 제안으로 바꾸려 한다.
변화하는 GitHub 스냅샷
2026-08-08 KST에 GitHub REST API로 확인한 값이다. 저장소가 빠르게 변하므로 현재 값으로 일반화하지 않는다.
- 413 stars · 50 forks · 22 open issues
- TypeScript · Apache-2.0 · archived 아님
- 기본 브랜치:
main - 확인 커밋:
a48543042afdc50af100ced70e6eef1470d5ee6d - 커밋 시각: 2026-08-07T10:58:19Z
- 커밋 메시지:
attribute_value normalization테스트 보강 merge commit - README byte SHA-256:
5caef37b23a2530bd4db6135e159ba38f474de43f8297c88d488deadc7045e79
아직 검증하지 않은 것
이번 위키 인제스트에서는 GitHub REST API, 고정 커밋 README, 공식 Hermes 통합·로드맵·보안 문서, 선택 구현 파일과 repository tree를 읽었다. 다음은 실행하지 않았다.
npm install, Electron build, Rust XLSX sidecar build- 전체 unit test, typecheck, lint, E2E test
- Hermes API server/gateway 기동과 실제
hermes-agentstreaming - Genspark device-code login, Serper/DuckDuckGo 검색 fallback
- 실제
.docx/.xlsx/.pptxround-trip 및 byte-level fidelity 재현 - MCP client 연결, embedded MCP server 동작, approval/audit pipeline
- macOS/Windows/Linux installer 실행·서명·업데이트
- collaboration/CRDT, live meeting minutes, cloud/project sync
- 독립 보안 감사·침투 테스트·sandbox escape 검증
따라서 이 노트의 “지원한다”는 표현은 캡처 커밋의 README·공식 문서·소스에 기능이 기술되어 있다는 뜻이며, 이 환경에서 로컬 실행으로 성공을 재현했다는 뜻이 아니다.
관련 노트
- raw source:
github-criptogus-hermesoffice— 고정 커밋과 선택 원문 파일 해시를 보존한 provenance pointer - hermes-agent — Hermes Agent 자체의 게이트웨이·메모리·스킬·도구 실행면
- moc-ai-agents — AI 에이전트 전체 지도
- moc-ai-agents-harness — ReAct loop·도구·세션·검증·rollback 하네스 관점
- moc-mcp — MCP 표준·클라이언트·서버·보안 연결 지도
- moc-productivity — 오피스·업무 인터페이스·생산성 도구 지도
- 2026-08-08-github-video-db-call-md — Electron 회의 에이전트와 MCP 도구 호출을 비교할 수 있는 관련 저장소
- 2026-08-08-github-agentplugins-agent-plugins-spec — skills·MCP 패키징 표준과 HermesOffice의
hermes/skills를 비교할 수 있는 노트
출처 및 검증
- 공식 저장소: criptogus/HermesOffice
- 고정 커밋: a485430
- README pinned raw: README.md, byte SHA-256
5caef37b23a2530bd4db6135e159ba38f474de43f8297c88d488deadc7045e79 - 공식 통합 문서: docs/hermes-integration.md
- 로드맵: ROADMAP.md
- 보안 정책: SECURITY.md
- REST metadata: GitHub API
- 선택 문서·구현 파일과 다운로드 해시는 raw source:
github-criptogus-hermesoffice에 기록했다. - 저장 raw body SHA-256:
e4e1d3bac454c17edc428203e2021f1adb8a2b81f733f59fd48ca5717846b1d0(read-back 검증 완료).