콘텐츠로 이동

구성: 게이트웨이, 메모리, 보안, 플랫폼

게이트웨이, 터널, 프록시, 메모리, Kumiho, 오퍼레이터, MCP, 보안, 워크스페이스, 하드웨어, 노드 구성 섹션.

이 페이지는 ~/.revka/config.toml게이트웨이 운영, 네트워크 노출, 메모리 저장, 보안 정책 적용, 플랫폼 서브시스템 연결 — 스케줄러, 하드웨어, 스킬, 스웜, 사이드카 통합 — 에 해당하는 섹션의 필드 레퍼런스입니다. 각 섹션에는 키의 타입, 기본값, 의미가 나열되어 있으므로, config.toml을 직접 편집할 때 각 값의 역할을 정확히 파악할 수 있습니다.

배포를 강화하거나, 메모리 백엔드를 선택하거나, 터널 또는 프록시 뒤에 게이트웨이를 노출하거나, 다중 클라이언트를 격리하거나, 하드웨어를 연결할 때 이 페이지를 참고하세요. 파일 위치 및 우선순위 규칙은 구성 개요에서 시작하세요. 프로바이더, 모델, 에이전트 루프 키는 구성: 프로바이더, 에이전트 & 라우팅을 참고하세요. 채널 및 도구는 구성: 채널, 도구 & 통합을 참고하세요.

[gateway] 섹션은 REST API, WebSocket, 웹 대시보드를 호스팅하는 내장 HTTP 서버를 구성합니다. 기본 보안 설정은 localhost에만 바인딩하며, 베어러 인증 요청 전에 기기 페어링을 요구합니다.

[gateway]
host = "127.0.0.1"
port = 42617
require_pairing = true
allow_public_bind = false
path_prefix = "" # set to "/revka" for a reverse-proxy sub-path
타입기본값의미
hoststring"127.0.0.1"바인드 주소. 환경 변수 REVKA_GATEWAY_HOST.
portu1642617리슨 포트. 환경 변수 REVKA_GATEWAY_PORT.
require_pairingbooltrue베어러 인증 전 페어링 플로우 요구. 신뢰할 수 있는 로컬 전용 사용 시에만 false로 설정하세요.
allow_public_bindboolfalse의도치 않은 공개 노출을 방지하는 가드; 루프백이 아닌 주소에 바인딩하려면 true여야 합니다. 환경 변수 REVKA_ALLOW_PUBLIC_BIND.
path_prefixstring""리버스 프록시 서브 경로를 위한 URL 경로 프리픽스. /로 시작해야 하며 /로 끝나면 안 됩니다.
web_rootstring?미설정대시보드 에셋의 파일시스템 경로 오버라이드. 환경 변수 REVKA_WEB_ROOT.
pair_rate_limit_per_minuteu32내장값클라이언트당 분당 최대 /pair 요청 수.

대시보드는 http://<host>:<port>/에서 제공됩니다. 에셋 조회 순서는 다음과 같습니다: REVKA_WEB_ROOT 환경 변수 → gateway.web_root 설정 → 내장 web/dist 번들 → 사용 불가. 게이트웨이만 단독으로 시작하려면 revka gateway를 사용하세요. 전체 런타임(게이트웨이 + 채널 + 하트비트 + 스케줄러)은 revka daemon으로 실행됩니다. revka gateway, daemon & service를 참고하세요.

[tunnel] 섹션은 게이트웨이를 노출하기 위해 외부 터널 바이너리를 래핑합니다. Revka가 바이너리를 실행하고 공개 URL을 감시하며, 데몬 종료 시 중지합니다 — 따라서 인그레스가 게이트웨이와 함께 시작되고 종료됩니다.

[tunnel]
provider = "cloudflare" # none | cloudflare | tailscale | ngrok | openvpn | pinggy | custom
[tunnel.cloudflare]
token = "eyJhIjoiMTI..." # from the Cloudflare Zero Trust dashboard

tunnel.provider를 설정하여 백엔드를 선택하고, 해당 서브섹션을 채우세요. 프로바이더 매칭은 대소문자를 구분하지 않으므로, "CloudFlare"와 같은 레거시 PascalCase 값도 정상적으로 처리됩니다.

