구성: 게이트웨이, 메모리, 보안, 플랫폼
게이트웨이, 터널, 프록시, 메모리, Kumiho, 오퍼레이터, MCP, 보안, 워크스페이스, 하드웨어, 노드 구성 섹션.
이 페이지는 ~/.revka/config.toml 중 게이트웨이 운영, 네트워크 노출, 메모리 저장, 보안 정책 적용, 플랫폼 서브시스템 연결 — 스케줄러, 하드웨어, 스킬, 스웜, 사이드카 통합 — 에 해당하는 섹션의 필드 레퍼런스입니다. 각 섹션에는 키의 타입, 기본값, 의미가 나열되어 있으므로, config.toml을 직접 편집할 때 각 값의 역할을 정확히 파악할 수 있습니다.
배포를 강화하거나, 메모리 백엔드를 선택하거나, 터널 또는 프록시 뒤에 게이트웨이를 노출하거나, 다중 클라이언트를 격리하거나, 하드웨어를 연결할 때 이 페이지를 참고하세요. 파일 위치 및 우선순위 규칙은 구성 개요에서 시작하세요. 프로바이더, 모델, 에이전트 루프 키는 구성: 프로바이더, 에이전트 & 라우팅을 참고하세요. 채널 및 도구는 구성: 채널, 도구 & 통합을 참고하세요.
[gateway] — HTTP 게이트웨이 서버
섹션 제목: “[gateway] — HTTP 게이트웨이 서버”[gateway] 섹션은 REST API, WebSocket, 웹 대시보드를 호스팅하는 내장 HTTP 서버를 구성합니다. 기본 보안 설정은 localhost에만 바인딩하며, 베어러 인증 요청 전에 기기 페어링을 요구합니다.
[gateway]host = "127.0.0.1"port = 42617require_pairing = trueallow_public_bind = falsepath_prefix = "" # set to "/revka" for a reverse-proxy sub-path| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
host | string | "127.0.0.1" | 바인드 주소. 환경 변수 REVKA_GATEWAY_HOST. |
port | u16 | 42617 | 리슨 포트. 환경 변수 REVKA_GATEWAY_PORT. |
require_pairing | bool | true | 베어러 인증 전 페어링 플로우 요구. 신뢰할 수 있는 로컬 전용 사용 시에만 false로 설정하세요. |
allow_public_bind | bool | false | 의도치 않은 공개 노출을 방지하는 가드; 루프백이 아닌 주소에 바인딩하려면 true여야 합니다. 환경 변수 REVKA_ALLOW_PUBLIC_BIND. |
path_prefix | string | "" | 리버스 프록시 서브 경로를 위한 URL 경로 프리픽스. /로 시작해야 하며 /로 끝나면 안 됩니다. |
web_root | string? | 미설정 | 대시보드 에셋의 파일시스템 경로 오버라이드. 환경 변수 REVKA_WEB_ROOT. |
pair_rate_limit_per_minute | u32 | 내장값 | 클라이언트당 분당 최대 /pair 요청 수. |
대시보드는 http://<host>:<port>/에서 제공됩니다. 에셋 조회 순서는 다음과 같습니다: REVKA_WEB_ROOT 환경 변수 → gateway.web_root 설정 → 내장 web/dist 번들 → 사용 불가. 게이트웨이만 단독으로 시작하려면 revka gateway를 사용하세요. 전체 런타임(게이트웨이 + 채널 + 하트비트 + 스케줄러)은 revka daemon으로 실행됩니다. revka gateway, daemon & service를 참고하세요.
[tunnel] — 공개 노출
섹션 제목: “[tunnel] — 공개 노출”[tunnel] 섹션은 게이트웨이를 노출하기 위해 외부 터널 바이너리를 래핑합니다. Revka가 바이너리를 실행하고 공개 URL을 감시하며, 데몬 종료 시 중지합니다 — 따라서 인그레스가 게이트웨이와 함께 시작되고 종료됩니다.
[tunnel]provider = "cloudflare" # none | cloudflare | tailscale | ngrok | openvpn | pinggy | custom
[tunnel.cloudflare]token = "eyJhIjoiMTI..." # from the Cloudflare Zero Trust dashboardtunnel.provider를 설정하여 백엔드를 선택하고, 해당 서브섹션을 채우세요. 프로바이더 매칭은 대소문자를 구분하지 않으므로, "CloudFlare"와 같은 레거시 PascalCase 값도 정상적으로 처리됩니다.
| 프로바이더 | 필수 서브섹션 키 | 선택적 키 |
|---|---|---|
cloudflare | token | — |
tailscale | — | funnel (bool, 기본값 false = tailnet 전용 serve), hostname (비어 있으면 자동 감지) |
ngrok | auth_token | domain (유료 플랜) |
openvpn | config_file | auth_file, advertise_address, connect_timeout_secs (기본값 30), extra_args |
pinggy | token (Pro 전용) | region |
custom | start_command ({host} / {port} 지원) | health_url, url_pattern (서브스트링 힌트) |
# Bring-your-own tunnel via an arbitrary command[tunnel]provider = "custom"
[tunnel.custom]start_command = "bore local {port} --to bore.pub"health_url = "https://bore.pub/health"url_pattern = "bore.pub"프로바이더별 전체 안내는 터널로 게이트웨이 노출하기를 참고하세요.
[proxy] — 아웃바운드 HTTP/HTTPS/SOCKS5 프록시
섹션 제목: “[proxy] — 아웃바운드 HTTP/HTTPS/SOCKS5 프록시”[proxy] 섹션은 Revka의 아웃바운드 트래픽을 프록시를 통해 라우팅합니다. scope 키는 프록시 적용 범위를 제어하며, 선택된 프로바이더, 채널, 도구만 라우팅하는 서비스별 모드도 포함됩니다.
[proxy]enabled = truehttp_proxy = "http://proxy.example.com:8080"https_proxy = "http://proxy.example.com:8080"scope = "services" # environment | revka | servicesservices = ["provider.anthropic", "channel.telegram"]| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | false | 마스터 스위치. 환경 변수 REVKA_PROXY_ENABLED. |
http_proxy | string? | 미설정 | HTTP 프록시 URL. 환경 변수 REVKA_HTTP_PROXY. |
https_proxy | string? | 미설정 | HTTPS 프록시 URL. 환경 변수 REVKA_HTTPS_PROXY. |
all_proxy | string? | 미설정 | SOCKS5 프록시 URL. 환경 변수 REVKA_ALL_PROXY. |
no_proxy | string? | 미설정 | 우회 목록. 환경 변수 REVKA_NO_PROXY. |
scope | string | "revka" | environment (환경의 HTTP_PROXY/HTTPS_PROXY 사용), revka (모든 Revka 아웃바운드), 또는 services (서비스별 라우팅). 환경 변수 REVKA_PROXY_SCOPE. |
services | array | [] | scope = "services" 시 라우팅할 서비스 키 목록. 환경 변수 REVKA_PROXY_SERVICES (쉼표 구분). |
scope = "services"일 때 라우팅할 서브시스템을 정확히 나열하세요. 서비스 키에는 provider.anthropic, provider.openai, provider.compatible, channel.telegram, channel.discord, tool.browser, tool.web_search, memory.embeddings, transcription.groq, tunnel.custom이 포함됩니다. 와일드카드 provider.*, channel.*, tool.*는 전체 패밀리와 매칭됩니다.
[memory] — 메모리 백엔드
섹션 제목: “[memory] — 메모리 백엔드”[memory] 섹션은 영구 저장소와 그 위생, 보존, 캐시, 감사 동작을 설정합니다. 백엔드는 로컬 SQLite부터 Kumiho 그래프 메모리 (클라우드 또는 자체 호스팅), Markdown, 또는 none까지 다양합니다.
[memory]backend = "kumiho" # kumiho | noneauto_save = truehygiene_enabled = truearchive_after_days = 7purge_after_days = 30| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
backend | string | "kumiho" | kumiho 또는 none. (레거시 값 sqlite, lucid, markdown, qdrant는 시작 시 거부됩니다.) |
auto_save | bool | true | 사용자 입력 저장 (어시스턴트 출력은 제외). |
hygiene_enabled | bool | true | 위생: 오래된 항목을 아카이브 후 삭제. |
archive_after_days | u32 | 7 | N일보다 오래된 항목을 아카이브 (SQLite 위생). |
purge_after_days | u32 | 30 | 아카이브된 지 N일이 지난 항목을 삭제. |
conversation_retention_days | u32 | 30 | 대화 히스토리 최대 보존 기간. |
min_relevance_score | f64 | 0.4 | 회상 시 최소 관련도 점수. |
response_cache_enabled | bool | false | 응답 캐시 활성화. |
response_cache_ttl_minutes | u32 | 60 | 캐시 항목 TTL. |
response_cache_max_entries | u32 | 5000 | 최대 캐시 항목 수. |
snapshot_enabled | bool | false | 워크스페이스 스냅샷 활성화. |
audit_enabled | bool | false | 메모리 감사 추적 활성화. |
audit_retention_days | u32 | 30 | 메모리 감사 보존 기간. |
default_namespace | string | "default" | 메모리 네임스페이스. |
backend = "kumiho"를 설정하면 그래프 저장소가 활성화됩니다. 아래의 [kumiho] 섹션에서 구성하세요. 응답 캐시, 하드웨어 RAG, 격리 동작에 대해서는 응답 캐시, 하드웨어 RAG & 격리를 참고하세요.
[kumiho] — 그래프 메모리 통합
섹션 제목: “[kumiho] — 그래프 메모리 통합”Kumiho는 Revka의 표준 영구 그래프 메모리입니다. 이 섹션은 MCP 사이드카 경로, 백엔드 모드(호스팅 클라우드 vs. 자체 호스팅 Community Edition), 프로젝트/네임스페이스 스코프를 제어합니다.
[kumiho]enabled = truemode = "cloud" # cloud | local_cemcp_path = "~/.revka/kumiho/run_kumiho_mcp.py"space_prefix = "Revka"api_url = "https://api.kumiho.cloud"memory_project = "CognitiveMemory"harness_project = "Revka"memory_retrieval_limit = 3| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | true | 테스트 또는 에어갭 배포 시 비활성화. |
mode | string | "cloud" | cloud (호스팅) 또는 local_ce (자체 호스팅 Community Edition). |
mcp_path | string | ~/.revka/kumiho/run_kumiho_mcp.py | 런처 경로 (틸드 확장됨). |
space_prefix | string | "Revka" | 메모리 스코핑 프리픽스. |
api_url | string | https://api.kumiho.cloud | Kumiho REST 기본 URL. CE의 경우 http://127.0.0.1:9190으로 설정. |
memory_project | string | "CognitiveMemory" | 사용자 메모리 및 세션을 위한 프로젝트. |
harness_project | string | "Revka" | 스킬 및 운영 데이터를 위한 프로젝트. |
memory_retrieval_limit | u32 | 3 | 회상/engage 호출당 반환되는 최대 메모리 수. |
Community Edition (로컬) 모드
섹션 제목: “Community Edition (로컬) 모드”토큰 없이 루프백 전용, 단일 사용자 백엔드로 Kumiho CE를 자체 호스팅합니다. CE 모드는 MCP 클라이언트를 위해 KUMIHO_LOCAL_SERVER_ENDPOINT를 자동 설정하고, revka doctor에서 헬스 엔드포인트를 점검합니다.
[kumiho]mode = "local_ce"api_url = "http://127.0.0.1:9190"| 변수 / 상수 | 기본값 | 의미 |
|---|---|---|
KUMIHO_UPSTASH_REDIS_URL / UPSTASH_REDIS_URL | redis://127.0.0.1:6379 | CE 모드의 Redis URL. |
KUMIHO_LOCAL_CE_API_URL (상수) | http://127.0.0.1:9190 | CE API 엔드포인트. |
KUMIHO_LOCAL_CE_REDIS_URL (상수) | redis://127.0.0.1:6379 | CE Redis 엔드포인트. |
[operator] — 멀티 에이전트 오케스트레이션 MCP
섹션 제목: “[operator] — 멀티 에이전트 오케스트레이션 MCP”오퍼레이터는 선언적 YAML 워크플로를 구동하는 Python MCP 사이드카입니다. 내부 에이전트를 제외한 모든 에이전트에 주입되므로 워크플로 도구는 항상 사용 가능합니다.
[operator]enabled = truemcp_path = "~/.revka/operator_mcp/run_operator_mcp.py"max_tool_iterations = 80tool_timeout_secs = 600| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | true | 오퍼레이터 사이드카를 실행하지 않는 배포에서는 비활성화. |
mcp_path | string | ~/.revka/operator_mcp/run_operator_mcp.py | 런처 경로. |
max_tool_iterations | u32 | 80 | 오퍼레이터 세션에서 agent.max_tool_iterations를 재정의. |
tool_timeout_secs | u64 | 600 | 도구별 타임아웃 (600으로 상한 제한); 일부 도구는 느릴 수 있습니다 (예: 이미지 생성). |
워크플로 체크포인트는 ~/.revka/workflow_checkpoints/에 저장되며, JSONL 실행 로그 감사는 ~/.revka/operator_mcp/runlogs/에 있습니다. 워크플로 언어에 대해서는 워크플로 & SOP 개요를 참고하세요.
[mcp] — 외부 MCP 서버 연결
섹션 제목: “[mcp] — 외부 MCP 서버 연결”[mcp] 섹션은 Revka를 추가 도구를 제공하는 외부 Model Context Protocol 서버에 연결합니다. 각 서버는 [[mcp.servers]] 테이블입니다.
[mcp]enabled = truedeferred_loading = true
[[mcp.servers]]name = "filesystem"transport = "stdio"command = "npx"args = ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]
[[mcp.servers]]name = "my-api"transport = "http"url = "https://my-api.example.com/mcp"headers = { "Authorization" = "Bearer token" }| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | false | 마스터 스위치. |
deferred_loading | bool | true | tool_search를 통해 즉시 로드 대신 요청 시 도구 스키마를 로드. |
각 [[mcp.servers]] 항목:
| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
name | string | 필수 | 도구 이름 프리픽스 (<name>__<tool>). |
transport | string | "stdio" | stdio, http, 또는 sse. |
command | string | "" | stdio용 실행 파일. |
args | array | [] | stdio용 인수. |
env | map | {} | stdio용 환경 변수. |
url | string? | 미설정 | http/sse용 URL. |
headers | map | {} | http/sse용 HTTP 헤더. |
tool_timeout_secs | u64? | 미설정 | 호출별 타임아웃 (600으로 하드 상한). |
보안 & 자율성
섹션 제목: “보안 & 자율성”Revka의 보안 모델은 심층 방어를 기반으로 합니다: 도구 실행 전에 평가되는 자율성 수준 및 명령/경로 정책, 민감한 작업에 대한 OTP 게이팅, 영구적 긴급 정지, 암호화된 시크릿, 도메인별 신뢰 점수, 커머스 게이팅. 개념적 모델은 보안 모델에서, 운영 안내는 보안 하위에 있습니다.
[autonomy] — 정책 & 접근 제어
섹션 제목: “[autonomy] — 정책 & 접근 제어”[autonomy] 섹션은 정책 엔진 진입점입니다: 자율성 수준, 워크스페이스 경계, 셸 명령 허용 목록, 승인 및 예산 게이트를 설정합니다.
[autonomy]level = "supervised" # read_only | supervised | fullworkspace_only = trueallowed_commands = ["git", "python", "node"]forbidden_paths = ["/etc", "/root", "/proc", "/sys", "~/.ssh", "~/.gnupg", "~/.aws"]allowed_roots = ["~/Desktop/projects", "/opt/shared-repo"]| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
level | string | "supervised" | read_only (관찰만), supervised (허용 목록 내에서 행동, 중간/높은 위험에 승인), 또는 full (승인 게이트 없음, 허용 목록은 적용). |
workspace_only | bool | true | allowed_roots로 허용되지 않는 한 워크스페이스 외부의 절대 경로 거부. |
allowed_commands | array | [] | 셸 허용 목록: 단순 이름, 전체 경로, 또는 "*" (위험 게이트는 여전히 적용). |
forbidden_paths | array | 내장값 | 기본으로 거부되는 시스템 경로 및 민감한 닷디렉터리. |
allowed_roots | array | ["~/.revka/workflows", "~/.revka/artifacts", "~/.revka/workspace"] | 워크스페이스 외부에서 허용되는 추가 루트 (틸드 + 워크스페이스 상대 경로 지원). |
max_actions_per_hour | u32 | 20 | 슬라이딩 윈도우 액션 예산. |
max_cost_per_day_cents | u32 | 500 | 정책별 지출 가드레일 (US$5.00). |
require_approval_for_medium_risk | bool | true | 중간 위험 명령에 대한 승인 게이트. |
block_high_risk_commands | bool | true | 높은 위험 명령에 대한 하드 블록. |
auto_approve | array | [] | 항상 자동 승인되는 도구 작업. |
always_ask | array | [] | 항상 승인을 요구하는 도구 작업. |
[security.otp] — 일회용 비밀번호 게이팅
섹션 제목: “[security.otp] — 일회용 비밀번호 게이팅”OTP 게이팅은 TOTP 검증으로 민감한 도구 호출, 액션, 도메인을 보호합니다. 시크릿이 없는 상태에서 처음 사용하면, Revka가 시크릿을 생성하고 otpauth:// 등록 URI를 한 번 출력합니다.
[security.otp]enabled = truemethod = "totp" # totp (pairing / cli-prompt are reserved)token_ttl_secs = 30cache_valid_secs = 300gated_actions = ["shell", "browser_open"]gated_domains = ["*.chase.com", "accounts.google.com"]gated_domain_categories = ["banking"]challenge_max_attempts = 3| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | false | 마스터 스위치. |
method | string | "totp" | 현재 TOTP만 구현되어 있습니다. |
token_ttl_secs | u64 | 30 | TOTP 타임스텝 윈도우 (검증 시 드리프트를 위해 ±1 스텝 허용). |
cache_valid_secs | u64 | 300 | 최근 검증된 코드가 수락되는 윈도우. |
gated_actions | array | ["shell","file_write","browser_open","browser"] | OTP가 필요한 도구 이름. |
gated_domains | array | [] | OTP가 필요한 도메인 패턴 (* 와일드카드 지원). |
gated_domain_categories | array | [] | 프리셋 카테고리: banking, medical, government, identity_providers. |
challenge_max_attempts | u32 | 3 | 챌린지당 시도 횟수. |
시크릿은 ~/.revka/otp-secret에 암호화되어 저장됩니다. 등록 URI는 한 번만 표시됩니다 — 분실한 경우 해당 파일을 삭제하면 재생성됩니다. 유효하지 않은 도메인 글로브 또는 알 수 없는 카테고리는 시작 시 즉시 실패합니다. OTP 게이팅 & 긴급 정지를 참고하세요.
[security.estop] — 긴급 정지
섹션 제목: “[security.estop] — 긴급 정지”긴급 정지는 재시작 후에도 유지되는, 실패 시 차단 방식의 킬 스위치입니다. CLI 또는 도구 호출로 활성화하며, 재개 시 구성된 경우 OTP가 필요합니다.
[security.estop]enabled = truestate_file = "~/.revka/estop-state.json"require_otp_to_resume = truerevka estop # engage emergency stoprevka estop resume # clear it (OTP required if configured)| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | false | 마스터 스위치. |
state_file | string | ~/.revka/estop-state.json | 영구 상태 경로 (원자적 쓰기, Unix에서 0600). |
require_otp_to_resume | bool | true | 재개 전 유효한 OTP 요구. |
상태는 네 가지 누적 수준으로 구성됩니다 — 전체 종료, 네트워크 종료, 도메인별 블록(글로브), 도구별 동결. 손상되거나 읽을 수 없는 상태 파일은 기본적으로 kill_all = true(실패 시 차단)가 되어, 게이트웨이를 통한 읽기 작업까지 차단합니다. 에이전트가 제어 불능 상태일 때 가장 먼저 사용해야 할 수단입니다. revka memory & estop을 참고하세요.
[secrets] — 저장 시 암호화
섹션 제목: “[secrets] — 저장 시 암호화”[secrets] 섹션은 민감한 구성 값(API 키, 봇 토큰)을 ChaCha20-Poly1305 AEAD로 저장 시 암호화합니다. 온보딩 중 기본적으로 활성화되며, 에이전트가 새 값을 투명하게 암호화합니다.
[secrets]encrypt = true # default암호화된 값은 config.toml에 enc2:<hex> 형태로 나타납니다. 32바이트 키는 ~/.revka/.secret_key에 저장됩니다 (Unix에서 모드 0600; Windows에서 제한된 ACL). 없으면 첫 번째 암호화 시 생성됩니다. 레거시 XOR enc: 형식도 읽을 수 있으며, 읽을 때 enc2:로 자동 업그레이드됩니다.
[trust] — 도메인 신뢰 점수
섹션 제목: “[trust] — 도메인 신뢰 점수”신뢰 점수는 도메인별 에이전트 행동을 시간에 따라 추적합니다. 도메인의 점수가 회귀 임계값 아래로 떨어지면, 해당 도메인에 대해 자율성이 한 단계 자동으로 낮아집니다 (Full → Supervised → ReadOnly).
[trust]initial_score = 0.8decay_half_life_days = 30regression_threshold = 0.5correction_penalty = 0.05success_boost = 0.01| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
initial_score | f64 | 0.8 | 시작 점수 (범위 0.0–1.0). |
decay_half_life_days | f64 | 30.0 | initial_score로 회귀하는 반감기. |
regression_threshold | f64 | 0.5 | 이 값 이하이면 자율성이 한 단계 낮아집니다. |
correction_penalty | f64 | 0.05 | 수정 이벤트(사용자 오버라이드, 품질 실패, SOP 이탈)당 차감. |
success_boost | f64 | 0.01 | 성공당 추가. |
프롬프트 인젝션, 유출 감지 & 신뢰를 참고하세요.
[verifiable_intent] — 커머스 게이팅
섹션 제목: “[verifiable_intent] — 커머스 게이팅”Verifiable Intent는 커머스 관련 도구 호출을 SD-JWT 자격 증명 체인으로 게이팅합니다. 구성 섹션은 단순 토글이며, 명령 및 제약 세부 사항은 도구 레이어에서 처리됩니다.
[verifiable_intent]enabled = falsestrictness = "strict" # strict | permissive| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | false | 마스터 스위치. |
strictness | string | "strict" | 체인 검증 중 오류 보고: strict 또는 permissive. |
자격 증명 모델 — Immediate vs. Autonomous 명령 및 제약 유형 — 은 Verifiable Intent (커머스 게이팅)을 참고하세요.
[workspace] — 멀티 클라이언트 격리
섹션 제목: “[workspace] — 멀티 클라이언트 격리”[workspace] 섹션은 멀티 클라이언트 오퍼레이터 배포를 위한 격리된 워크스페이스 프로필을 활성화합니다. 각 프로필은 별도의 메모리, 시크릿, 감사, 도구 제한을 가집니다.
[workspace]enabled = trueactive_workspace = "client_a"workspaces_dir = "~/.revka/workspaces"isolate_memory = trueisolate_secrets = trueisolate_audit = truecross_workspace_search = false| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | false | 마스터 스위치. |
active_workspace | string? | 미설정 | 활성 프로필 이름. |
workspaces_dir | string | ~/.revka/workspaces | 프로필 서브디렉터리의 기본 디렉터리. |
isolate_memory | bool | true | 워크스페이스별 별도 메모리 DB. |
isolate_secrets | bool | true | 워크스페이스별 별도 시크릿 네임스페이스. |
isolate_audit | bool | true | 워크스페이스별 별도 감사 로그. |
cross_workspace_search | bool | false | 보안 기본값: 워크스페이스 간 메모리 검색 불가. |
각 프로필은 ~/.revka/workspaces/<name>/profile.toml에 있습니다:
name = "client_a"allowed_domains = ["example.com"]credential_profile = "client-a-creds"memory_namespace = "client_a_mem"audit_namespace = "client_a_audit"tool_restrictions = ["shell"]프로필 적용은 [autonomy]와 누적됩니다 — 둘 다 통과해야 합니다. 프로필의 tool_restrictions는 해당 도구를 거부하고, allowed_domains 외부 도메인은 거부되며, cross_workspace_search = true가 아닌 한 다른 워크스페이스에 속한 경로도 거부됩니다. 프로필 이름은 영숫자 및 -/_만 허용되며, .. 트래버설은 거부됩니다.
하드웨어 & 노드
섹션 제목: “하드웨어 & 노드”Revka는 시리얼, 네이티브, 디버그 프로브 전송 방식을 통해 물리적 세계에 접근하고, 런타임에 동적 노드 연결을 허용할 수 있습니다. 하드웨어 기능은 hardware Cargo 피처가 컴파일에 포함되어야 합니다 — Cargo 피처 플래그 & ADR을 참고하세요.
[hardware] — 마이크로컨트롤러 통합
섹션 제목: “[hardware] — 마이크로컨트롤러 통합”[hardware]enabled = truetransport = "serial" # none | native | serial | probeserial_port = "/dev/ttyACM0"baud_rate = 115200workspace_datasheets = true| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | false | 마스터 스위치. |
transport | string | "none" | none, native, serial, 또는 probe. |
serial_port | string? | 미설정 | serial 전송용 시리얼 장치 경로. |
baud_rate | u32 | 115200 | 시리얼 보드레이트. |
probe_target | string? | 미설정 | 디버그 프로브 대상 (예: "STM32F401RE"); transport = "probe" 시 필수. |
workspace_datasheets | bool | false | RAG 기반 핀 조회를 위한 워크스페이스 PDF 데이터시트 인덱싱. |
[peripherals] — 주변 장치 보드
섹션 제목: “[peripherals] — 주변 장치 보드”상위 레벨 주변 장치 보드(MCU, Raspberry Pi GPIO, ESP32)는 활성화 시 에이전트 도구가 됩니다. 각 보드는 [[peripherals.boards]] 테이블입니다.
[peripherals]enabled = truedatasheet_dir = "docs/datasheets"
[[peripherals.boards]]board = "nucleo-f401re"transport = "serial"path = "/dev/ttyACM0"baud = 115200지원되는 보드 및 GPIO 도구에 대해서는 지원 보드 레퍼런스 및 하드웨어 퀵스타트를 참고하세요.
[nodes] 및 [node_transport] — 동적 노드 검색
섹션 제목: “[nodes] 및 [node_transport] — 동적 노드 검색”[nodes]는 외부 프로세스나 기기가 /ws/nodes를 통해 WebSocket으로 연결하고 런타임에 기능을 알릴 수 있게 합니다. [node_transport]는 노드 간 보안 암호화 채널을 구성합니다.
[nodes]enabled = truemax_nodes = 16auth_token = "secret-bearer-token"| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | false | 동적 노드 연결 허용. |
max_nodes | u32 | 16 | 최대 동시 연결 노드 수. |
auth_token | string? | 미설정 | 노드가 연결 시 제시해야 하는 베어러 토큰. |
특화 스위트: CanonWorks, Manus & 노드를 참고하세요.
플랫폼 서브시스템
섹션 제목: “플랫폼 서브시스템”이 섹션들은 에이전트와 함께 실행되는 플랫폼 서비스를 연결합니다 — 저장소, 비용 제어, 관찰 가능성, 스케줄러 및 크론, 하트비트, 라이프사이클 훅, 스킬, 스웜, 위임 서브 에이전트, 스킬 마켓플레이스, SOP 엔진.
[storage] — 영구 저장소 프로바이더
섹션 제목: “[storage] — 영구 저장소 프로바이더”[storage]provider = "sqlite" # env: REVKA_STORAGE_PROVIDER도구 및 게이트웨이에서 사용하는 구조화 저장소의 백엔드. 환경 변수 REVKA_STORAGE_PROVIDER로 오버라이드 가능.
[cost] — 비용 추적 & 예산
섹션 제목: “[cost] — 비용 추적 & 예산”[cost] 섹션은 예상 API 지출을 추적하고 일별/월별 예산 한도를 적용합니다.
[cost]enabled = truedaily_limit_usd = 10.00monthly_limit_usd = 100.00warn_at_percent = 80allow_override = false| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | — | 마스터 스위치. |
daily_limit_usd | f64 | — | 하드 일별 한도. |
monthly_limit_usd | f64 | — | 하드 월별 한도. |
warn_at_percent | u8 | — | 한도의 이 비율에서 경고 발생 (요청은 계속됨). |
allow_override | bool | false | --override로 하드 한도 초과를 허용. |
하드 한도에 도달하면 allow_override = true이고 --override가 전달되지 않는 한 요청이 거부됩니다. 비용 추적 & 예산을 참고하세요.
[observability] — 메트릭 & 추적
섹션 제목: “[observability] — 메트릭 & 추적”[observability]backend = "otel"otel_endpoint = "http://localhost:4318"otel_service_name = "revka"runtime_trace_mode = "rolling"runtime_trace_path = "state/runtime-trace.jsonl"runtime_trace_max_entries = 200| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
backend | string | "none" | none, noop, log, prometheus, 또는 otel/opentelemetry/otlp. |
otel_endpoint | string | http://localhost:4318 | OTLP HTTP 엔드포인트. |
otel_service_name | string | "revka" | OTLP에 보고되는 서비스 이름. |
runtime_trace_mode | string | "none" | none, rolling, 또는 full. |
runtime_trace_path | string | state/runtime-trace.jsonl | 추적 파일 (절대 경로가 아닌 경우 워크스페이스 상대). |
runtime_trace_max_entries | u32 | 200 | rolling 모드에서 유지되는 이벤트 수. |
OTel 지원은 observability-otel 피처가 컴파일에 포함되어야 합니다. 런타임 추적에는 모델 출력 텍스트가 포함될 수 있으므로, 공유 호스트에서는 기본적으로 비활성화하고 revka doctor traces로 조회하세요. 관찰 가능성 & 추적을 참고하세요.
[scheduler], [cron] & [heartbeat]
섹션 제목: “[scheduler], [cron] & [heartbeat]”스케줄러는 크론 작업을 실행합니다. [cron]은 주기적 에이전트 작업을 선언합니다 (일반적으로 revka onboard의 DreamState 제안 또는 게이트웨이 API를 통해 추가됩니다). [heartbeat]는 일정 간격으로 LLM 기반 체크인을 실행합니다.
[scheduler]enabled = true
[heartbeat]enabled = trueinterval_minutes = 60adaptive = truetarget = "telegram"to = "123456789"하트비트는 적응형 간격, 선택적 2단계 LLM 결정 단계, 데드맨 스위치, 구성된 채널 전송을 지원합니다. 전체 하트비트 키 목록은 하트비트 & 라이프사이클 훅을 참고하세요. 크론 작업과 스케줄러에 대해서는 선언적 작업 & 스케줄러 구성을 참고하세요.
[hooks] — 라이프사이클 & 감사 훅
섹션 제목: “[hooks] — 라이프사이클 & 감사 훅”[hooks] 섹션은 에이전트 및 메시지 라이프사이클 이벤트를 위한 내장 훅을 토글합니다. 주목할 만한 훅 중 하나는 SIEM 수집을 위해 외부 엔드포인트에 감사 페이로드를 게시합니다:
[hooks.webhook_audit]enabled = trueurl = "https://siem.example.com/revka/audit"tool_patterns = ["shell", "file_write"]max_args_bytes = 4096| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | false | 웹훅 감사 훅의 마스터 스위치. |
url | string | — | 대상 HTTP POST 엔드포인트. |
tool_patterns | array | — | 매칭할 글로브 스타일 도구 이름 패턴. |
max_args_bytes | u64 | 4096 | 페이로드에서 도구 인수 잘라내기. |
로컬 감사 로그와 달리, 웹훅 훅은 아웃바운드 실시간 푸시입니다. 하트비트 & 라이프사이클 훅을 참고하세요.
[skills] — 스킬 로딩 & 자기 개선
섹션 제목: “[skills] — 스킬 로딩 & 자기 개선”[skills] 섹션은 워크스페이스 스킬 로딩, 커뮤니티 open-skills 레포지토리, 자율적 스킬 생성/개선을 제어합니다.
[skills]open_skills_enabled = false # opt-inopen_skills_dir = "~/open-skills"prompt_injection_mode = "compact" # full | compactallow_scripts = false
[skills.skill_creation]enabled = falsemax_skills = 500similarity_threshold = 0.85
[skills.skill_improvement]enabled = truecooldown_secs = 3600| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
open_skills_enabled | bool | false | 커뮤니티 레포를 로드합니다. 환경 변수 REVKA_OPEN_SKILLS_ENABLED. |
open_skills_dir | string | ~/open-skills | 레포 경로. 환경 변수 REVKA_OPEN_SKILLS_DIR. |
prompt_injection_mode | string | "full" | full (인라인) 또는 compact (요청 시). 환경 변수 REVKA_SKILLS_PROMPT_MODE. |
allow_scripts | bool | false | 스킬에서 .sh/.ps1/셔뱅 파일 허용. |
skill_creation.enabled | bool | false | 성공적인 다단계 작업에서 스킬 자동 생성. |
skill_creation.max_skills | u32 | 500 | LRU 퇴출 한도. |
skill_creation.similarity_threshold | f64 | 0.85 | 중복 제거 임계값. |
skill_improvement.enabled | bool | true | 성공적인 사용 후 스킬 자동 개선. |
skill_improvement.cooldown_secs | u64 | 3600 | 스킬당 개선 최소 간격. |
저컨텍스트 모델에는 prompt_injection_mode = "compact"를 사용하세요. 정적 보안 감사는 심볼릭 링크, 스크립트류 파일, 또는 안전하지 않은 링크 트래버설이 있는 스킬을 거부합니다. 스킬 시스템을 참고하세요.
[agents.<name>], [swarms.<name>] & [delegate]
섹션 제목: “[agents.<name>], [swarms.<name>] & [delegate]”이름이 지정된 서브 에이전트는 위임된 작업을 처리하고, 스웜은 그룹을 조율하며, [delegate]는 delegate 도구에 대한 전역 기본 타임아웃을 설정합니다.
[agents.researcher]provider = "openrouter"model = "anthropic/claude-sonnet-4-6"agentic = trueallowed_tools = ["web_search", "http_request", "file_read"]max_iterations = 8
[swarms.analysis]agents = ["researcher", "coder"]strategy = "sequential" # sequential | parallel | routertimeout_secs = 300
[delegate]timeout_secs = 120 # non-agentic callsagentic_timeout_secs = 300 # agentic loopsagentic = true는 allowed_tools에 최소 하나의 항목이 필요하며, delegate 도구 자체는 재진입 루프를 방지하기 위해 서브 에이전트 허용 목록에서 제외됩니다. revka doctor는 모든 서브 에이전트의 프로바이더를 검증합니다. 에이전트별 전체 키 목록은 구성: 프로바이더, 에이전트 & 라우팅에 있으며, 개념적 모델은 에이전트, 팀 & 스웜을 참고하세요.
[clawhub] — 스킬 마켓플레이스
섹션 제목: “[clawhub] — 스킬 마켓플레이스”ClawHub는 스킬을 탐색, 검색, 설치할 수 있는 스킬 마켓플레이스입니다. 익명 탐색 및 설치는 토큰 없이 가능하며, 게시할 때만 토큰이 필요합니다.
[clawhub]enabled = trueapi_token = "clh_..." # only for publishingapi_url = "https://clawhub.ai"| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | — | 마스터 스위치. |
api_token | string? | 미설정 | 게시 토큰 (clh_...). |
api_url | string | https://clawhub.ai | 마켓플레이스 기본 URL. |
대시보드 Skills 보기에서 탐색하거나, REST 엔드포인트 GET /api/clawhub/search, /trending, GET /api/clawhub/skills/{slug}, POST /api/clawhub/install/{slug}를 통해 이용할 수 있습니다. 비용, 감사, ClawHub & 자격 증명 API를 참고하세요.
[sop] — 표준 운영 절차
섹션 제목: “[sop] — 표준 운영 절차”[sop] 섹션은 구조화된 다단계 절차 실행을 위한 SOP 엔진을 활성화합니다. SOP 구문, 트리거, 실행 모델에 대해서는 SOP 레퍼런스를 참고하세요.
[sop]enabled = true