soonsoon2/lun
요약
Lun은 여러 AI 코딩 에이전트(Claude Code, Copilot 등)를 동시에 실행하여 답변을 비교하고 토론하게 만드는 CLI 도구입니다. 추가 API 비용 없이 기존 CLI를 활용하며, 병렬 답변 및 에이전트 간 릴레이 토론 기능을 제공합니다.
핵심 포인트
- 기존 설치된 AI CLI를 활용하여 추가 API 비용 발생 없음
- 여러 에이전트의 답변을 병렬로 스트리밍하여 즉시 비교 가능
- 에이전트 간의 릴레이 토론 기능을 통한 사각지대 발견
- 합의 요약(Synthesized Consensus) 기능 제공
- 콜드 스타트 방지를 위한 데몬 모드 지원
╦ ╦ ╦ ╔╗╔
║ ║ ║ ║║║
╩═╝ ╚═╝ ╝╚╝
AI의 답변이 확실하지 않으신가요? 여러 에이전트에게 동시에 질문하고 비교해 보세요.
실제 실행 예시:
lun -P claude,kiro,copilot "REST or GraphQL?"
— 각 에이전트가 완료될 때마다 답변이 스트리밍됩니다.
**Lun (論)**은 여러분이 이미 사용 중인 AI 코딩 에이전트 CLI들 — Kiro, Claude Code, GitHub Copilot, Antigravity, Codex — 을 동일한 질문에 대해 나란히 실행합니다. 답변을 비교하거나, 에이전트들이 서로 토론하게 할 수도 있습니다.
대부분의 멀티 모델 (multi-model) 도구들은 사용자의 API 키를 요구하고 토큰당 비용을 청구합니다. Lun은 그렇지 않습니다. Lun은 여러분이 이미 설치하고 로그인해 둔 CLI들을 구동하므로, 추가적인 API 키나 추가 비용이 발생하지 않습니다. Cline 또한 해당 CLI를 사용할 수 있는 경우 선택 가능한 프로바이더 (provider)로 정의됩니다.
$ lun "Should I use REST or GraphQL for this API?"
Lun — Asking kiro, claude, copilot, agy, codex...
--- Kiro (4.2s, auto) ---
...
결과는 각 에이전트가 완료되는 대로 스트리밍됩니다. 가장 느린 에이전트를 기다릴 필요가 없습니다.
단일 AI의 의견은 확신을 가지고 틀릴 수 있습니다. 아키텍처 (architecture), 기술 스택 (tech stack), API 설계 (API design)와 같이 중요한 결정을 내릴 때는 다양한 관점이 필요합니다:
3명 중 2명이 동의한다면? → 신뢰도가 높음
3명 모두 의견이 다르다면? → 문제에 대해 더 많은 고민이 필요함
한 명만이 독특한 관점을 제시한다면? → 놓치고 있는 부분이 있을 수 있음
Lun은 이를 10분 동안 탭을 전환해야 하는 의식 대신, 10초 만에 끝나는 습관으로 만들어 줍니다.
Lun은 에이전트들이 질문에 답하는 세 가지 방식을 제공합니다. 동일한 엔진이 이 모든 방식을 구동합니다.
모든 에이전트가 동일한 질문에 병렬로 답변하며, 각 에이전트가 완료될 때마다 답변이 나란히 스트리밍됩니다. -s 옵션을 추가하면
종합된 합의 (synthesized consensus)를 상단에 얻을 수 있습니다.
lun "Should I use REST or GraphQL for this API?"
lun -s "Redis vs Memcached for sessions?" # + 합의 요약
단순한 병렬 답변을 넘어, **릴레이 토론 (relay discussion)**을 지원합니다. 각 에이전트는 이전 에이전트들이 말한 내용을 확인하고 이에 이의를 제기할 수 있습니다. 중재자 (moderator)가 각 라운드를 종합하고 계속 진행할지 여부를 결정합니다. 에이전트들이 단순히 의견을 나열하는 대신 논쟁을 벌이기 때문에, 바로 이 지점에서 사각지대 (blind spots)가 실제로 드러나게 됩니다.
lun -d "4인 팀에게 모노레포(monorepo)가 적절한 선택인가요?"
lun -d --max-turns 2 "이 캐싱 전략을 비판해 보세요"
어떤 전문가에게 자문을 구할지 결정하고, 그들을 도구 (tools)로 호출하며, 턴 (turns) 간의 이력을 바탕으로 내용을 종합하는 "PM" 에이전트가 주도하는 대화입니다.
lun chat
데몬 (daemon)은 필요하지 않습니다. lun "질문"만으로도 단독 동작합니다. lun daemon start (또는 lun serve)를 실행하는 것은 선택 사항입니다. 이는 에이전트를 대기 상태 (warm)로 유지하여, 반복적인 호출 시 CLI 콜드 스타트 (cold-start)를 건너뛸 수 있게 합니다. LUN_NO_DAEMON=1을 설정하면 직접 모드 (direct mode)를 강제할 수 있습니다.
세 가지 모드는 모든 인터페이스에서 사용할 수 있습니다:
| 인터페이스 | 방법 | 비고 |
|---|---|---|
| 터미널 (Terminal) | lun "q", lun -d, lun chat, 또는 lun (REPL) | 에이전트 CLI 하나 외에 설정할 것이 없음 |
| 웹 UI (Web UI) | lun serve → localhost:3456 | 그룹 채팅 뷰, 스트리밍, 히스토리, 사용량 |
| VS Code / Copilot Chat | @lun (VSIX 설치) | 에디터 내에서 그대로 사용 |
| 다른 AI 에이전트 | lun -j "q" | NDJSON 출력; 에이전트가 패널을 참조하고 이를 파싱하도록 함 |
npm install -g @soonsoon2/lun
명령어는 lun입니다. (npm에서 설치하며, 최신 main 브랜치를 위해 npm install -g github:soonsoon2/lun도 작동합니다.)
최소 하나 이상의 AI 에이전트 CLI가 설치되어 있어야 합니다:
| 에이전트 | 설치 | 제공 기능 |
|---|---|---|
| Claude Code | npm i -g @anthropic-ai/claude-code | Anthropic의 추론 (reasoning) |
| GitHub Copilot | gh extension install github/gh-copilot | OpenAI/GPT 모델 |
| Kiro CLI | npm i -g kiro-cli | AWS 기반 멀티 모델 |
| Antigravity CLI | agy install | Google Antigravity 에이전트 |
| Codex CLI | npm i -g @openai/codex | OpenAI Codex 에이전트 |
| Cline CLI | npm i -g @anthropic-ai/cline | 멀티 프로바이더 (Multi-provider) |
Lun은 프린트 모드 (print mode)에서 agy를 통해 Antigravity를 호출합니다:
agy install
agy -p "hello"
새로운 프로바이더 (provider)를 추가하는 것은 src/providers.js 파일 하나만 수정하면 됩니다.
# 처음 실행 시 — 언어, 에이전트, 모델 선택
lun --init
# 비교: 모두에게 동일한 질문 던지기
...
lun -d
는 Lun을 차별화하는 모드입니다. 병렬적인 독백 대신, 각 에이전트(agent)는 이전 답변을 확인하고 이에 대해 반론을 제기하며, 중재자(moderator)가 각 라운드를 종합합니다:
$ lun -d "Tabs or spaces?"
--- Claude (5.5s) ---
Spaces. They render identically everywhere — no surprises from someone's
...
PM 채팅 모드 (lun chat)는 lun --init (pmAgent / pmModel)에서 설정됩니다. 이 모드는 히스토리(history)를 유지하며 각 에이전트의 전체 출력을 세션에 저장합니다.
다른 AI 에이전트들이 lun을 호출하고 출력을 파싱(parse)할 수도 있습니다:
lun -j "Should I use a monorepo?"
NDJSON(한 줄당 하나의 이벤트, 결과가 도착하는 대로 스트리밍)을 출력합니다:
{"event":"start","providers":["kiro","claude","copilot","agy","codex"]}
{"event":"chunk","provider":"claude","delta":"I'd recommend..."}
{"event":"result","provider":"claude","model":"sonnet","text":"...","elapsed":3.8,"error":false}
...
프로젝트의 에이전트 규칙(agent rules)에 추가하거나, 다음과 같이 말하면 됩니다:
"이 결정을 내리기 전에 다른 AI 에이전트들의 의견을 듣기 위해 lun -j "question"을 사용해."
또는 모든 에이전트를 위한 규칙을 자동 설치할 수 있습니다:
lun --setup-rules
이 명령은 Claude (CLAUDE.md), Kiro (.kiro/steering/lun.md), Copilot (.github/copilot-instructions.md), Antigravity, 그리고 Codex를 위한 lun 상담 규칙을 추가합니다.
이 명령은 에이전트들이 읽는 파일을 수정하여 그들의 동작 방식을 변경합니다. 따라서 어떤 파일이 생성되거나 추가될지 정확히 보여주며, 파일이 작성되기 전에 사용자에게 확인을 요청하고, 각 파일을 개별적으로 확인합니다. 기존 파일은 내용이 추가될 뿐(절대 덮어쓰지 않음), 추가된 블록은 <!-- BEGIN lun rules --> / <!-- END lun rules --> 마커로 감싸져 있어 쉽게 찾아 제거할 수 있습니다. 작업 후에는 git diff로 검토하십시오.
lun [options] [prompt]
Modes:
lun Interactive (REPL)
...
Lun은 당신이 보고 싶어 할 모든 것을 하나의 폴더인 **워크스페이스 (workspace)**에 보관합니다. 기본 경로는 ~/Documents/lun-workspace이며 (lun --init에서 설정 가능),
~/Documents/lun-workspace/
├── run/ # 에이전트가 실제로 실행되는 곳 (kiro와 codex의 속도를 유지하기 위해 비어 있거나 작게 유지됨)
├── sessions/ # 모든 대화가 .md + .json 형식으로 저장됨
...
왜 전용 run/ 폴더가 필요한가요? kiro와 codex는 시작 시 자신의 작업 디렉토리 (working directory)를 스캔합니다. 거대한 $HOME 디렉토리에서 이들을 실행하면 kiro의 속도가 약 3~4배 느려졌습니다. 격리된 run/ 디렉토리는 사용자가 어디에서 lun을 호출하든 이들의 속도를 빠르게 유지해 줍니다. 대신 에이전트가 실제 프로젝트에서 작동하게 하려면, LUN_USE_CWD=1을 사용하여 해당 프로젝트에서 실행하세요.
모든 대화는 <workspace>/sessions/에 .md (사람이 읽을 수 있는 형식) 및 .json (기계가 파싱 가능한 형식) 모두로 자동 저장됩니다.
# 최근 세션 보기
lun --sessions
# 세션 위치 예시:
...
Lun은 그룹 채팅 스타일의 UI를 갖춘 로컬 웹 인터페이스도 제공합니다:
lun serve
# → http://localhost:3456
lun serve는 프로세스가 유지되는 동안 워밍업된 워커 (warm workers, 데몬 모드) 상태로 실행되며, Ctrl+C로 중단할 때까지 계속 실행됩니다. 이 명령은 127.0.0.1에만 바인딩됩니다 — LUN_HOST를 변경하기 전에 SECURITY.md를 참조하세요. (브라우저 탭이 닫힐 때 자동으로 종료되게 하려면 — 예: 앱 래퍼(app wrapper) 용도 — LUN_SERVE_AUTOEXIT=1을 설정하세요.)
사용자 정의 포트:
LUN_PORT=8080 lun serve
주요 기능: 실시간 스트리밍 (real-time streaming), 세션 히스토리 사이드바, 에이전트별 모델 설정, 시스템 메시지를 활용한 스마트 라우팅 (smart routing), 데몬 사용 통계, 로그, 그리고 워커 상태.
lun daemon start는 대시보드 API와 워밍업된 에이전트 워커들을 백그라운드에서 계속 실행 상태로 유지합니다. 기본적으로, 지속성 워커 (persistent workers)는 데몬이 시작된 워크스페이스를 위해 미리 워밍업(prewarmed)됩니다. 다른 워크스페이스에서 들어오는 요청은 첫 사용 시 해당 워크스페이스의 워커를 생성합니다. 워커 상태는 웹 UI, VS Code 패널, 또는 @lun /workers를 통해 확인할 수 있습니다.
| 에이전트 (Agent) | 데몬 전략 (Daemon strategy) | 참고 사항 (Notes) |
|---|---|---|
| Kiro | 지속적인 ACP 워커 (Persistent ACP worker) | kiro-cli acp가 계속 실행 상태를 유지합니다. 기본적으로 각 프롬프트는 새로운 ACP 세션을 가집니다. |
| ... |
데몬은 에이전트가 머신 프로토콜 (machine protocol)을 노출하는 경우 프로세스 시작 오버헤드 (startup overhead)를 제거합니다. Kiro와 Copilot은 ACP 프로세스를 웜 상태 (warm)로 유지하지만, 기본적으로 프롬프트당 새로운 ACP 세션을 사용하여 CLI 콜드 스타트 (cold start)를 건너뛰면서도 장기적인 컨텍스트 축적을 방지합니다. 제공자 측의 세션 메모리 (session memory)를 명시적으로 원하는 경우에만 LUN_ACP_REUSE_SESSION=1을 설정하십시오.
CLI 요청은 VS Code와 동일한 스트리밍 데몬 엔드포인트 (streaming daemon endpoint)를 사용하므로, Kiro가 실행되는 동안 ACP 단계의 변화, 에이전트가 방출하는 스트리밍 청크 (streamed chunks), 그리고 워커가 작업 중일 때의 하트비트 (heartbeat) 라인을 확인할 수 있습니다. 모델의 사고 시간 (thinking time), 도구 사용 (tool use), 네트워크 지연 시간 (network latency), 그리고 프로젝트 파일 읽기 작업은 여전히 실제 성능의 하한선 (floor)으로 남습니다.
Lun은 VS Code 및 Copilot Chat 내부에서도 실행될 수 있습니다.
이 리포지토리에서 번들로 제공되는 VSIX를 다운로드하여 설치하십시오:
직접 원본 다운로드:
https://github.com/soonsoon2/lun/raw/main/extensions/vscode-lun/lun-0.2.5.vsix
VS Code에서:
- 확장 (Extensions)을 엽니다.
Install from VSIX...를 선택합니다.- 다운로드한
lun-0.2.5.vsix파일을 선택합니다. Developer: Reload Window를 실행합니다.
확장 프로그램은 http://127.0.0.1:3456에 있는 로컬 데몬에 연결됩니다. 데몬이 실행 중이지 않으면 자동으로 시작할 수 있습니다.
VS Code Chat 또는 Copilot Chat을 사용할 수 있는 경우, Lun은 @lun으로 등록됩니다:
@lun review this project
@lun /review
@lun /diagnostics
...
오래 걸리는 요청은 최종 답변 전에 진행 상황을 스트리밍하므로, 어떤 단계가 활성화되어 있는지 확인할 수 있습니다:
0.1s: Lun daemon received the request
0.2s: claude PM is planning the request
0.3s: claude PM thinking, round 1
...
별도의 Lun: Open Panel 명령은 데몬 상태, 워커, 사용량 및 로그를 확인하는 데 여전히 유용합니다.
Lun이 다른 에이전트에게 작업을 위임할 때, 채팅 응답에는 PM 요약이 먼저 표시되며 각 모델의 전체 출력은 필요할 때 열어볼 수 있는 마크다운 (Markdown) 보고서로 저장됩니다.
~/.lun/config.json에 저장됨:
{
"language": "en",
"providers": ["kiro", "claude", "copilot", "agy", "codex"],
...
workDir
은 워크스페이스 (Workspace) 루트입니다 (Workspace 참조). 기본적으로 세션 (Sessions), 로그 (logs), 보고서 (reports)가 그 안에 저장됩니다. 세션을 다른 곳에 저장하고 싶은 경우에만 sessionsPath를 설정하세요.
| 변수 (Variable) | 기본값 (Default) | 설명 (Description) |
|---|---|---|
LUN_PORT | 3456 | Web UI 포트 |
LUN_HOST | 127.0.0.1 | Web UI 바인드 주소 |
LUN_USE_CWD | 미설정 (unset) | 설정된 작업 디렉토리 (work dir) 대신 현재 디렉토리에서 에이전트를 실행하려면 1로 설정 |
LUN_NO_DAEMON | 미설정 (unset) | 데몬 (daemon)을 건너뛰고 항상 에이전트를 직접 실행하려면 1로 설정 |
LUN_SERVE_AUTOEXIT | 미설정 (unset) | 브라우저 탭이 닫힐 때 lun serve가 종료되도록 하려면 1로 설정 (기본값은 꺼짐) |
LUN_PREWARM_WORKERS | 1 | 시작 시 데몬 워커 (daemon worker) 프리웜 (prewarm)을 건너뛰려면 0으로 설정 |
LUN_DISABLE_ACP_WORKER | 미설정 (unset) | Kiro/Copilot을 강제로 턴당 스폰 (spawn-per-turn) 모드로 되돌리려면 1로 설정 |
LUN_ACP_REUSE_SESSION | 미설정 (unset) | 프롬프트 (prompts) 간에 Kiro/Copilot ACP 세션을 재사용하려면 1로 설정 |
PORT | 3456 | 대체 포트 변수 |
src/providers.js를 편집하세요:
myagent: {
name: "My Agent",
bin: "myagent-cli",
...
- Node.js >= 18
- 최소 하나 이상의 AI 에이전트 CLI 설치 및 인증 완료
기여 (Contributions), 새로운 프로바이더 (providers), 그리고 포크 (forks)를 환영합니다. 시작하려면 CONTRIBUTING.md를 참조하고, 행동 강령 (Code of Conduct)을 준수해 주세요.
Lun은 에이전트의 도구 사용을 자동 승인하고 인증되지 않은 (unauthenticated) 로컬 서버 (기본적으로 localhost만 허용)를 실행하는 로컬 도구입니다. 자신의 머신 이외의 환경에 노출하기 전에 SECURITY.md를 읽어주시고, 취약점은 공개 이슈가 아닌 비공개로 보고해 주세요.
MIT © SOONSOON
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub Claude Ecosystem의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기