프로바이더필수 서브섹션 키선택적 키
cloudflaretoken
tailscalefunnel (bool, 기본값 false = tailnet 전용 serve), hostname (비어 있으면 자동 감지)
ngrokauth_tokendomain (유료 플랜)
openvpnconfig_fileauth_file, advertise_address, connect_timeout_secs (기본값 30), extra_args
pinggytoken (Pro 전용)region
customstart_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 = true
http_proxy = "http://proxy.example.com:8080"
https_proxy = "http://proxy.example.com:8080"
scope = "services" # environment | revka | services
services = ["provider.anthropic", "channel.telegram"]
타입기본값의미
enabledboolfalse마스터 스위치. 환경 변수 REVKA_PROXY_ENABLED.
http_proxystring?미설정HTTP 프록시 URL. 환경 변수 REVKA_HTTP_PROXY.
https_proxystring?미설정HTTPS 프록시 URL. 환경 변수 REVKA_HTTPS_PROXY.
all_proxystring?미설정SOCKS5 프록시 URL. 환경 변수 REVKA_ALL_PROXY.
no_proxystring?미설정우회 목록. 환경 변수 REVKA_NO_PROXY.
scopestring"revka"environment (환경의 HTTP_PROXY/HTTPS_PROXY 사용), revka (모든 Revka 아웃바운드), 또는 services (서비스별 라우팅). 환경 변수 REVKA_PROXY_SCOPE.
servicesarray[]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] 섹션은 영구 저장소와 그 위생, 보존, 캐시, 감사 동작을 설정합니다. 백엔드는 로컬 SQLite부터 Kumiho 그래프 메모리 (클라우드 또는 자체 호스팅), Markdown, 또는 none까지 다양합니다.

[memory]
backend = "kumiho" # kumiho | none
auto_save = true
hygiene_enabled = true
archive_after_days = 7
purge_after_days = 30
타입기본값의미
backendstring"kumiho"kumiho 또는 none. (레거시 값 sqlite, lucid, markdown, qdrant는 시작 시 거부됩니다.)
auto_savebooltrue사용자 입력 저장 (어시스턴트 출력은 제외).
hygiene_enabledbooltrue위생: 오래된 항목을 아카이브 후 삭제.
archive_after_daysu327N일보다 오래된 항목을 아카이브 (SQLite 위생).
purge_after_daysu3230아카이브된 지 N일이 지난 항목을 삭제.
conversation_retention_daysu3230대화 히스토리 최대 보존 기간.
min_relevance_scoref640.4회상 시 최소 관련도 점수.
response_cache_enabledboolfalse응답 캐시 활성화.
response_cache_ttl_minutesu3260캐시 항목 TTL.
response_cache_max_entriesu325000최대 캐시 항목 수.
snapshot_enabledboolfalse워크스페이스 스냅샷 활성화.
audit_enabledboolfalse메모리 감사 추적 활성화.
audit_retention_daysu3230메모리 감사 보존 기간.
default_namespacestring"default"메모리 네임스페이스.

backend = "kumiho"를 설정하면 그래프 저장소가 활성화됩니다. 아래의 [kumiho] 섹션에서 구성하세요. 응답 캐시, 하드웨어 RAG, 격리 동작에 대해서는 응답 캐시, 하드웨어 RAG & 격리를 참고하세요.

Kumiho는 Revka의 표준 영구 그래프 메모리입니다. 이 섹션은 MCP 사이드카 경로, 백엔드 모드(호스팅 클라우드 vs. 자체 호스팅 Community Edition), 프로젝트/네임스페이스 스코프를 제어합니다.

