순수 Rust 네이티브 macOS 앱 · 앱과 세션 데몬 분리Pure-Rust native macOS app · app and session daemon split

Run parallel AI coding agents at native speed — without ever losing a session.

AI 코딩 에이전트를 네이티브 속도로 병렬 실행하세요 — 세션은 절대 잃지 않습니다.

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.

$curl -fsSL https://krill.page/install.sh | bash
macOS용 다운로드Download for macOS CLI 문서Read the docs
Krill — krill · feat-replay ⌘K Jump
krilld connectedholder pid 41275 sessions · hot 1,000 rows · zstd cold0:00

인터랙티브 미리보기 — 워크트리·파일을 눌러 보고 ⌘K로 Jump 팔레트를 여세요.Interactive preview — click worktrees and files, press ⌘K for the Jump Palette.

≤ 120 MB

앱 메모리 예산 (터미널 10개, phys_footprint)

App memory budget (10 terminals, phys_footprint)

≤ 60 MB

세션 데몬 예산 (터미널 10개)

Session daemon budget (10 terminals)

1,000 rows

핫 그리드, 그 이상은 zstd 콜드 스크롤백

Hot grid; everything older is zstd cold scrollback

0 orphans

데몬 세대는 항상 하나 — 업그레이드 후 고아 데몬 없음

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).

Features

에이전트가 아니라 터미널을 지킵니다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.

끊기지 않는 세션Sessions that never drop

PTY는 krill-holder만 소유합니다. 앱·데몬·CLI의 어떤 실패도 PTY를 닫지 않습니다.

Only krill-holder owns PTYs. No app, daemon or CLI failure is allowed to close one.

바이트 단위 재생Byte-exact replay

앱이 꺼져 있던 동안의 출력을 키프레임 + 원본 바이트로 생략 없이 이어 붙입니다. 넘치면 “N바이트 생략”을 정직하게 표시합니다.

Output produced while the app was closed replays from keyframes + raw bytes. Overflow is shown honestly as an “N bytes skipped” gap.

워크트리 병렬 실행Parallel worktrees

사이드바에서 워크트리를 만들고 각자 에이전트를 붙입니다. 입력이 필요한 세션은 “Needs You” 맨 위로 올라옵니다.

Spin up git worktrees from the sidebar, one agent each. Sessions waiting on you float to the top of “Needs You”.

에이전트 상태 6종Six agent states

작업 중·질문 대기·차단·완료·종료·알 수 없음. krill hook이 에이전트 이벤트를 받아 알림·Dock 배지로 바꿉니다.

Working, waiting, blocked, done, exited, unknown. krill hook turns agent events into notifications and Dock badges.

변경 파일 + diff 검토Changes + diff review

에이전트 결과를 변경 파일 목록과 읽기 전용 diff로 바로 확인합니다.

Review agent output through a changed-files list and read-only diffs.

한
한글 IME 완전 지원First-class Korean IME

Claude Code 입력창에서 “안녕하세요⏎”가 유실·중복·재정렬 없이 들어갑니다.

Hangul composition into agent prompts without drops, duplicates or reordering.

Architecture

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.

krill-app · gpui
보이는 화면만 그립니다Draws only what's visible
  • GPU 렌더 그리드 · 사이드바 · 탭 · 분할 · diff
  • GPU-rendered grid · sidebar · tabs · splits · diff
  • 화면 스냅샷 + 행 델타만 수신 (Term 미러 없음)
  • Receives screen snapshots + row deltas (no Term mirror)
  • ≤ 120 MB
krilld · session daemon
유일한 질의 응답자The only query responder
  • 세션별 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
krill-holder · PTY parent
작고, 거의 안 바뀝니다Tiny and nearly frozen
  • 에이전트·셸의 부모, 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
Multi-agent orchestration

워크트리 격리 + 작업 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.

plan
claude · done
impl-api
codex · wt/api
impl-ui
opencode · wt/ui
docs
agy · asking
gate
merge? yes / no
review
cursor · blocked by gate

점 색: 완료 · 작업 중 · 질문 대기 · 게이트 · 대기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
Artifact sharing

에이전트 보고서를 링크 하나로Agent reports as one link

에이전트가 만든 HTML·Markdown 보고서를 share.krill.page에 올리면 샌드박스된 공개 링크가 생깁니다. 90일 보관, 10MB까지, 소유 토큰으로 수정·삭제.

Publish HTML or Markdown reports your agents produce to share.krill.page and get a sandboxed public link. 90-day retention, up to 10 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
HTTP API live

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 reference & quickstart

앱이 꺼져 있어도, 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

