TRENDSHIFT DEEP-DIVE · 2026.05.21 · can1357/oh-my-pi

omp (oh-my-pi) —
터미널에 IDE를 통째로 박아넣은 코딩 에이전트

"A coding agent with the IDE wired in." — pi-mono(Mario Zechner)의 fork, TypeScript + Rust(~55k 줄) 하이브리드. 32개 내장 도구, 14개 LSP 작업, 28개 DAP 작업, 40개+ AI 프로바이더. Claude Code·Cursor 시대에 또 다른 코딩 에이전트가 왜 필요한지 뜯어본다.

0먼저, "코딩 에이전트"가 뭔가

터미널에서 돌아가는 AI 페어 프로그래머.

2024~2025년부터 Claude Code, Cursor Agent, Aider, Codex 같은 도구들이 폭발적으로 나왔다. 공통 패턴은 — 터미널이나 IDE 안에서 AI가 직접 파일을 읽고 쓰고 명령을 실행하는 도구다. 사람이 "이거 고쳐 줘" 라고 한 마디 하면, AI가 파일을 찾아서 편집하고 테스트를 돌리고 다시 고치고 — 진짜 동료처럼 일한다.

omp(oh-my-pi)는 그 생태계에서 "하네스(harness)와 도구 표면(tool surface)을 극한까지 다듬은 버전"을 표방한다. 같은 AI 모델(Claude·GPT·Gemini)을 쓰더라도 — 주변 도구가 잘 만들어져 있으면 같은 모델이 훨씬 잘 일한다는 게 핵심 주장. README 첫 표가 그 증거다.

용어
Harness (하네스, 마구)
AI 모델 주위에 두르는 도구·환경의 총체. 모델은 같아도 하네스가 다르면 결과가 다르다. omp의 주장은 — 편집 도구를 hashline으로 바꾸고, search를 Rust로 인프로세스로 돌리고, LSP를 통합하면, 같은 Grok Code Fast 1 모델이 SWE-bench에서 6.7%→68.3%로 10배 뛴다는 것. 말과 모델 사이의 안장·고삐가 마구다.
용어
Coding Agent (코딩 에이전트)
사람의 요청을 받아 파일 읽기·쓰기·명령 실행 같은 도구를 알아서 호출하며 작업을 진행하는 AI. Claude Code, Cursor Agent, Aider, Codex가 같은 카테고리. 한 번에 답을 만드는 챗봇과 달리 — 여러 턴에 걸쳐 도구를 쓰고 결과를 읽고 다시 행동하는 "루프 안에서 사는" AI.
용어
LSP (Language Server Protocol, 언어 서버 프로토콜)
VS Code·JetBrains 같은 IDE가 "함수 정의로 가기", "이름 일괄 바꾸기" 같은 기능을 구현할 때 쓰는 표준 프로토콜. 마이크로소프트가 만든 약속. 각 언어마다 LSP 서버가 따로 있고(TypeScript 서버, Python 서버 등), IDE는 그 서버에 질문해서 답을 받는다. omp는 이걸 에이전트가 직접 호출하게 한다 — 즉 "AI가 IDE의 두뇌를 빌려 쓴다".
용어
DAP (Debug Adapter Protocol, 디버그 어댑터 프로토콜)
LSP의 디버거 버전. VS Code의 디버거가 lldb·gdb·dlv·debugpy 같은 다양한 디버거를 같은 인터페이스로 다루는 표준. omp는 28개 DAP 작업을 노출 — 에이전트가 실제로 디버거를 attach해서 break point 걸고, 변수 조회하고, 스택 워크를 한다. "AI가 print 디버깅 대신 진짜 디버거를 쓴다".

1한 줄 요약

전체 글의 핵심 메시지.

핵심 메시지

"좋은 모델 + 나쁜 하네스보다,
평범한 모델 + 좋은 하네스가 이긴다."

같은 Grok Code Fast 1 모델이 — 표준 도구 셋에서 SWE-bench 6.7%, omp의 hashline 편집 + LSP + Rust 인프로세스 search에서 68.3%. 모델은 그대로다. 주변이 바뀌었다.

omp는 "내가 만난 가장 똑똑한 모델보다, 내가 만난 가장 잘 갖춰진 도구 표면이 더 큰 차이를 만든다"는 가설을 코드로 증명하려는 프로젝트다.