[kumiho]
enabled = true
mode = "cloud" # cloud | local_ce
mcp_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
타입기본값의미
enabledbooltrue테스트 또는 에어갭 배포 시 비활성화.
modestring"cloud"cloud (호스팅) 또는 local_ce (자체 호스팅 Community Edition).
mcp_pathstring~/.revka/kumiho/run_kumiho_mcp.py런처 경로 (틸드 확장됨).
space_prefixstring"Revka"메모리 스코핑 프리픽스.
api_urlstringhttps://api.kumiho.cloudKumiho REST 기본 URL. CE의 경우 http://127.0.0.1:9190으로 설정.
memory_projectstring"CognitiveMemory"사용자 메모리 및 세션을 위한 프로젝트.
harness_projectstring"Revka"스킬 및 운영 데이터를 위한 프로젝트.
memory_retrieval_limitu323회상/engage 호출당 반환되는 최대 메모리 수.

토큰 없이 루프백 전용, 단일 사용자 백엔드로 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_URLredis://127.0.0.1:6379CE 모드의 Redis URL.
KUMIHO_LOCAL_CE_API_URL (상수)http://127.0.0.1:9190CE API 엔드포인트.
KUMIHO_LOCAL_CE_REDIS_URL (상수)redis://127.0.0.1:6379CE Redis 엔드포인트.

[operator] — 멀티 에이전트 오케스트레이션 MCP

섹션 제목: “[operator] — 멀티 에이전트 오케스트레이션 MCP”

오퍼레이터는 선언적 YAML 워크플로를 구동하는 Python MCP 사이드카입니다. 내부 에이전트를 제외한 모든 에이전트에 주입되므로 워크플로 도구는 항상 사용 가능합니다.

[operator]
enabled = true
mcp_path = "~/.revka/operator_mcp/run_operator_mcp.py"
max_tool_iterations = 80
tool_timeout_secs = 600
타입기본값의미
enabledbooltrue오퍼레이터 사이드카를 실행하지 않는 배포에서는 비활성화.
mcp_pathstring~/.revka/operator_mcp/run_operator_mcp.py런처 경로.
max_tool_iterationsu3280오퍼레이터 세션에서 agent.max_tool_iterations를 재정의.
tool_timeout_secsu64600도구별 타임아웃 (600으로 상한 제한); 일부 도구는 느릴 수 있습니다 (예: 이미지 생성).

워크플로 체크포인트는 ~/.revka/workflow_checkpoints/에 저장되며, JSONL 실행 로그 감사는 ~/.revka/operator_mcp/runlogs/에 있습니다. 워크플로 언어에 대해서는 워크플로 & SOP 개요를 참고하세요.

[mcp] 섹션은 Revka를 추가 도구를 제공하는 외부 Model Context Protocol 서버에 연결합니다. 각 서버는 [[mcp.servers]] 테이블입니다.

[mcp]
enabled = true
deferred_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" }
타입기본값의미
enabledboolfalse마스터 스위치.
deferred_loadingbooltruetool_search를 통해 즉시 로드 대신 요청 시 도구 스키마를 로드.

[[mcp.servers]] 항목:

타입기본값의미
namestring필수도구 이름 프리픽스 (<name>__<tool>).
transportstring"stdio"stdio, http, 또는 sse.
commandstring""stdio용 실행 파일.
argsarray[]stdio용 인수.
envmap{}stdio용 환경 변수.
urlstring?미설정http/sse용 URL.
headersmap{}http/sse용 HTTP 헤더.
tool_timeout_secsu64?미설정호출별 타임아웃 (600으로 하드 상한).

Revka의 보안 모델은 심층 방어를 기반으로 합니다: 도구 실행 전에 평가되는 자율성 수준 및 명령/경로 정책, 민감한 작업에 대한 OTP 게이팅, 영구적 긴급 정지, 암호화된 시크릿, 도메인별 신뢰 점수, 커머스 게이팅. 개념적 모델은 보안 모델에서, 운영 안내는 보안 하위에 있습니다.

[autonomy] 섹션은 정책 엔진 진입점입니다: 자율성 수준, 워크스페이스 경계, 셸 명령 허용 목록, 승인 및 예산 게이트를 설정합니다.

