oxi · CLI/TUI · Rust

oxicode

터미널 AI 코딩 어시스턴트. pi(Mario Zechner)의 Rust 포팅 — Tokio · Ratatui · Serde 위에 다시 쓴 멀티 프로바이더, 스트리밍 우선, 도구 호출 에이전트.

역할
설계·구현·공개 (워크스페이스·전체 크레이트)
언어
Rust 2024 (rust 1.96+)
스택
Tokio · Ratatui · Serde · Syntect · portable-pty · nucleo
정보
MIT · 12개 workspace 멤버

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로 포팅하면서 다음을 개선했다.

3. 아키텍처

oxicode 아키텍처 다이어그램: cli → sdk → agent → ai 흐름
CLI(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급 스킬이 함께 번들된다. 모두 동일한 도구 호출 인터페이스 위에 있다.

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. 배포·보안

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.tomloxibrowser = { version = "0.16", default-features = false }가 필수 의존으로 선언되어 있다. oxicode-sdknative-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 인터페이스를 의미한다.

9. 레포지토리

⬡ github.com/project-oxi/oxicode