2왜 지금 주목받는가

또 다른 코딩 에이전트가 왜 필요한가.

Claude Code, Cursor, Codex, Aider 가 이미 잘 작동하는데 omp가 어떤 자리를 차지하나. README의 주장을 추리면 4가지.

기존 도구의 한계 1
"편집 포맷이 모델을 좀먹는다"

대부분의 에이전트는 str_replace 같은 단순 문자열 치환 방식을 쓴다. 그런데 모델이 옛 코드 라인을 정확히 외워서 보내야 하는데, 공백 한 칸 틀리면 실패하고 재시도한다. 같은 작업을 두세 번 재시도하면서 토큰만 태운다.

omp의 해결
hashline — 콘텐츠 해시로 닻 찍기

모델이 줄을 통째로 베껴 보내지 않고, 콘텐츠 해시(content hash)로 "여기 이 줄"이라고 가리킨다. 파일이 그 사이 바뀌었으면 해시 불일치 → 패치 즉시 거절 (덮어쓰기 사고 방지). Grok 4 Fast의 출력 토큰이 61% 줄어든 이유가 이거다.

기존 도구의 한계 2
"fork-exec 비용"

대부분 에이전트는 rg(ripgrep), grep, find, bash 같은 외부 바이너리를 쉘로 호출한다. 호출 한 번마다 프로세스 fork-exec 비용 + 표준출력 파싱 비용. Windows에선 그 바이너리가 아예 없어서 안 돌아가는 경우도.

omp의 해결
Rust 네이티브로 인프로세스 내장

ripgrep·glob·find·bash(brush-shell)·image-decode·BPE counting까지 — 전부 Rust로 짜서 같은 프로세스 안에서 직접 함수 호출. fork-exec이 없으니 빠르다. macOS/Linux/Windows 한 바이너리. WSL 안 필요. ~55,000 줄 Rust 코어가 이 일을 한다.

기존 도구의 한계 3
"IDE 두뇌를 못 쓴다"

에이전트가 rename을 하려면 — 변수명 한 곳만 바꾸는 게 아니라 모든 참조·재export·alias import까지 다 같이 바꿔야 한다. 그런데 단순 grep + sed로는 alias된 import를 놓친다. 결국 사람이 마지막 정리를 해야.

omp의 해결
LSP 풀스택 통합

omp는 LSP의 workspace/willRenameFiles·references·rename·codeAction까지 다 노출. AI가 rename을 요청하면 — 14개 LSP 작업 중 적절한 걸 호출해서 진짜 IDE처럼 안전하게 작업. "IDE가 아는 건 에이전트도 안다".

기존 도구의 한계 4
"print 디버깅에 머문다"

대부분 에이전트는 segfault나 hang을 만나면 println·print를 뿌리고 재실행한다. 진짜 디버거를 attach하지 못한다.

omp의 해결
DAP로 진짜 디버거 운전

C 바이너리 segfault → lldb attach + 스텝 + 프레임 읽기. Go 서비스 hang → dlv + goroutine 워크. Python 멈춤 → debugpy + pause + inspect. 28개 DAP 작업으로 진짜 디버거를 운전한다.

여기에 더해 — 40+ AI 프로바이더(Anthropic·OpenAI·xAI·Gemini·Cursor·Copilot·GLM·Ollama 등) + 14개 웹 검색 백엔드(Exa·Brave·Tavily·Kagi 등) + ACP로 Zed 같은 에디터 통합까지. 한마디로 "이 분야의 다른 도구가 별도로 해결한 모든 문제를 한 패키지에 묶었다"가 트렌딩 6위까지 끌어올린 이유다.

3기술 스택 전체 지도

TypeScript 얼굴 + Rust 심장의 하이브리드.

3.1 런타임 레이어

레이어 1

Bun (JavaScript 런타임)

omp는 Node.js가 아니라 Bun으로 권장된다. Bun 1.3.14 이상. Zig로 만든 JavaScript 런타임으로 시작 속도가 Node보다 훨씬 빠르고, 자체 패키지 매니저 + 번들러 + 테스트 러너 내장. 터미널 도구의 cold start가 중요한 만큼 — 마지막 0.1초까지 짜내는 선택.

레이어 2

TypeScript (애플리케이션 코드)