[autonomy]
level = "supervised" # read_only | supervised | full
workspace_only = true
allowed_commands = ["git", "python", "node"]
forbidden_paths = ["/etc", "/root", "/proc", "/sys", "~/.ssh", "~/.gnupg", "~/.aws"]
allowed_roots = ["~/Desktop/projects", "/opt/shared-repo"]
타입기본값의미
levelstring"supervised"read_only (관찰만), supervised (허용 목록 내에서 행동, 중간/높은 위험에 승인), 또는 full (승인 게이트 없음, 허용 목록은 적용).
workspace_onlybooltrueallowed_roots로 허용되지 않는 한 워크스페이스 외부의 절대 경로 거부.
allowed_commandsarray[]셸 허용 목록: 단순 이름, 전체 경로, 또는 "*" (위험 게이트는 여전히 적용).
forbidden_pathsarray내장값기본으로 거부되는 시스템 경로 및 민감한 닷디렉터리.
allowed_rootsarray["~/.revka/workflows", "~/.revka/artifacts", "~/.revka/workspace"]워크스페이스 외부에서 허용되는 추가 루트 (틸드 + 워크스페이스 상대 경로 지원).
max_actions_per_houru3220슬라이딩 윈도우 액션 예산.
max_cost_per_day_centsu32500정책별 지출 가드레일 (US$5.00).
require_approval_for_medium_riskbooltrue중간 위험 명령에 대한 승인 게이트.
block_high_risk_commandsbooltrue높은 위험 명령에 대한 하드 블록.
auto_approvearray[]항상 자동 승인되는 도구 작업.
always_askarray[]항상 승인을 요구하는 도구 작업.

[security.otp] — 일회용 비밀번호 게이팅

섹션 제목: “[security.otp] — 일회용 비밀번호 게이팅”

OTP 게이팅은 TOTP 검증으로 민감한 도구 호출, 액션, 도메인을 보호합니다. 시크릿이 없는 상태에서 처음 사용하면, Revka가 시크릿을 생성하고 otpauth:// 등록 URI를 한 번 출력합니다.

[security.otp]
enabled = true
method = "totp" # totp (pairing / cli-prompt are reserved)
token_ttl_secs = 30
cache_valid_secs = 300
gated_actions = ["shell", "browser_open"]
gated_domains = ["*.chase.com", "accounts.google.com"]
gated_domain_categories = ["banking"]
challenge_max_attempts = 3
타입기본값의미
enabledboolfalse마스터 스위치.
methodstring"totp"현재 TOTP만 구현되어 있습니다.
token_ttl_secsu6430TOTP 타임스텝 윈도우 (검증 시 드리프트를 위해 ±1 스텝 허용).
cache_valid_secsu64300최근 검증된 코드가 수락되는 윈도우.
gated_actionsarray["shell","file_write","browser_open","browser"]OTP가 필요한 도구 이름.
gated_domainsarray[]OTP가 필요한 도메인 패턴 (* 와일드카드 지원).
gated_domain_categoriesarray[]프리셋 카테고리: banking, medical, government, identity_providers.
challenge_max_attemptsu323챌린지당 시도 횟수.

시크릿은 ~/.revka/otp-secret에 암호화되어 저장됩니다. 등록 URI는 한 번만 표시됩니다 — 분실한 경우 해당 파일을 삭제하면 재생성됩니다. 유효하지 않은 도메인 글로브 또는 알 수 없는 카테고리는 시작 시 즉시 실패합니다. OTP 게이팅 & 긴급 정지를 참고하세요.

긴급 정지는 재시작 후에도 유지되는, 실패 시 차단 방식의 킬 스위치입니다. CLI 또는 도구 호출로 활성화하며, 재개 시 구성된 경우 OTP가 필요합니다.

[security.estop]
enabled = true
state_file = "~/.revka/estop-state.json"
require_otp_to_resume = true
Terminal window
revka estop # engage emergency stop
revka estop resume # clear it (OTP required if configured)
타입기본값의미
enabledboolfalse마스터 스위치.
state_filestring~/.revka/estop-state.json영구 상태 경로 (원자적 쓰기, Unix에서 0600).
require_otp_to_resumebooltrue재개 전 유효한 OTP 요구.

상태는 네 가지 누적 수준으로 구성됩니다 — 전체 종료, 네트워크 종료, 도메인별 블록(글로브), 도구별 동결. 손상되거나 읽을 수 없는 상태 파일은 기본적으로 kill_all = true(실패 시 차단)가 되어, 게이트웨이를 통한 읽기 작업까지 차단합니다. 에이전트가 제어 불능 상태일 때 가장 먼저 사용해야 할 수단입니다. revka memory & estop을 참고하세요.

