<p align="center">
<img src="https://raw.githubusercontent.com/lukacf/meerkat/HEAD/.github/meerkat-logo.png" alt="Meerkat" width="280">
</p>
<h1 align="center">Meerkat</h1>
<p align="center">
<strong>에이전트를 구축하고, 호스팅하고, 운영하기 위한 라이브러리 중심의 Rust 플랫폼입니다.</strong>
</p>
<p align="center">
<a href="#quick-start">빠른 시작</a> •
<a href="#what-meerkat-provides">기능</a> •
<a href="#surfaces">인터페이스</a> •
<a href="#architecture">아키텍처</a> •
<a href="https://docs.rkat.ai">문서화</a>
</p>
<p align="center">
<img src="https://img.shields.io/badge/Rust-1.94+-orange?logo=rust" alt="Rust 1.94+">
<img src="https://img.shields.io/badge/License-MIT%2FApache--2.0-blue" alt="License">
</p>
Meerkat은 고정된 에이전트 사용자 경험(UX)이 아닌, 공유되는 에이전트 런타임을 제공합니다.
그의 Rust 크레이트들은 에이전트 실행, 타입 지정 이벤트(typed events), 프로바이더(providers), 도구(tools), 영속성(persistence), 런타임 제어, 그리고 다중 에이전트 오케스트레이션(multi-agent orchestration)을 담당합니다. CLI, REST, JSON-RPC, MCP, Python, TypeScript, 그리고 브라우저/WASM 인터페이스는 이와 동일한 계약(contracts)을 사용합니다.
빠른 시작
brew install lukacf/meerkat/rkat
export RKAT_OPENAI_API_KEY="sk-..."
rkat run "What is the capital of France? Answer in one sentence."
Homebrew tap은 macOS와 Linux를 지원합니다. 다른 설치 경로는 다음과 같습니다:
cargo install rkat
pip install meerkat-sdk
npm install @rkat/sdk
...
GitHub 릴리스 에셋은 바이너리당, 타겟별로 하나의 아카이브를 제공합니다 (rkat-<버전>-<타겟>.tar.gz, rkat-rpc, rkat-rest, 그리고 rkat-mcp도 동일). 여기에는 checksums.sha256 파일이 포함됩니다. quickstart에서는 Homebrew 없이 Linux를 설치하는 방법을 보여줍니다. cargo install rkat은 소스에서 빌드하여 rkat만 설치합니다. Building and deploying를 참조하세요. Python 및 TypeScript SDK는 호환되는 rkat-rpc를 해결하며, 이를 자동으로 다운로드할 수 있습니다. 새 릴리스로 이동하려면 Upgrading을 참조하세요.
<details>
<summary>Provider 환경 변수</summary>
| Provider | Resolution order |
|---|
| Anthropic | RKAT_ANTHROPIC_API_KEY, ANTHROPIC_API_KEY |
| ... | |
| If both public OpenAI 및 비접두사 Azure 변수가 모두 존재하는 경우, 공개 OpenAI가 우선합니다. 접두사가 붙은 Azure 선택자 중 어느 것을 설정하든 완전한 접두사 Azure 선택자 또는 폴백(fallback) Azure 키/엔드포인트 쌍이 OpenAI 환경 기본값이 됩니다. | |
</details>
Meerkat의 OpenAI/글로벌 카탈로그 기본값은 gpt-6-astra입니다. 명시적인 모델 및 바인딩 기본값은 유지됩니다. 카탈로그 지원은 API 조직이나 Azure, Copilot 또는 사용자 지정 백엔드를 통한 접근을 보장하지 않습니다. 필요할 때 사용 가능한 모델을 명시적으로 선택하세요:
rkat run --model gpt-5.5 "Explain async/await"
일치하는 카탈로그 모델을 선택하여 다른 Provider를 사용하세요:
rkat run --model claude-sonnet-4-6 "Explain async/await"
rkat run --model gemini-3.8-flash "Explain async/await"
rkat models
요청된 HTML 아티팩트를 브라우저에 렌더링하세요:
rkat run --browser \
"Create a one-page comparison of the REST, JSON-RPC, and MCP surfaces"
프로세스 간 상태 공유
CLI는 기본적으로 안정적인 작업 공간 영역(workspace realm)을 파생합니다. Bare server/SDK 실행은 신선하고 격리된 영역을 사용합니다. 여러 서피스가 세션과 구성을 공유해야 하는 경우 명시적인 ID를 전달하세요:
rkat --state-root /srv/meerkat/realms --realm team-alpha run "릴리스 노트 초안 작성"
rkat-rpc --state-root /srv/meerkat/realms --realm team-alpha
프로세스는 또한 동일한 물리적 스토리지 제공자/루트를 해결해야 합니다. Realm ID만으로는 두 개의 관련 없는 호스트 파일 시스템을 공유하게 만들지 못합니다.
영구 자격 증명 사용하기
rkat auth login openai
rkat auth profiles
rkat run --model gpt-5.6-sol \
...
rkat auth login은 홈 루트의 global realm을 프로비저닝하며, 워크스페이스 realm이 이를 상속받습니다. 대화형 OpenAI 로그인은 ChatGPT OAuth 백엔드를 사용합니다. openai_api API 키와 ChatGPT/Codex 구독 자격 증명은 별개의 계정 표면이며 서로 다른 모델 세트를 노출할 수 있습니다.
rkat auth login copilot은 GitHub 기기 인증을 사용하여 OpenAI, Anthropic, Gemini 계열 Copilot 경로를 하나의 공유 github_copilot 자격 증명 계정에 백업합니다. 계정 모델 가용성은 동적으로 발견되며, Meerkat 카탈로그는 제공자/모델 권한을 유지합니다.
전체 설정 경로는 quickstart, auth guide, realm guide를 참조하십시오.
Meerkat이 제공하는 것들
에이전트 실행
핵심 루프는 스트리밍 모델 호출, 병렬 도구 배치, 구조화된 출력, 재시도, 예산(budgets), 압축(compaction), 중단(interrupts), 그리고 타입이 지정된 터미널 결과를 처리합니다. 영구 세션은 진행 중인 이벤트와 별개로 커밋된 기록을 노출하며, 하나의 세션은 한 번에 최대 하나의 턴만 실행할 수 있습니다.
주요 라이프사이클 모델은 TLC를 사용하여 선언된 불변성(invariants)과 확인되고 생성된 런타임 권한에 연결됩니다. 스키마/런타임 일치 게이트와 통합 테스트는 이러한 경계가 지정된 검사를 보완하며, 그 범위는 임의의 Rust 구성이 아닌 선언된 모델입니다.
Realm, Config, 그리고 스토리지
A realm은 세션(sessions), 설정(config), 인증 바인딩(auth bindings), 런타임 상태(runtime state), 스케줄(schedules), WorkGraph, 작업(jobs), 블롭(blobs), 아티팩트(artifacts), 그리고 모바일(mob) 상태를 범위화합니다. 내장 SQLite는 이 일곱 가지 영역 저장소 도메인 전체를 영속화합니다. JSONL은 세션에 더해 SQLite 기반의 런타임, WorkGraph, 작업 상태 및 파일 시스템 블롭/아티팩트를 영속화하지만, 스케줄링 기능은 의도적으로 비활성화합니다. 메모리는 명시적으로 휘발성(ephemeral)입니다. 외부 저장소 제공업체는 필요한 모든 도메인에 대한 내구성을 선언해야 하며, 미선언된 비영속적 내구성 슬롯이 있을 경우 닫힘 실패(fail closed) 방식을 따릅니다.
설정은 선택적인 상위 체인(parent chain)과 구성된 global 끝을 통해 루트부터 합성됩니다. 상태는 절대 상속되지 않습니다. Generation CAS는 클라이언트 간에 손실되는 설정 업데이트를 방지합니다.
제공업체 및 모델 카탈로그
Anthropic, OpenAI, Gemini, Azure/클라우드 변형, 그리고 구성된 OpenAI 호환 자체 호스팅 모델은 하나의 모델 레지스트리와 제공업체 런타임을 사용합니다. 정확한 카탈로그 소유권이 제공업체를 선택하며, 모델 이름 접두사는 절대 추측되지 않습니다. 기능 프로필(Capability profiles)은 컨텍스트/출력 제한, 추론, 멀티모달 입력, 제공업체 네이티브 도구, 실시간성, 그리고 도구 가시성을 관리합니다.
현재 카탈로그 기본값:
| 제공업체 | 기본값 |
|---|
| Anthropic | claude-opus-5-5 |
| ... | |
| 런타임 모델 폴백(fallback)은 경계가 있으며 기능 인지적입니다. 수락된 폴백은 자격 증명을 재해결하고 새로운 모델/제공업체 식별자를 이후 턴과 복구에 대해 고정(sticky)시킵니다. | |
인증 및 바인딩
백엔드 프로필은 요청이 어디로 가는지 설명합니다. 인증 프로필은 자격 증명이 어떻게 얻어지는지 설명합니다. 바인딩은 호환되는 백엔드/인증 쌍을 결합하며 모델 및 정책 기본값을 포함할 수 있습니다. 세션은 구조적 바인딩 참조만 영속화하며, API 키나 액세스 토큰은 절대 영속화하지 않습니다.
자격 증명 소스에는 환경 변수, 관리형 스토어 OAuth, 플랫폼 기본값, 호스트 리졸버, 명령어, 파일 디스크립터, 그리고 로컬 개발을 위한 인라인 비밀(inline secrets)이 포함됩니다. 바인딩 읽기는 영역 설정(realm config)을 통해 상속되며, 자격 증명 쓰기는 바인딩을 소유하는 영역에 엄격하게 유지됩니다.
도구, MCP, 훅 및 기술
애플리케이션은 내장 기능(builtins), 셸 정책(shell policy), MCP 서버, 스킬, 의미론적 메모리(semantic memory), 스케줄(schedules), WorkGraph, 통신(comms), 그리고 모브 도구(mob tools)를 사용하여 사용자 지정 디스패처를 구성합니다. 도구는 지연 로딩(lazily discovered)될 수 있으며, 모델 기능별로 필터링하고, 세션/턴/프로필별로 범위를 지정하며, 런타임 소유의 라이브 서피스를 통해 업데이트됩니다.
여덟 개의 타입이 지정된 후크 포인트는 포그라운드/백그라운드 및 관찰(observe)/가드레일 의미론을 사용하여 실행(run), 모델, 도구, 그리고 턴 경계를 다룹니다.
스케줄링, WorkGraph, 작업, 그리고 승인
Durable schedules는 한 번, 간격, 또는 달력 트리거를 통해 세션, ID, 모브, 또는 신뢰할 수 있는 호스트 실행 가능한(runnable) 대상을 목표로 합니다. 발생 기록은 중첩(overlap), 미실행(misfire), 그리고 누락된 대상 정책을 유지합니다.
WorkGraph는 목표, 작업 항목, 클레임, 링크, 증거, 최종 상태, 그리고 주의 집중 제어에 대한 영역 범위의 커밋 그래프입니다.
Durable jobs는 승인된 작업을 하나의 클라이언트 연결에서 분리합니다. JSON-RPC와 SDK는 작업 관찰(observation), 취소(cancellation), 재시도(retry), 구독(subscriptions), 그리고 높은 신뢰도의 monitors/start 제출 경로를 노출합니다. 다른 작업들은 백그라운드 셸/콜백 구성, 스케줄, 또는 호스트 임베딩을 통해 진입합니다. 작업 출력은 블롭으로 저장되어 세션으로 다시 전달될 수 있습니다.
JSON-RPC의 approval/* 계열은 요청 및 결정 감사 기록(audit records)을 유지합니다. 이들은 RPC 영속성 번들(persistence bundle)이 스토어 경로를 노출할 때 하나의 호스트 파일 사이드카에 지속됩니다. 그러지 않은 임시 번들은 이를 프로세스 로컬로 유지합니다. 이러한 메서드는 도구 실행을 자동으로 제한하지 않습니다. 신뢰할 수 있는 호스트 또는 인증된 프록시는 결정 행위자(decision actors)를 승인하고, 적용하고자 하는 모든 효과 정책에 승인 기록을 연결해야 합니다.
다중 에이전트 모브 및 통신
모브는 안정적인 ID, 역할 프로필, 예산, 도구/권한 범위, 서명된 피어 통신, 토폴로지, 그리고 흐름을 가진 세션 기반의 재사용 가능한 팀입니다. 제어 호스트가 명단(roster), 배치(placement), 권한 부여(grants), 그리고 해체(teardown)를 소유합니다. 경계 멤버 호스트는 명시적인 배치를 통해 원격으로 멤버들을 구현할 수 있으며, 브라우저/WASM 모브는 단일 호스트로 남아 있습니다.
에이전트는 일반 메시지 또는 타이핑된 요청/응답 워크플로우를 사용하며, 큐(queue) 또는 스티어(steer) 처리 모드와 호스트에서 보이는 전송 확인(host-visible delivery receipts) 기능을 갖춥니다.
라이브 채널 (Live Channels)
gpt-realtime-2 세션은 모델 게이팅된 정지 이미지 컨텍스트를 통해 낮은 지연 시간의 오디오/텍스트 채널을 열 수 있습니다. JSON-RPC 패밀리에는 live/open, live/status, live/send_input, live/commit_input, live/interrupt, live/truncate, live/refresh, live/close가 포함되며, WebRTC 시그널링은 live/webrtc/answer를 통해 이루어집니다.
최소한 하나의 전송 방식을 활성화해야 합니다:
rkat-rpc --live-ws <addr>는 /live/ws를 노출하며, WebSocket을 이용한 live/open은 연결 부트스트랩(connection bootstrap)을 반환합니다.
live-webrtc와 함께 빌드하고 rkat-rpc --live-webrtc를 사용하면 WebRTC 토큰이 live/open을 통해 생성됩니다. 클라이언트는 자신의 SDP 오퍼(SDP offer)를 live/webrtc/answer로 전송하고 SDP 답변(SDP answer)을 받습니다.
이미지 생성, 블롭 및 아티팩트 (Image Generation, Blobs, And Artifacts)
generate_image는 활성 채팅 모델과 독립적으로 OpenAI 또는 Gemini 이미지 프로파일을 통해 라우팅됩니다. 생성된 바이트(bytes)는 리얼름 블롭 스토리지(realm blob storage)에 존재하며, 블롭을 노출하는 모든 호스트 표면(host surface)을 통해 가져올 수 있습니다. 안정적인 아티팩트 레코드(Stable artifact records)는 원시 블롭 위에 타이핑된 메타데이터와 다운로드 식별자(download identity)를 추가합니다.
웹/WASM 및 모브팩 (Web/WASM And Mobpacks)
@rkat/web은 브라우저의 MeerkatRuntime, 세션, 모브(mobs), 이벤트 구독, JavaScript 도구, 제공자 프록시(provider proxies) 및 호스트 페이지 인증 해결사(host-page auth resolvers)를 래핑합니다.
Mobpack은 정의와 에셋을 선택적 Ed25519 서명과 함께 휴대 가능한 아티팩트로 패키징합니다:
rkat mob pack ./mobs/release-triage -o dist/release-triage.mobpack
rkat mob inspect dist/release-triage.mobpack
rkat mob validate dist/release-triage.mobpack --trust-policy permissive
...
자체 호스팅 모델 (Self-Hosted Models)
OpenAI와 호환되는 서버와 하나 이상의 모델 별칭(model aliases)을 등록합니다:
[self_hosted]
default_model =
서버 항목에는 연결 사실만 포함됩니다. `provider = "self_hosted"`에 대한 렐름 바인딩을 구성하고 백엔드 프로필에서 서버를 식별하세요. 레거시 `bearer_token_env`와 같은 자격 증명 필드는 서버 항목에서 거부됩니다. 인증 없는(authless), API 키, 및 bearer 예제는 [Self-hosting models](https://docs.rkat.ai/guides/self-hosting-models)를 참조하세요.
| Surface | Use case | Documentation |
|---------|----------|---------------|
| Rust facade | 에이전트 및 런타임 서비스 임베딩 | [Rust SDK](https://docs.rkat.ai/rust/overview) |
| ... |
```mermaid
flowchart TD
SF["Rust, CLI, REST, RPC, MCP, SDKs, Web/WASM"] --> F["Facade and Session Services"]
F --> C["Agent Core and Provider Runtime"]
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
meerkat-core가 에이전트 및 공개 라이프사이클 계약을 소유합니다. meerkat/AgentFactory는 제품 기능을 구성합니다. meerkat-runtime은 제어 평면(control plane)과 머신 통합을 소유합니다. meerkat-session은 서비스 프로필을 구현하고, 스토어 크레이트(store crates)가 물리적 영속성(persistence)을 담당합니다. Surface 크레이트는 별도의 에이전트 엔진이라기보다는 이러한 구성 위에 덧씌워진 외피입니다.
상세한 크레이트 소유권, 구성 경로 및 실패 도메인에 대해서는 architecture reference를 읽어보세요.
Embedded Rust
공개 meerkat::AgentBuilder는 명시적인 클라이언트, 도구 및 스토어 재정의(override)가 가능하면서도 AgentFactory를 통해 라우팅됩니다. 이는 단일 임베디드 구성 요소에 유용한 StandaloneEphemeral 런타임 모드로 기본 설정됩니다: