본문으로 건너뛰기

웹 대시보드

웹 대시보드는 Hermes 에이전트 설치를 관리하기 위한 브라우저 기반 UI입니다. YAML 파일을 편집하거나 CLI 명령어를 실행하는 대신, 깔끔한 웹 인터페이스에서 설정을 구성하고 API 키를 관리하며 세션을 모니터링할 수 있습니다.

빠른 시작

hermes dashboard

이는 로컬 웹 서버를 시작하고 브라우저에서 http://127.0.0.1:9119 를 엽니다. 대시보드는 완전히 사용자의 컴퓨터에서 실행되며, 데이터가 로컬호스트를 벗어나지 않습니다.

옵션

플래그기본값설명
--port9119웹 서버를 실행할 포트
--host127.0.0.1바인드 주소
--no-open브라우저를 자동으로 열지 마세요
--insecure꺼짐로컬호스트가 아닌 호스트에 바인딩 허용 (위험함 — 네트워크에 API 키가 노출됨; 방화벽과 강력한 인증과 함께 사용)
--tui꺼짐브라우저 내 채팅 탭을 표시합니다 (hermes --tui를 PTY/WebSocket을 통해 내장). 또는 HERMES_DASHBOARD_TUI=1을 설정합니다.
# Custom port
hermes dashboard --port 8080

# Bind to all interfaces (use with caution on shared networks)
hermes dashboard --host 0.0.0.0

# Start without opening browser
hermes dashboard --no-open

전제 조건

기본 hermes-agent 설치에는 HTTP 스택이나 PTY 헬퍼가 포함되어 있지 않습니다 — 이것들은 선택적 추가 기능입니다. 웹 대시보드는 FastAPI와 Uvicorn(web 추가)이 필요합니다. 채팅 탭 또한 내장된 TUI를 의사 터미널 뒤에서 실행하기 위해 ptyprocess가 필요합니다(pty POSIX 추가). 둘 다 다음과 같이 설치하세요:

pip install 'hermes-agent[web,pty]'
``web` 추가 항목은 FastAPI/Uvicorn을 포함합니다; `pty``ptyprocess` (POSIX) 또는 `pywinpty` (네이티브 Windows — 포함된 TUI 자체는 여전히 WSL이 필요함)을 포함합니다. `pip install hermes-agent[all]`에는 두 가지 추가 항목이 모두 포함되어 있으며, 메시징/음성 등도 원할 경우 가장 쉬운 경로입니다.

의존성 없이 `hermes dashboard`를 실행하면 설치할 항목을 알려줍니다. 프런트엔드가 아직 빌드되지 않았고 `npm`가 사용 가능한 경우, 첫 실행 시 자동으로 빌드됩니다.

## 페이지 \{#pages}

### 상태 \{#status}

랜딩 페이지에는 설치 상태에 대한 실시간 개요가 표시됩니다:

- **에이전트 버전** 및 출시일
- **게이트웨이 상태** — 실행/중지, PID, 연결된 플랫폼 및 상태
- **활성 세션** — 지난 5분 동안 활성화된 세션 수
- **최근 세션** — 모델, 메시지 수, 토큰 사용량 및 대화 미리보기가 포함된 가장 최근 20세션 목록

상태 페이지는 5초마다 자동으로 새로 고쳐집니다.

### 채팅 \{#chat}

**채팅** 탭은 전체 Hermes TUI를 브라우저에 직접 내장합니다 (`hermes --tui`에서 사용하는 동일한 인터페이스). 터미널 TUI에서 할 수 있는 모든 것 — 슬래시 명령, 모델 선택기, 도구 호출 카드, 마크다운 스트리밍, clarify/sudo/승인 프롬프트, 스킨 테마 설정 — 이곳에서도 똑같이 작동합니다. 왜냐하면 대시보드가 실제 TUI 바이너리를 실행하고 [xterm.js](https://xtermjs.org/)를 통해 ANSI 출력을 렌더링하며, WebGL 렌더러로 픽셀 단위 셀 레이아웃을 처리하기 때문입니다.

**작동 방식:**

- `/api/pty`는 대시보드의 세션 토큰으로 인증된 WebSocket을 엽니다
- 서버는 POSIX 의사 터미널 뒤에서 `hermes --tui`을 생성합니다
- 키 입력은 PTY로 전달되고; ANSI 출력은 브라우저로 다시 스트리밍됩니다
- xterm.js의 WebGL 렌더러는 각 셀을 정수 픽셀 그리드에 그립니다; 마우스 추적(SGR 1006), 와이드 문자(유니코드 11), 그리고 박스 그리기 글리프 모두 네이티브로 렌더링됩니다
- 브라우저 창 크기를 조정하면 `@xterm/addon-fit` 애드온을 통해 TUI 크기가 조정됩니다

**기존 세션 재개:** **세션** 탭에서 원하는 세션 옆의 재생 아이콘()을 클릭합니다. 그러면 `/chat?resume=<id>`로 이동하고 `--resume`와 함께 TUI가 실행되며 전체 기록을 불러옵니다.

**필수 조건:**

- Node.js (`hermes --tui`와 동일한 요구 사항; TUI 번들은 첫 실행 시 빌드됩니다)
- `ptyprocess``pty` 추가 기능에 의해 설치됨 (`pip install 'hermes-agent[web,pty]'` 또는 `[all]` 모두를 포함함)
- POSIX 커널(Linux, macOS 또는 WSL2). `/chat` 터미널 창은 특히 POSIX PTY가 필요합니다 — 네이티브 Windows Python에는 이에 상응하는 것이 없으므로, 네이티브 Windows 설치에서는 대시보드의 나머지 부분(세션, 작업, 메트릭, 구성 편집기)은 작동하지만 `/chat` 탭에서는 해당 기능을 사용하려면 WSL2를 사용하라는 배너가 표시됩니다.

브라우저 탭을 닫으면 서버에서 PTY가 깔끔하게 회수됩니다. 다시 열면 새로운 세션이 생성됩니다.

### 설정 \{#config}

`config.yaml`용 폼 기반 편집기입니다. 150개 이상의 모든 구성 필드는 `DEFAULT_CONFIG`에서 자동으로 검색되며 탭으로 구분된 카테고리로 정리됩니다:

- **모델** — 기본 모델, 제공자, 기본 URL, 추론 설정
- **터미널** — 백엔드(로컬/도커/SSH/모달), 타임아웃, 셸 환경 설정
- **디스플레이** — 스킨, 도구 진행, 재개 표시, 스피너 설정
- **에이전트** — 최대 반복 횟수, 게이트웨이 시간 초과, 서비스 등급
- **위임** — 하위 대리인의 제한, 추론 노력
- **메모리** — 제공자 선택, 컨텍스트 주입 설정
- **승인** — 위험한 명령 승인 모드 (ask/yolo/deny)
- 그리고 더 — config.yaml의 모든 섹션에는 해당하는 폼 필드가 있습니다

알려진 유효 값이 있는 필드(터미널 백엔드, 스킨, 승인 모드 등)는 드롭다운으로 렌더링됩니다. 불리언 값은 토글로 렌더링됩니다. 그 외의 모든 것은 텍스트 입력으로 렌더링됩니다.

**동작:**

- **저장** — `config.yaml`에 변경 사항을 즉시 기록합니다
- **기본값으로 재설정** — 모든 필드를 기본값으로 되돌립니다 (저장하려면 '저장'을 클릭해야 합니다)
- **내보내기** — 현재 설정을 JSON으로 다운로드합니다
- **가져오기** — 현재 값을 대체하기 위해 JSON 구성 파일을 업로드합니다

:::tip
구성 변경 사항은 다음 에이전트 세션 또는 게이트웨이 재시작 시 적용됩니다. 웹 대시보드 편집은 `hermes config set`과 게이트웨이가 읽는 동일한 `config.yaml` 파일을 수정합니다.

:::
### API 키 \{#api-keys}

API 키와 자격 증명이 저장된 `.env` 파일을 관리하세요. 키는 카테고리별로 그룹화되어 있습니다:

- **LLM 제공업체** — OpenRouter, Anthropic, OpenAI, DeepSeek 등.
- **도구 API 키** — Browserbase, Firecrawl, Tavily, ElevenLabs 등
- **메시징 플랫폼** — 텔레그램, 디스코드, 슬랙 봇 토큰 등.
- **에이전트 설정** — `API_SERVER_ENABLED`와 같은 비밀이 아닌 환경 변수

각 키는 다음을 보여줍니다:
- 현재 설정되어 있는지 여부(값의 일부가 가려진 미리보기와 함께)
- 그것이 무엇을 위한 것인지에 대한 설명
- 공급자의 가입/키 페이지로 가는 링크
- 값을 설정하거나 업데이트할 수 있는 입력 필드
- 삭제 버튼으로 제거하기

고급/드물게 사용되는 키는 기본적으로 토글 뒤에 숨겨져 있습니다.

### 세션 \{#sessions}

모든 에이전트 세션을 탐색하고 확인하세요. 각 행에는 세션 제목, 소스 플랫폼 아이콘(CLI, Telegram, Discord, Slack, cron), 모델 이름, 메시지 수, 도구 호출 수, 마지막 활동 시간 등이 표시됩니다. 실시간 세션은 깜박이는 배지로 표시됩니다.

- **검색** — FTS5를 사용하여 모든 메시지 내용을 전체 텍스트 검색합니다. 결과는 하이라이트된 스니펫을 표시하며, 확장 시 첫 번째 일치하는 메시지로 자동 스크롤됩니다.
- **확장** — 세션을 클릭하여 전체 메시지 기록을 불러옵니다. 메시지는 역할(사용자, 어시스턴트, 시스템, 도구)에 따라 색상으로 구분되며, 문법 강조가 적용된 Markdown으로 표시됩니다.
- **도구 호출** — 도구 호출이 포함된 보조 메시지는 함수 이름과 JSON 인수가 있는 접이식 블록을 보여줍니다.
- **삭제** — 휴지통 아이콘을 사용하여 세션과 해당 메시지 기록을 제거합니다.

### 로그 \{#logs}

필터링 및 실시간 추적 기능으로 에이전트, 게이트웨이 및 오류 로그 파일을 확인하세요.

- **파일** — `agent`, `errors`, `gateway` 로그 파일 간 전환
- **레벨** — 로그 레벨로 필터: ALL, DEBUG, INFO, WARNING, 또는 ERROR
- **구성요소** — 소스 구성요소별 필터: 전체, 게이트웨이, 에이전트, 도구, CLI, 또는 크론
- **라인** — 표시할 라인 수 선택 (50, 100, 200, 또는 500)
- **자동 새로고침** — 5초마다 새로운 로그 라인을 가져오는 라이브 테일링을 전환합니다
- **색상 구분** — 로그 라인은 심각도에 따라 색이 지정됩니다 (오류는 빨강, 경고는 노랑, 디버그는 흐리게)

### 분석 \{#analytics}

세션 기록에서 계산된 사용량 및 비용 분석입니다. 다음을 보려면 기간(7, 30 또는 90)을 선택하세요:

- **요약 카드** — 전체 토큰(입력/출력), 캐시 적중 비율, 총 추정 또는 실제 비용, 일일 평균과 함께한 총 세션 수
- **일일 토큰 차트** — 일별 입력 및 출력 토큰 사용량을 표시하는 누적 막대 차트로, 마우스를 올리면 세부 내역과 비용이 표시됩니다.
- **일일 세부 내역 표** — 날짜, 세션 수, 입력 토큰 수, 출력 토큰 수, 캐시 적중률, 일일 비용
- **모델별 세부 내역** — 사용된 각 모델, 세션 수, 토큰 사용량 및 추정 비용을 보여주는 표

### 크론 \{#cron}

에이전트 프롬프트를 정기 일정에 따라 실행하는 예약된 크론 작업을 생성하고 관리합니다.

- **생성** — 이름(선택 사항), 프롬프트, 크론 표현식(예: `0 9 * * *`), 및 전달 대상(로컬, 텔레그램, 디스코드, 슬랙 또는 이메일)을 입력하세요
- **작업 목록** — 각 작업은 이름, 프롬프트 미리보기, 스케줄 표현식, 상태 배지(활성/일시중지/오류), 전달 대상, 마지막 실행 시간, 다음 실행 시간을 표시합니다
- **일시 중지 / 재개** — 작업을 활성 상태와 일시 중지 상태 사이로 전환
- **지금 트리거** — 정상 일정 외에 작업을 즉시 실행
- **삭제** — 크론 작업을 영구적으로 제거

### 기술 \{#skills}

기술과 도구 세트를 찾아보고, 검색하며, 전환하세요. 기술은 `~/.hermes/skills/`에서 불러와지며 카테고리별로 그룹화됩니다.

- **검색** — 이름, 설명 또는 카테고리로 기술과 도구 세트를 필터링
- **카테고리 필터** — 목록을 좁히려면 카테고리 버튼을 클릭하세요 (예: MLOps, MCP, 레드 팀, AI)
- **토글** — 스위치로 개별 스킬을 활성화하거나 비활성화합니다. 변경 사항은 다음 세션에 적용됩니다.
- **도구 세트** — 별도의 섹션에서 내장 도구 세트(파일 작업, 웹 브라우징 등)의 활성/비활성 상태, 설치 요구 사항, 포함된 도구 목록을 보여줍니다

:::warning[Security]
웹 대시보드는 API 키와 비밀을 포함하는 `.env` 파일을 읽고 씁니다. 기본적으로 `127.0.0.1`에 바인딩되며 — 로컬 머신에서만 접근할 수 있습니다. `0.0.0.0`에 바인딩하면 네트워크상의 누구나 자격 증명을 보고 수정할 수 있습니다. 대시보드 자체에는 인증 기능이 없습니다.

:::
## `/reload` 슬래시 명령 \{#reload-slash-command}

대시보드 PR은 또한 인터랙티브 CLI에 `/reload` 슬래시 명령을 추가합니다. 웹 대시보드를 통해(API 키를 변경하거나 `.env`를 직접 편집한 후) 활성 CLI 세션에서 `/reload`를 사용하여 재시작 없이 변경 사항을 적용하세요:

You → /reload Reloaded.env (3 var(s) updated)


이것은 `~/.hermes/.env`를 실행 중인 프로세스의 환경으로 다시 읽어들입니다. 대시보드를 통해 새 공급자 키를 추가하고 즉시 사용하고 싶을 때 유용합니다.

## REST API \{#rest-api}

웹 대시보드는 프론트엔드가 사용하는 REST API를 제공합니다. 또한 자동화를 위해 이러한 엔드포인트를 직접 호출할 수도 있습니다:

### GET /api/status \{#get-apistatus}

에이전트 버전, 게이트웨이 상태, 플랫폼 상태 및 활성 세션 수를 반환합니다.

### GET /api/sessions \{#get-apisessions}

메타데이터(모델, 토큰 수, 타임스탬프, 미리보기)와 함께 최근 세션 20개를 반환합니다.

### GET /api/config \{#get-apiconfig}

현재 `config.yaml` 내용을 JSON으로 반환합니다.

### GET /api/config/defaults \{#get-apiconfigdefaults}

기본 구성 값을 반환합니다.

### GET /api/config/schema \{#get-apiconfigschema}

각 구성 필드의 스키마를 반환합니다 — 유형, 설명, 카테고리, 적용 가능한 경우 선택 옵션 포함. 프론트엔드는 이를 사용하여 각 필드에 적합한 입력 위젯을 렌더링합니다.

### PUT /api/config \{#put-apiconfig}

새 구성을 저장합니다. 본문: `{"config": {...}}`.

### GET /api/env \{#get-apienv}

설정/해제 상태, 마스킹된 값, 설명 및 범주와 함께 알려진 모든 환경 변수를 반환합니다.

### PUT /api/env \{#put-apienv}

환경 변수를 설정합니다. 본문: `{"key": "VAR_NAME", "value": "secret"}`.

### 삭제 /api/env \{#delete-apienv}

환경 변수를 제거합니다. 본문: `{"key": "VAR_NAME"}`.

### GET /api/sessions/{session_id} \{#get-apisessionssessionid}

단일 세션의 메타데이터를 반환합니다.

### GET /api/sessions/{session_id}/messages \{#get-apisessionssessionidmessages}

세션에 대한 전체 메시지 기록을 반환하며, 도구 호출과 타임스탬프를 포함합니다.

### GET /api/sessions/search \{#get-apisessionssearch}

메시지 내용 전체에 대한 전체 텍스트 검색. 쿼리 매개변수: `q`. 하이라이트된 스니펫과 함께 일치하는 세션 ID를 반환합니다.

### DELETE /api/sessions/{session_id} \{#delete-apisessionssessionid}

세션과 해당 메시지 기록을 삭제합니다.

### GET /api/logs \{#get-apilogs}

로그 라인을 반환합니다. 쿼리 매개변수: `file` (agent/errors/gateway), `lines` (count), `level`, `component`.

### GET /api/analytics/usage \{#get-apianalyticsusage}

토큰 사용량, 비용 및 세션 분석을 반환합니다. 쿼리 파라미터: `days` (기본값 30). 응답에는 일별 분석과 모델별 집계가 포함됩니다.

### GET /api/cron/jobs \{#get-apicronjobs}

상태, 일정 및 실행 기록과 함께 구성된 모든 크론 작업을 반환합니다.

### POST /api/cron/jobs \{#post-apicronjobs}

새로운 크론 작업을 생성합니다. 본문: `{"prompt": "...", "schedule": "0 9 * * *", "name": "...", "deliver": "local"}`.

### POST /api/cron/jobs/{job_id}/pause \{#post-apicronjobsjobidpause}

크론 작업을 일시 중지합니다.

### POST /api/cron/jobs/{job_id}/resume \{#post-apicronjobsjobidresume}

일시 중지된 크론 작업을 다시 시작합니다.

### POST /api/cron/jobs/{job_id}/trigger \{#post-apicronjobsjobidtrigger}

즉시 계획된 일정 외에서 크론 작업을 실행합니다.

### DELETE /api/cron/jobs/{job_id} \{#delete-apicronjobsjobid}

크론 작업을 삭제합니다.

### GET /api/skills \{#get-apiskills}

이름, 설명, 카테고리 및 활성화 상태와 함께 모든 기술을 반환합니다.

### PUT /api/skills/toggle \{#put-apiskillstoggle}

스킬을 활성화하거나 비활성화합니다. 내용: `{"name": "skill-name", "enabled": true}`.

### GET /api/tools/toolsets \{#get-apitoolstoolsets}

레이블, 설명, 도구 목록 및 활성/구성 상태와 함께 모든 도구 세트를 반환합니다.

## CORS \{#cors}

웹 서버는 CORS를 로컬호스트 출처로만 제한합니다:

- `http://localhost:9119` / `http://127.0.0.1:9119` (생산)
- `http://localhost:3000` / `http://127.0.0.1:3000`
- `http://localhost:5173` / `http://127.0.0.1:5173` (Vite 개발 서버)

