fronalabs/frona
요약
Frona는 보안과 통제권을 중심에 둔 개인용 자율 AI 에이전트 플랫폼입니다. Rust로 작성된 엔진을 통해 샌드박스 환경에서 코드 실행, 웹 브라우징, 애플리케이션 구축 등의 작업을 안전하게 수행하며, 사용자가 자체 인프라에 직접 배포하여 데이터 주권을 유지할 수 있습니다.
핵심 포인트
- 주체별 샌드박싱(Per-principal sandboxing)을 통해 각 액터를 독립된 Linux 프로세스로 격리하여 보안 사고의 영향 범위를 최소화합니다.
- 단일 정책 엔진을 사용하여 도구 접근 권한과 샌드박스 규칙을 통합 관리함으로써 권한 부여와 격리의 일관성을 보장합니다.
- 1Password, Bitwarden 등 외부 자격 증명 관리 도구를 지원하며, 비밀 정보가 LLM 제공업체로 전송되지 않도록 설계되었습니다.
- 신뢰할 수 없는 메시지에 대해 이중 LLM 디스패치(Dual LLM dispatch)를 적용하여 악의적인 도구 실행 및 데이터 유출을 방지합니다.
- Rust 기반의 가볍고 빠른 엔진을 사용하여 별도의 데몬 없이도 효율적인 샌드박스 생성 및 회수가 가능합니다.
Frona는 개인용 AI 어시스턴트입니다. 여러분은 웹 브라우징, 코드 실행, 애플리케이션 구축, 전화 걸기, 메시징 채널 연결, 서로에게 작업 위임, 그리고 대화 전반에 걸친 문맥(Context) 기억 등을 수행하는 자율 에이전트(Autonomous agents)를 생성할 수 있습니다. 이 모든 과정은 여러분의 파일, 네트워크 및 자격 증명(Credentials)에 대한 접근이 제어되는 샌드박스 환경(Sandboxed environments) 내에서 이루어집니다. 여러분이 작업을 부여하면, 에이전트가 이를 완수할 방법을 스스로 찾아냅니다.
Frona를 여러분의 자체 인프라에 배포하여 데이터에 대한 완전한 통제권을 유지하십시오. 이 플랫폼은 처음부터 보안을 염두에 두고 설계되었으며, 엔진은 Rust로 작성되었습니다. 따라서 빠르고 가볍고, 모든 것을 단일 프로세스 내에서 실행합니다.
Frona를 다른 오픈 소스 에이전트 플랫폼과 비교하고 싶으신가요? Frona vs. OpenClaw vs. Hermes Agent를 확인해 보세요.
AI 에이전트는 강력합니다. 코드를 실행하고, 웹사이트를 탐색하며, 여러분의 데이터에 접근할 수 있습니다. 어떤 플랫폼도 LLM(Large Language Models)을 완벽하게 안전하게 만들 수는 없습니다. 에이전트는 실수를 할 것입니다. 목표는 그러한 실수를 격리하고, 실수가 발생했을 때 그 영향 범위(Blast radius)를 줄이는 것입니다.
주체별 샌드박싱 (Per-principal sandboxing): 모든 액터(에이전트, MCP 서버, 앱, 채널)는 고유한 정책을 가진 독립된 주체(Principal)입니다. 각 CLI 도구 호출, 각 MCP 서버, 각 배포된 앱은 정책 기반의 시스템 호출 필터링(Syscall filtering)이 적용된 자체 샌드박스 Linux 프로세스에서 실행됩니다. 에이전트당 Docker 컨테이너를 생성하거나 관리할 데몬(Daemon)이 필요하지 않습니다. 엔진이 필요에 따라 샌드박스를 생성하고 회수합니다.
단일 정책 엔진 (One policy engine): 도구 접근 권한과 샌드박스 규칙(읽기/쓰기 경로, 네트워크 목적지, 포트 바인딩)은 동일한 정책 언어로 작성되며 단일 엔진에 의해 평가됩니다. 하나의 언어, 하나의 결정 지점을 통해 권한 부여(Authorization)와 격리(Isolation) 사이에 별도의 글루 코드(Glue code)가 필요하지 않습니다.
격리된 브라우저 세션 (Isolated browser sessions): 각 사용자는 별도의 브라우저 프로필을 가집니다. 서로 다른 자격 증명은 별도의 브라우저 상태를 가집니다. 한 사용자의 쿠키와 세션은 다른 사용자에게 절대 노출되지 않습니다.
자격 증명 금고 (Credential vault): 에이전트는 자격 증명이 필요할 때 요청하며, 여러분은 실시간으로 이를 승인하거나 거부할 수 있습니다. 1Password, Bitwarden, HashiCorp Vault 및 KeePass를 지원합니다.
비밀 정보(Secrets)는 에이전트 메모리에 저장되지 않으며 LLM 제공업체로 전송되지도 않습니다.
인바운드(Inbound) 시 이중 LLM 디스패치 (Dual LLM dispatch): 신뢰할 수 없는 채널 메시지는 제한된 도구 레지스트리(tool registry)를 가진 격리된 LLM으로 라우팅될 수 있습니다. 이를 통해 악의적인 인바운드 메시지가 에이전트를 속여 도구를 실행하게 하거나 에이전트를 대신하여 데이터를 유출하는 것을 방지할 수 있습니다.
설계 단계부터 고려된 셀프 호스팅 (Self-hosted by design): 데이터는 귀하의 서버에 머뭅니다. 귀하는 어떤 LLM 제공업체를 사용할지 선택할 수 있으며, 트래픽은 귀하의 인스턴스에서 해당 제공업체로 직접 전송됩니다.
도구를 갖춘 자율 에이전트 (Autonomous agents with tools): 에이전트는 어떤 도구를 사용할지 스스로 결정하고 다단계 작업을 독자적으로 수행합니다. 에이전트는 스스로 도구를 구축할 수도 있습니다.
채널 (Channels): 에이전트를 메시징 채널에 연결하여 동일한 메모리와 도구를 가진 동일한 에이전트가 웹 UI 외부에서도 귀하를 팔로우할 수 있게 합니다. 페어링 흐름(Pairing flows)은 기본적으로 채널을 귀하의 장치에 고정합니다.
시그널 (Signals): 에이전트는 대화를 일시 중지하고 일치하는 인바운드(2FA 코드, 답장, 특정 유형의 메시지 등)를 기다린 후, 무언가가 도착하면 자동으로 재개할 수 있습니다. 또는 구조화된 결과를 생성하는 지속적인 모니터링을 실행할 수 있습니다.
브릿지 모드를 지원하는 MCP (MCP with bridge mode): 공개 레지스트리에서 Model Context Protocol (MCP) 서버를 클릭 한 번으로 설치할 수 있습니다. 브릿지 모드는 단일 mcpctl을 광고합니다.
개별 MCP 도구 대신 LLM에 단일 mcpctl CLI를 제공하여, 많은 서버가 연결된 에이전트의 경우 턴당 수천 개의 토큰을 절약할 수 있습니다.
브라우저 자동화 (Browser automation): Browserless를 통한 headless Chrome을 사용하여 웹사이트 탐색, 양식 채우기 및 데이터 추출을 수행합니다. 지속적인 브라우저 프로필 (Persistent browser profiles)을 통해 대화 전반에 걸쳐 세션을 유지합니다.
웹 검색 (Web search): SearXNG, Tavily 또는 Brave Search를 통한 내장 검색을 제공합니다.
코드 실행 (Code execution): 원칙별 파일 시스템, 네트워크 및 리소스 제한이 적용된 샌드박스 쉘 (sandboxed shell), Python 및 Node.js를 지원합니다.
앱 배포 (App deployment): 에이전트가 사용자를 대신하여 웹 애플리케이션과 서비스를 구축하고 배포하며, 모든 것이 라이브로 전환되기 전에 승인 워크플로 (approval workflow)를 거칩니다.
기술 (Skills): 에이전트에게 새로운 능력을 가르치는 지침 패키지입니다. 공유 기술을 설치하거나 에이전트 전용 기술을 생성할 수 있습니다.
스케줄링 및 하트비트 (Scheduling and heartbeats): cron을 통한 반복 작업과 지속적인 모니터링을 위한 에이전트 관리형 하트비트 체크리스트를 제공합니다.
음성 통화 (Voice calls): 음성 인식 및 DTMF 탐색 기능이 포함된 Twilio를 통한 발신 전화 (선택 사항)를 지원합니다.
지속적 메모리 (Persistent memory): 에이전트는 자동 압축 및 중복 제거를 통해 대화 전반에 걸쳐 사실을 기억합니다. 사용자 범위 (User-scoped) 사실은 에이전트 간에 공유되며, 에이전트 범위 (Agent-scoped) 사실은 비공개로 유지됩니다.
에이전트 간 위임 (Agent-to-agent delegation): 에이전트가 전문화된 에이전트에게 작업을 전달하고 결과를 다시 받아옵니다.
스페이스 (Spaces): 컨텍스트를 공유하는 그룹 대화입니다. 플랫폼은 연결된 대화를 요약하여 새로운 채팅에 컨텍스트를 제공합니다.
알림 (Notifications): 에이전트가 상태 업데이트(작업 완료, 앱 배포됨, 자격 증명 승인 필요 등)를 상단 바의 피드로 푸시하여 중요한 사항을 놓치지 않게 합니다.
실시간 스트리밍 (Real-time streaming): Server-Sent Events를 통한 토큰 단위 응답 스트리밍을 지원합니다.
SSO: Google, Keycloak 및 기타 OIDC 제공업체를 통한 단일 로그인 (Single sign-on)을 위한 OpenID Connect 지원을 제공합니다.
단일 컨테이너 배포 (Single-container deployment): 전체 백엔드(API 서버, 임베디드 데이터베이스, 스케줄러, 도구 실행)가 하나의 rootless OCI 컨테이너(Docker, Podman 및 기타 OCI 런타임과 호환)에서 실행됩니다. 규모가 커지더라도 에이전트별 컨테이너를 생성하지 않습니다.
**에이전트 (Agents)**는 핵심 구성 요소입니다. 각 에이전트는 이름, 동작을 정의하는 시스템 프롬프트 (System Prompt), 사용할 LLM을 결정하는 모델 그룹 (Model Group), 그리고 접근 가능한 도구 (Tools) 목록을 가집니다. Frona는 기본 에이전트(Assistant, Researcher, Developer, Receptionist)를 제공하며, 사용자가 직접 자신만의 에이전트를 생성할 수도 있습니다. **정책 (Policies)**은 도구 호출 (Tool calls), 위임 (Delegations), 파일 읽기 (File reads), 네트워크 연결 (Network connections), 인바운드 채널 메시지 (Inbound channel messages) 등 모든 동작을 승인합니다. 동일한 엔진이 도구 접근과 샌드박스 (Sandbox) 규칙을 제어하므로, 권한 부여 (Authorization)는 한 곳에서 관리됩니다. **메모리 (Memory)**를 통해 에이전트는 대화 전반에 걸쳐 정보를 기억할 수 있습니다. 사용자 범위의 사실 (User-scoped facts, 모든 에이전트 간 공유)과 에이전트 범위의 사실 (Agent-scoped facts, 특정 에이전트 전용)이 존재합니다. 플랫폼은 시간이 지남에 따라 메모리를 자동으로 압축하고 중복을 제거합니다. **도구 (Tools)**는 에이전트에게 부여하는 기능입니다. 브라우저 자동화 (Browser automation), 웹 검색 (Web search), 파일 작업 (File operations), 셸 명령 (Shell commands), 음성 통화 (Voice calls), 작업 스케줄링 (Task scheduling) 등이 포함됩니다. 도구는 서버 측 (Server-side)에서 실행되며 에이전트에게 결과를 반환합니다. **MCP 서버 (MCP servers)**는 일급 시민 (First-class citizens)으로 취급됩니다. 각 서버는 자체 파일 시스템, 네트워크 및 리소스 정책을 가진 고유한 주체 (Principal)로서 자체 샌드박스에서 실행되며, 기본적으로 브릿지 모드 (Bridge mode)를 통해 에이전트에게 도구를 노출합니다. **채널 (Channels)**은 에이전트를 메시징 제공업체와 연결합니다. 각 채널은 단일 에이전트 및 공간 (Space)에 바인딩되며, 정책으로 제어되는 receive_message 및 receive_signal 액션이 인바운드 (Inbound)가 수행할 수 있는 작업을 결정합니다. **신호 (Signals)**는 "X가 발생할 때까지 대기"하는 작업입니다. 에이전트는 await_signal을 호출합니다.
그리고 인바운드 메시지가 일치할 때 대화가 재개됩니다. **작업 (Tasks)**은 작업 단위를 나타냅니다. 작업은 직접 실행(즉시 실행), 위임(한 에이전트에서 다른 에이전트로), 또는 예약(cron 표현식을 통한 반복)될 수 있습니다. **채팅 (Chat)**은 에이전트와 상호작용하는 방식입니다. 각 대화는 하나의 에이전트에 속하지만, 위임을 통해 여러 에이전트가 대화에 참여할 수 있습니다. 메시지는 Server-Sent Events를 통해 실시간으로 스트리밍됩니다. **스페이스 (Spaces)**는 동일한 컨텍스트를 공유하는 채팅 그룹입니다. 대화를 스페이스에 연결하면, 플랫폼은 해당 대화들을 요약하여 새로운 채팅에 컨텍스트를 다시 제공합니다. **기술 (Skills)**은 에이전트에 설치하는 지침 패키지입니다. 이는 내장형(built-in), 모든 에이전트 간 공유형, 또는 단일 에이전트 전용(scoped)으로 구축될 수 있습니다.
Docker 또는 Podman과 같이 Compose v2를 지원하는 OCI 런타임이 필요합니다.
# docker-compose.yml
services:
frona:
...
docker compose up -d # 또는: podman compose up -d
http://localhost:3001 접속
설정 마법사가 계정 생성 및 LLM 제공업체(provider) 구성을 안내합니다.
환경 설정이 포함된 전체 배포 방식은 docker-compose 예시를, 상세 가이드는 문서를, 플랫폼의 실제 작동 모습은 스크린샷을 참조하십시오.
Frona는 설정에서 제공업체를 자동으로 탐색하고 서로 다른 작업을 적절한 제공업체로 라우팅합니다. 설정 파일에서 이를 구성하십시오.
LLM: Anthropic, OpenAI, Google Gemini, DeepSeek, Mistral, Cohere, xAI (Grok), Groq, OpenRouter, Together, Perplexity, Hyperbolic, Moonshot, Hugging Face, Mira, Galadriel, Ollama (로컬).
검색 (Search): SearXNG (자체 호스팅), Tavily, Brave Search.
음성 (Voice): Twilio.
채널 (Channels): Telegram, SMS (추가 예정).
Frona는 두 가지 주요 구성 요소로 이루어져 있습니다:
엔진 (Engine): 에이전트(Agents), 채팅(Chat), 도구(Tools), 인증(Authentication), 정책 엔진(Policy Engine)을 처리하며, RocksDB 스토리지와 함께 임베디드된 SurrealDB 데이터베이스를 사용하는 Rust 백엔드 (Axum)입니다. 엔진은 도구 호출(Tool calls), MCP 서버 및 앱을 위해 샌드박스화된 자식 프로세스(Sandboxed child processes)를 생성하며, 에이전트마다 컨테이너를 실행하지는 않습니다.
프론트엔드 (Frontend): 채팅 인터페이스, 에이전트 관리 및 워크스페이스 UI를 제공하는 Next.js 애플리케이션입니다.
특정 기능을 위해 다음과 같은 외부 서비스가 플러그인 형태로 연결됩니다:
Browserless: 브라우저 자동화를 위한 헤드리스 Chrome (Headless Chrome)
SearXNG: 웹 검색 (Web search)
Twilio: 음성 통화 및 SMS (선택 사항)
모든 요소는 OCI 컨테이너에서 실행되며, 모든 OCI 호환 런타임 (Docker, Podman 등)과 함께 작동합니다. 일반적인 배포 방식은 엔진, 프론트엔드 및 지원 서비스를 실행하는 단일 docker-compose.yml 파일입니다. 클러스터 배포의 경우 Kubernetes 예제를 참조하십시오.
- 개요 (Overview) — Frona란 무엇이며 어떻게 작동하는가
- 퀵스타트 (Quickstart) — 몇 분 안에 Docker로 실행하기
- 비교 (Comparison) — Frona vs. OpenClaw vs. Hermes Agent
- 에이전트 (Agents) — 에이전트 유형, 구성 및 위임
- 채널 (Channels) — Telegram, SMS, 페어링 및 디스패치 모드
- 시그널 (Signals) — 수신 메시지에 따른 일시 중지 및 재개
- 도구 (Tools) — 브라우저, 검색, CLI, 음성 등
- MCP — MCP 서버 설치 및 브릿지 모드
- 샌드박스 (Sandbox) — 파일 시스템, 네트워크 및 리소스 제어
- 정책 (Policies) — 도구 및 샌드박스 규칙에 대한 정책 참조
- 자격 증명 (Credentials) — 볼트(Vault) 통합 및 승인 워크플로
- 배포 (Deployment) — Docker Compose 및 Kubernetes 가이드
모든 명령은 태스크 러너(Task runner)로 mise를 사용합니다:
mise run docker:dev # Docker에서 핫 리로드(Hot-reload)와 함께 전체 개발 스택 실행
mise run docker:prod # Docker에서 프로덕션 스택 실행
사용 가능한 모든 타겟은 mise.toml을 참조하십시오.
Frona는 Business Source License 1.1 라이선스 하에 배포됩니다. 자유롭게 사용, 수정 및 셀프 호스팅할 수 있습니다. 유일한 제한 사항은 제3자에게 서비스형 AI 에이전트 플랫폼(AI agent platform as a service)을 제공하기 위해 사용할 수 없다는 점입니다. 2029-02-28에 라이선스는 Apache 2.0으로 전환됩니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기