[secrets] 섹션은 민감한 구성 값(API 키, 봇 토큰)을 ChaCha20-Poly1305 AEAD로 저장 시 암호화합니다. 온보딩 중 기본적으로 활성화되며, 에이전트가 새 값을 투명하게 암호화합니다.

[secrets]
encrypt = true # default

암호화된 값은 config.tomlenc2:<hex> 형태로 나타납니다. 32바이트 키는 ~/.revka/.secret_key에 저장됩니다 (Unix에서 모드 0600; Windows에서 제한된 ACL). 없으면 첫 번째 암호화 시 생성됩니다. 레거시 XOR enc: 형식도 읽을 수 있으며, 읽을 때 enc2:로 자동 업그레이드됩니다.

신뢰 점수는 도메인별 에이전트 행동을 시간에 따라 추적합니다. 도메인의 점수가 회귀 임계값 아래로 떨어지면, 해당 도메인에 대해 자율성이 한 단계 자동으로 낮아집니다 (Full → Supervised → ReadOnly).

[trust]
initial_score = 0.8
decay_half_life_days = 30
regression_threshold = 0.5
correction_penalty = 0.05
success_boost = 0.01
타입기본값의미
initial_scoref640.8시작 점수 (범위 0.0–1.0).
decay_half_life_daysf6430.0initial_score로 회귀하는 반감기.
regression_thresholdf640.5이 값 이하이면 자율성이 한 단계 낮아집니다.
correction_penaltyf640.05수정 이벤트(사용자 오버라이드, 품질 실패, SOP 이탈)당 차감.
success_boostf640.01성공당 추가.

프롬프트 인젝션, 유출 감지 & 신뢰를 참고하세요.

[verifiable_intent] — 커머스 게이팅

섹션 제목: “[verifiable_intent] — 커머스 게이팅”

Verifiable Intent는 커머스 관련 도구 호출을 SD-JWT 자격 증명 체인으로 게이팅합니다. 구성 섹션은 단순 토글이며, 명령 및 제약 세부 사항은 도구 레이어에서 처리됩니다.

[verifiable_intent]
enabled = false
strictness = "strict" # strict | permissive
타입기본값의미
enabledboolfalse마스터 스위치.
strictnessstring"strict"체인 검증 중 오류 보고: strict 또는 permissive.

자격 증명 모델 — Immediate vs. Autonomous 명령 및 제약 유형 — 은 Verifiable Intent (커머스 게이팅)을 참고하세요.

[workspace] — 멀티 클라이언트 격리

섹션 제목: “[workspace] — 멀티 클라이언트 격리”

[workspace] 섹션은 멀티 클라이언트 오퍼레이터 배포를 위한 격리된 워크스페이스 프로필을 활성화합니다. 각 프로필은 별도의 메모리, 시크릿, 감사, 도구 제한을 가집니다.

[workspace]
enabled = true
active_workspace = "client_a"
workspaces_dir = "~/.revka/workspaces"
isolate_memory = true
isolate_secrets = true
isolate_audit = true
cross_workspace_search = false
타입기본값의미
enabledboolfalse마스터 스위치.
active_workspacestring?미설정활성 프로필 이름.
workspaces_dirstring~/.revka/workspaces프로필 서브디렉터리의 기본 디렉터리.
isolate_memorybooltrue워크스페이스별 별도 메모리 DB.
isolate_secretsbooltrue워크스페이스별 별도 시크릿 네임스페이스.
isolate_auditbooltrue워크스페이스별 별도 감사 로그.
cross_workspace_searchboolfalse보안 기본값: 워크스페이스 간 메모리 검색 불가.

