AI 코딩 에이전트를 네이티브 속도로 병렬 실행하세요 — 세션은 절대 잃지 않습니다.Run parallel AI coding agents at native speed — without ever losing a session.
Claude Code·Codex·Gemini(agy)·Cursor·OpenCode를 워크트리마다 나란히 돌립니다. 앱을 kill -9 해도, 업데이트해도, 데몬이 재시작돼도 에이전트는 계속 일하고, 다시 열면 놓친 출력이 바이트 단위로 이어집니다.Claude Code, Codex, Gemini (agy), Cursor and OpenCode side by side, one worktree each. kill -9 the app, update it, restart the daemon — agents keep working, and every byte you missed replays when you come back.
인터랙티브 미리보기 — 워크트리·파일을 눌러 보고 ⌘K로 Jump 팔레트를 여세요.Interactive preview — click worktrees and files, press ⌘K for the Jump Palette.
앱 메모리 예산 (터미널 10개, phys_footprint)
App memory budget (10 terminals, phys_footprint)
세션 데몬 예산 (터미널 10개)
Session daemon budget (10 terminals)
핫 그리드, 그 이상은 zstd 콜드 스크롤백
Hot grid; everything older is zstd cold scrollback
데몬 세대는 항상 하나 — 업그레이드 후 고아 데몬 없음
One daemon generation — no orphan daemons after upgrades
수치는 출시 차단 기준인 설계 목표입니다(앱+데몬 180MB 목표, 차단선 200MB).Figures are release-gating design budgets (180 MB app+daemon target, 200 MB hard gate).
에이전트가 아니라 터미널을 지킵니다We persist the terminal, not the agent
에이전트 종류와 무관한 PTY 수준 지속. 셸·dev 서버·어떤 TUI든 같은 보장을 받습니다.
PTY-level persistence that is agent-agnostic. Shells, dev servers and any TUI get the same guarantee.
PTY는 krill-holder만 소유합니다. 앱·데몬·CLI의 어떤 실패도 PTY를 닫지 않습니다.
Only krill-holder owns PTYs. No app, daemon or CLI failure is allowed to close one.
앱이 꺼져 있던 동안의 출력을 키프레임 + 원본 바이트로 생략 없이 이어 붙입니다. 넘치면 “N바이트 생략”을 정직하게 표시합니다.
Output produced while the app was closed replays from keyframes + raw bytes. Overflow is shown honestly as an “N bytes skipped” gap.
사이드바에서 워크트리를 만들고 각자 에이전트를 붙입니다. 입력이 필요한 세션은 “Needs You” 맨 위로 올라옵니다.
Spin up git worktrees from the sidebar, one agent each. Sessions waiting on you float to the top of “Needs You”.
작업 중·질문 대기·차단·완료·종료·알 수 없음. krill hook이 에이전트 이벤트를 받아 알림·Dock 배지로 바꿉니다.
Working, waiting, blocked, done, exited, unknown. krill hook turns agent events into notifications and Dock badges.
에이전트 결과를 변경 파일 목록과 읽기 전용 diff로 바로 확인합니다.
Review agent output through a changed-files list and read-only diffs.
Claude Code 입력창에서 “안녕하세요⏎”가 유실·중복·재정렬 없이 들어갑니다.
Hangul composition into agent prompts without drops, duplicates or reordering.
3단 프로세스 격리Three-tier process isolation
화면을 그리는 앱, 터미널 상태를 해석하는 데몬, PTY를 쥐고 있는 부모 프로세스를 분리했습니다. 위에서부터 죽어도 아래는 버팁니다.
The app that draws, the daemon that interprets terminal state, and the parent that holds the PTYs are separate processes. Anything above can die; what's below holds.
- GPU 렌더 그리드 · 사이드바 · 탭 · 분할 · diff
- GPU-rendered grid · sidebar · tabs · splits · diff
- 화면 스냅샷 + 행 델타만 수신 (Term 미러 없음)
- Receives screen snapshots + row deltas (no Term mirror)
- ≤ 120 MB
- 세션별 alacritty_terminal · 핫 1,000행
- Per-session alacritty_terminal · 1,000 hot rows
- zstd 세그먼트 콜드 스크롤백 · hook · git 큐
- zstd segment cold scrollback · hooks · git queue
- ≤ 60 MB @ 10 sessions
- 에이전트·셸의 부모, PTY master fd 보관
- Parent of agents & shells, keeps PTY master fds
- krilld를 재기동하고 fd를 다시 넘김
- Relaunches krilld and hands the fds back
- 1,200줄 이하 · panic 금지
- ≤ 1,200 lines · no panics
| 장애Failure | 에이전트 프로세스Agent processes | 화면·출력Screen & output |
|---|---|---|
| 앱 크래시·종료·업데이트App crash / quit / update | ✓ 산다alive | 무손실(링·세그먼트 범위 안), 넘치면 Gap 표시Lossless within ring/segment retention; overflow shown as a gap |
| krilld 크래시krilld crash | ✓ 산다(holder가 fd 보유)alive (holder keeps fds) | 세그먼트에 쓰기 전 바이트는 잃을 수 있음 → 재기동 후 Gap 표시Bytes read but not yet persisted may be lost → shown as a gap after restart |
| krilld 업그레이드krilld upgrade | ✓ 산다alive | 리더 정지·세그먼트 봉인 후 교체라 무손실, 세대 하나Lossless: reader paused & segments sealed before handoff; one generation |
| holder만 크래시holder-only crash | ✓ 산다(krilld도 fd 보유)alive (krilld holds fds too) | 무손실, 종료 코드만 잃음Lossless; only exit codes are lost |
| holder·krilld 동시 소실, 재부팅holder + krilld together, reboot | ✗ 죽는다terminated | 마지막 세그먼트까지 읽기 전용 복원 → claude --resume·codex resumeRead-only restore up to the last segment → claude --resume / codex resume |
워크트리 격리 + 작업 DAGWorktree isolation + task DAGs
코디네이터가 런을 만들고, 의존성이 있는 작업을 나누고, 워커 에이전트를 각자의 워크트리에서 띄웁니다. 사람의 판단이 필요한 지점은 결정 게이트로 멈춥니다.
A coordinator creates a run, splits work into dependent tasks, and starts worker agents in their own worktrees. Points that need a human stop at decision gates.
점 색: 완료 · 작업 중 · 질문 대기 · 게이트 · 대기Dots: done · working · asking · gate · pending
# 1. isolate work in a fresh git worktree $ krill worktree new feat-api --base main # 2. create a run and a dependent task graph $ krill orchestration run-create --title "ship replay" $ krill orchestration task-create --run R --title impl-api $ krill orchestration task-create --run R --title review --deps T1 # 3. start a worker agent on a task $ krill orchestration worker-start --run R --task T1 \ --worker api --agent codex \ --cwd ~/Minikrill/worktrees/feat-api --prompt "implement T1" # 4. block on a human decision $ krill orchestration gate-create --from coordinator --run R \ --question "merge feat-api?" --options yes,no $ krill orchestration gate-resolve G1 --decision yes
에이전트 보고서를 링크 하나로Agent reports as one link
에이전트가 만든 HTML·Markdown 보고서를 share.krill.page에 올리면 샌드박스된 공개 링크가 생깁니다. 90일 보관, 2MB까지, 소유 토큰으로 수정·삭제.
Publish HTML or Markdown reports your agents produce to share.krill.page and get a sandboxed public link. 90-day retention, up to 2 MB, edit/delete with your owner token.
krill artifacts share live파일 하나를 공유하고, 같은 링크로 갱신(update)·회수(unshare)합니다. 소유 토큰은 로컬에 보관됩니다.
Share a file, then update or unshare the same link. The owner token stays on your machine.
$ krill artifacts share ./report.html ✓ https://share.krill.page/a/k7Qm2xR9
Orca 호환 와이어 계약 — 기존 Orca식 클라이언트가 그대로 동작합니다.
Orca-compatible wire contract — existing Orca-style clients work unchanged.
$ jq -n --rawfile c report.html \
'{content:$c, contentType:"text/html", fileName:"report.html"}' \
| curl -s https://share.krill.page/v1/artifacts \
-H 'content-type: application/json' --data @-
앱이 꺼져 있어도, CLI는 데몬에 직접 붙습니다The CLI talks to the daemon — app open or not
단일 바이너리 krill. 일반 터미널에서 krill attach로 같은 세션에 들어갈 수 있습니다. /docs에서도 봅니다.
One binary, krill. krill attach drops any regular terminal into the same session. Also at /docs.
Quickstart
$ curl -fsSL https://krill.page/install.sh | bash
$ krill doctor $ krill hook install claude
$ id=$(krill new --worktree feat-x --agent claude) $ krill wait "$id" --for idle $ krill read "$id" --lines 40
$ krill attach "$id"
Sessions
krill ls [--json]세션 목록과 상태List sessions and their statekrill new [--cwd <path>] [--worktree <name>] [--agent <profile> | -- <program>…]새 세션 생성. 에이전트 프로필 또는 임의 프로그램Create a session running an agent profile or any programkrill send <id> [--enter] [--text <text>] [--stdin]세션에 입력 보내기Send input to a sessionkrill read <id> [--lines N]현재 화면·최근 출력 읽기Read the screen and recent outputkrill wait <id> --for idle|waiting|blocked|done|exited|pattern|quiet [--timeout <s>]상태·패턴·조용함이 될 때까지 대기Block until a state, regex pattern or quiet periodkrill attach <id>일반 터미널에서 세션에 접속(Ctrl-] 분리)Attach a regular terminal (Ctrl-] detaches)krill kill <id>세션 종료(HUP → TERM → KILL)Terminate a session (HUP → TERM → KILL)krill --host <user@host> lsSSH 유닉스 소켓 포워딩으로 원격 krilld 조작Drive a remote krilld over SSH Unix-socket forwardingkrill handoff --from <id> [--to-agent <agent>] [--prompt <text>]세션 맥락을 다른 에이전트에게 넘기기Hand a session's context to another agentWorktrees & changes
krill worktree new <name> [--repo <path>] [--base <ref>] [--setup run|skip]git 워크트리 생성(+ 레포 setup 스크립트)Create a git worktree (optionally run repo setup)krill worktree rm <path> [--force]워크트리 삭제Remove a worktreekrill changes [--repo <path>]변경 파일 목록List changed fileskrill set --comment <text> | --workspace-status <…> | --pr <n>워크트리 메모·상태 배지·PR/이슈 연결Worktree comment, status badge, PR/issue linkkrill reference list|add|remove <url>세션·워크트리에 참고 URL 묶기Attach reference URLs to a session or worktreekrill ports세션이 연 포트 보기Ports opened by sessionsOrchestration
krill orchestration run-create --title <t>오케스트레이션 런 생성Create an orchestration runkrill orchestration task-create --run <r> --title <t> [--deps t1,t2]의존성 있는 작업(DAG 노드) 추가Add a task (DAG node) with dependencieskrill orchestration worker-start --run <r> [--task <t>] --worker <name> [--agent <a>] [--cwd <dir>] --prompt <text>작업에 워커 에이전트 배정·기동Dispatch and boot a worker agent on a taskkrill orchestration send | check [--wait] | ask | reply코디네이터↔워커 메시지, 블로킹 질문·답Coordinator ↔ worker messages, blocking ask/replykrill orchestration gate-create --from <n> --question <q> [--options a,b]사람 결정 게이트 생성Open a human decision gatekrill orchestration gate-resolve <id> --decision <choice>게이트 결정Resolve a gatekrill orchestration worker-list | worker-read | worker-stop워커 상태·출력 확인, 정지Inspect, read and stop workersAgents & hooks
krill hook install|uninstall claude|codex|agy|cursor|opencode에이전트 상태 hook 설치 — 알림·배지·Needs YouInstall status hooks — notifications, badges, Needs Youkrill agent list감지된 에이전트 프로필Detected agent profileskrill account list|switch|add|rm|auto-switch에이전트 계정 전환·한도 소진 시 자동 전환Switch agent accounts, auto-switch on usage limitskrill skills list|get|install <name>에이전트 스킬 설치Install agent skillskrill schedule add <id> --cron '…' --prompt <text> -- <exe>cron(UTC) 예약 에이전트 실행Scheduled (UTC cron) agent runskrill statusline [install|uninstall]Claude Code 상태 줄 연동Claude Code status line integrationArtifacts live
krill artifacts share <file> [--title <t>]HTML·Markdown을 share.krill.page에 공개Publish HTML/Markdown to share.krill.pagekrill artifacts update|unshare <file>같은 링크 갱신·회수Update or withdraw the same linkkrill artifacts list | delete <slug>내 공유물 목록·삭제List and delete your sharesDiagnostics & updates
krill doctor [--bundle | --json]holder·krilld·소켓·hook 진단, 지원용 번들Diagnose holder, krilld, socket and hooks; support bundlekrill update [--check] [--json]새 릴리스 확인·설치(세션 유지)Check for and install updates (sessions stay alive)krill history clear콜드 스크롤백 기록 삭제Clear cold scrollback historykrill telemetry status|enable|disable텔레메트리 설정(기본 꺼짐)Telemetry setting (off by default)자주 묻는 질문Frequently asked questions
아키텍처·세션 생존 보장·지원 에이전트·메모리 예산에 대한 핵심 답변입니다.Key answers on architecture, session survival guarantees, supported agents, and memory budgets.
Krill은 기존 Electron 터미널 앱이나 tmux와 무엇이 다른가요?How is Krill different from Electron terminal apps or tmux?
gpui로 작성된 네이티브 macOS 앱이며, 화면을 그리는 krill-app, 터미널 상태를 해석하는 krilld, PTY 마스터 fd를 보관하는 krill-holder로 3단 격리되어 있습니다. Electron 앱과 달리 UI가 크래시·업데이트되어도 에이전트가 죽지 않으며, tmux와 달리 중첩 TUI 이스케이프 충돌 없이 단일 질의 응답자(krilld), Git 워크트리·읽기 전용 diff, 에이전트 6상태 훅(Needs You), 한글 IME 조합, 멀티 에이전트 작업 DAG 오케스트레이션을 기본 제공합니다.
Krill is a 100% Rust native macOS app built with gpui and split across three processes: krill-app (UI), krilld (session daemon), and krill-holder (PTY parent). Unlike Electron wrappers, UI crashes or updates never kill running agents. Unlike raw tmux, krilld acts as the single terminal query responder without nested-TUI escape collisions, while natively providing Git worktree isolation, read-only diff review, 6-state agent hooks (Needs You), first-class Korean Hangul IME, and multi-agent task DAG orchestration.
앱을 강제 종료(kill -9)하거나 업데이트할 때 세션은 어떻게 살아남나요?How do AI coding sessions survive kill -9, app crashes, and updates?
krill-holder가 소유하고 SCM_RIGHTS로 krilld에 전달합니다. 앱이 꺼진 동안의 출력은 키프레임과 zstd 콜드 세그먼트에 기록되며, 다시 연결하면 놓친 바이트가 이어 붙여집니다(보관 범위를 넘기면 정직하게 Gap으로 표시합니다).
PTY master file descriptors are owned exclusively by krill-holder (≤ 1,200 lines, panic-free) and passed to krilld via SCM_RIGHTS. While krill-app is closed, krilld persists keyframes and raw output into zstd cold scrollback segments, replaying every missed byte upon reconnect (with explicit gap markers if retention overflows).
어떤 AI 코딩 에이전트와 셸을 지원하나요?Which AI coding agents and shells does Krill support?
claude), OpenAI Codex(codex), Gemini CLI(agy), Cursor(cursor), OpenCode(opencode) 전용 프로필과 상태 훅(krill hook install)을 내장하고 있습니다. 또한 PTY 수준에서 세션을 유지하므로 zsh·bash·개발 서버·임의의 TUI 프로그램도 똑같은 생존 보장을 받습니다.
Krill includes built-in profiles and status hooks (krill hook install) for Claude Code (claude), OpenAI Codex (codex), Gemini CLI (agy), Cursor (cursor), and OpenCode (opencode). Because persistence happens at the PTY level, standard shells (zsh, bash), dev servers, and any TUI program get the same guarantee.
시스템 요구 사항과 메모리 예산은 어떻게 되나요?What are the system requirements and memory budgets?
arm64) macOS용으로 배포되며, Intel Mac은 Rust 1.98 이상으로 소스 빌드할 수 있습니다. 터미널 10개 기준 출시 차단 설계 목표는 앱(krill-app) ≤ 120 MB, 데몬(krilld) ≤ 60 MB(합계 목표 180 MB, 하드 게이트 200 MB, phys_footprint)이며, 기존 10세션×24에포크 가속 소크 테스트에서 데몬 합계 47.39 MiB가 실측되었습니다.
Prebuilt release bundles target Apple Silicon (arm64) macOS, while Intel Macs can build from source with Rust 1.98+. The release-gating design budget at 10 terminals is ≤ 120 MB for krill-app and ≤ 60 MB for krilld (180 MB combined target, 200 MB hard gate, macOS phys_footprint); an existing 10-session × 24-epoch accelerated soak test recorded 47.39 MiB total daemon footprint.
GUI 앱 없이 CLI만 쓰거나 원격 SSH 호스트를 제어할 수 있나요?Can I use Krill headlessly from the CLI or over remote SSH?
krill 단일 바이너리는 유닉스 도메인 소켓으로 krilld에 직접 연결되므로 앱 창이 닫혀 있어도 세션 생성(krill new), 입출력(send/read/wait), 터미널 접속(krill attach), 멀티 에이전트 오케스트레이션(krill orchestration)이 모두 동작합니다. krill --host user@host로 SSH 소켓 포워딩을 통한 원격 호스트 제어도 지원합니다.
Yes. The single krill binary talks directly to krilld over a Unix domain socket, so creating sessions (krill new), scripting I/O (send/read/wait), attaching from any terminal (krill attach), and running multi-agent DAGs (krill orchestration) all work with the GUI closed. Remote hosts are supported via krill --host user@host over SSH Unix-socket forwarding.
에이전트 세션, 이제 잃지 마세요Stop babysitting your agents
Apple Silicon macOS용. 설치 스크립트가 SHA-256과 codesign을 검증합니다.
For Apple Silicon macOS. The installer verifies SHA-256 and codesign before touching /Applications.