도구·세션 관리·프로바이더 라우팅·TUI(터미널 UI)·서브에이전트 오케스트레이션 — 모두 TypeScript. 모노레포(monorepo)로 14개+ 패키지가 함께 산다. 코드는 전부 MIT 라이선스로 공개.

레이어 3

Rust + N-API (성능 핵심)

~55k 줄 Rust 코어. N-API(Node-API)로 묶여 TypeScript 측에서 native 함수처럼 호출. fork-exec 비용 없이 같은 프로세스에서 직접 실행. pi-natives, pi-shell, pi-ast, pi-iso 4개 크레이트로 분리.

3.2 핵심 Rust 모듈 (~55k LoC)

shell 3,700 brush-shell vendored — 임베디드 bash, 영구 세션 grep 1,900 grep-regex/searcher — 병렬 검색 + glob/type 필터 keys 1,490 Kitty 키보드 프로토콜 (PHF 해싱) text 1,450 ANSI-aware width, SGR 보존 wrap summarize 1,040 tree-sitter 구조적 요약 ast 1,000 ast-grep — 50+ 언어 패턴 매칭 fs_cache 840 mtime 기반 파일 캐시 (read·grep·lsp 공유) highlight 470 syntect — 신택스 하이라이팅 pty 455 sudo·ssh interactive prompt용 glob 410 ignore·globset — gitignore 존중 workspace 385 ignore·git2 — workspace walker ... (총 ~55,000 줄)

이 표가 omp의 본질을 가장 잘 보여 준다. 다른 에이전트가 외부 도구로 쉘 호출하는 모든 것을 Rust로 인프로세스 구현. brush-shell이라는 Rust로 짠 bash 호환 셸까지 vendor 해서 박아 넣었다.

3.3 AI 프로바이더 라우팅

프로바이더 그룹 1 · 프론티어 API

Anthropic · OpenAI · Google · xAI · Mistral · Groq 등

직접 API. oauth 태그가 있는 건 OAuth 로그인 지원(Anthropic, Google Antigravity, Perplexity, OpenAI Codex 등). 자기 API 키 또는 OAuth 로그인.

프로바이더 그룹 2 · 코딩 구독 플랜

Cursor · GitHub Copilot · GitLab Duo · Z.AI/GLM Coding Plan · 등

한 달 구독으로 코딩 모델 무제한 쓰는 플랜들을 omp에서 그대로 활용. Kimi Code, MiniMax Coding Plan, Alibaba Coding Plan(Qwen) 같은 중국발 플랜들도 모두 라우팅 가능.

프로바이더 그룹 3 · 셀프 호스팅 / 로컬

Ollama · LM Studio · llama.cpp · vLLM · LiteLLM

OpenAI 호환 /v1/models 엔드포인트면 다 붙는다. 로컬 인스턴스는 API 키 없이도 OK. 보안에 민감한 환경에서 자체 호스팅 모델을 쓸 수 있다는 게 핵심.

3.4 라우팅 4대 노브

40+ 프로바이더를 한 세션에서 같이 쓰는 방법.

4아키텍처 심화 — 핵심 18대 기능

전체 그림 + 가장 차별되는 5개 깊이 분석.

4.1 전체 아키텍처 (ASCII)

┌─────────────────────────────────────────────────────────┐ │ 진입점: 4가지 │ │ ① omp (TUI) ② omp -p (one-shot) │ │ ③ omp --mode rpc (stdio) ④ omp acp (Zed 통합) │ └──────────────────────────┬──────────────────────────────┘ ▼ ┌───────────────────────────────────────────────────────┐ │ TypeScript 코어 │ │ · Session Manager — 세션·체크포인트·rewind │ │ · Model Registry — 40+ 프로바이더 라우팅 │ │ · Tool Surface — 32개 내장 도구 │ │ · Subagent Orchestrator — task fan-out + IRC │ │ · TUI — 터미널 UI (differential rendering) │ └──────────────────────────┬──────────────────────────────┘ ▼ ┌──────────────────────────────────────────────────────┐ │ Rust 네이티브 (~55k LoC, N-API) │ │ shell · grep · ast · summarize · fs_cache · │ │ highlight · pty · glob · workspace · iso · prof │ └─────┬──────────────────────────────┬────────────────┘ │ │ ▼ ▼ ┌──────────────┐ ┌──────────────────┐ │ LSP 클라이언트 │ │ DAP 클라이언트 │ │ 14개 작업 │ │ 28개 작업 │ │ (rename·refs· │ │ (attach·step· │ │ diagnostics…)│ │ stack·var…) │ └──────────────┘ └──────────────────┘

이 그림에서 핵심은 — "한 프로세스 안에 다 들어 있다"는 점이다. shell도, grep도, AST 파서도, 디버거 클라이언트도, LSP 클라이언트도 모두 같은 프로세스 메모리를 공유하며 작동한다. fork도 IPC도 없다.

4.2 가장 차별되는 핵심 패턴 5개

패턴 1

Hashline — 콘텐츠 해시 편집

편집 시 모델이 줄을 베껴 보내지 않고 콘텐츠 해시로 anchor 지정. 파일이 그 사이 바뀌면 해시 mismatch → 패치 거절. 스테일 파일 덮어쓰기 사고를 사전 차단하면서 토큰까지 절약. Grok 4 Fast 기준 출력 토큰 -61%.

패턴 2

Time-Traveling Stream Rules — 시간 여행 룰

사용자의 룰이 평소엔 잠자다가, 모델이 잘못된 길로 가는 순간 — 정규식 매치로 스트림을 mid-token에서 중단, 룰을 시스템 리마인더로 주입, 같은 지점에서 재시도. 매 턴 룰을 컨텍스트에 박지 않으니 토큰 절약 + compaction 후에도 주입이 살아남는다. "AI가 Box::leak을 쓰려는 순간 룰이 깨우는 그림".

패턴 3

Code Execution + Tool Re-entry — Python/Bun 영구 커널

대부분 에이전트는 Python sandbox 하나로 끝. omp는 Python과 Bun 두 커널이 영구 세션으로 살아있고, 그 안에서 다시 read·search·task 같은 에이전트 도구를 호출 가능. Python 안에서 tool.read로 CSV 읽고, JavaScript로 차트 만들기 — 셀을 떠나지 않고.

패턴 4

First-class Subagents + Workspace Isolation

task 도구로 서브에이전트 fan-out. 각 워커가 isolated worktree(APFS clone, btrfs/zfs reflink, overlayfs, projfs 중 환경 맞춤)에서 독립 작업. 최종 결과는 스키마 검증된 객체로 부모에게 반환 — prose 파싱이 아니라 typed result. 형제들끼리 IRC로 짧은 메시지 교환 가능.

패턴 5

URL Schemes로 모든 게 파일이 된다

pr://1428, issue://42, agent://findings.0.path, skill://..., conflict://110개+ 내부 스킴을 모든 FS-shaped 도구가 인식. PR 읽기 = 파일 읽기. 머지 컨플릭트 해결 = write conflict://1 @theirs. 에이전트가 외워야 할 도구가 줄어들고, 한 인터페이스로 모든 걸 처리.

4.3 나머지 13개 기능 한 줄 요약

5레포 구조 해부

모노레포 + Rust 크레이트의 이중 구조.

oh-my-pi/ ├── packages/ ← TypeScript 모노레포 (14개+) │ ├── ai/ @oh-my-pi/pi-ai — 멀티-프로바이더 LLM 클라이언트 │ ├── agent/ @oh-my-pi/pi-agent-core — 에이전트 런타임 │ ├── coding-agent/ @oh-my-pi/pi-coding-agent — CLI + SDK (메인) │ ├── tui/ @oh-my-pi/pi-tui — 터미널 UI 라이브러리 │ ├── natives/ @oh-my-pi/pi-natives — N-API 바인딩 │ ├── stats/ @oh-my-pi/omp-stats — 로컬 사용량 대시보드 │ ├── utils/ @oh-my-pi/pi-utils — 공유 유틸 │ ├── swarm-extension/ @oh-my-pi/swarm-extension — 스웜 확장 │ ├── catalog/ 레포·도구 카탈로그 │ ├── collab-web/ 웹 협업 인터페이스 │ ├── hashline/ 콘텐츠 해시 편집 라이브러리 │ ├── mnemopi/ 메모리·recall 서비스 │ ├── snapcompact/ 컨텍스트 압축 │ └── wire/ 내부 통신 레이어 ├── crates/ ← Rust 크레이트 │ ├── pi-natives/ N-API cdylib (집계 크레이트) │ ├── pi-shell/ 임베디드 셸 + PTY │ ├── pi-ast/ tree-sitter 50+ 언어 grammar │ ├── pi-iso/ workspace isolation │ ├── brush-core-vendored/ vendored bash 코어 │ └── brush-builtins-vendored/ bash 빌트인 (cd, echo, test, …) ├── assets/ ← 이미지·캡처 ├── LICENSE MIT └── README.md 본 문서
파일 1

packages/coding-agent — 메인 CLI

사용자가 omp를 실행할 때 직접 진입하는 패키지. CLI 인자 파싱, TUI 띄우기, 세션 매니저 초기화, 도구 등록, 슬래시 커맨드 등록. SDK 모드(SessionManager, createAgentSession)도 여기서 export.

파일 2

packages/agent — 에이전트 코어

실제 에이전트 루프 로직. 도구 호출, 응답 해석, 도구 결과를 다시 모델에 먹이기, 컨텍스트 관리. UI와 분리돼 있어 RPC/ACP/SDK 모드에서도 같은 코어가 동작.

파일 3

packages/natives + crates/pi-natives — TS/Rust 경계

TypeScript 측 packages/natives가 Rust 측 pi-natives를 호출하는 다리. 플랫폼별 prebuilt binary (linux-x64, linux-arm64, darwin-x64, darwin-arm64, win32-x64) 5개를 npm publish 시 함께 배포. 사용자는 빌드 안 해도 됨.

파일 4

crates/brush-core-vendored — bash 호환 셸

외부 의존성 brush-shell를 vendor한 크레이트. "왜 vendor를 했나" — omp의 hot path에 들어가는 만큼 빠른 빌드와 패치 컨트롤이 필요해서. Mario Zechner의 fork가 시작점이라, "fork에 또 fork"의 layered 구조.

6학습 포인트 — 이 레포에서 뭘 배울 수 있나

코딩 에이전트를 만든다면 꼭 봐야 할 패턴.

교훈 1

"하네스 차이가 모델 차이보다 크다"

같은 Grok Code Fast 1이 6.7%→68.3%로 점프하는 데이터는 충격적이다. 좋은 모델을 기다리기보다, 가진 모델에 좋은 도구 표면을 만드는 게 ROI가 높다. 자기 에이전트 만들 때도 — 모델 업그레이드보다 편집 포맷·검색 도구·LSP 통합 같은 인프라에 먼저 투자.

교훈 2

"외부 의존을 줄이면 빠르고 안정적"

omp가 ripgrep/glob/find/bash를 다 Rust로 내장한 이유 — fork-exec 비용 + Windows 호환성 + 표준출력 파싱 비용을 한 번에 없애려고. 자기 도구 만들 때도 외부 바이너리 의존을 줄일수록 단단해진다.

교훈 3

"URL 스킴 패턴 — 인터페이스를 통일하라"

PR도 파일, 이슈도 파일, 컨플릭트도 파일, 서브에이전트 결과도 path. "한 인터페이스로 모든 걸 다루게" 만들면 — AI가 외워야 할 도구가 줄어들고, 사람이 디버깅할 면적도 줄어든다. UNIX의 "everything is a file" 철학을 LLM 시대에 재발견한 셈.

교훈 4

"Hashline — Content-addressing은 안전망"

git의 content-addressing 아이디어를 편집 도구에 적용. 파일이 그 사이 바뀌면 거절 → 사고 방지 + 토큰 절약. 편집 작업이 멱등성을 갖게 만드는 핵심 패턴. 자기 도구에도 hash 기반 anchor를 도입할 가치.

교훈 5

"라우팅 = 모델 + 역할 + 페일오버"

40+ 프로바이더 라우팅의 핵심 4노브 — 역할(default/smol/slow/plan), 커스텀 프로바이더, 페일오버 체인, 라운드로빈 키. 자기 에이전트가 여러 모델을 쓴다면 이 4가지를 표준 노브로 도입.

7설치 및 시스템 요구사항

실제 돌리려면 뭐가 필요한가.

설치 1 · macOS / Linux

한 줄 인스톨

curl -fsSL https://omp.sh/install | sh

플랫폼 자동 감지 → 적절한 prebuilt binary 설치. ~/.omp/에 설정 폴더.

설치 2 · Bun 권장

Bun으로 npm install

bun install -g @oh-my-pi/pi-coding-agent

Bun ≥ 1.3.14 필요. 별도 인스톨 스크립트 없이도 동작. 업그레이드도 bun update -g로.

설치 3 · Windows

PowerShell

irm https://omp.sh/install.ps1 | iex

WSL 안 필요. omp는 Windows 네이티브 바이너리로 동작. ripgrep/glob/bash 다 내장돼 있어 외부 도구 없이 같은 동작.

필수 1

AI 프로바이더 자격증명

최소 한 개 프로바이더의 API 키 또는 OAuth 로그인. Anthropic·OpenAI·Gemini API 키, Cursor/Copilot 구독, 또는 로컬 Ollama. /login 슬래시 커맨드로 설정.

선택

LSP 서버 + 디버거

LSP 기능을 쓰려면 해당 언어의 LSP 서버 설치 필요. (TypeScript는 보통 자동, Python은 pyright/pylsp, Rust는 rust-analyzer 등). 디버거 기능엔 lldb·gdb·dlv·debugpy 같은 해당 언어 디버거.

8직접 해볼 수 있는 실습 과제

난이도 ★~★★★★★.

과제 1 · ★

설치 + 기본 세션

omp 설치 후 자기 프로젝트 디렉토리에서 omp 실행. "이 레포의 README를 한 문단으로 요약해 줘" 같은 단순 작업으로 워크플로우 익히기. TUI의 도구 카드, 슬래시 커맨드(/model, /login), Ctrl+P 모델 사이클을 체험.

과제 2 · ★★

LSP rename으로 안전한 리팩토링

실제 프로젝트에서 변수/함수 이름을 한 번 일괄 변경. "이 변수 rename해 줘"만 던지고, omp가 LSP를 통해 모든 참조·alias·재export까지 안전하게 갱신하는지 관찰. 같은 작업을 grep + sed로 하면 얼마나 빠뜨릴지 비교.

과제 3 · ★★★

디버거로 실제 버그 잡기

일부러 segfault나 hang을 만들고 omp에게 디버거로 잡으라고 요청. C 코드면 lldb, Python이면 debugpy. 에이전트가 print 디버깅 대신 진짜 디버거를 운전하는 모습이 인상적.

과제 4 · ★★★★

커스텀 확장(extension) 만들기

TypeScript 모듈 한 개로 omp 확장을 작성. 같은 도구 API·슬래시 커맨드 API·핫키 테이블 사용. 자기 워크플로우에 맞춘 새 슬래시 커맨드(예: /deploy-staging)를 만든다. /reload-plugins로 즉시 적용.

과제 5 · ★★★★★

SDK로 임베드 — 자기 앱 안에 에이전트 박기

Node/TypeScript 호스트 앱에 @oh-my-pi/pi-coding-agent를 import. SessionManager·createAgentSession으로 자기 앱 컨텍스트에서 에이전트 동작. 예: 사내 도구 안에서 "이 데이터 분석해 줘" 같은 명령을 자기 도구 서피스로 처리.

9관련 기술 심화 학습 로드맵

4주 코스.

1주차

일반 사용 + 다른 코딩 에이전트와 비교

omp + Claude Code + Cursor Agent + Aider 4개를 같은 작업으로 돌려본다. 토큰 사용량·완료 시간·결과 품질 비교. 어디서 omp가 빛나고 어디서 다른 게 나은지 감 잡기.

2주차

LSP + DAP 깊이 학습

microsoft/language-server-protocol 스펙 정독. omp가 노출하는 14개 LSP 작업·28개 DAP 작업을 직접 실험. 이걸 알면 자기 에이전트 만들 때도 LSP/DAP를 어떻게 통합할지 청사진이 생긴다.

3주차

Rust 네이티브 모듈 작성

N-API + napi-rs로 작은 Rust 네이티브 모듈을 직접 만들어 Node/Bun에서 호출. omp의 pi-natives가 어떻게 짜여 있는지 코드 읽기 + 자기 도구에 한 모듈 추가. "외부 바이너리 fork-exec 비용을 없애는 경험"을 손에 익힌다.

4주차

ACP로 자기 에디터에 에이전트 통합