각 프로필은 ~/.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 = true
transport = "serial" # none | native | serial | probe
serial_port = "/dev/ttyACM0"
baud_rate = 115200
workspace_datasheets = true
타입기본값의미
enabledboolfalse마스터 스위치.
transportstring"none"none, native, serial, 또는 probe.
serial_portstring?미설정serial 전송용 시리얼 장치 경로.
baud_rateu32115200시리얼 보드레이트.
probe_targetstring?미설정디버그 프로브 대상 (예: "STM32F401RE"); transport = "probe" 시 필수.
workspace_datasheetsboolfalseRAG 기반 핀 조회를 위한 워크스페이스 PDF 데이터시트 인덱싱.

상위 레벨 주변 장치 보드(MCU, Raspberry Pi GPIO, ESP32)는 활성화 시 에이전트 도구가 됩니다. 각 보드는 [[peripherals.boards]] 테이블입니다.

[peripherals]
enabled = true
datasheet_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 = true
max_nodes = 16
auth_token = "secret-bearer-token"
타입기본값의미
enabledboolfalse동적 노드 연결 허용.
max_nodesu3216최대 동시 연결 노드 수.
auth_tokenstring?미설정노드가 연결 시 제시해야 하는 베어러 토큰.

특화 스위트: CanonWorks, Manus & 노드를 참고하세요.

이 섹션들은 에이전트와 함께 실행되는 플랫폼 서비스를 연결합니다 — 저장소, 비용 제어, 관찰 가능성, 스케줄러 및 크론, 하트비트, 라이프사이클 훅, 스킬, 스웜, 위임 서브 에이전트, 스킬 마켓플레이스, SOP 엔진.

[storage] — 영구 저장소 프로바이더

섹션 제목: “[storage] — 영구 저장소 프로바이더”
[storage]
provider = "sqlite" # env: REVKA_STORAGE_PROVIDER

도구 및 게이트웨이에서 사용하는 구조화 저장소의 백엔드. 환경 변수 REVKA_STORAGE_PROVIDER로 오버라이드 가능.

[cost] 섹션은 예상 API 지출을 추적하고 일별/월별 예산 한도를 적용합니다.

[cost]
enabled = true
daily_limit_usd = 10.00
monthly_limit_usd = 100.00
warn_at_percent = 80
allow_override = false
타입기본값의미
enabledbool마스터 스위치.
daily_limit_usdf64하드 일별 한도.
monthly_limit_usdf64하드 월별 한도.
warn_at_percentu8한도의 이 비율에서 경고 발생 (요청은 계속됨).
allow_overrideboolfalse--override로 하드 한도 초과를 허용.

하드 한도에 도달하면 allow_override = true이고 --override가 전달되지 않는 한 요청이 거부됩니다. 비용 추적 & 예산을 참고하세요.

