oxi · CLI/TUI · Rust
oxicode
터미널 AI 코딩 어시스턴트. pi(Mario Zechner)의 Rust 포팅 — Tokio · Ratatui · Serde 위에 다시 쓴 멀티 프로바이더, 스트리밍 우선, 도구 호출 에이전트.
1. 무엇인가
oxicode는 LLM 기반 코딩 어시스턴트를 터미널로 끌어내린 단일 바이너리다. 설정 파일 없이 환경 변수만으로 동작하고,
10개 LLM 프로바이더(Anthropic · OpenAI · Google · DeepSeek · Mistral · Groq · Cerebras · xAI · OpenRouter · Azure)를
통합 API로 추상화했다. oxicode -p openai -m gpt-4o "..." 한 줄로 모든 프로바이더에 접근한다.
TUI는 Ratatui 기반 컴포넌트 모델이고, 마크다운 렌더링·테마·이미지 표시까지 지원한다. 세션은 JSONL로 저장되며 분기·포크·트리 탐색이 가능하다 — 대화 도중 다른 결을 시도해 보고 원래 가지로 돌아오는 워크플로우가 1급 시민이다.
2. 왜 다시 만들었나
pi(Mario Zechner)는 통일된 LLM API·에이전트 런타임·도구 호출·터미널 UI·세션 영속성을 잘 결합한 설계지만,
Rust로 포팅하면서 다음을 개선했다.
- 워크스페이스 모듈화 — 12개 workspace 멤버로 책임 분리,
cargo test --workspace로 전체 회귀 검증 - 스트리밍 우선 설계 — thinking/reasoning 토큰을 1급으로 다루고, 컴팩션·재개가 표준
- 확장 시스템 —
.so/.dylib/.dll또는 WASM 플러그인 동적 로드, 패키지 매니저로 설치/업데이트 - 멀티 에이전트 SDK —
oxicode-sdk의 빌더 패턴으로 에이전트 그룹·메시지 버스·포트 기반 어댑터 조합
3. 아키텍처
oxicode-cli)가 SDK(oxicode-sdk)를 통해 에이전트(oxicode-agent)를 띄우고,
AI 코어(oxicode-ai)에서 10개 프로바이더를 통합한다. TUI(oxicode-tui)는 SDK 위에 얹힌 얇은 표현 계층.
3.1 크레이트 구성
oxicode-ai
10개 프로바이더 통합 API · 스트리밍 · 도구 호출 · 컴팩션
oxicode-agent
에이전트 런타임 · 도구 호출 루프 · 이벤트 시스템 · MCP 클라이언트
oxicode-sdk
멀티 에이전트 SDK · 에이전트 그룹 · 메시지 버스 · 빌더 패턴
oxicode-cli
CLI 바이너리 · TUI + RPC + 포트 컴포지션 루트
oxicode-hashline
파일 편집을 위한 해시 라인 스냅샷 (해시라인 도구)
oxicode-lsp
LSP 클라이언트 — 언어 서버 통합 (정의·참조·리네임)
3.2 빌트인 스킬
10개의 1급 스킬이 함께 번들된다. 모두 동일한 도구 호출 인터페이스 위에 있다.
- Autonomous Loop — 설계→구현→검증 자가 수정 사이클
- Brainstorming — 다중 접근 비교를 통한 협업 아이디에이션
- Deep Research — 조사·분석·설계 문서화
- Reviewer · Super Review — 다축/시스템 수준 코드 리뷰
- Planner · Scout — 의존성 배치 구현 계획, 빠른 코드베이스 정찰
- Design Farmer — 디자인 시스템 구성 (색·토큰·a11y)
- Playwright CLI · Worktree — 브라우저 자동화, git worktree 관리
4. 사용법
가장 빠르게 시작하는 6가지 시나리오.
# 1) 설치 — cargo bininstall (사전 빌드 바이너리 사용)
cargo install cargo-binstall
cargo binstall oxicode-cli
# 2) 환경 변수 하나면 끝
export ANTHROPIC_API_KEY="sk-ant-..."
# 3) 인터랙티브 모드 (기본)
oxicode
# 4) 단발성 프롬프트
oxicode "Explain Rust ownership"
oxicode -p openai -m gpt-4o "Design a REST API"
# 5) 세션 — 분기/포크/트리
oxicode sessions
oxicode tree
oxicode fork <PARENT> <ENTRY>
# 6) 확장 설치
oxicode pkg install <SOURCE>
oxicode pkg list
5. 설정 레이어
설정은 5개 레이어로 적층되며, 위 레이어가 아래 레이어를 덮어쓴다.
defaults
→ ~/.oxicode/settings.toml
→ .oxicode/settings.toml
→ env vars (OXICODE_MODEL, OXICODE_PROVIDER, …)
→ CLI flags (-p, -m, --thinking, -e …) 예시 ~/.oxicode/settings.toml:
default_model = "anthropic/claude-sonnet-4-20250514"
default_provider = "anthropic"
thinking_level = "medium"
theme = "default"
temperature = 0.7
max_tokens = 4096
auto_compaction = true 6. 배포·보안
- 릴리스: GitHub Releases에
aarch64-apple-darwin.tar.gz등 사전 빌드 +SHA256SUMS무결성 검증 - SBOM: CycloneDX 1.5 형식으로
RFC-005-CI-CD-INFRA.md에 명세 - MSRV: rust 1.96,
rust-toolchain.toml로 워크스페이스 고정
7. oxicode-sdk — 멀티 에이전트 SDK
oxicode-sdk는 oxicode의 12개 workspace 멤버 중 하나로, 에이전트 그룹·메시지 버스·포트 기반 어댑터를 빌더 패턴으로 구성한다.
다른 oxi 작품과 oxi 외부의 통합에서 핵심 역할을 한다.
use oxicode_sdk::{Agent, Group, MessageBus, Port};
let planner = Agent::builder()
.name("planner")
.model("anthropic/claude-sonnet-4-20250514")
.tools([read, write, bash])
.build();
let engineer = Agent::builder()
.name("engineer")
.model("anthropic/claude-sonnet-4-20250514")
.tools([read, write, edit, grep])
.build();
let group = Group::builder()
.agent(planner)
.agent(engineer)
.bus(MessageBus::new())
.build();
let output = group.run(input).await?; 같은 SDK를 oxios가 에이전트 런타임으로 사용한다. 즉 oxicode와 oxios는 같은 에이전트 추상화를 공유한다 — oxicode CLI에서 만든 에이전트 정의가 oxios에서도 그대로 동작한다.
8. oxibrowser와의 통합
oxicode는 oxibrowser를 직접 의존한다. oxicode-agent/Cargo.toml에
oxibrowser = { version = "0.16", default-features = false }가 필수 의존으로 선언되어 있다.
oxicode-sdk는 native-browser feature로 oxibrowser-core를 끌어와
BrowserEvent를 re-export한다 (oxicode-sdk/src/lib.rs:378).
이게 가능하려면 oxicode가 browser 트레잇 레이어를 SDK에 노출한다 — 다운스트림 컨슈머가
자체 브라우저 백엔드를 구현하거나, native-browser feature로 oxibrowser-core를 그대로 쓸 수 있다.
AI 에이전트가 browser capability로 권한을 부여받은 뒤 BrowserEvent를 매칭하면
웹 자동화가 동작한다.
// oxicode-sdk consumer (custom 또는 native-browser 백엔드)
use oxicode_sdk::BrowserEvent;
match event {
BrowserEvent::PageLoaded(url) => println!("loaded: {}", url),
BrowserEvent::Console(msg) => log(msg),
_ => {}
} 참고. oxibrowser는 Playwright-compatible CDP 서버도 내장한다 — oxicode의
Playwright CLI 스킬은 외부 Playwright가 아니라 이 CDP 인터페이스를 의미한다.