코딩 에이전트 구축을 위한 완전한 Rust SDK
요약
Cersei는 프로덕션급 코딩 에이전트 구축을 위해 설계된 완전한 Rust SDK입니다. 도구 실행, LLM 스트리밍, 서브 에이전트 오케스트레이션 및 MCP 통합 등 핵심 기능을 라이브러리 형태로 제공하여 Claude Code와 같은 에이전트를 직접 구축하거나 앱에 내장할 수 있게 합니다.
핵심 포인트
- Rust 언어를 기반으로 하여 높은 성능과 메모리 효율성을 제공합니다.
- 도구 실행, 지속성 메모리, 서브 에이전트 오케스트레이션 등 에이전트 구축에 필요한 모든 구성 요소를 포함합니다.
- Claude Code의 아키텍처를 역공학하여 포팅하였으며, 멀티 프로바이더를 지원합니다.
- Cersei를 기반으로 구축된 CLI 에이전트인 Abstract는 Claude Code 대비 압도적인 시작 시간과 낮은 메모리 점유율을 보여줍니다.
코딩 에이전트 (coding agents) 구축을 위한 완전한 Rust SDK입니다.
Cersei는 도구 실행 (tool execution), LLM 스트리밍 (LLM streaming), 서브 에이전트 오케스트레이션 (sub-agent orchestration), 지속성 메모리 (persistent memory), 기술 (skills), MCP 통합 (MCP integration) 등 프로덕션급 코딩 에이전트 구축에 필요한 모든 구성 요소를 조합 가능한 라이브러리 함수로 제공합니다. Claude Code의 대체제를 구축하거나, 앱에 에이전트를 내장하거나, 완전히 새로운 것을 만들어보세요.
use cersei::prelude::*;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
...
MIT License | Adib Mohsin 제작 | Docs | GitHub
| Claude Code | OpenCode | Cersei SDK | Abstract CLI | |
|---|---|---|---|---|
| 형태 (Form factor) | CLI 앱 | CLI 앱 | 라이브러리 (Library) | CLI 앱 |
| 내장 가능 여부 (Embeddable) | 아니요 | 아니요 | 예 | 아니요 (SDK 사용) |
| 제공자 (Provider) | Anthropic 전용 | 멀티 프로바이더 (Multi-provider) | 멀티 프로바이더 (Multi-provider) | 멀티 프로바이더 (Multi-provider) |
| 언어 (Language) | TypeScript | TypeScript | Rust | Rust |
| 커스텀 도구 (Custom tools) | 플러그인 (Plugins) | 플러그인 (Plugins) | impl Tool / #[derive(Tool)] | SDK를 통해 |
| 시작 시간 (Startup) | ~269ms | ~300ms | 해당 없음 (라이브러리) | ~34ms |
| 바이너리 / RSS | 174MB / 330MB | — | 해당 없음 | 5.8MB / 4.9MB |
| 메모리 (Memory) | 파일 기반 (File-based) | SQLite | 파일 + 그래프 (File + Graph) | 파일 + 그래프 (File + Graph) |
| 기술 (Skills) | .claude/commands/ | .claude/skills/ | 두 형식 모두 | 두 형식 모두 |
Cersei는 Claude Code의 아키텍처를 기반으로 구축되었으며 (역공학을 통한 Rust 포팅), 누구나 Claude Code, OpenCode 또는 모든 코딩 에이전트를 라이브러리 호출만으로 완벽하게 대체할 수 있도록 설계되었습니다.
Abstract는 Cersei를 기반으로 구축된 완전한 CLI 코딩 에이전트입니다. 단일 바이너리, 런타임 의존성 없음, 기본적으로 그래프 메모리 (graph memory)를 사용합니다.
# 설치 (Install)
cargo install --path crates/abstract-cli
# 사용 (Use)
...
모든 수치는 run_tool_bench.sh --full에서 가져왔습니다.
| 지표 (Metric) | Abstract | Claude Code | 승자 (Winner) |
|---|---|---|---|
| 시작 시간 (Startup, warm) | 32ms | 266ms | Abstract (8.2배) |
| 바이너리 크기 (Binary size) | 6.0 MB | 174 MB | Abstract (29배) |
| 메모리 (Memory, RSS) | 4.9 MB | 333 MB | Abstract (68배) |
| 도구 디스패치 (Tool dispatch) | 0.02-17ms | 5-265ms+ | Abstract |
| 메모리 회상 (Memory recall) | 98us (그래프) | 7,545ms (LLM) | Abstract (77,000배) |
| 메모리 쓰기 (Memory write) | 30us (그래프) | 20,687ms (에이전트) | Abstract (689,000배) |
| MEMORY.md 로드 | 9.6us | 17.1ms | Abstract (1,781배) |
| 순차 처리량 (Sequential throughput) | 906ms/req | 12,079ms/req | Abstract (13.3배) |
| 시스템 프롬프트 토큰 (System prompt tokens) | ~2,200 | ~8,000+ | Abstract (3.6배 적음) |
| 회상을 위한 LLM 호출 (LLM call for recall) | 불필요 | 필요 (Sonnet) | Abstract |
Claude Code의 메모리 회상은 관련성이 높은 상위 5개 파일을 순위 매기기 위해 매 턴마다 Sonnet을 호출합니다 (측정값 7.5초). Abstract의 그래프는 98마이크로초(microseconds) 내에 인덱싱된 조회를 수행합니다. 동일한 기능을 제공하면서도 LLM 호출이 필요 없으며, API 비용도 발생하지 않습니다.
전체 벤치마크: crates/abstract-cli/benchmarks/REPORT.md
- 34개의 내장 도구 (파일, 셸, 웹, 계획, 오케스트레이션, 스케줄링)
- 멀티 프로바이더 (Multi-provider): Anthropic + OpenAI (+ Ollama, Azure, vLLM)
- 그래프 메모리 (Grafeo) 기본 활성화
- 자동 압축 (Auto-compact), 자동 드림 (Auto-dream), 노력 수준 (Low/Medium/High/Max)
- MCP 서버 지원
- 세션 지속성 (Claude Code 호환 JSONL)
- 세션 캐싱을 포함한 대화형 권한 설정
- 12개의 슬래시 명령어 (
/help,/commit,/review,/memory,/model,/diff등) - 구문 강조(Syntax highlighting)가 포함된 스트리밍 마크다운 렌더링
- TOML 설정:
~/.abstract/config.toml+.abstract/config.toml - 파이핑(Piping)을 위한 JSON 출력 모드 (
--json)
[dependencies]
cersei = { git = "https://github.com/pacifio/cersei" }
tokio = { version = "1", features = ["full"] }
...
그래프 기반 메모리 사용 시 (선택 사항):
cersei-memory = { git = "https://github.com/pacifio/cersei", features = ["graph"] }
cersei Facade crate — cersei::prelude::*;
cersei-types Provider-agnostic messages, errors, stream events (공급자 불가지론적 메시지, 오류, 스트림 이벤트)
cersei-provider Provider trait + Anthropic/OpenAI implementations (Provider 트레이트 + Anthropic/OpenAI 구현체)
...
어떤 LLM 백엔드(backend)든 가능합니다. 내장 기능: Anthropic (OAuth 포함), OpenAI (Ollama, Azure, vLLM과 호환).
Agent::builder().provider(Anthropic::from_env()?) // Anthropic API key
Agent::builder().provider(OpenAi::builder()
.base_url("http://localhost:11434/v1") // Ollama
.model("llama3.1:70b").api_key("ollama").build()?)
Agent::builder().provider(MyCustomProvider) // impl Provider
코딩 에이전트(coding agent)에 필요한 모든 도구(tool)가 세트로 구성되어 있습니다:
cersei::tools::all() // 30개 이상의 도구
cersei::tools::coding() // 파일 시스템 (filesystem) + 셸 (shell) + 웹 (web)
cersei::tools::filesystem() // 읽기 (Read), 쓰기 (Write), 편집 (Edit), Glob, Grep, NotebookEdit
...
10줄 만에 만드는 커스텀 도구(custom tools):
#[derive(Tool)]
#[tool(name = "search", description = "Search docs", permission = "read_only")]
struct SearchTool;
...
병렬 워커(parallel workers)를 생성하고, 작업을 조정하며, 에이전트(agent) 간에 메시지를 전달합니다:
// AgentTool — 모델이 자율적으로 하위 에이전트(sub-agents)를 생성함
Agent::builder()
.tool(AgentTool::new(|| Box::new(Anthropic::from_env()?), cersei::tools::coding()))
...
use cersei::memory::manager::MemoryManager;
let mm = MemoryManager::new(project_root)
.with_graph(Path::new("./memory.grafeo"))?; // 선택적 그래프 (graph) 레이어
...
// 다음으로부터 기술(skills)을 자동 검색:
// .claude/commands/*.md (Claude Code 형식)
// .claude/skills/*/SKILL.md (OpenCode 형식)
...
세 가지 관찰(observation) 메커니즘:
// 1. 콜백 (Callback)
Agent::builder().on_event(|e| match e {
AgentEvent::TextDelta(t) => print!("{}", t),
...
Agent::builder()
.auto_compact(true) // 컨텍스트 (context) 사용량이 90%에 도달하면 이전 메시지 요약
.compact_threshold(0.9) // 트리거 임계값 (threshold)
...
let mcp = McpManager::connect(&[
McpServerConfig::stdio("db", "npx", &["-y", "@my/db-mcp"]),
McpServerConfig::sse("docs", "https://mcp.example.com"),
...
// 브라우저 실행, PKCE 플로우, 토큰 저장, 리프레시
cargo run --example oauth_login
Agent::builder()
// 프로바이더 (Provider, 필수)
.provider(Anthropic::from_env()?)
...
Apple Silicon에서 측정되었으며, 릴리스 빌드(release build) 기준, 3회의 워밍업(warmup) 실행을 포함한 100회 반복 측정 결과입니다.
| 도구 (Tool) | 평균 (Avg) | 최소 (Min) | 최대 (Max) |
|---|---|---|---|
| Edit | 0.04ms | 0.02ms | 0.05ms |
| ... |
참고: Cersei는 라이브러리(library)이므로 도구 디스패치(tool dispatch)가 프로세스 내부(in-process)에서 발생합니다. Claude Code는 각 서브 에이전트(sub-agent)가 포크(fork)될 때마다 전체 시작 비용을 지불해야 하는 CLI(Command Line Interface)입니다. 이들은 서로 다른 계층이며, 아래 비교는 프로세스 내부 디스패치와 CLI 프로세스 오버헤드(overhead) 사이의 격차를 보여줍니다.
| 지표 (Metric) | Cersei (SDK) | Claude Code (CLI) | 비고 (Notes) |
|---|---|---|---|
| 도구 디스패치 (Read) | 0.09ms | ~5-15ms (추정) | 프로세스 내부 vs Node.js fs |
| ... |
동일 조건의 CLI 비교를 보려면 Abstract CLI 벤치마크를 참조하십시오.
| 작업 (Operation) | Abstract (Cersei) | Claude Code (측정값) | 비율 (Ratio) |
|---|---|---|---|
| 100개 파일 스캔 | 1.2ms | 26.6ms (find) | 22x |
| MEMORY.md 로드 | 9.6μs | 17.1ms | 1,781x |
| 메모리 회상 (그래프) | 98μs | 7,545ms (LLM 호출) | 77,000x |
| 메모리 회상 (텍스트) | 1.3ms | 17.5ms (grep) | 13x |
| 세션 쓰기 | 27μs/entry | 해당 없음 (N/A) | — |
| 세션 로드 (100) | 268μs | 해당 없음 (N/A) | — |
| 그래프 저장 | 30μs/node | 해당 없음 (그래프 없음) | — |
| 주제 쿼리 | 77μs | 해당 없음 (그래프 없음) | — |
각 벤치마크(bench)는 자체 러너(runner)와 결과 스키마(schema)를 가진 독립된 디렉토리에 존재합니다. 새로운 벤치마크를 추가할 때는 형제 디렉토리로 추가하십시오.
| 스위트 (Suite) | 경로 (Path) | 측정 항목 (What it measures) | 러너 (Runner) |
|---|---|---|---|
| 일반 에이전트 프레임워크 (General-agent frameworks) | bench/general-agents/ | 에이전트별 메모리, 인스턴스화 시간, 최대 동시 에이전트 수 — Cersei vs Agno / PydanticAI / LangGraph / CrewAI. | ./bench/general-agents/run.sh |
| Terminal Bench 2.0 | bench/term-bench/ | 전체 abstract CLI를 사용하여 Daytona 샌드박스 내부에서 수행하는 엔드 투 엔드 (End-to-end) 코딩 작업 (Linux x86_64 / arm64 바이너리가 트리 내에 포함됨). | ./bench/term-bench/run.sh |
| LongMemEval (장기 메모리) | bench/long-mem/ | ICLR-25 LongMemEval 500개 질문 벤치마크에 대한 회상 정확도 — 동일한 프롬프트와 LLM-as-judge 루브릭을 사용하여 Mastra / Zep / Supermemory와 정면 대결. 네 가지 Cersei 설정: 전체 컨텍스트 베이스라인 (full-context baseline), usearch-HNSW 시맨틱 (semantic), grafeo-graph 서브스트링 (substring), LLM 사실 추출 + RRF 퓨전 (fusion)이 결합된 하이브리드 방식. | cargo run --release -p longmem-bench -- --dataset s --config all |
| 압축 (실제 LLM) | crates/cersei-agent/tests/e2e_openai_compression.rs | OpenAI (gpt-4o-mini) 및 Gemini (gemini-2.5-flash)에서 cersei-compression을 통한 입력 토큰 절감량. #[ignore] 처리됨, 실제 API 키로 실행됨. | cargo test -p cersei-agent --test e2e_openai_compression -- --ignored --nocapture |
| SDK 도구 I/O (SDK Tool I/O) | examples/benchmark_io.rs | Read / Write / Edit / Grep / Bash / Glob에 대한 프로세스 내 도구 디스패치 지연 시간 (In-process tool dispatch latency). | cargo run --example benchmark_io --release |
| SDK 메모리 I/O (SDK Memory I/O) | crates/abstract-cli/examples/memory_bench.rs | 그래프 메모리 (Graph-memory) vs 파일 시스템 (filesystem) vs Claude Code 스타일 경로 비교. | cargo run -p abstract-cli --example memory_bench --release |
| vs Claude Code CLI | run_tool_bench_claude.sh · run_tool_bench_codex.sh | CLI 대 CLI 시작, 메모리 및 디스패치 오버헤드 (overhead). | ./run_tool_bench.sh --iterations 20 --full |
# Rust 측 SDK 벤치마크 (외부 서비스 없음)
cargo run --example benchmark_io --release
cargo run --release -p abstract-cli --example memory_bench
...
cargo run --example stress_core_infrastructure --release # 시스템 프롬프트 (system prompt), 압축 (compact), 컨텍스트 (context), bash 분류기 (bash classifier)
cargo run --example stress_tools --release # 30개 이상의 모든 도구 (tools), 레지스트리 (registry), 성능 (performance)
cargo run --example stress_orchestration --release # 하위 에이전트 (sub-agents), 코디네이터 (coordinator), 작업 (tasks), 메시징 (messaging)
...
| 예제 (Example) | 설명 (Description) |
|---|---|
simple_agent | 3줄로 구성된 최소한의 에이전트 |
custom_tools | 커스텀 도구 (custom tools) 정의 및 등록 |
streaming_events | 색상이 적용된 출력을 제공하는 실시간 run_stream() |
multi_listener | 다중 소비자 (multiple consumers)를 가진 브로드캐스트 채널 (broadcast channel) |
resumable_session | JsonlMemory를 사용한 영속화 및 재개 |
custom_provider | 에코 프로바이더 (Echo provider) + OpenAI 호환 엔드포인트 (endpoints) |
hooks_middleware | 비용 가드 (cost guard) + 감사 로거 (audit logger) + 도구 차단기 (tool blocker) |
benchmark_io | 전체 I/O 벤치마크 (benchmark) 스위트 |
usage_report | 토큰 (token)/비용 (cost) 추적 및 과금 추정 |
coding_agent | Python Todo CLI 구축 (엔드 투 엔드) |
oauth_login | Anthropic OAuth PKCE 로그인 흐름 |
cargo run --example simple_agent --release
# 160개의 모든 유닛 테스트 (unit tests) 실행
cargo test --workspace
# 그래프 메모리 (graph memory)로 실행 (grafeo 필요)
...
160개 유닛 테스트 (unit tests) | 262개 스트레스 체크 (stress checks) | 0개 실패 (failures) | I/O 회귀 (regression) 0건
| 항목 (What) | 방법 (How) | 예제 (Example) |
|---|---|---|
| 커스텀 프로바이더 (Custom provider) | impl Provider | 로컬 LLM, Azure, Bedrock |
| 커스텀 도구 (Custom tool) | #[derive(Tool)] 또는 impl Tool | DB 쿼리 (query), 배포 (deploy), 검색 (search) |
| 커스텀 권한 (Custom permissions) | impl PermissionPolicy | RBAC, OAuth 범위 지정 (OAuth-scoped) |
| 커스텀 메모리 (Custom memory) | impl Memory | PostgreSQL, Redis, S3 |
| 커스텀 훅 (Custom hooks) | impl Hook | 비용 게이팅 (cost gating), 감사 로깅 (audit logging) |
| 커스텀 리포터 (Custom reporters) | impl Reporter | 대시보드 (dashboards), WebSocket 릴레이 (relay) |
| MCP 서버 (MCP servers) | 빌더 (builder)를 통한 McpServerConfig | 모든 MCP 호환 서버 |
| 스킬 (Skills) | .claude/commands/*.md | 커스텀 프롬프트 템플릿 (prompt templates) |
| 그래프 메모리 (Graph memory) | features = ["graph"] | Grafeo 관계 추적 (relationship tracking) |
cersei.pacifio.dev/docs — API 레퍼런스 (reference), 아키텍처 (architecture), 쿡북 (cookbooks), 벤치마크 (benchmarks) 및 llms.txt 지원을 포함한 전체 문서.
| 섹션 (Section) | 내용 (Content) |
|---|---|
| 빠른 시작 (Quick Start) | 10줄로 만드는 첫 번째 에이전트 |
| ... |
MIT 라이선스 (MIT License)
Copyright (c) 2025 Adib Mohsin
본 소프트웨어(이하 "Software") 및 관련 문서 파일(이하 "Software")의 복제본을 입수하는 모든 사람에게, Software를 제한 없이 취급할 수 있는 권한을 무상으로 허용합니다. 여기에는 Software의 복제본을 사용, 복사, 수정, 병합, 게시, 배포, 서브라이선스 부여 및/또는 판매할 수 있는 권한과 Software를 제공받은 사람에게 동일한 권한을 부여하는 권한이 포함되며, 다음 조건을 준수해야 합니다:
위의 저작권 고지(copyright notice)와 본 허가 고지(permission notice)는 Software의 모든 복제본 또는 상당 부분에 포함되어야 합니다.
본 Software는 상품성, 특정 목적에의 적합성 및 비침해성에 대한 보증을 포함하여(단, 이에 국한되지 않음) 명시적이든 묵시적이든 어떠한 종류의 보증 없이 "있는 그대로" 제공됩니다. 어떠한 경우에도 저자 또는 저작권자는 계약상의 행위, 불법 행위 또는 기타 방식에 관계없이 Software 또는 Software의 사용 또는 기타 거래와 관련하여 발생하는 모든 청구, 손해 또는 기타 책임에 대해 책임을 지지 않습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Codex tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기