서버를 사용자 지정 포트에서 실행하면 해당 출처가 자동으로 추가됩니다.

## 개발 \{#development}

웹 대시보드 프론트엔드에 기여하고 있다면:

```bash
# Terminal 1: start the backend API
hermes dashboard --no-open

# Terminal 2: start the Vite dev server with HMR
cd web/
npm install
npm run dev

Vite 개발 서버 http://localhost:5173/api 요청을 FastAPI 백엔드 http://127.0.0.1:9119로 프록시합니다.

프론트엔드는 React 19, TypeScript, Tailwind CSS v4, 그리고 shadcn/ui 스타일 컴포넌트로 구축되었습니다. 프로덕션 빌드는 hermes_cli/web_dist/로 출력되며, FastAPI 서버가 이를 정적 SPA로 제공합니다.

업데이트 시 자동 빌드

hermes update를 실행하면, npm이 사용 가능할 경우 웹 프론트엔드가 자동으로 재빌드됩니다. 이렇게 하면 대시보드가 코드 업데이트와 동기화 상태를 유지할 수 있습니다. 만약 npm가 설치되어 있지 않으면, 업데이트가 프론트엔드 빌드를 건너뛰고 첫 실행 시 hermes dashboard가 이를 빌드합니다.

테마 및 플러그인

대시보드는 여섯 가지 기본 제공 테마와 함께 제공되며, 사용자 정의 테마, 플러그인 탭, 백엔드 API 경로로 확장할 수 있습니다 — 모두 바로 사용 가능하며, 리포지토리 복제는 필요하지 않습니다.

헤더 바에서 테마를 실시간으로 전환하세요 — 언어 전환기 옆의 팔레트 아이콘을 클릭하세요. 선택 사항은 config.yaml 아래의 dashboard.theme에 유지되며 페이지 로드 시 복원됩니다.

내장 테마:

테마캐릭터
헤르메스 틸 (default)다크 틸 + 크림, 시스템 폰트, 편안한 간격
에르메스 틸 (대형) (default-large)기본과 같지만 글자 크기는 18px이고 간격이 더 넓음
자정 (midnight)짙은 청보라색, 인터 + 제트브레인스 모노
엠버 (ember)따뜻한 크림슨 + 청동, 스펙트럴 세리프 + IBM 플렉스 모노
모노 (mono)그레이스케일, IBM 플렉스, 컴팩트
사이버펑크 (cyberpunk)검은색 바탕에 네온 그린, 쉐어 테크 모노
로제 (rose)핑크 + 아이보리, 프라우스 세리프, 넓은

자신만의 테마를 만들고, 플러그인 탭을 추가하며, 셸 슬롯에 주입하거나 플러그인 전용 REST 엔드포인트를 노출하려면 **대시보드 확장하기**를 참고하세요 — 완전한 가이드는 다음 내용을 다룹니다:

  • 테마 YAML 스키마 — 팔레트, 타이포그래피, 레이아웃, 자산, 컴포넌트 스타일, 색상 덮어쓰기, 사용자 정의 CSS
  • 레이아웃 변형 — standard, cockpit, tiled
  • 플러그인 매니페스트, SDK, 셸 슬롯, 페이지 범위 슬롯(빌트인 페이지를 덮어쓰지 않고 위젯 주입), 백엔드 FastAPI 라우트
  • 전체 결합 테마 + 플러그인 연습(스트라이크 프리덤 조종석 데모)
  • 탐색, 다시 로드, 문제 해결