[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
타입기본값의미
backendstring"none"none, noop, log, prometheus, 또는 otel/opentelemetry/otlp.
otel_endpointstringhttp://localhost:4318OTLP HTTP 엔드포인트.
otel_service_namestring"revka"OTLP에 보고되는 서비스 이름.
runtime_trace_modestring"none"none, rolling, 또는 full.
runtime_trace_pathstringstate/runtime-trace.jsonl추적 파일 (절대 경로가 아닌 경우 워크스페이스 상대).
runtime_trace_max_entriesu32200rolling 모드에서 유지되는 이벤트 수.

OTel 지원은 observability-otel 피처가 컴파일에 포함되어야 합니다. 런타임 추적에는 모델 출력 텍스트가 포함될 수 있으므로, 공유 호스트에서는 기본적으로 비활성화하고 revka doctor traces로 조회하세요. 관찰 가능성 & 추적을 참고하세요.

스케줄러는 크론 작업을 실행합니다. [cron]은 주기적 에이전트 작업을 선언합니다 (일반적으로 revka onboard의 DreamState 제안 또는 게이트웨이 API를 통해 추가됩니다). [heartbeat]는 일정 간격으로 LLM 기반 체크인을 실행합니다.

[scheduler]
enabled = true
[heartbeat]
enabled = true
interval_minutes = 60
adaptive = true
target = "telegram"
to = "123456789"

하트비트는 적응형 간격, 선택적 2단계 LLM 결정 단계, 데드맨 스위치, 구성된 채널 전송을 지원합니다. 전체 하트비트 키 목록은 하트비트 & 라이프사이클 훅을 참고하세요. 크론 작업과 스케줄러에 대해서는 선언적 작업 & 스케줄러 구성을 참고하세요.

[hooks] — 라이프사이클 & 감사 훅

섹션 제목: “[hooks] — 라이프사이클 & 감사 훅”

[hooks] 섹션은 에이전트 및 메시지 라이프사이클 이벤트를 위한 내장 훅을 토글합니다. 주목할 만한 훅 중 하나는 SIEM 수집을 위해 외부 엔드포인트에 감사 페이로드를 게시합니다:

[hooks.webhook_audit]
enabled = true
url = "https://siem.example.com/revka/audit"
tool_patterns = ["shell", "file_write"]
max_args_bytes = 4096
타입기본값의미
enabledboolfalse웹훅 감사 훅의 마스터 스위치.
urlstring대상 HTTP POST 엔드포인트.
tool_patternsarray매칭할 글로브 스타일 도구 이름 패턴.
max_args_bytesu644096페이로드에서 도구 인수 잘라내기.

로컬 감사 로그와 달리, 웹훅 훅은 아웃바운드 실시간 푸시입니다. 하트비트 & 라이프사이클 훅을 참고하세요.

[skills] — 스킬 로딩 & 자기 개선

섹션 제목: “[skills] — 스킬 로딩 & 자기 개선”

[skills] 섹션은 워크스페이스 스킬 로딩, 커뮤니티 open-skills 레포지토리, 자율적 스킬 생성/개선을 제어합니다.

[skills]
open_skills_enabled = false # opt-in
open_skills_dir = "~/open-skills"
prompt_injection_mode = "compact" # full | compact
allow_scripts = false
[skills.skill_creation]
enabled = false
max_skills = 500
similarity_threshold = 0.85
[skills.skill_improvement]
enabled = true
cooldown_secs = 3600
타입기본값의미
open_skills_enabledboolfalse커뮤니티 레포를 로드합니다. 환경 변수 REVKA_OPEN_SKILLS_ENABLED.
open_skills_dirstring~/open-skills레포 경로. 환경 변수 REVKA_OPEN_SKILLS_DIR.
prompt_injection_modestring"full"full (인라인) 또는 compact (요청 시). 환경 변수 REVKA_SKILLS_PROMPT_MODE.
allow_scriptsboolfalse스킬에서 .sh/.ps1/셔뱅 파일 허용.
skill_creation.enabledboolfalse성공적인 다단계 작업에서 스킬 자동 생성.
skill_creation.max_skillsu32500LRU 퇴출 한도.
skill_creation.similarity_thresholdf640.85중복 제거 임계값.
skill_improvement.enabledbooltrue성공적인 사용 후 스킬 자동 개선.
skill_improvement.cooldown_secsu643600스킬당 개선 최소 간격.

저컨텍스트 모델에는 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 = true
allowed_tools = ["web_search", "http_request", "file_read"]
max_iterations = 8
[swarms.analysis]
agents = ["researcher", "coder"]
strategy = "sequential" # sequential | parallel | router
timeout_secs = 300
[delegate]
timeout_secs = 120 # non-agentic calls
agentic_timeout_secs = 300 # agentic loops

agentic = trueallowed_tools에 최소 하나의 항목이 필요하며, delegate 도구 자체는 재진입 루프를 방지하기 위해 서브 에이전트 허용 목록에서 제외됩니다. revka doctor는 모든 서브 에이전트의 프로바이더를 검증합니다. 에이전트별 전체 키 목록은 구성: 프로바이더, 에이전트 & 라우팅에 있으며, 개념적 모델은 에이전트, 팀 & 스웜을 참고하세요.

ClawHub는 스킬을 탐색, 검색, 설치할 수 있는 스킬 마켓플레이스입니다. 익명 탐색 및 설치는 토큰 없이 가능하며, 게시할 때만 토큰이 필요합니다.

[clawhub]
enabled = true
api_token = "clh_..." # only for publishing
api_url = "https://clawhub.ai"
타입기본값의미
enabledbool마스터 스위치.
api_tokenstring?미설정게시 토큰 (clh_...).
api_urlstringhttps://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]
enabled = true