대시보드 실행
게이트웨이 또는 데몬을 시작하고, 18개 라우트로 구성된 웹 대시보드를 열어 첫 번째 기기를 페어링합니다.
대시보드는 revka 바이너리에 내장된 React 웹 UI입니다. 게이트웨이가 REST API와 동일한 주소로 서비스하며, 기기 페어링을 통해 획득한 베어러 토큰을 사용해 해당 API를 통해서만 런타임과 통신합니다. 이 가이드는 게이트웨이를 실행하고, 브라우저를 페어링하며, 18개 라우트 내비게이션을 안내합니다. 대시보드를 처음 열거나 새 기기를 페어링할 때 활용하십시오.
설치부터 브라우저 페어링까지의 빠른 경로만 필요하다면 퀵스타트에서 몇 가지 명령으로 완료할 수 있습니다. 각 라우트의 기능을 페이지별로 살펴보려면 대시보드 개요를 참조하십시오.
게이트웨이 및 데몬 런타임
섹션 제목: “게이트웨이 및 데몬 런타임”대시보드를 실행하려면 호스트 프로세스가 필요합니다. 두 가지 옵션이 있습니다.
revka gateway— 대시보드, REST API, Server-Sent Events 스트림, WebSocket 엔드포인트만 시작합니다.revka daemon— 게이트웨이와 함께 구성된 모든 채널, 하트비트, cron 스케줄러를 하나의 감시 프로세스로 실행하는 전체 런타임입니다.
로컬 대시보드 작업에는 revka gateway만으로 충분합니다. UI와 함께 채널 및 예약 작업을 실행하려면 revka daemon(또는 OS 서비스)을 사용하십시오.
revka gateway # foreground, dashboard + API onlyrevka gateway start --host 127.0.0.1 --port 42617revka gateway restart # graceful restartrevka daemon # gateway + channels + heartbeat + cronrevka daemon --host 127.0.0.1 --port 42617revka service installrevka service start # launchd / systemd / OpenRC기본적으로 게이트웨이는 127.0.0.1에 바인딩됩니다. 리슨 포트는 설정 파일([gateway].port)에서 가져오며, 초기 빠른 설정 시 8080이 기록되고 내장 스키마 기본값은 42617입니다. 프로세스는 시작 시 URL을 출력합니다. 런타임 모드 및 서비스 등록은 revka gateway, daemon & service와 백그라운드 서비스로 실행에서 다룹니다.
브라우저를 열기 전에 게이트웨이가 정상 동작하는지 확인하십시오. 공개 헬스 엔드포인트는 인증 없이 사용 가능하며 비밀 정보를 노출하지 않습니다.
curl http://127.0.0.1:42617/health# {"status":"ok","paired":true,"require_pairing":true,"runtime":{...}}대시보드 빌드가 번들되어 있지 않으면 게이트웨이는 UI 라우트에 대해 대시보드 사용 불가 응답을 반환하지만, API, WebSocket, 페어링, 헬스, 웹훅 라우트는 계속 동작합니다. 내장 빌드 대신 파일시스템 빌드를 서비스하려면 REVKA_WEB_ROOT 또는 [gateway].web_root를 설정하십시오. 아래 대시보드 개발 섹션을 참조하십시오.
대시보드 시작하기
섹션 제목: “대시보드 시작하기”-
호스트 프로세스를 시작하고 출력된 URL을 확인합니다.
Terminal window revka gateway -
게이트웨이 주소에서 대시보드를 엽니다. 루트 경로가 React 앱을 서비스합니다.
http://127.0.0.1:42617/ -
브라우저를 페어링합니다. Revka는 기본적으로
require_pairing = true로 동작하므로, 첫 번째 접속 시 일회용 코드를 베어러 토큰으로 교환하는 로그인 게이트가 표시됩니다. localhost 및 원격 플로우 모두 대시보드 페어링 및 인증을 참조하십시오. -
대시보드 페이지에 착지합니다. 페어링 후
/dashboard로 이동합니다. 이곳은 라이브 실행 DAG, 위험/에이전트/명령 레일, 최근 실행 내역, 감사 체인 배지가 있는 운영자 개요 페이지입니다. 왼쪽 사이드바에서 다른 모든 화면에 접근할 수 있습니다.
대시보드 페어링 및 인증
섹션 제목: “대시보드 페어링 및 인증”대시보드는 REST API를 통해 게이트웨이와 통신하며, 모든 /api/* 요청에는 Authorization: Bearer <token>이 포함됩니다. 이 토큰은 일회용 6자리 페어링 코드에서 생성됩니다. 페어링은 네트워크상의 알 수 없는 브라우저가 에이전트를 조작하는 것을 방지합니다.
코드를 획득하는 방법은 브라우저의 위치에 따라 다릅니다.
- Localhost — 로그인 화면이
GET /pair/code에서 현재 코드를 자동으로 가져와 큰 고정폭 배지로 표시합니다. 이를 복사해 입력란에 붙여넣으면 됩니다. - 원격 — 코드는 원격 브라우저에 표시되지 않습니다. 터미널(또는 CLI)에서 6자리 코드를 확인해 직접 입력하십시오.
CLI에서 언제든지 코드를 확인하거나 갱신할 수 있습니다.
revka gateway get-paircode # show the current coderevka gateway get-paircode --new # rotate to a fresh code코드를 제출하면 대시보드가 페어링 엔드포인트를 호출하고 반환된 토큰을 localStorage에 저장합니다.
POST /pairX-Pairing-Code: 123456{ "paired": true, "persisted": true, "token": "<bearer-token>", "message": "Save this token — use it as Authorization: Bearer <token>"}대시보드 UI는 더 풍부한 JSON 페어링 경로를 사용하며, 기기 레지스트리에 기기 메타데이터를 기록해 해당 기기가 페어링 페이지에 표시됩니다.
POST /api/pairContent-Type: application/json
{ "code": "123456", "device_name": "My laptop", "device_type": "desktop", "hardware": "macOS" }다른 기기 페어링
섹션 제목: “다른 기기 페어링”기기가 하나 페어링된 후에는 데몬을 재시작하지 않고도 페어링 페이지(/pairing)에서 새 기기용 코드를 생성할 수 있습니다. POST /api/pairing/initiate를 호출해 QR 코드와 복사 가능한 코드를 렌더링합니다. 새 기기에서 QR을 스캔하거나 코드를 입력하면 되며, 기기는 나중에 언제든지 취소할 수 있습니다.
| 작업 | Method + path | 인증 |
|---|---|---|
| 페어링된 기기 목록 조회 | GET /api/devices | Bearer |
| 새 코드 생성 | POST /api/pairing/initiate | Bearer |
| 기기 취소 | DELETE /api/devices/{id} | Bearer |
| 기기 토큰 갱신 | POST /api/devices/{id}/token/rotate | Bearer |
| 현재 코드 조회 (시작 시) | GET /pair/code | 없음 |
QR 페이로드는 모바일 클라이언트가 직접 파싱할 수 있는 JSON 문자열입니다.
{ "v": 1, "type": "revka-pair", "host": "<origin><basePath>", "code": "123456" }페어링은 속도 제한과 무차별 대입 잠금으로 보호됩니다. 전체 인증 모델은 페어링 & 인증과 비밀, 페어링 & 기기 인증을 참조하십시오.
접이식 사이드바 내비게이션
섹션 제목: “접이식 사이드바 내비게이션”대시보드는 세 개의 레이블된 섹션으로 구성된 왼쪽 고정 레일로 정리되어 있습니다. 항목을 클릭하면 해당 페이지로 이동하고, 접기 화살표를 클릭하면 아이콘 전용 모드로 전환됩니다. 접힘/펼침 상태는 revka-sidebar-collapsed 키로 localStorage에 유지됩니다.
세 섹션과 해당 라우트는 다음과 같습니다.
- Orchestration — Dashboard
/dashboard, Workflows/workflows, Agents/agents, Canvas/canvas, Teams/teams - Operations — Assets
/assets, Skills/skills, Tools/tools, Integrations/integrations, Cron/cron, Pairing/pairing, Config/config, Cost/cost, Skins/skins - Inspection — Memory
/memory, Logs/logs, Audit/audit, Doctor/doctor
헤더에는 테마/스킨 전환 버튼, 언어 전환기, 운영자 채팅 어시스턴트를 여는 버튼도 있습니다. 운영자 채팅 어시스턴트는 모든 페이지에서 접근 가능한 채팅, 터미널, 코드 탭이 있는 플로팅 패널입니다.
대시보드 라우트 맵
섹션 제목: “대시보드 라우트 맵”18개의 탐색 가능한 라우트가 있습니다. 각 항목은 상세 레퍼런스 페이지로 연결됩니다.
| 라우트 | 페이지 | 기능 |
|---|---|---|
/dashboard | 대시보드 개요 | 라이브 실행 DAG, 위험/에이전트/명령 레일, 최근 실행, 감사 체인 배지 |
/workflows | 워크플로우 & 에디터 | 워크플로우 정의 탐색, 생성, 편집, 실행, 폐기, 삭제; AI 지원 Architect 에디터 |
/agents | 에이전트 | 에이전트 정의 CRUD (ID, 소울, 전문성, 에이전트 유형, 아바타) |
/canvas | 캔버스 | 에이전트가 WebSocket을 통해 HTML/텍스트 프레임을 푸시하는 라이브 시각적 작업 공간 |
/teams | 팀 | 관계 엣지로 에이전트를 위임 토폴로지로 그룹화 |
/assets | 에셋 | Kumiho 에셋 매니저: 프로젝트, 스페이스, 아이템, 리비전, 아티팩트, 번들, 엣지 |
/skills | 스킬 | 스킬 레지스트리와 ClawHub 마켓플레이스 및 GitHub 인스톨러 |
/tools | 도구 | 에이전트(MCP) 도구 및 발견된 CLI 바이너리의 읽기 전용 레퍼런스 |
/integrations | 통합 | 상태 배지가 있는 채널/커넥터의 읽기 전용 카탈로그 |
/cron | Cron | 예약된 에이전트 및 셸 작업 관리; 작업별 실행 기록 |
/pairing | 페어링 | 코드 생성, QR 표시, 갱신, 페어링된 기기 취소 |
/config | 설정 | 구조화된 양식 또는 원시 소스 에디터로 config.toml 조회/편집; MCP 서버 CRUD |
/cost | 비용 | 세션, 일별, 월별 지출 및 모델별 세부 내역 |
/skins | 스킨 | UI 스킨 패키지 탐색, 활성화, 업로드, 삭제 |
/memory | 메모리 | Kumiho 메모리의 force-directed 그래프; 종류/스페이스별 필터링, 노드 검사 |
/logs | 로그 | 일시 정지 및 유형 필터링이 가능한 데몬의 라이브 SSE 이벤트 스트림 |
/audit | 감사 | 원클릭 체인 검증이 가능한 변조 방지 감사 로그 뷰어 |
/doctor | 닥터 | OK/WARN/ERROR 결과를 서브시스템별로 그룹화한 온디맨드 진단 |
대시보드 개요에서 각 화면을 심층적으로 살펴보고, 워크플로우, 에디터 & 실행, 에이전트, 팀 & 캔버스, 에셋 & 메모리 탐색기, 로그, 감사, 닥터, 페어링 & 스킨에서 워크플로우, 에이전트, 에셋, 검사 페이지로 바로 이동하십시오.
대시보드 개발
섹션 제목: “대시보드 개발”대시보드는 저장소의 web/ 디렉터리에 있는 React + TypeScript + Tailwind + Vite 앱입니다. 게이트웨이와 프론트엔드는 독립적으로 개발됩니다. 일반 cargo build는 Rust 전용으로 npm을 실행하지 않습니다. UI 자체를 편집하는 경우에만 이 섹션이 필요합니다.
-
게이트웨이를 실행합니다 (터미널 하나).
Terminal window cargo run -- gateway start -
Vite 개발 서버를 실행합니다 (두 번째 터미널).
Terminal window cd webnpm cinpm run dev -
Vite 개발 UI를 엽니다 (
http://127.0.0.1:5173). Vite는 기본적으로/api,/ws,/pair,/health,/admin경로를http://127.0.0.1:42617로 프록시합니다. 게이트웨이가 다른 위치에서 실행 중이라면npm run dev실행 전에REVKA_GATEWAY_URL=http://host:port를 설정하십시오.
바이너리에 임베딩하지 않고 Rust 게이트웨이가 로컬 빌드를 서비스하도록 하려면 파일시스템 웹 루트를 지정하십시오.
cd webnpm cinpm run build
cd ..$env:REVKA_WEB_ROOT = "$PWD/web/dist"cargo run -- gateway start동등한 설정 키는 다음과 같습니다.
[gateway]web_root = "/absolute/path/to/revka/web/dist"대시보드 에셋은 다음 순서로 결정됩니다. REVKA_WEB_ROOT(설정되어 있고 비어 있지 않은 경우) → [gateway].web_root → 내장된 web/dist 빌드 → 대시보드 사용 불가 응답. 파일시스템 서비스는 설정된 루트를 정규화하고 경로 탐색을 거부합니다. assets/ 하위의 해시된 에셋은 불변 캐시 헤더를 받고, index.html은 no-cache로 제공됩니다.
공식 릴리스 빌드의 경우, 릴리스 바이너리를 컴파일하기 전에 프론트엔드를 빌드해 임베딩되도록 하십시오.
cd webnpm cinpm run build
cd ..cargo build --release --lockedbuild.rs는 더 이상 기본적으로 프론트엔드를 빌드하지 않습니다. 이전 cargo 트리거 플로우를 복원하려면 cargo build 전에 REVKA_BUILD_WEB=1을 설정하십시오.
문제 해결
섹션 제목: “문제 해결”- 대시보드에 “dashboard unavailable” 페이지가 표시됩니다. 웹 빌드가 번들되어 있지 않거나 찾을 수 없습니다.
REVKA_WEB_ROOT/[gateway].web_root를 확인하거나web/dist를 빌드하십시오. API, 페어링, 헬스 라우트는 그 동안에도 계속 동작합니다. - 페어링 입력란이 코드를 거부합니다.
revka gateway get-paircode --new로 코드를 갱신하고 다시 시도하십시오. 코드는 일회용이며 페어링 후 소비됩니다. - 정상 동작하던 모든 요청이 401을 반환합니다. 토큰이 무효화되었습니다(기기 취소 또는 토큰 갱신). 브라우저를 재페어링하십시오.
- 다른 머신에서 게이트웨이에 접근할 수 없습니다. 기본 바인딩은 루프백 전용입니다.
allow_public_bind = true를 설정하거나 터널로 앞단을 구성하십시오.
구조화된 진단을 위해 대시보드 내 닥터 페이지를 실행하거나 CLI에서 revka doctor를 실행하십시오.