Zed 또는 ACP 지원 에디터에서 omp acp 모드로 에이전트를 띄우고, 에디터의 버퍼·터미널·permission 프롬프트로 작업. 또는 ACP 클라이언트를 직접 만들어 자기 도구에 통합.

10핵심 키워드 사전

짧은 정의 모음.

키워드
Tool Surface (도구 표면)
에이전트가 호출할 수 있는 도구 전체의 집합. omp는 32개를 한 namespace에 둠. 도구가 너무 많으면 모델이 헷갈리고, 너무 적으면 일을 못 한다. --tools로 활성 집합 핀 가능, search_tool_bm25로 나머지 도구를 mid-session에 검색 활성화.
키워드
N-API (Node-API)
Node.js 공식 ABI(Application Binary Interface). 네이티브 라이브러리(C/C++/Rust)를 Node 모듈로 노출하는 표준. Rust 측은 napi-rs로 N-API에 맞는 cdylib을 빌드. Bun도 N-API 호환.
키워드
ACP (Agent Client Protocol)
Zed Industries가 만든 JSON-RPC 기반 에이전트 ↔ 에디터 프로토콜. 에디터가 자신의 fs/terminal/permission 기능을 노출하면 에이전트가 그걸 통해 작업. LSP의 에이전트 버전.
키워드
brush-shell
Rust로 짠 bash 호환 셸. omp는 이걸 vendor해서 자기 프로세스 안에서 bash 명령을 직접 해석/실행. 외부 bash 바이너리 의존 X.
키워드
tree-sitter
언어 무관 점진적 파서. 50+ 언어의 grammar가 공개돼 있어 — 어떤 언어 코드든 같은 인터페이스로 AST를 얻을 수 있다. omp의 summarize·ast_grep 도구가 이걸 기반.
키워드
BM25 (Best Matching 25)
검색 랭킹 알고리즘. TF-IDF의 개량형. omp의 search_tool_bm25가 "현재 작업에 어떤 도구가 가장 관련 있나"를 점수화해서 자동 활성화하는 데 사용.
키워드
PHF (Perfect Hash Function)
컴파일 타임에 해시 충돌 없는 매핑을 생성하는 기법. omp의 keys 모듈에서 Kitty 키보드 프로토콜의 키 매핑에 사용 — 1ns 단위로 키 룩업.
키워드
Workspace Isolation
서브에이전트들을 격리된 worktree에서 돌리는 기법. omp는 환경에 맞춰 APFS clone(macOS), btrfs/zfs reflink(Linux), overlayfs, projfs(Windows), rcopy 중 선택. 부모 코드를 더럽히지 않고 병렬 실험.

11참고 링크

레포·문서·관련 도구.

실용 가이드

오늘 바로 시도해볼 만한 것들

  1. 10분 설치 + 첫 작업. macOS면 curl -fsSL https://omp.sh/install | sh 한 줄로 끝. 자기 작은 프로젝트에서 "README 한 문단 요약" 정도로 워크플로우 익히기.
  2. 같은 작업을 두 도구로 비교. Claude Code 또는 Cursor Agent로 한 번, omp로 한 번. 토큰 사용량 + 완료 시간 + 결과 차이를 본다. 직접 비교가 가장 빠른 학습.
  3. LSP rename 한 번 체험. 변수명 일괄 변경을 시켜 본다. 일반 텍스트 치환과 LSP rename의 차이를 직접 보면 — IDE 두뇌가 에이전트에 통합된다는 의미가 손으로 잡힌다.
  4. 14개 웹 검색 백엔드 중 자기 것만 켜기. 이미 구독 중인 검색(Tavily, Brave, Exa, Kagi 등) 키를 설정에 넣고 auto 체인에서 우선순위 위로 올리기. 한 번 켜 두면 다른 도구에서도 같은 모델·키를 활용 가능.
  5. "하네스 차이" 개념을 자기 도구에 적용. 자기가 만든 스크립트/도구 중 모델 호출이 들어가는 부분 — 더 좋은 모델로 바꾸기 전에 도구 표면을 다듬을 곳이 없는지 본다. hashline·LSP·인프로세스 같은 패턴이 적용될 자리가 있을 가능성이 높다.
원문 · can1357/oh-my-pi, 2026.05.21 · github.com/can1357/oh-my-pi · TrendShift 6위 기준