크론, 비용, 구성 페이지
크론 작업을 예약하고, 지출을 분석하며, 구조화 편집기/소스 편집기와 MCP 서버 테스터로 설정을 편집합니다.
대시보드 Operations 섹션에는 작업 예약, 지출 모니터링, 설정 변경 등 일상적인 운영 작업을 처리하는 세 가지 라우트가 있습니다. Cron 페이지(/cron)는 예약된 에이전트 및 셸 작업과 실행 기록을 관리합니다. Cost 페이지(/cost)는 읽기 전용 지출 분석으로, 세션·일별·월별 합계를 모델별로 분류해 표시합니다. Config 페이지(/config)는 구조화된 섹션 폼 또는 원시 소스 편집기를 통해 전체 config.toml을 편집하며, 외부 MCP 서버를 연결하고 테스트하는 곳이기도 합니다.
작업을 일정에 따라 실행하고 싶거나, 토큰 비용을 확인하거나, 셸을 열지 않고 설정을 변경하려 할 때 이 페이지들을 활용하세요. 세 페이지 모두 대시보드의 Bearer 토큰 인증이 적용됩니다 — 먼저 브라우저 페어링을 완료하려면 대시보드 실행을 참고하세요.
크론 작업 페이지 (/cron)
섹션 제목: “크론 작업 페이지 (/cron)”Cron 페이지는 Revka 스케줄러의 시각적 프런트엔드입니다. 등록된 모든 작업을 나열하고, 작업 추가·편집·활성화/비활성화·삭제를 지원하며, 각 행을 펼치면 해당 작업의 최근 실행 기록(소요 시간 및 출력 포함)을 확인할 수 있습니다. 게이트웨이의 /api/cron 엔드포인트가 기반입니다.
| 동작 | 메서드 + 경로 | 인증 |
|---|---|---|
| 작업 목록 조회 | GET /api/cron | Bearer |
| 작업 생성 | POST /api/cron | Bearer |
| 작업 수정 | PATCH /api/cron/{id} | Bearer |
| 작업 삭제 | DELETE /api/cron/{id} | Bearer |
| 작업 실행 기록 조회 | GET /api/cron/{id}/runs?limit=20 | Bearer |
| 전역 설정 조회 | GET /api/cron/settings | Bearer |
| 전역 설정 수정 | PATCH /api/cron/settings | Bearer |
작업 생성
섹션 제목: “작업 생성”Add Job을 클릭하면 생성 모달이 열립니다. 대시보드 생성 폼에는 네 가지 필드가 있습니다.
| 필드 | 타입 | 의미 |
|---|---|---|
name | string (선택) | 작업의 사람이 읽을 수 있는 레이블 |
command | string | 실행할 셸 명령어 또는 에이전트 프롬프트 |
schedule | string | 표준 크론 표현식, 예: 0 0 * * * |
enabled | bool | 작업 실행 여부 (기본값: 활성화) |
모달은 게이트웨이에 직접 요청을 전송합니다.
POST /api/cronAuthorization: Bearer <token>Content-Type: application/json
{ "name": "nightly summary", "command": "Summarize today's alerts", "schedule": "0 9 * * *", "enabled": true}{ "status": "ok", "job": { "id": "abc123", "...": "..." } }게이트웨이는 schedule 문자열을 자동으로 크론 스케줄로 감쌉니다. prompt가 있으면 에이전트 작업으로, 없으면 셸 작업으로 처리됩니다. 크론 표현식은 표준 5-필드 crontab 구문(min hour day month weekday)을 사용하며, 0 9 * * *은 매일 09:00입니다.
편집, 활성화/비활성화, 삭제
섹션 제목: “편집, 활성화/비활성화, 삭제”작업을 편집하면 변경된 필드만 부분 업데이트로 전송됩니다.
PATCH /api/cron/{id}Authorization: Bearer <token>Content-Type: application/json
{ "name": "renamed", "schedule": "0 8 * * *", "command": "...", "enabled": false }enabled를 토글하면 삭제 없이 작업을 일시 중지하거나 재개할 수 있습니다. 비활성화된 작업은 스케줄이 유지된 채 데이터베이스에 남아 있으며 실행되지 않습니다. Delete는 작업과 실행 기록을 영구 삭제합니다(cron_runs 행이 연쇄 삭제됨) — 되돌릴 수 없습니다.
실행 기록
섹션 제목: “실행 기록”작업의 ID(또는 펼치기 컨트롤)를 클릭하면 해당 작업의 최근 실행 기록을 로드합니다.
GET /api/cron/{id}/runs?limit=20Authorization: Bearer <token>{ "runs": [ { "id": "...", "job_id": "abc123", "started_at": "2026-06-18T09:00:00Z", "finished_at": "2026-06-18T09:00:04Z", "status": "ok", "duration_ms": 4120, "output": "..." } ]}각 실행은 시작/종료 타임스탬프, ok 또는 error 상태, 소요 시간, 캡처된 출력(실행당 최대 16 KB 저장)과 함께 기록됩니다. 작업당 보관할 레코드 수는 max_run_history(기본값 50)로 설정하며, 오래된 레코드는 자동으로 삭제됩니다.
catch_up_on_startup
섹션 제목: “catch_up_on_startup”페이지 상단의 기어 토글로 스케줄러 전역 설정(시작 시 따라잡기 포함)을 제어합니다.
GET /api/cron/settingsAuthorization: Bearer <token>{ "enabled": true, "catch_up_on_startup": true, "max_run_history": 50 }PATCH /api/cron/settingsAuthorization: Bearer <token>Content-Type: application/json
{ "catch_up_on_startup": false }catch_up_on_startup이 true(기본값)이면, 데몬이 시작되거나 재시작될 때 먼저 기한이 지난 모든 작업을 조회하고 각각 한 번씩 실행한 뒤 정상 폴링 루프에 진입합니다. 이를 통해 다운타임(늦은 부팅, 크래시, 유지보수) 중 놓친 작업을 복구할 수 있습니다. false이면 놓친 작업은 건너뛰고 다음 예약된 실행을 기다립니다. 동일한 설정 객체에는 크론 서브시스템 전체의 전역 on/off 스위치인 enabled와 max_run_history도 포함됩니다. 변경 사항은 config.toml에 기록되고 실행 중인 구성에 즉시 적용됩니다 — 재시작이 필요하지 않습니다.
[cron]enabled = truecatch_up_on_startup = true # default; set false to skip missed jobs on restartmax_run_history = 50비용 페이지 (/cost)
섹션 제목: “비용 페이지 (/cost)”Cost 페이지는 읽기 전용 토큰 및 지출 분석 페이지입니다. 세 가지 지출 기간, 막대 차트가 포함된 모델별 분류, 토큰 효율성 지표를 제공합니다. 단일 엔드포인트에서 데이터를 가져옵니다.
GET /api/cost{ "session_cost_usd": 0.4213, "daily_cost_usd": 1.8740, "monthly_cost_usd": 22.5106, "request_count": 318, "total_tokens": 1542300, "by_model": { "anthropic/claude-sonnet-4-6": { "...": "..." } }}세 패널 읽는 법
섹션 제목: “세 패널 읽는 법”- 왼쪽 패널 — 4개의 지표 카드(세션 비용, 일별 비용, 월별 비용, 요청 수)와 토큰 효율성 서브패널(총 토큰, 요청당 평균 토큰, 1,000 토큰당 비용).
- 중앙 패널 — 모델 워크스페이스. 각 모델 행에는 총 비용, 토큰 수, 요청 수, 월별 지출 점유율, 막대 차트가 표시됩니다. 행을 클릭하면 선택됩니다.
- 오른쪽 패널 — 선택된 모델의 세부 정보: 월별 지출, 요청 수, 토큰, 평균 토큰, 1,000 토큰당 비용, 점유율. 인터프리테이션 패널에서 수치의 의미를 설명합니다.
세 기간의 의미는 각각 다릅니다. 세션은 현재 데몬 프로세스의 수명, 일별은 롤링 하루, 월별은 달력 기준 한 달입니다. 세션 범위의 by_model 분류는 현재 프로세스만 반영하며, 일별·월별 합계는 전체 원장에서 읽습니다.
구성 페이지 (/config)
섹션 제목: “구성 페이지 (/config)”Config 페이지에서는 Revka의 전체 config.toml을 조회하고 편집할 수 있습니다. 왼쪽의 섹션 맵으로 섹션 간 이동하고, 에디터 본문은 탭으로 두 가지 모드를 제공합니다. Save를 클릭하면 전체 파일이 저장됩니다.
| 동작 | 메서드 + 경로 | 인증 |
|---|---|---|
| 원시 TOML 가져오기 | GET /api/config | Bearer |
| 구성 저장 | PUT /api/config (Content-Type: application/toml) | Bearer |
| MCP 서버 테스트 | POST /api/mcp/servers/test | Bearer |
Config 페이지는 가장 자주 편집하는 키를 이름 있는 섹션으로 그룹화합니다.
- Provider —
default_provider,default_model,default_temperature,provider_timeout_secs,provider_max_tokens - Agent —
max_tool_iterations,max_context_tokens,max_history_messages, 컨텍스트 윈도우 설정,parallel_tools, 사고 수준 - Memory —
[kumiho]설정,backend,auto_save, 스냅샷 - Runtime — 게이트웨이
host/port,require_pairing, 세션 지속성, 자율성level - Security — 감사 활성화, 샌드박스 백엔드, 비용 한도
- Channels — CLI, ack 반응, 도구 호출 표시, 메시지 타임아웃
- MCP —
enabled,deferred_loading, 외부 서버 목록
이 섹션에 포함된 모든 키의 의미, 타입, 기본값은 구성 개요와 섹션별 레퍼런스를 참고하세요.
구조화 편집기 vs 소스 편집기
섹션 제목: “구조화 편집기 vs 소스 편집기”두 탭은 동일한 파일을 두 가지 방식으로 보여줍니다 — 변경 내용에 맞는 방식을 선택하세요.
Structured 편집기는 섹션별 폼입니다. 각 TOML 섹션은 타입이 지정된 입력 그룹으로 표시됩니다 — 불리언은 토글, 한도는 숫자 필드, 자율성 수준이나 MCP 전송 방식 같은 열거형은 드롭다운으로 표시됩니다. TOML을 직접 작성하지 않고 원하는 설정을 바꾸고 싶을 때, 또는 문법 오류를 피하고 싶을 때 사용하세요. MCP 서버 섹션은 서버별 Test 버튼이 있는 완전한 CRUD UI를 제공합니다(아래 참조).
Source 편집기는 TOML 구문 강조 및 실시간 미리보기 패널이 있는 원시 config.toml 텍스트입니다. 구조화 폼에서 노출되지 않는 섹션을 편집하거나, 일괄 편집을 하거나, 구성을 통째로 붙여넣을 때 사용하세요. 두 탭은 동일한 문서를 편집하므로, 한쪽의 변경이 다른 쪽에도 반영됩니다.
저장하면 전체 TOML이 게이트웨이로 전송됩니다.
PUT /api/configAuthorization: Bearer <token>Content-Type: application/toml
# ...the complete config.toml body...MCP 서버와 Test 버튼
섹션 제목: “MCP 서버와 Test 버튼”MCP 섹션은 외부 MCP 서버 연결([[mcp.servers]] 항목)을 관리합니다. 각 서버에는 다음 필드가 있습니다.
| 필드 | 적용 대상 | 의미 |
|---|---|---|
name | 전체 | 도구 이름 접두사 (<name>__<tool>) |
transport | 전체 | stdio, http, 또는 sse |
command | stdio | 실행할 실행 파일 |
args | stdio | 인수 목록 |
env | stdio | 환경 키/값 쌍 |
url | http / sse | 서버 URL |
headers | http / sse | HTTP 헤더 |
timeout_ms | http / sse | 호출당 타임아웃(밀리초) |
각 서버의 Test 버튼은 저장 전에 실제 연결을 확인합니다 — 설정된 서버에 대해 initialize + tools/list 핸드셰이크를 수행하고 결과를 반환합니다.
POST /api/mcp/servers/testAuthorization: Bearer <token>Content-Type: application/json
{ "name": "filesystem", "transport": "stdio", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"], "env": {}, "url": null, "headers": {}, "timeout_ms": 30000}성공하면 발견된 도구 수, 도구 이름, 왕복 지연 시간을 반환하고, 실패하면 오류 메시지를 반환합니다.
{ "ok": true, "tool_count": 5, "tools": ["read_file", "write_file", "..."], "latency_ms": 234 }{ "ok": false, "error": "connection refused", "latency_ms": 10 }