LibreFang 2026.7.31 출시
요약
LibreFang 2026.7.31 버전이 출시되었습니다. 이번 업데이트는 멀티 계정 지원, Kubernetes 배포, EveryAPI 자동 감지 기능을 포함하며, 특히 20개 이상의 보안 취약점을 해결한 강력한 보안 패치가 적용되었습니다.
핵심 포인트
- SHA-256/Argon2id 해싱 및 Vault 저장소를 통한 API 보안 강화
- Kubernetes 배포 지원 및 RBAC 기반의 권한 부여 시스템 개선
- EveryAPI 자동 감지 및 대시보드를 통한 게이트웨이 연결 자동화
- Chrome DevTools Protocol을 활용한 브라우저 세션 단위 자동화 강화
- 비디오 컨테이너 자동 오디오 추출 및 전사 기능 지원
LibreFang 2026.7.31 출시
v2026.7.27 이후 4명의 기여자가 58개의 PR (Pull Requests)을 제출했습니다.
LibreFang 2026.7.31은 프로덕션 환경에 즉시 적용 가능한 멀티 계정 지원 (multi-account support), Kubernetes 배포, EveryAPI 자동 감지 (auto-detection), 그리고 20개 이상의 권한 부여 (authorization) 및 자격 증명 처리 (credential-handling) 취약점을 해결한 보안 강화 패치를 포함하여 출시되었습니다.
핵심 개선 사항
API 보안 강화: 마스터 API 키 (Master API keys)가 이제 해싱 (hashing) (SHA-256 또는 Argon2id), 환경 변수 간접 참조 (environment variable indirection), 그리고 볼트 저장소 (vault storage)를 지원합니다. 이를 통해 config.toml을 수정하지 않고도 비밀 값을 교체 (rotate)할 수 있습니다. 해시 전용 모드 (hash-only mode)는 단순 키 노출 경로를 다시 열 수 있었던 WebSocket/터미널 인증 우회 취약점을 차단합니다. 사용자별 프로바이더 자격 증명 (per-user provider credentials, 지난 릴리스에서 추가됨)은 이제 사용 중인 키의 소유자에게 비용을 정확히 청구하고 예산을 할당하며, 권한 부여 시스템 (authorization system)은 소유권 확인, RBAC (Role-Based Access Control) 게이트, 계정 간 공격 표면 (cross-account attack surfaces)에 대한 20개의 수정 사항을 반영했습니다.
EveryAPI 통합 자동화: 데몬 (daemon)이 사용자가 로그인되어 있는 경우 EveryAPI CLI를 자동으로 감지하며, 모델 메타데이터를 오래된 OpenRouter 스냅샷이 아닌 게이트웨이 자체에서 가져오고, 설정 가능한 TTL (Time To Live)에 따라 카탈로그를 갱신합니다. 새로운 대시보드 연결 작업 (dashboard connect action) 덕분에 게이트웨이를 추가할 때 더 이상 터미널을 사용할 필요가 없습니다.
브라우저 자동화 기능 강화: 에이전트 (Agents)가 이제 Target.createTarget을 통해 브라우저 수준의 Chrome DevTools Protocol 엔드포인트에 연결할 수 있어, 페이지 단위가 아닌 세션 전체에 걸친 자동화가 가능해졌습니다. 페이지 추출 (Page extraction)은 이제 설정 가능하며 (최대 글자 수, 절단 표시기(truncation marker)로 보고됨), 비디오 컨테이너 (MP4, MOV, MKV, AVI)는 자동 오디오 추출 기능과 함께 전사 (transcription)를 위해 수용됩니다.
데몬 재시작 시에도 사용자 정의 설정 유지: 내장된 핸드 (hands)에 대한 편집 사항은 다음 레지스트리 동기화 시 삭제되는 대신 운영자 재정의 디렉토리 (operator override directory)에 영구적으로 저장됩니다. 또한 핸드의 실시간 설정은 재시작 시뿐만 아니라 대시보드에서 저장하는 즉시 에이전트에게 전달됩니다.
다중 계정 메시징 (Multi-account messaging)이 올바르게 작동합니다: 채널 상태 표시기가 이제 감독자 활성 상태 (supervisor liveness)를 반영하며, 채널별 설정이 올바른 봇 계정에 전달되고, 지연된 승인 (deferred approvals)이 계정 자격이 부여된 전달 경로 (account-qualified delivery path)를 통해 라우팅됩니다.
Kubernetes를 즉시 지원합니다: readiness contract, 제한된 Pod Security, 그리고 rootless 지원을 포함한 단일 레플리카 (single-replica) 베이스라인이 deploy/kubernetes/ 경로로 제공됩니다. 데몬(daemon)은 항상 켜져 있는 설치를 위해 LIBREFANG_API_KEY 환경 변수 오버라이드 및 macOS LaunchDaemon --system 지원 기능을 갖추게 되었습니다.
추가된 기능
-
EveryAPI 게이트웨이 자동 감지 및 대시보드 연결: 필요 시
~/.config/everyapi/credentials.json에서 인증 정보를 읽어오고, 게이트웨이의/api/pricing에서 실시간 모델 목록을 가져오며, 설정 가능한 TTL에 따라 새로고침하고, CLI 로그인을 자동 감지하며, 대시보드에 연결 액션(connect action)을 표시합니다 (터미널이 필요하지 않음). -
사용자별 LLM 제공자 인증 정보: 이제 사용자가 자신의 업스트림 제공자 API 키를 저장할 수 있으며 (vault 내 암호화), 자신의 예산에 따라 직접 비용을 청구할 수 있습니다. 또한 비용은 모든 지출 경로 (REST, 스트리밍, ephemeral)에 대해 사용자별로 정확하게 할당됩니다.
-
디스크 기반 Hand 커스터마이징: 레지스트리에 포함된 hands에 대한 편집 사항이 동기화 시 삭제되는 대신
~/.librefang/hands/에 영구적으로 저장됩니다. Hand 설정 변경 사항은 실시간 에이전트에게 즉시 전달되며, 매니페스트 (manifest) 편집은 다음 활성화 시 적용됩니다. -
브라우저 수준의 Chrome DevTools Protocol (CDP): 에이전트가 먼저 타겟을 생성함으로써 브라우저 수준의 CDP 엔드포인트에 연결할 수 있어, 세션 전반의 자동화가 가능해집니다. 페이지 추출은 이제 운영자 설정 가능 (
[browser] max_content_chars)하며, 모델이 누락된 내용을 알 수 있도록 절단 전 길이 (pre-truncation length)를 보고합니다. -
전사 (transcription)를 위한 비디오 컨테이너 지원:
media_transcribe및speech_to_text가 이제 MP4, MOV, MKV, AVI 컨테이너를 수용하며, 자동 오디오 추출 및 Ogg/Opus 재인코딩을 지원합니다. -
STT 언어 및 프롬프트 파라미터 (STT language and prompt parameters):
language및prompt파라미터가 이제 무시되지 않고 Whisper 호환 제공업체(Groq, OpenAI, MiniMax, Fireworks, Together, SiliconFlow)까지 전달됩니다. -
MCP 리소스 프리미티브 (MCP resources primitive): 클라이언트가 이제
resources/list,resources/read,resources/templates/list를 구현하여, 서버 리소스를 합성 도구 (synthetic tools)로 노출하고 리소스 콘텐츠를 프롬프트에 인라인 (inlining) 처리합니다. -
Kubernetes 지원 배포 (Kubernetes-ready deployment):
deploy/kubernetes/하위에 제한된 Pod 보안 (Pod Security),/api/ready에 대한 준비성 프로브 (readiness probes, liveness와 별도), 그리고 루트리스 (rootless) 지원을 포함하는 단일 레플리카 (single-replica) 매니페스트가 포함됩니다. -
macOS 시스템 LaunchDaemon:
service install --system명령이 이제 로그인 시 실행되는 LaunchAgent 대신 부팅 시 실행되는 LaunchDaemon을 등록하므로, 사용자가 아직 로그인하지 않은 상태에서도 데몬이 시작됩니다. -
채널별 사이드카 설정 (Per-channel sidecar settings):
[[sidecar_channels]]별로dm_policy,group_policy,threading,output_format오버라이드 (overrides)를 지원하여, 사이드카 마이그레이션 과정에서 상실되었던 세밀한 제어 기능을 복구했습니다. -
GET /api/config의 설정 스키마 (Config schema inGET /api/config): 응답에 모든 쓰기 가능 필드와 함께x-non-writable목록이 포함되어, 대시보드에서 읽기 전용 필드를 렌더링할 때 대신config.toml을 편집하도록 안내할 수 있습니다. -
명시적 핸드 스케줄링 (Explicit hand scheduling): 이제 핸드(Hands)가 작동하려면 명시적인
[autonomous]블록 또는schedule이 필요합니다. 더 이상max_iterations로부터 추론되는 암묵적인 백그라운드 루프는 동작하지 않습니다. -
레지스트리 동기화 토글 (Registry sync toggle):
[registry] auto_sync = false로 설정하면 체크아웃을 고정하여 데몬 재시작 시 편집 내용이 삭제되는 것을 방지할 수 있습니다. -
스킬 변경 로그 조각 (Skill changelog fragments): 병합 충돌 (merge conflicts)을 방지하기 위해
changelog.d/{added,fixed,changed}/하위에 변경 로그 항목당 하나의.md파일을 작성하세요. 이 조각들은 릴리스 시## [Unreleased]섹션으로 자동 수집됩니다. -
프로세스 완료 알림 (Process completion notifications):
notify_on_completion: true설정과 함께process_start를 사용하면 프로세스가 종료될 때TaskCompletionEvent가 트리거됩니다. 이는 비동기 작업 (async-task) 전달 경로를 재사용하므로 폴링 (polling)이 필요하지 않습니다. -
스케줄러 내 25개 채널 타입 어댑터 전체 지원: 스케줄러의 전달 대상 (delivery-target) 드롭다운 목록에 이제 WeChat, WeCom, Feishu, DingTalk, Teams, Google Chat, Matrix, Mattermost, WhatsApp, QQ, LINE 및 나머지 채널들이 이름별로 표시됩니다.
-
대시보드를 통한 MCP OAuth 지원: 이제 대시보드를 통해 MCP 서버를 OAuth 자격 증명으로 구성할 수 있으며, MCP 브리지 (bridge)는 적절한 액세스 제어를 위해 발신자 계정 컨텍스트 (sender account context)를 전달합니다.
-
NixOS 퍼스트 클래스 지원 (NixOS first-class support): Flake에
services.librefang설정이 포함된nixosModules.default,overlays.default, 그리고 평가 시간 단언 (evaluation-time assertions, 예:/nix/store내부에environmentFile사용 불가) 기능이 추가되었습니다. -
분산 디버그 심볼 (Distributed debug symbols): 릴리스 바이너리는 스트립된 (stripped) 실행 파일과 별도의
.dSYM/.dwp디버그 심볼을 함께 제공하므로, 다운로드 파일에 심볼을 포함하지 않고도 크래시 리포트 (crash reports)를 심볼화 (symbolized)할 수 있습니다.
수정된 버그 및 보안 이슈
권한 부여 및 액세스 제어 (Authorization & access control) (20개 이상의 수정 사항):
- Owner-gate
GET /api/config/export(이전에는 모든 Admin에게 평문 마스터 키가 노출되었습니다). - 채널 슬래시 명령 (
/approve,/switch-agent등)을 실행하기 전 RBAC를 통해 권한을 부여합니다. - 터미널 및 에이전트 WebSocket 업그레이드에 역할 제한(Role-gate)을 적용합니다 (PTY는 Admin+, 턴(turns)은 User+).
process_poll/process_write/process_kill에 소유권(ownership)을 강제합니다.- MCP-server 설정 변경(mutations)을 Owner로 제한합니다 (플러그인 생명주기 스크립트를 통한 RCE 위험).
process_start가 생성되기 전 데몬 환경을 정리(Scrub)합니다 (LIBREFANG_VAULT_KEY및 프로바이더 키가 노출되었던 문제).- 지속성 플러그인(persistent plugins)이 전체 데몬 환경을 상속받지 못하도록 차단합니다.
POST /api/auth/refresh를 해당 세션이 소유권을 증명할 수 있는 세션에만 바인딩합니다 (Admin 호출자에게 다른 사용자의 업스트림 토큰이 유출되었던 문제).process_start에 위험 명령 차단 목록(blocklist)을 적용합니다 (shell_exec허용 목록 체크를 우회했던 문제).- 와이어 레벨(wire level)에서
webhook_triggers.max_payload_bytes를 강제합니다.
다중 사용자 데이터 격리 (Multi-user data isolation) (6개 이상의 수정 사항):
- 이전 릴리스의 메모리 스코핑(memory scoping)을 반영하여 지식 그래프(엔티티/관계)를 사용자별로 범위 지정(Scope)합니다.
- 다중 사용자 에이전트에서 압축된 세션 요약(compacted-session summaries)이 사용자 간에 유출되는 것을 방지합니다.
- 사용자별 프로바이더 키(provider-key) 사용량을 해당 사용자에게 올바르게 할당하고 예산을 강제합니다.
GET /api/memory/agents/{id}/relations의 범위를 경로의 에이전트로 제한합니다.- 계정 간
channel_send도구 호출을 방지합니다. - 사용자별 발신자 ID를 기준으로 채널 메시지 중복 제거를 수행합니다.
자격 증명 및 비밀 정보 처리 (Credential & secret handling) (8개 이상의 수정 사항):
- 평문 마스터 키 (plaintext master key) 대신
api_key_hash($sha256$...)를 허용합니다. - 재로드 시
config.toml을 다시 읽지 않고도 환경 변수/Vault 간접 참조 (env/vault indirection)를 통해 마스터 API 키를 라우팅합니다. - 이제 해시 전용 자격 증명 (Hash-only credentials)이 WebSocket, 터미널 및 HTTP에서 작동합니다 (이전에는 우회 수단이었습니다).
- EveryAPI 게이트웨이의 기본 URL (base URL)이 CLI에 로그인된 임의의 계정으로 재지정되는 것을 방지합니다.
- 사용자별 키 조회 전 제공자 이름 (provider name)을 정규화 (Canonicalize) 합니다 (이를 통해 별칭 (aliases)이 폴백 (fallback)이 아닌 사용자의 키로 청구되도록 합니다).
GET /api/mcp/servers가 MCP 환경 변수 값을 직렬화 (serializing) 하지 않도록 차단합니다 (이전에는 인라인 자격 증명이 노출되었습니다)./mcp브리지 경로에서 계정 간channel_send를 거부합니다.- 확장된 사고 (Extended thinking) 기능이 이제 OpenAI 호환 드라이버 (OpenAI-compatible driver)를 통해 출력됩니다 (이전에는 수신 시에만 파싱되었습니다).
스트리밍 및 에러 처리 (Streaming & error handling):
- LLM 중간 스트리밍 에러 (과부하, 속도 제한 (rate-limit)) 발생 시, 빈 "성공" 턴으로 조용히 잘라내는 대신 이를 표면화합니다.
- 제공자 에러로 인해 부분적인 응답이 연결되지 않도록 두 스트리밍 레이어 모두에 콘텐츠 출력 가드 (content-emitted guard)를 적용합니다.
insufficient_quota를 (잘못된 요청이 아닌) 결제 에러로 분류하고 긴 재시도 백오프 (retry backoff)를 적용합니다.- 터미널 프레임이 이제 채팅 턴과 상관관계가 형성됩니다 (지연된 프레임이 더 새로운 답변을 덮어쓰지 않습니다).
설정 및 상태 (Configuration & state):
- 설정 재로드 시 이제
[registry] auto_sync가 실시간 읽기 (live-read)로 올바르게 제어됩니다 (이전에는 재시작이 필요하다고 잘못 보고되었습니다). api_key_hash는 업그레이드 힌트를 재생성하며, 전송 가능한 키가 없는 경우 경고를 표시합니다.http_compat서버 라운드트립 (round-trip) 시json.null과 설정되지 않은 필드를 구분합니다 (이전에는 가려진 헤더 값 (redacted header values)을 손상시켰습니다).[mcp_servers.transport]및 두 가지HttpCompat변형 모두에서 알 수 없는 키를 거부합니다 (이전에는 오타를 조용히 버렸습니다).- 설정 재로드 차이점 (diffs) 비교 시 정규화된 JSON 값을 비교합니다 (이전에는 맵 (maps)에 대해 재로드할 때마다 변경 사항을 잘못 보고했습니다).
frequency = "reactive"를 에러 없이 파싱합니다 (이전에는 아무런 효과가 없음에도 유효성 검사 에러가 발생했습니다).
세션 및 메시지 라우팅 (Session & message routing):
- no-override 지속적 디스패치 (persistent dispatch)와 동일한 락(lock) 상에서
session_id_override = canonical_entry를 직렬화 (Serialize) (동시 쓰기 시 히스토리가 유실되던 문제 해결). - 모델 컨텍스트 윈도우 (context window)의 제공자 인식 (provider-aware) 문제 해결 (이제 OpenRouter 에이전트가 8192 토큰 폴백(fallback)이 아닌 실제 윈도우 크기를 표시함).
- 모델 전환 시 지속적인
compacted_summary_session_id를 삭제하여 예산 계산 (budget math) 시 올바른 윈도우를 사용하도록 수정. session_mode = "new"로 실행되는 크론 (Cron) 작업이 이제 실행 시마다 격리됨 (이전에는 하나의for_sender_scope세션을 공유했음).GoalRunner::start가 이제 원자적 (atomic)으로 동작 (이전에는 동시 시작 시 중단 불가능한 고아 루프(orphaned loops)가 남는 문제 발생).- 비수동적 (non-passive) 에이전트가 응답 없음으로 플래그 지정되는 현상 중단 (하트비트 모니터가 잘못된 스케줄 체크를 사용하고 있었음).
도구 및 기술 실행 (Tools & skill execution):
- MCP 도구를 렌더링할 때
tool_allowlist를 적용 (mcp_notion__*와 같은 글로브 패턴 (glob patterns)을 무시하던 문제 해결). - MCP 도구 실행 시에도 표시뿐만 아니라
tool_allowlist를 적용. - 기술
description(설명) 및 도구 이름이 프롬프트 인젝션 스캐너 (prompt-injection scanner)를 우회하는 현상 방지. - 오염 휴리스틱 (taint heuristic)이 숫자 ID (
note-12345-67890.pdf) 및 긴 숫자 배열을 오탐 (false-positive)으로 차단하는 현상 방지. - 권한을 부여할 수 없는 도구 허용 목록 (tool allowlist) 항목은 이제 응답에 명시됨 (조용히 아무 작업도 하지 않는 no-ops 방지).
read_artifact결과가 재-스필 게이트 (re-spill gates) 적용 대상에서 제외됨 (spill_threshold_bytes보다 큰 결과에 대해 아티팩트 가져오기가 루프를 돌던 문제 해결).
데이터 정확성 (Data correctness):
- 세션 상세 엔드포인트 (Session detail endpoint)가 이제
cost_usd,total_tokens,duration_ms및label을 보고합니다 (이전에는 네 가지 항목이 모두 누락되었습니다). - 목표 생성 (Goal creation) 시 이제 빈
parent_id/agent_id를 "absent"로 정규화하고, 비어 있지 않은 UUID를 사전에 검증합니다. - 에이전트 중지 (Stop agent) 시 공유 지식 엔티티 (shared knowledge entities)가 조용히 고아 상태가 되는 문제를 해결했습니다 (이전에는 엔티티 소유권 모델을 파괴했습니다).
- 수동 활성화 (hand activation) 시
mode = "full"실행 정책을 허위로 생성하는 문제를 해결했습니다 (이전에는 승인 대기열을 조용히 우회했습니다). agent kill시 감사 추적 (audit trail) 행을 삭제하는 문제를 해결했습니다 (이전에는 WORM Merkle 체인을 파괴했습니다).- 부분적인
[channel_overrides]테이블이 그룹 메시지를 차단하던 문제를 해결했습니다 (이전에는 설정되지 않은 필드에 대해 기본값을 실체화했습니다).
네트워크 및 스토리지 (Network & storage):
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기