구성: 채널, 도구, 통합
channels_config 네임스페이스와 도구 및 통합 구성 섹션을 한 곳에서 정리한 레퍼런스입니다.
이 페이지는 ~/.revka/config.toml 중 에이전트가 외부 세계와 통신하는 방식을 결정하는 부분의 필드 레퍼런스입니다. 메시징 플랫폼을 연결하는 [channels_config] 네임스페이스, 웹·브라우저 도구 섹션, 서드파티 통합 섹션(Composio, Google Workspace, Microsoft 365, Notion, Jira, LinkedIn), 미디어 및 운영 도구 섹션을 다룹니다. 모든 키에는 타입, 기본값, 의미가 명시되어 있어 config.toml을 직접 편집할 수 있습니다.
채널과 도구를 활성화·비활성화하거나, 사용 범위를 한정하거나, 배포를 강화할 때 이 페이지를 참고하세요. 채널 연결에 대한 개념 설명은 메시징 채널 연결을, 도구 카탈로그는 도구 개요를 참고하세요. 제공자·에이전트·라우팅 키는 구성: 제공자, 에이전트 및 라우팅을, 게이트웨이·메모리·보안 키는 구성: 게이트웨이, 메모리, 보안 및 플랫폼을 참고하세요.
[channels_config] — 메시징 채널
섹션 제목: “[channels_config] — 메시징 채널”[channels_config]는 최상위 타임아웃 하나와 채널별 [channels_config.<name>] 하위 테이블로 구성됩니다. 채널은 기본 차단 방식으로 동작하므로, 허용 목록에 항목이 없는 채널은 어떤 메시지도 수신하지 않습니다. 항목 하나를 "*"로 설정하면 모두 허용됩니다.
[channels_config]message_timeout_secs = 300
[channels_config.telegram]bot_token = "123456:TELEGRAM-TOKEN"allowed_users = ["123456789"] # [] = deny all, "*" = allow allstream_mode = "off" # off | partialmention_only = falseinterrupt_on_new_message = false
[channels_config.discord]bot_token = "DISCORD-BOT-TOKEN"guild_id = "123456789012345678" # optionalallowed_users = ["*"]stream_mode = "multi_message" # off | partial | multi_message최상위 및 공통 키
섹션 제목: “최상위 및 공통 키”| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
message_timeout_secs | u64 | 300 | 메시지당 기본 처리 시간 예산. 도구 루프 깊이에 따라 [pacing].message_timeout_scale_max 상한까지 배율 적용됩니다. |
cli | bool | true | CLI 터미널 stdin/stdout 채널(revka chat). 기본으로 활성화되어 있으며, cli = false로 비활성화할 수 있습니다. |
대부분의 채널은 다음 필드를 공유합니다(이름은 플랫폼마다 다를 수 있음).
| 필드 | 의미 |
|---|---|
bot_token / api_key | 채널 인증 정보. |
allowed_users / allowed_numbers / allowed_senders / allowed_from / allowed_pubkeys / allowed_contacts / allowed_destinations | 발신자 허용 목록. [] = 전체 차단, "*" = 전체 허용. 정확한 필드명은 아래 표를 참고하세요. |
mention_only | @멘션 시에만 응답합니다(단체 채팅). |
stream_mode | "off", "partial"(실시간 초안 편집), 또는 지원 환경에서 "multi_message"(단락 분할). |
proxy_url | 채널별 HTTP/SOCKS5 프록시. |
notification_chat_id / notification_channel_id | 비요청 알림 전송 대상. |
interrupt_on_new_message | 동일 발신자가 다시 메시지를 보내면 진행 중인 생성을 취소합니다. Telegram, Slack, Discord, Mattermost, Matrix에서 지원됩니다. |
채널별 허용 목록 필드
섹션 제목: “채널별 허용 목록 필드”허용 목록 필드명은 플랫폼마다 다릅니다. 빈 목록은 전체를 차단하고, "*"는 전체를 허용합니다.
| 채널 | 허용 목록 필드 |
|---|---|
| Telegram, Discord, Slack, Mattermost, Matrix, IRC, Lark, Feishu, DingTalk, QQ, Nextcloud Talk, WeCom, Mochat, Twitter | allowed_users |
| Signal | allowed_from |
| WhatsApp (Cloud & Web), WATI | allowed_numbers |
| Email, Linq, Gmail Push | allowed_senders |
| iMessage | allowed_contacts |
| Nostr | allowed_pubkeys |
| ClawdTalk | allowed_destinations |
플랫폼별 필드
섹션 제목: “플랫폼별 필드”일부 채널에는 추가 키가 필요합니다. 전체 설정 절차는 채널 개요와 각 플랫폼 페이지를 참고하세요.
모드는 설정된 키에 따라 자동으로 결정됩니다. phone_number_id → Cloud API, session_path → Web 모드.
# Cloud API (Meta webhook 모드 — 공개 HTTPS 콜백 필요)[channels_config.whatsapp]access_token = "EAAB..."phone_number_id = "123456789012345"verify_token = "your-verify-token"app_secret = "your-app-secret" # HMAC payload signature (recommended)allowed_numbers = ["*"]
# Web 모드 (wa-rs) — `whatsapp-web` 빌드 기능 필요[channels_config.whatsapp]session_path = "~/.revka/whatsapp-session.db"pair_phone = "15551234567" # omit for QR-code flowmode = "business" # or "personal"allowed_numbers = ["*"][channels_config.slack]bot_token = "xoxb-..."app_token = "xapp-..." # app-level token for Socket Modechannel_ids = ["C123...", "D456..."] # takes precedence over channel_idallowed_users = ["*"]thread_replies = trueuse_markdown_blocks = true # 12k-char messages vs 3kcancel_reaction = "x" # emoji that cancels in-flight workchannel-matrix 빌드 기능이 필요합니다. 올바른 device_id가 있으면 E2EE가 투명하게 동작합니다.
[channels_config.matrix]homeserver = "https://matrix.example.com"access_token = "syt_..."user_id = "@revka:matrix.example.com"device_id = "DEVICEID123"room_id = "!room:matrix.example.com"allowed_rooms = [] # extra rooms to acceptallowed_users = ["*"]stream_mode = "partial"recovery_key = "" # cross-signing recovery# Nostr — `channel-nostr` 빌드 기능 필요; 키는 중요 기밀입니다[channels_config.nostr]private_key = "nsec1..."relays = ["wss://relay.damus.io", "wss://nos.lol"]allowed_pubkeys = ["hex-or-npub-key"] # [] = deny all, "*" = allow all
# Signal — 로컬 signal-cli 데몬에 브리지[channels_config.signal]http_url = "http://127.0.0.1:8686"account = "+1234567890"group_id = "" # "dm" for DM-onlyallowed_from = ["*"]# Linq (Linq Partner API를 통한 iMessage / RCS / SMS) — webhook 모드[channels_config.linq]api_token = "linq-partner-api-token"from_phone = "+15551234567"signing_secret = "optional-signing-secret" # env: REVKA_LINQ_SIGNING_SECRETallowed_senders = ["*"]
# Nextcloud Talk — webhook 모드, HMAC 서명[channels_config.nextcloud_talk]base_url = "https://cloud.example.com"app_token = "nextcloud-talk-app-token"bot_name = "revka"webhook_secret = "optional-webhook-secret" # env: REVKA_NEXTCLOUD_TALK_WEBHOOK_SECRETallowed_users = ["*"]아래의 [transcription], [tts], [media_pipeline], [multimodal] 섹션도 채널에서 사용됩니다(음성 메모, 오디오 첨부 파일, 이미지 처리).
웹 및 브라우저 도구
섹션 제목: “웹 및 브라우저 도구”이 섹션들은 에이전트의 외부 웹 접근을 제어합니다. config에 해당 섹션이 없을 경우 네 가지 모두 기본값이 enabled = true이고 allowed_domains = ["*"](모든 공개 도메인)입니다. 위의 Aside 참고.
[browser] — 브라우저 자동화
섹션 제목: “[browser] — 브라우저 자동화”browser 및 browser_open 도구를 지원합니다. 플러그인 방식 백엔드를 지원합니다.
[browser]enabled = trueallowed_domains = ["example.com"] # "*" = all public domains (local/private still blocked)backend = "agent_browser" # agent_browser | rust_native | computer_use | autonative_headless = true
[browser.computer_use]endpoint = "http://127.0.0.1:8787/v1/actions"allow_remote_endpoint = false| 키 | 타입 | 기본값 | 의미 |
|---|---|---|---|
enabled | bool | true | 브라우저 도구를 활성화합니다(섹션이 없을 때 유효 기본값). |
allowed_domains | list | ["*"] | 도메인 허용 목록. "*" = 모든 공개 도메인. 로컬/사설 호스트는 항상 차단됩니다. 섹션이 없을 때 유효 기본값. |
backend | string | "agent_browser" | agent_browser, rust_native(browser-native 기능 필요), computer_use, 또는 auto. |
native_headless | bool | true | rust-native 백엔드의 헤드리스 모드. |
native_webdriver_url | string | http://127.0.0.1:9515 | native 백엔드용 WebDriver 엔드포인트. |
native_chrome_path | string? | 미설정 | Chrome/Chromium 바이너리 경로. |
computer_use.allow_remote_endpoint | bool | false | computer-use 사이드카가 외부에 노출되지 않도록 보호합니다. |
[browser_delegate] — 브라우저 CLI 위임
섹션 제목: “[browser_delegate] — 브라우저 CLI 위임”browser_delegate 도구를 지원합니다. 브라우저 작업을 CLI 서브프로세스(예: claude-in-chrome MCP를 사용하는 Claude Code)에 위임합니다. 셸 접근이 필요합니다.
[browser_delegate]enabled = truecli_binary = "claude"chrome_profile_dir = "~/.config/chrome-corp-profile"allowed_domains = ["teams.microsoft.com", "outlook.office.com"]blocked_domains = []task_timeout_secs = 120[http_request] — 범용 HTTP
섹션 제목: “[http_request] — 범용 HTTP”http_request 도구(전체 GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS)를 지원합니다.
[http_request]enabled = trueallowed_domains = ["api.example.com", "api.github.com"]max_response_size = 1000000timeout_secs = 30# allow_private_hosts = false| 키 | 기본값 | 의미 |
|---|---|---|
enabled | true | 도구를 활성화합니다(섹션이 없을 때 유효 기본값). |
allowed_domains | ["*"] | 도메인 허용 목록. "*" = 모든 공개 도메인. allow_private_hosts를 설정하지 않으면 로컬/사설 호스트는 차단됩니다. 섹션이 없을 때 유효 기본값. |
max_response_size | — | 응답 바이트 상한. |
timeout_secs | — | 요청당 타임아웃. |
allow_private_hosts | false | 사설/루프백 대상 허용. |
[web_fetch] — 페이지를 텍스트로 가져오기
섹션 제목: “[web_fetch] — 페이지를 텍스트로 가져오기”web_fetch 도구(GET 전용, HTML → 읽기 좋은 텍스트, JS가 많은 사이트를 위한 Firecrawl 폴백 지원)를 지원합니다.
[web_fetch]enabled = trueallowed_domains = ["docs.anthropic.com", "*"]blocked_domains = []max_response_size = 1000000timeout_secs = 30
[web_fetch.firecrawl]# api_key = "fc-..." # enables the JS-rendering fallback기타 키: allowed_private_hosts(사설 호스트 차단의 호스트별 예외)와 web_fetch.firecrawl.*(Firecrawl 폴백). http_request와의 차이: web_fetch는 GET 전용·텍스트 변환에 특화되어 있고, http_request는 전체 HTTP를 지원합니다.
[web_search] — 웹 검색
섹션 제목: “[web_search] — 웹 검색”web_search_tool을 지원합니다. 웹 검색은 DuckDuckGo(API 키 불필요)로 기본 활성화됩니다.
[web_search]enabled = trueprovider = "duckduckgo" # duckduckgo (free) | brave | searxngmax_results = 5timeout_secs = 15# brave_api_key = "..." # for Brave# searxng_instance_url = "https://searx.example.com" # for SearXNG| 키 | 기본값 | 의미 |
|---|---|---|
enabled | true | 웹 검색을 활성화합니다. |
provider | "duckduckgo" | duckduckgo, brave, 또는 searxng. |
max_results | 5 | 검색 결과 수. |
timeout_secs | 15 | 검색 타임아웃. |
brave_api_key | 미설정 | Brave 제공자에 필요합니다(env BRAVE_API_KEY). |
searxng_instance_url | 미설정 | 자체 호스팅 SearXNG에 필요합니다(env SEARXNG_INSTANCE_URL). |
통합 섹션
섹션 제목: “통합 섹션”각 통합 섹션은 도구 하나를 활성화하고 인증 정보를 제공합니다. 모두 기본값은 enabled = false입니다. 일부는 config 파일 외에 환경 변수로도 인증 정보를 읽습니다.
[composio] — 관리형 OAuth (1000개 이상 앱)
섹션 제목: “[composio] — 관리형 OAuth (1000개 이상 앱)”composio 도구를 지원합니다. Composio API 키(config의 api_key 또는 env COMPOSIO_API_KEY)가 필요합니다.
[composio]enabled = trueapi_key = "comp_..."entity_id = "default"앱의 OAuth는 composio connect로 연결합니다. Composio가 연결된 계정 없음 오류를 반환하면, 도구의 list_accounts 액션을 호출하여 반환된 connected_account_id를 execute에 전달하세요.
[google_workspace] — Gmail, Drive, Calendar 등
섹션 제목: “[google_workspace] — Gmail, Drive, Calendar 등”gws CLI를 통해 google_workspace 도구를 지원합니다. gws가 설치(npm install -g @googleworkspace/cli)되고 인증된 상태여야 하며, 셸 접근이 필요합니다.
[google_workspace]enabled = truedefault_account = "[email protected]"allowed_services = ["gmail", "drive"]audit_log = true
[[google_workspace.allowed_operations]]service = "gmail"resource = "users"sub_resource = "messages" # Gmail needs the 4th segmentmethods = ["list", "get"]| 키 | 의미 |
|---|---|
enabled | 도구를 활성화합니다. |
default_account / credentials_path | 계정 선택 및 인증 정보. |
allowed_services | 서비스 허용 목록(gmail, drive, calendar, sheets, docs 등). |
allowed_operations[] | service/resource/sub_resource/methods 세부 범위 설정. Gmail 명령은 4세그먼트(sub_resource 포함), Drive/Calendar는 3세그먼트(sub_resource 생략). |
rate_limit_per_minute / timeout_secs | 속도 제한 및 타임아웃. |
audit_log | 각 작업을 로그에 기록합니다. |
[microsoft365] — Outlook, Teams, Calendar, OneDrive, SharePoint
섹션 제목: “[microsoft365] — Outlook, Teams, Calendar, OneDrive, SharePoint”Microsoft Graph를 통해 microsoft365 도구를 지원합니다. Azure AD 앱 등록이 필요합니다.
[microsoft365]enabled = truetenant_id = "..."client_id = "..."client_secret = "..." # required for client_credentials flowauth_flow = "client_credentials" # or device_codescopes = ["Mail.Read", "Chat.ReadWrite"]token_cache_encrypted = true# user_id = "..." # target user for app-only flows토큰 캐시는 워크스페이스가 아닌 config 디렉터리에 저장됩니다. 등록 방식에 따라 client_credentials(앱 전용) 또는 device_code 인증 중 선택하세요.
[notion] / [jira] — 프로젝트 통합
섹션 제목: “[notion] / [jira] — 프로젝트 통합”[notion]enabled = trueapi_key = "secret_..." # or NOTION_API_KEY
[jira]enabled = truebase_url = "https://your-org.atlassian.net"email = "[email protected]"api_token = "..." # or JIRA_API_TOKENallowed_actions = ["get_ticket", "search", "add_comment"]timeout_secs = 30jira.allowed_actions는 도구가 수행할 수 있는 작업을 제한합니다. Atlassian Cloud와 Server 모두 지원합니다.
[linkedin] — 콘텐츠 게시
섹션 제목: “[linkedin] — 콘텐츠 게시”linkedin 도구를 지원합니다. 인증 정보는 .env의 LINKEDIN_* 환경 변수에서 읽습니다.
[linkedin]enabled = trueapi_version = "202602"
[linkedin.content]# automated-posting strategy settings
[linkedin.image]# image-publishing settings미디어 및 비전 섹션
섹션 제목: “미디어 및 비전 섹션”음성, 오디오, 이미지, 인바운드 미디어 처리를 구성합니다. [transcription]과 [tts]는 오디오를 수신하거나 출력하는 모든 채널에서 공유됩니다.
[transcription] — 음성-텍스트 변환
섹션 제목: “[transcription] — 음성-텍스트 변환”[transcription]enabled = truedefault_provider = "groq" # groq | openai | deepgram | assemblyai | google | local_whisperapi_key = "..." # falls back to GROQ_API_KEY for Groqmodel = "whisper-large-v3-turbo"language = "en" # optional ISO-639-1 hintmax_duration_secs = 120| 키 | 기본값 | 의미 |
|---|---|---|
enabled | false | 음성-텍스트 변환을 활성화합니다. |
default_provider | "groq" | groq, openai, deepgram, assemblyai, google, local_whisper. |
api_key | 미설정 | 제공자 키. URL 기반 환경 변수 → TRANSCRIPTION_API_KEY → GROQ_API_KEY → OPENAI_API_KEY 순으로 폴백됩니다. |
model | "whisper-large-v3-turbo" | Groq 기본값. |
language | 미설정 | ISO-639-1 힌트. |
initial_prompt | 미설정 | 예상 어휘 방향으로 변환을 유도합니다. |
max_duration_secs | 120 | 이보다 긴 오디오는 건너뜁니다. |
transcribe_non_ptt_audio | false | WhatsApp에서 음성 메모가 아닌 오디오도 변환합니다. |
제공자별 하위 섹션: [transcription.openai], [transcription.deepgram], [transcription.assemblyai], [transcription.google], [transcription.local_whisper](url 필수, bearer_token, max_audio_bytes 기본값 25 MB, timeout_secs 기본값 300). 최대 오디오 크기는 25 MB이며, 지원 형식은 flac, mp3, mp4, m4a, ogg, opus, wav, webm입니다.
[tts] — 텍스트-음성 변환
섹션 제목: “[tts] — 텍스트-음성 변환”[tts]enabled = truedefault_provider = "openai" # openai | elevenlabs | google | edge | piperdefault_voice = "alloy"default_format = "mp3" # mp3 | opus | wavmax_text_length = 4096
[tts.openai]model = "tts-1"speed = 1.0
[tts.elevenlabs]model_id = "eleven_monolingual_v1"stability = 0.5similarity_boost = 0.5제공자별 하위 섹션: [tts.openai](model, speed), [tts.elevenlabs](model_id, stability, similarity_boost), [tts.google](language_code), [tts.edge](binary_path, 무료, 서브프로세스 방식), [tts.piper](api_url, 로컬). 제공자 키는 OPENAI_API_KEY, ELEVENLABS_API_KEY, GOOGLE_TTS_API_KEY로 폴백됩니다.
[media_pipeline] — 자동 미디어 이해
섹션 제목: “[media_pipeline] — 자동 미디어 이해”에이전트가 첨부 파일을 받기 전에 전처리하여 [Audio transcription: ...], [Image: <description>], [Video summary: ...]를 앞에 추가합니다. 오디오에는 [transcription]을, 이미지에는 활성 제공자의 비전 기능을 사용합니다.
[media_pipeline]enabled = truetranscribe_audio = truedescribe_images = truesummarize_video = true제공자가 비전을 지원하지 않으면 [Image: attached]로 대체됩니다. 기본값은 enabled = false입니다.
[multimodal] — 이미지 첨부 처리
섹션 제목: “[multimodal] — 이미지 첨부 처리”에이전트 메시지에 이미지를 첨부하는 방식을 제어합니다.
[multimodal]max_images = 4 # clamped 1–16max_image_size_mb = 5 # clamped 1–20allow_remote_fetch = falsevision_provider = "ollama" # optional: route images to a dedicated vision modelvision_model = "llava:7b"지원하는 이미지 마커: [IMAGE:/path/to/file.png] 또는 [IMAGE:data:image/png;base64,...]. 원격 URL은 allow_remote_fetch = true일 때만 가져옵니다.
[image_gen] — 이미지 생성
섹션 제목: “[image_gen] — 이미지 생성”image_gen 도구(기본적으로 fal.ai Flux 모델 사용; 독립 섹션에서 DALL-E, Stability, Imagen 제공자도 지원)를 지원합니다.
[image_gen]enabled = truedefault_model = "fal-ai/flux/schnell"api_key_env = "FAL_API_KEY" # name of the env var holding the provider key| 키 | 의미 |
|---|---|
enabled | 도구를 활성화합니다. |
default_model | 기본 제공자 모델 ID. |
api_key_env | 제공자 API 키를 담고 있는 환경 변수 이름. |
운영 도구 섹션
섹션 제목: “운영 도구 섹션”분석, 파이프라인, 워크스페이스 유지 관리 도구를 활성화합니다.
[pipeline] — 다단계 도구 파이프라인
섹션 제목: “[pipeline] — 다단계 도구 파이프라인”execute_pipeline 메타 도구를 지원합니다.
[pipeline]enabled = truemax_steps = 20allowed_tools = ["file_read", "file_write", "shell"]단계는 {{step[N].result}} 보간으로 순차 실행되거나, parallel: true로 동시 실행됩니다(병렬 모드에서는 보간 불가). allowed_tools는 파이프라인 단계에서 호출할 수 있는 도구를 제한합니다.
[backup] — 워크스페이스 백업
섹션 제목: “[backup] — 워크스페이스 백업”backup 도구(생성 / 목록 / 검증 / 복원)를 지원합니다. 기본으로 활성화되어 있습니다.
[backup]enabled = trueinclude_dirs = ["state", "sessions"]max_keep = 10| 키 | 기본값 | 의미 |
|---|---|---|
enabled | true | 백업 작업을 활성화합니다. |
include_dirs | — | 각 백업에 포함할 디렉터리. |
max_keep | — | 보관 개수. 이보다 오래된 백업은 삭제됩니다. |
[data_retention] — 제거 및 저장소 통계
섹션 제목: “[data_retention] — 제거 및 저장소 통계”data_management 도구(통계 / 제거 / 목록)를 지원합니다. 기본으로 비활성화되어 있으며, purge는 파괴적 작업입니다.
[data_retention]enabled = trueretention_days = 90[cloud_ops] — 클라우드 자문 도구
섹션 제목: “[cloud_ops] — 클라우드 자문 도구”읽기 전용 cloud_ops 및 cloud_patterns 도구(IaC 검토, 마이그레이션 평가, 비용 분석, Well-Architected 검토)를 지원합니다. 클라우드 리소스를 생성하거나 변경하지 않습니다.
[cloud_ops]enabled = true[security_ops] — 관리형 사이버보안
섹션 제목: “[security_ops] — 관리형 사이버보안”security_ops 도구(경보 트리아지, 플레이북 실행, 취약점 파싱, 보고)를 지원합니다.
[security_ops]enabled = true