설치Install — /Applications/Krill.app + ~/.local/bin/krill— /Applications/Krill.app + ~/.local/bin/krill
$ curl -fsSL https://krill.page/install.sh | bash
상태 점검 · 에이전트 hook 설치Health check · install agent hooks
$ krill doctor
$ krill hook install claude
앱 없이 워크트리에서 에이전트 시작Start an agent in a worktree — no app needed
$ id=$(krill new --worktree feat-x --agent claude)
$ krill wait "$id" --for idle
$ krill read "$id" --lines 40
아무 터미널에서 같은 세션에 붙기Attach from any terminal Ctrl-] detach
$ krill attach "$id"

Sessions

krill ls [--json]세션 목록과 상태List sessions and their state
krill new [--cwd <path>] [--worktree <name>] [--agent <profile> | -- <program>…]새 세션 생성. 에이전트 프로필 또는 임의 프로그램Create a session running an agent profile or any program
krill send <id> [--enter] [--text <text>] [--stdin]세션에 입력 보내기Send input to a session
krill read <id> [--lines N]현재 화면·최근 출력 읽기Read the screen and recent output
krill wait <id> --for idle|waiting|blocked|done|exited|pattern|quiet [--timeout <s>]상태·패턴·조용함이 될 때까지 대기Block until a state, regex pattern or quiet period
krill 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 forwarding
krill handoff --from <id> [--to-agent <agent>] [--prompt <text>]세션 맥락을 다른 에이전트에게 넘기기Hand a session's context to another agent

Worktrees & 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 worktree
krill changes [--repo <path>]변경 파일 목록List changed files
krill set --comment <text> | --workspace-status <…> | --pr <n>워크트리 메모·상태 배지·PR/이슈 연결Worktree comment, status badge, PR/issue link
krill reference list|add|remove <url>세션·워크트리에 참고 URL 묶기Attach reference URLs to a session or worktree
krill ports세션이 연 포트 보기Ports opened by sessions

Orchestration

krill orchestration run-create --title <t>오케스트레이션 런 생성Create an orchestration run
krill orchestration task-create --run <r> --title <t> [--deps t1,t2]의존성 있는 작업(DAG 노드) 추가Add a task (DAG node) with dependencies
krill orchestration worker-start --run <r> [--task <t>] --worker <name> [--agent <a>] [--cwd <dir>] --prompt <text>작업에 워커 에이전트 배정·기동Dispatch and boot a worker agent on a task
krill orchestration send | check [--wait] | ask | reply코디네이터↔워커 메시지, 블로킹 질문·답Coordinator ↔ worker messages, blocking ask/reply
krill orchestration gate-create --from <n> --question <q> [--options a,b]사람 결정 게이트 생성Open a human decision gate
krill orchestration gate-resolve <id> --decision <choice>게이트 결정Resolve a gate
krill orchestration worker-list | worker-read | worker-stop워커 상태·출력 확인, 정지Inspect, read and stop workers

Agents & hooks

krill hook install|uninstall claude|codex|agy|cursor|opencode에이전트 상태 hook 설치 — 알림·배지·Needs YouInstall status hooks — notifications, badges, Needs You
krill agent list감지된 에이전트 프로필Detected agent profiles
krill account list|switch|add|rm|auto-switch에이전트 계정 전환·한도 소진 시 자동 전환Switch agent accounts, auto-switch on usage limits
krill skills list|get|install <name>에이전트 스킬 설치Install agent skills
krill schedule add <id> --cron '…' --prompt <text> -- <exe>cron(UTC) 예약 에이전트 실행Scheduled (UTC cron) agent runs
krill statusline [install|uninstall]Claude Code 상태 줄 연동Claude Code status line integration

Artifacts live

krill artifacts share <file> [--title <t>]HTML·Markdown을 share.krill.page에 공개Publish HTML/Markdown to share.krill.page
krill artifacts update|unshare <file>같은 링크 갱신·회수Update or withdraw the same link
krill artifacts list | delete <slug>내 공유물 목록·삭제List and delete your shares

Diagnostics & updates

krill doctor [--bundle | --json]holder·krilld·소켓·hook 진단, 지원용 번들Diagnose holder, krilld, socket and hooks; support bundle
krill update [--check] [--json]새 릴리스 확인·설치(세션 유지)Check for and install updates (sessions stay alive)
krill history clear콜드 스크롤백 기록 삭제Clear cold scrollback history
krill telemetry status|enable|disable텔레메트리 설정(기본 꺼짐)Telemetry setting (off by default)

에이전트 세션, 이제 잃지 마세요Stop babysitting your agents

Apple Silicon macOS용. 설치 스크립트가 SHA-256과 codesign을 검증합니다.

For Apple Silicon macOS. The installer verifies SHA-256 and codesign before touching /Applications.

$curl -fsSL https://krill.page/install.sh | bash