본문 바로가기
ColliePWA

04/Documentation

터미널

Collie를 Herdr, tmux, zellij, tuios 또는 Tern에 연결하는 방법, 각각이 응답할 수 있는 내용, agent beacon에 대해 다룹니다. tmux, zellij, tuios, Tern 지원은 실험적입니다. 버그 보고를 환영합니다

Collie가 세션을(를) 읽어오는 터미널은 다음과 같습니다: Herdr, tmux, zellij, tuios, Tern. Collie는 설치당 하나의 터미널을 제어하며, Herdr가 기본값입니다. 이 페이지에서는 Collie가 이들 중 하나를 가리키도록 설정하는 방법, 각 터미널이 응답할 수 있는 항목, 창에서 에이전트를 감지하기 위해 Collie가 사용하는 beacon을 다룹니다. 화면이 없는 durable agent는 터미널이 아니며, Durable agent에서 다룹니다.

tmux와 zellij는 자체 최상위 그룹을 세션이라고 부릅니다. Collie는 이를 space로 표시합니다.

Collie를 multiplexer로 지정하기

COLLIE_MUX에 백엔드 이름을 지정하고 엔드포인트를 가리키도록 설정한 뒤, 재시작하고 beacon 훅을 설치하십시오.

실험적 기능입니다. tmux 및 zellij(1.0 이후)는 단일 호스트의 tmux 3.6b 및 zellij 0.44.2 환경에서 테스트되었습니다. tuios(1.15.0 이후)는 tuios 0.8.4 환경에서 테스트되었습니다. Tern은 메인테이너가 실행할 수 없는 비공개 베타인 tern 0.4.5 환경에서 해당 기여자가 테스트했습니다. Herdr는 기본값이자 기본 지원 백엔드입니다. 테스터 모집: 멀티플렉서, 버전, OS, 발생 현상을 기재하여 AltanS/collie에 tmux: …, zellij: …, tuios: … 또는 tern: … 제목으로 이슈를 등록하십시오.

명령줄에서 multiplexer를 지정합니다:

COLLIE_MUX=herdr collie start
COLLIE_MUX=tmux collie start
COLLIE_MUX=zellij collie start
COLLIE_MUX=tuios collie start
COLLIE_MUX=tern collie start

기본 대상이 원하는 대상이 아닐 때 엔드포인트를 설정합니다:

# in your .env: ~/.config/collie/.env, or Herdr's plugin config dir on a Herdr
# install. See Configure for the full precedence.
COLLIE_MUX=tmux
COLLIE_MUX_ENDPOINT_TMUX=/run/user/1000/collie-tmux.sock
COLLIE_MUX_ENDPOINT_ZELLIJ=collie-zellij

# only if the binary sits somewhere unusual
# COLLIE_TMUX_BIN=/usr/bin/tmux
# COLLIE_ZELLIJ_BIN=/home/you/.local/bin/zellij
변수값의미
COLLIE_MUXherdr, tern, tmux, zellij 또는 tuios이 설치본이 제어하는 터미널
COLLIE_MUX_ENDPOINT_TMUX/run/user/1000/collie-tmux.sock소켓 PATH(tmux -S), /가 포함되어 있기 때문입니다
COLLIE_MUX_ENDPOINT_TMUXwork소켓 NAME(tmux -L work), / 없음
COLLIE_MUX_ENDPOINT_TMUX비어 있음tmux 자체의 기본 서버
COLLIE_MUX_ENDPOINT_ZELLIJcollie-zellij세션 NAME이며, 경로가 아닙니다
COLLIE_MUX_ENDPOINT_ZELLIJ비어 있음실행 중인 단일 세션
COLLIE_MUX_ENDPOINT_TUIOS/run/user/1000/tuios/tuios.socktuios 데몬의 소켓 PATH
COLLIE_MUX_ENDPOINT_TUIOS비어 있음$XDG_RUNTIME_DIR/tuios/tuios.sock, 그렇지 않으면 /tmp/tuios-<uid>/tuios.sock
COLLIE_MUX_ENDPOINT_TERN/run/user/1000/tern/daemon.sockTern 데몬의 소켓 PATH
COLLIE_MUX_ENDPOINT_TERN비어 있음$XDG_RUNTIME_DIR/tern/daemon.sock, 그렇지 않으면 /tmp/tern-<uid>/daemon.sock
COLLIE_TERN_BIN/home/you/.local/opt/tern/terntern이 일반적이지 않은 위치에 있는 경우에만 해당
COLLIE_TMUX_BIN/usr/bin/tmuxtmux가 일반적이지 않은 위치에 있는 경우에만 해당합니다
COLLIE_ZELLIJ_BIN/home/you/.local/bin/zellijzellij가 일반적이지 않은 위치에 있는 경우에만 해당합니다

Herdr에는 여기에 해당하는 엔드포인트 변수가 없습니다. 소켓은 HERDR_SOCKET_PATH이며 COLLIE_MUX_ENDPOINT_ 이름이 아닙니다.

해당 소켓은 로컬 소켓이며 다른 소켓이 아닙니다. Herdr에 저장된 머신은 crew 구성원이 아니며, Collie crew만이 다른 머신의 창을 휴대폰으로 가져옵니다. 각 목록의 정의와 둘이 서로 다른 이유는 Herdr 머신 및 crew에 있습니다.

그런 다음 다시 시작하고 비콘 훅을 설치한 후 휴대전화에서 볼 수 있는 위치에 에이전트를 시작합니다:

collie restart                 # after every .env edit
collie hooks install claude    # once per host; tmux, zellij and tern need it, Herdr gets hook edges

# open a window or a tab for the agent
tmux -S /run/user/1000/collie-tmux.sock new-window -n claude
zellij --session collie-zellij action new-tab --name claude

claude                         # in that window or tab

해당 명령들이 수행한 작업

명령줄에서 COLLIE_MUX을(를) 사용하면 해당 실행 및 이후의 모든 실행에 대한 선택이 설정됩니다. start은(는) 이름을 .env에 기록하므로 나중에 collie start을(를) 실행해도 동일한 멀티플렉서를 제어합니다.

COLLIE_MUX이(가) 설정되지 않은 경우, start은(는) Herdr, tmux 및 zellij를 감지하고 백엔드를 묻는 메시지를 표시한 후 답변을 .env에 기록합니다. 전체 구성 참조는 MUX_CONTRACT.md → Collie가 멀티플렉서를 가리키도록 설정을(를) 확인하십시오.

collie hooks install claude은(는) tmux, zellij, tern에 필요한 Collie의 beacon 훅을 설치합니다. 이들 멀티플렉서는 창을 일반 셸로 노출하므로, 훅이 없으면 모든 창이 bash(으)로 표시됩니다.

이 명령은 ~/.claude/settings.json을(를) 업데이트하고 프로젝트 설정은 변경하지 않은 채 유지합니다(자세한 내용은 아래를 참조하십시오). Claude Code 2.1.301은 실행 중에 훅을 다시 로드합니다. 더 이전 버전의 Claude는 재시작하십시오.

참고. 이 모드에서는 Herdr가 필요하지 않습니다. COLLIE_MUX=tmux 또는 COLLIE_MUX=zellij 사용 시 브릿지는 선택한 어댑터만 로드하고 Herdr 소켓은 무시합니다. 여러 Herdr 설정 루트에 걸친 Herdr 세션 검색은 비활성화됩니다(bridge/index.ts). Herdr를 설치하거나 실행할 필요가 없으며, .env은(는) 플러그인 설정 디렉터리 대신 ~/.config/collie/에 위치합니다.

tmux 관련 참고 사항

COLLIE_TMUX_BIN 설정은 대개 비워 둡니다. Collie는 표준 경로 목록을 확인하며 PATH 환경 변수를 읽지 않습니다. 백그라운드 서비스 및 Herdr 액션은 로그인 셸과 이 환경 변수를 공유하지 않기 때문입니다.

참고. 소켓 경로를 짧게 유지하십시오. 대략 100자를 초과하는 Unix 도메인 소켓은 연결에 실패하며 tmux가 error connecting to … (File name too long)을(를) 반환합니다. 깊은 디렉터리 경로 대신 /run/user/<uid>/ 또는 /tmp을(를) 사용하십시오.

window-size이(가) manual(으)로 설정된 3.7 이전 버전의 tmux에서는 창을 생성할 때 서버 충돌이 발생합니다. Collie는 이 상태에서 창 생성을 차단하고 tmux set -g window-size latest을(를) 실행하도록 안내합니다. 요구 사항에 테스트된 버전 목록이 있습니다.

automatic-rename을(를) 켜면 tmux는 창 안에서 실행 중인 프로그램의 이름을 따서 창 이름을 바꿉니다. 이름이 bash(으)로 가득 찬 탭 화면은 아무런 정보를 주지 않으므로, Collie는 대신 해당 창의 활성 창이 위치한 마지막 폴더를 표시합니다. 직접 이름을 지정한 창은 해당 이름을 유지합니다.

zellij 관련 참고 사항

사용 중인 배포판에 zellij 패키지가 없다면 zellij의 GitHub 릴리스에서 바이너리를 다운로드하여 PATH에 배치하십시오.

엔드포인트를 비워 두면 실행 중인 단일 세션이 기본값으로 지정됩니다. 세션이 없거나 여러 개 존재하는 경우 Collie는 세션을 임의로 선택하지 않고 오류와 함께 중단됩니다. 이름이 지정된 세션이 종료되면 Collie는 활성 세션으로 전환하지 않고 해당 세션 이름을 보고합니다.

Zellij가 세션을 찾으려면 XDG_RUNTIME_DIR이(가) 필요합니다. Collie가 모든 세션을 종료된 것으로 보고하는 경우 systemd 서비스에 이 환경 변수가 포함되어 있는지 확인하십시오(계약).

Zellij 세션은 초기 터미널과 독립적으로 유지됩니다. zellij -s collie-zellij을(를) 사용하여 세션을 생성하고 Ctrl o d을(를) 사용하여 분리하십시오. 헤드리스 호스트에서는 zellij attach --create-background collie-zellij이(가) 분리된 세션을 직접 시작합니다(zellij 0.44.2에서 검증됨).

참고. Collie는 활성 세션을 관리하지만, 세션을 생성하거나 재시작하지는 않습니다.

Zellij 0.44 이상 버전은 각 창의 폴더를 보고하므로 zellij 창에 Files 버튼이 표시되고 브랜치가 나타납니다. 이전 zellij 버전은 폴더를 보고하지 않으며, 해당 창에는 둘 다 표시되지 않습니다.

tern 참고 사항

Collie가 Tern을 가리키도록 설정:

COLLIE_MUX=tern collie start
collie hooks install claude   # beacon hooks for agent detection

Collie는 Tern 세션을 space로, 탭을 tab으로, 블록을 pane으로 읽습니다. 엔드포인트는 Tern 데몬의 소켓이며 기본값은 $XDG_RUNTIME_DIR/tern/daemon.sock(또는 /tmp/tern-<uid>/daemon.sock)입니다. Tern 창 내부에서는 $TERN_PANE이(가) 블록을 식별하고 $TERN_PANE_SOCKET이(가) 데몬 소켓을 가리킵니다.

Tern은 tern events을(를) 통해 수명 주기 이벤트를 보고하여 즉각적인 토폴로지 변경 알림을 지원합니다.

"Show in terminal"은 Tern 창을 해당 창의 Tern 세션 및 탭으로 이동하고 해당 블록에 포커스를 둡니다. Collie가 생성한 탭이나 Tern 세션은 백그라운드에서 열리며 창을 이동하지 않습니다.

Collie는 tuios를 자동으로 감지하지 않는 것처럼 Tern도 자동으로 감지하지 않습니다. COLLIE_MUX=tern을(를) 사용해 이름을 지정하십시오. 입력된 텍스트가 128KiB를 초과하면 단일 명령줄 인수로 전달되므로 거부됩니다.

durable 관련 참고 사항

연결하는 durable agent는 터미널이 아니며 화면이 없습니다. Durable agent에서는 collie durable attach을(를) 사용해 연결하는 방법, COLLIE_MUX=durable을(를) 사용해 durable agent만 단독으로 제어하는 이전 방식, durable agent에 접근하는 두 가지 방법, 휴대폰에서 수행할 수 있는 작업, 연결 불가로 표시될 때 확인해야 할 사항을 다룹니다.

tuios 참고 사항

tuios는 자체적으로 에이전트를 보고하므로 비콘 훅이 필요하지 않습니다:

COLLIE_MUX=tuios collie start
tuios integration install claude-code   # once, so tuios hears the agent's hooks

Collie는 tuios 데몬에서 에이전트, 에이전트의 상태 및 대화를 읽습니다. 사용자를 기다리는 창은 차단됨으로 표시되며, 에이전트가 대화를 보고했을 때 창의 기록이 열립니다. Collie에 하네스가 없는 에이전트는 셸로 표시됩니다.

Collie는 각 tuios 세션을 스페이스로, 각 작업 공간을 탭으로, 각 창을 창(pane)으로 표시합니다. 작업 공간은 창을 포함하고 있는 동안 탭으로 표시됩니다. 다른 머신에서 실행되는 창은 표시되지 않습니다. 해당 머신의 Collie가 자체 tuios를 가리키도록 하십시오.

엔드포인트는 데몬의 소켓입니다. 비워 두면 tuios 자체가 사용하는 소켓을 사용합니다. Collie는 이를 찾기 위해 XDG_RUNTIME_DIR 변수를 읽으므로 서비스에 해당 변수가 있는지 확인하십시오. tuios 창 내부에서 echo $TUIOS_SOCKET 명령을 실행하면 경로가 출력됩니다.

Collie에는 tuios 0.8.3 이상 버전이 필요합니다. 데몬이 workspace-renamed 이벤트를 알려야 하지만, 0.8.2 버전은 이를 지원하지 않습니다. 이전 버전의 데몬을 사용하는 경우 Collie는 브리지를 연결 끊김으로 표시하고 로그에 업데이트할 항목을 표시합니다.

tuios에서는 몇 가지 사항이 다르게 작동합니다:

  • 새 탭은 번호가 가장 낮은 빈 작업 공간에서 열립니다. tuios 세션에는 기본적으로 9개의 작업 공간이 있으므로 Collie는 열 번째 탭 생성을 거부합니다.
  • Show in terminal은 tuios-web 탭을 포함하여 해당 창의 tuios 세션을 표시하는 모든 터미널을 이동합니다. tuios는 터미널을 다른 tuios 세션으로 이동할 수 없습니다. 해당 창의 tuios 세션을 표시하는 터미널이 없으면 Collie는 동작을 거부하고 해당 터미널이 표시 중인 tuios 세션 이름을 안내합니다.
  • 새 세션 페이지의 새 worktree 스위치는 꺼진 상태로 유지되며 Herdr가 필요하다고 표시됩니다.

작동을 확인하셨습니까?

collie doctor   # the `mux` check names the multiplexer, its endpoint,
                # and whether it answered (durable: the six `durable-*` checks)

# `[bridge] mux: tmux · socket /run/user/1000/collie-tmux.sock`, printed at
# startup; a multiplexer it cannot reach is one warning line more
collie logs

# the herd, as the phone is given it; reads need the pairing token
curl -s -H "Authorization: Bearer $COLLIE_TOKEN" http://127.0.0.1:8787/api/snapshot | head -c 400

모든 읽기 작업에는 페어링된 기기의 토큰이 필요하므로, 이 curl 호출은 토큰을 전송합니다. 토큰이 없으면 브리지에서 403 device not paired(으)로 응답합니다. 스크립트용 토큰을 가져오는 방법은 1.18.0 버전으로 업그레이드을(를) 참조하십시오. 호스트에서는 collie doctor에 토큰이 필요하지 않습니다. COLLIE_DEVICE_HEADER은(는) 여전히 쓰기 및 Files 보기(기기 페어링)에만 접근을 제한합니다.

휴대폰 UI를 확인하십시오. 대시보드에 tmux 창 또는 zellij 탭이(가) 표시되어야 하며, Claude 창은 bash 대신 에이전트로 식별되어야 합니다. 창이 여전히 표준 셸로 표시된다면 아래의 beacon 훅 설치를 확인하십시오.

Collie는 Claude 자체 설정에 훅을 작성합니다

$ collie hooks install claude
$ collie hooks status
would install: /home/you/collie/bin/collie beacon emit  (this checkout)
/home/you/.claude/settings.json: installed (v1)

tmux, zellij, Tern은 창을 일반 셸로 노출하므로 에이전트가 자신을 직접 알려야 합니다. 이를 위해 Claude Code 설정에 Collie의 beacon 훅을 설치해야 합니다. Herdr에서는 동일한 훅이 hook edge만 제공합니다.

출력은 이 저장소의 bin/collie 경로를 참조합니다. 패키지 설치 시에는 버전이 지정된 디렉터리 대신 설치된 바이너리 경로(~/.local/bin/collie 또는 ~/.local/share/collie/current/bin/collie)를 사용하므로 업데이트 후에도 링크가 유효하게 유지됩니다.

Claude 구성 변경에 대한 동작 세부 정보:

  • global ~/.claude/settings.json 및 활성 CLAUDE_CONFIG_DIR을(를) 수정합니다. 프로젝트 수준의 .claude/settings.json 파일은 변경되지 않습니다.
  • 10초 타임아웃이 지정된 # collie-beacon v1 태그의 5 훅을 주입합니다. 기존 훅은 유지됩니다. hooks uninstall claude 명령은 Collie 항목만 제거합니다.
  • 요청하지 않는 한 statusLine을 건드리지 않습니다. 플래그가 없으면 설치 시 statusLine을(를) 건드리지 않습니다. 벨트 위 모델 옆의 컨텍스트 점은 그대로 표시됩니다. 훅이 세션 트랜스크립트를 읽고, 세션 시작 시점의 창 크기를 읽습니다.
  • 5시간 및 7일 창은 자체적으로 표시됩니다. 훅과 statusLine이 필요하지 않습니다. Claude 창이 열려 있는 동안, 브릿지는 이 머신의 Claude 로그인 정보(~/.claude/.credentials.json 또는 $CLAUDE_CONFIG_DIR/.credentials.json, 파일이 없는 Mac의 경우 Keychain)를 읽고 Claude Code의 /usage이(가) 수행하는 것과 동일한 호출인 api.anthropic.com/api/oauth/usage에 요청합니다. 창이 나타날 때, 턴이 끝난 후(최대 1분에 한 번), 그리고 5분마다 요청합니다. 로그인 정보는 저장하지 않으며, 새로 고치지 않고 다른 곳으로 전송하지도 않습니다. 다른 사용자가 읽을 수 있는 로그인 파일(0600보다 느슨한 설정) 및 만료된 로그인은 건너뛰며, Claude Code가 다음 호출 시 새로 고칩니다. API 키, Bedrock 또는 Vertex 세션에는 표시할 창이 없습니다. Codex 창도 로그인 정보를 읽지 않고 자체 세션 파일에서 동일한 일정으로 동일한 방식으로 정보를 가져옵니다. OpenCode Go 및 Grok은 COLLIE_ACCOUNT_WINDOWS=all 또는 목록(사용량 창 참조)으로 지정할 때까지 꺼져 있습니다. COLLIE_ACCOUNT_WINDOWS=0(또는 [bridge] account_windows = false)은 모든 기능을 끄며, collie doctor은 account-windows 행에 어느 것인지 표시합니다.
  • statusLine을 래핑하는 것은 두 번째 방법입니다. collie hooks install claude --statusline을(를) 사용하면 Collie가 자체 statusLine도 래핑하며, 창은 Claude Code가 전달하는 내용을 기반으로 표시됩니다. 로그인 읽기 방식보다 이 방식을 선호한다면 COLLIE_ACCOUNT_WINDOWS=0 옵션을 사용하십시오. 해당 명령은 collie beacon statusline …이(가) 되며, 스크립트는 이전과 동일하게 실행되고 출력됩니다. Collie는 statusLine을 직접 추가하지 않으며, hooks uninstall claude은(는) 원래 명령으로 정확히 되돌립니다. 플래그 없이 설치하면 이미 존재하는 래핑을 유지하고 현재 바이너리를 가리키도록 설정합니다. 더 이상 원하지 않는 래핑을 제거하려면 collie hooks uninstall claude을(를) 실행한 다음 --statusline 없이 collie hooks install claude을(를) 실행하십시오. Windows에서는 지원되지 않습니다.
  • 래핑된 statusLine을 변경하려면 먼저 래핑을 해제하십시오. collie hooks uninstall claude을(를) 실행하고 statusLine.command을(를) 편집한 다음 collie hooks install claude --statusline을(를) 다시 실행하십시오. 래핑된 명령은 경로로 collie 바이너리를 지정하므로, 해당 바이너리가 이동하면 설치를 다시 실행할 때까지 statusLine에 아무것도 출력되지 않습니다. 래핑된 statusLine이 이전 바이너리를 가리키면 collie update이(가) 알려줍니다. 래퍼를 수동으로 테스트하려면 멀티플렉서 외부(env -u HERDR_PANE_ID -u TMUX_PANE -u ZELLIJ_PANE_ID …)에서 실행하십시오. 그렇지 않으면 실행 중인 모든 브릿지에 판독값이 기록됩니다.
  • Claude Code는 실행 중에 훅을 다시 로드합니다. 이는 2.1.301 버전에 적용됩니다. hook edge가 수신되지 않으면 이전 버전의 Claude를 재시작하십시오.
  • Linux 전용. 에이전트 활성 상태 확인은 /proc에 의존합니다. 다른 운영 체제에서는 비콘을 내보내지 않습니다.
  • 비콘은 멀티플렉서에 따라 다릅니다. 활성 백엔드의 창(pane) 및 세션 식별자를 기록합니다. COLLIE_MUX을(를) 전환하면 기존 비콘이 무효화됩니다. 이전 비콘은 정리될 때까지 디스크에 남아 있으며 collie doctor의 beacons 개수에서 확인할 수 있습니다.
  • COLLIE_STATE_DIR을(를) 사용하는 경우 에이전트의 셸 환경에서 이를 내보내십시오. collie beacon emit이(가) 이 변수를 직접 읽습니다. 그렇지 않으면 비콘이 기본 상태 디렉터리에 기록되어 브리지가 비콘을 찾지 못합니다.

collie doctor에는 누락된 후크나 이동된 체크아웃의 손상된 경로를 알려주는 beacon-hooks-claude 진단 검사가 포함되어 있습니다. 런타임에 대한 자세한 내용은 에이전트 비콘을(를) 참조하십시오.

Herdr 대비 변경 사항

아래 표는 주요 차이점을 요약합니다. 정확한 사양은 MUX_CONTRACT.md을(를) 참조하십시오.

Herdrtmuxzellij
space의 의미작업 공간세션정확히 하나의 세션이므로 휴대폰에서 공백 스트립을 제거합니다
tab의 의미탭창(window)탭
pane의 의미창(pane)창(pane)터미널 창(pane)
창(pane)에 에이전트가 있는지 판단하는 주체Herdr 자체beacon 또는 없음beacon 또는 없음
알려지지 않은 변경 사항이 표시되는 속도푸시됨푸시됨예정에 따라 계산됨, 최대 12초
"터미널에 표시"예예아니요, zellij가 요청을 수락하고 아무것도 이동하지 않습니다
탭 열기 / 이름 변경 / 닫기예예 (위의 tmux 충돌 사례에서는 열기가 거부됩니다)예
스페이스 열기예예아니요, 직접 생성한 세션이 감지되지 않습니다
창 기록Herdr 자체 창 기록에서 가져옴beacon의 세션 키에서 가져옴beacon의 세션 키에서 가져옴

활성 비콘이 없으면 tmux, zellij, tern은 창을 원시 셸로 표시하며, 창 히스토리는 빈 내용을 반환하는 대신 사용할 수 없음으로 표시됩니다.

모바일 환경에서 다르게 작동하는 두 가지

  • "Ns 전에 동기화됨": 이 표시기는 데이터 생성 시점을 나타내기 위해 대시보드 헤더에 표시됩니다. zellij와 같이 백엔드가 예약된 폴링을 사용할 때만 표시됩니다(최대 12초 폴링 간격). Herdr와 tmux는 상태 변경을 즉시 푸시하므로 최신 상태 배지가 생략됩니다.
  • "터미널에서 보기": 이 창 동작은 활성 호스트 터미널에서 선택한 창으로 포커스를 이동합니다. zellij의 포커스 명령은 뷰 상태를 변경하지 않고 지시를 수락하므로 zellij에서 비활성화됨.
참고. 모바일 인터페이스는 호스트 터미널 포커스를 자동으로 변경하지 않습니다. 명시적인 "Show in terminal" 동작만이 디스플레이를 업데이트합니다. 대시보드를 탐색하거나 패널을 열어도 활성 호스트 커서에는 영향을 주지 않습니다(ADR 0031).

tmux 팁: 재부팅 후 창을 복구하는 방법

claude --resume      # reconnects the conversation, not the window

Collie는 멀티플렉서 상태를 저장하지 않습니다. tmux 서버를 재시작하면 윈도우가 소멸되어 대시보드가 비어 있게 됩니다. 표준 tmux 플러그인을 사용하여 윈도우 레이아웃과 작업 디렉터리를 복원할 수 있습니다. 플러그인 관리에는 tpm, 세션 트리 저장에는 tmux-resurrect, 자동 스냅샷에는 tmux-continuum을 사용합니다.

참고. 실행 중인 에이전트 프로세스는 보존되지 않습니다. 복구 후 Claude Code를 수동으로 다시 시작하십시오.

zellij 팁: 재부팅 후 복원할 대상이 없습니다

zellij -s collie-zellij                                  # start the session
zellij attach --create-background collie-zellij          # headless: start it detached
claude --resume                                           # reconnects the agent

Zellij는 tmux-resurrect에 상응하는 기능을 제공하지 않습니다. 터미널 분리 후 유지된 세션은 (EXITED - attach to resurrect) 상태로 표시되며, 다시 연결하면 세션 명령이 재실행됩니다. 따라서 재부팅 후에는 위의 명령 중 하나로 세션을 새로 시작하고 그 안에서 에이전트를 실행한 뒤, claude --resume 또는 claude --continue을 사용하여 각각 다시 연결해야 합니다.

참고. 연결 시 부작용이 발생하므로 Collie는 세션에 연결하거나 세션을 부활시키지 않습니다. 종료된 세션은 접근 불가(으)로 표시되며, UI에는 빈 세션 목록 대신 연결 끊김 배너가 표시됩니다.

에이전트 비콘(선택 사항, Linux)

beacon은(는) 창이 일반 셸로 표시되는 tmux, zellij, tern 환경에서 에이전트가 Collie에 자신을 식별하는 방법입니다.

$ collie hooks install claude
$ collie hooks status
would install: /home/you/collie/bin/collie beacon emit  (this checkout)
/home/you/.claude/settings.json: installed (v1)

Claude Code 설정의 훅이 collie beacon emit을(를) 실행하여 하네스 이름, 세션, 대상 창이 포함된 파일을 작성합니다. Herdr는 이를 기본적으로 추적합니다. 설정 세부사항은 Collie를 multiplexer로 지정하기에 있으며, 이 섹션에서는 작동 메커니즘을 설명합니다.

위 경로는 로컬 체크아웃의 bin/collie을(를) 참조합니다. 바이너리 설치는 ~/.local/bin/collie을(를) 가리키며, 해당 이름이 연결되지 않은 경우 ~/.local/share/collie/current/bin/collie을(를) 가리킵니다(위에서 설명한 바와 같이). status 명령은 쓰기 작업을 수행하지 않습니다.

hooks uninstall claude을(를) 실행하면 Collie가 추가한 항목만 제거됩니다. 프로젝트 수준 파일이 아닌 global Claude 구성을 수정합니다. 이는 Linux 전용입니다. 활성 상태 확인 시 /proc을(를) 검사하며, Collie는 다른 운영 체제에서 비콘을 작성하지 않습니다.

Claude는 시작 즉시 표시됩니다. 훅이 SessionStart에서 트리거되므로, 입력을 대기 중인 열린 창은 셸 대신 유휴 에이전트로 표시됩니다.

프로세스가 종료되면 표시가 중단됩니다. Collie는 확인할 때마다 송신 PID를 검증하므로, 에이전트가 종료되면 해당 창은 알 수 없는 상태로 남아 있지 않고 즉시 표준 셸로 보고됩니다.

Collie는 이를 위해 비콘 파일을 삭제하지 않습니다. 파일은 디스크에 남아 있고, collie doctor은(는) beacons 아래에 이를 만료됨(으)로 보고하며, 다음 훅 호출 시 덮어씁니다.

이를 통해 대시보드는 bash 대신 에이전트 이름으로 창의 라벨을 지정할 수 있습니다. 또한 "처리 필요" 창을 차단된 상태순으로 정렬 기능을 활성화하고, 알림에 필요한 상태를 제공합니다. 창 기록 역시 저널에서 사용하는 세션 키를 공급하기 위해 비콘에 의존합니다.

Hook edge

동일한 훅이 각 이벤트에 대해 hook edge도 기록합니다. hook edge는 창 하나에 대한 짧은 알림입니다. 예를 들어 "프롬프트 입력됨", "턴 종료됨", "권한 대화상자 표시됨" 등이 있습니다. Collie는 Herdr를 포함한 모든 멀티플렉서에서 hook edge를 사용합니다. Herdr는 자체적으로 에이전트 이름을 지정합니다. 따라서 Herdr에서 훅은 beacon 없이 hook edge만 기록합니다.

훅 에지는 창이 유휴 상태인지 스스로 판단하지 않습니다. 각 에지가 발생한 후, Collie는 약 0.7초 뒤에 화면을 다시 읽습니다. 입력창이 비어 있고 대화상자가 없다는 점은 화면을 통해서만 확인할 수 있습니다. 에지는 턴이 실행 중이거나 대화상자가 열려 있음을 알릴 수 있습니다. 그러면 Collie는 종료 에지가 올 때까지 창을 사용 중 상태로 유지합니다. 10초 동안 화면이 유휴 상태로 세 번 연속 읽혀도 유지가 종료됩니다. 서브에이전트에서 발생한 도구 에지는 창에 관한 것이 아니므로, Collie가 화면에서 읽는 내용을 변경하지 않습니다.

휴대폰에서의 전송이 Confirmed 상태로 표시될 수 있습니다. 전송 직후 prompt edge가 동일한 텍스트를 전달할 때 발생합니다. 대기 제한 시간은 30초이며, 턴 뒤에 대기열로 들어간 전송의 경우 10분입니다. edge는 텍스트 자체가 아닌 프롬프트의 솔트 처리된 해시를 전달합니다.

Claude Code와 Codex는 턴 진행 중에도 메시지나 명령어를 받습니다. Collie가 즉시 이를 입력하면, 하네스가 턴 종료 후에 실행합니다. 턴 도중에 전송을 받을 수 없는 하네스는 대신 전송 보류 상태가 됩니다. 팝업 아래에 있거나, Collie의 두 번의 읽기 사이에 변경된 화면에 있거나, 실패하여 Backspace 한 번으로 지워 Collie가 다시 깨끗하다고 읽은 테스트용 문자가 있는 등 입력란이 비어 있지 않은 메시지도 마찬가지입니다. 이러한 메시지는 10초 동안 빈 상태가 5번 확인되거나, Collie가 턴을 확인한 후에 전송됩니다. 해당 위치의 명령어는 여전히 거부되며, '여기에 입력'으로 확인한 화면에서의 전송도 거부됩니다. 프로필이 없는 창에서의 전송은 절대 보류되지 않습니다. Collie는 텍스트를 보관하고 터미널 뷰 하단에 플로팅 카드를 표시합니다: "대기 중입니다. 턴이 끝나면 전송합니다." Collie가 버전을 읽지 못한 에이전트의 경우 카드가 이를 알리며 collie doctor 항목을 안내합니다: Collie는 에이전트가 보고한 버전에서만 실행 중인 턴에 텍스트를 입력합니다. 카드에는 텍스트와 취소 버튼이 표시됩니다. Collie는 턴이 끝난 후, 창이 2회 연속 빈 상태로 읽히면 가장 오래된 것부터 순서대로 전송합니다. 이후의 보류된 전송은 각각 이전 전송이 시작한 턴을 기다립니다. 턴이 나타나지 않으면 10초 동안 빈 상태가 5회 확인된 후 전송됩니다. pi, OMP 또는 Codex에서 보류된 명령어는 Enter를 전송하며, 이곳에서 Enter는 턴의 방향을 제어합니다. 이러한 명령어는 턴이 끝날 때까지 기다리며, Collie가 버전을 읽지 못한 에이전트에서 보류된 모든 명령어도 마찬가지입니다. 최소 2초 간격으로 빈 상태가 2회 확인되거나, Collie가 턴을 전혀 감지하지 못한 경우 10초 동안 5회 확인될 때까지 대기합니다. OMP는 턴 진행 중에 /goal 항목을 즉시 실행하므로, Collie는 Enter를 사용해 /goal, /goal pause 또는 /goal resume 항목을 바로 전송합니다. 이를 절대 보류하지 않으며 다른 보류된 전송 뒤에서 대기하지도 않습니다. 해당 창에서 나중에 생성된 메시지는 보류된 메시지들 뒤에서 기다립니다. 보류된 텍스트는 30분간 유지되고 보류된 명령어는 10분간 유지됩니다. 그 후 해당 행에는 메시지가 전송되지 않았다고 표시되며 재전송 버튼이 제공됩니다. 무전기 메시지 역시 임시 보관 텍스트 위에 보류되며 해당 텍스트에 직접 입력되지 않고, 60분 동안 보류 상태를 유지합니다(Walky talky). 임시 보관 텍스트가 있을 때 사용자가 직접 보낸 전송은 여전히 거부되며, '뒤에 추가'와 '바꾸기'가 제공됩니다. Collie는 임시 보관 텍스트를 거부하거나 추가하거나 지우기 전에, 입력란이 키 입력을 받는지 확인하기 위해 테스트용 문자 하나를 입력하고 지웁니다. 화면의 입력란이 키 입력을 받지 않으면 전송이 거부되고 아무것도 삭제되지 않습니다. 데스크톱에서 해당 창에 포커스를 주거나 창 크기를 조절하여 에이전트가 화면을 다시 그리도록 한 후 다시 전송하십시오. 일부 명령어는 절대 대기하지 않으며 Collie는 턴 진행 중에 이를 거부합니다. Claude Code에서는 /clear, /exit, /quit, /logout, /resume, /branch 및 모든 ! 행이 이에 해당합니다. Codex에서는 /quit, /exit, /new, /resume, /logout 및 모든 ! 행이 이에 해당합니다. Hermes에서는 /exit, /quit, /clear, /new, /resume 및 모든 ! 행이 이에 해당합니다. 보류된 전송은 Collie를 재시작해도 유지됩니다. 취소는 전송이 시작되기 전까지 동작하며, 이 머신의 자체 창에서만 유효합니다. 보류된 전송이 둘 이상이면 카드에 개수와 첫 번째 텍스트가 표시되고, '모두 보기'에 각 전송 항목과 개별 취소 버튼이 나열됩니다. Collie는 보류된 텍스트를 사용자만 읽을 수 있는 파일(권한 모드 0600)로 디스크에 일반 텍스트 형태로 보관합니다. 전송이 시작될 때 및 보류가 종료된 후 최대 1시간 뒤에 해당 텍스트를 삭제합니다.

Collie는 각 edge를 하나의 창에 배치합니다. edge는 에이전트 프로세스와 해당 창(HERDR_PANE_ID, TMUX_PANE 또는 ZELLIJ_PANE_ID)을 지정합니다. Collie는 창을 지정하지 않거나, 창을 두 개 지정하거나, 종료된 프로세스를 지정하는 edge를 버립니다. 그러면 브리지 로그에 surface.edge.dropped 라인이 표시됩니다. 분당 이유 및 프로세스별로 최대 한 줄씩 표시됩니다. 30초보다 오래된 edge나 edge가 아닌 파일은 개수에는 포함되지만 로그에는 기록되지 않습니다.

어느 브리지가 edge를 수신하는가

hook edge를 수신하는 각 브리지는 부팅 시 ~/.local/state/collie/hook-targets/에 자신을 등록합니다. XDG_STATE_HOME이 설정되어 있으면 폴더는 $XDG_STATE_HOME/collie/hook-targets/입니다. 브리지는 정상 종료될 때 자신의 파일을 삭제합니다. 실행 중인 브리지는 파일이 사라지면 2초 이내에 다시 작성합니다. hook은 각 edge를 프로세스가 여전히 실행 중인 등록된 모든 브리지에 씁니다. 종료된 브리지의 파일은 삭제합니다. 등록된 브리지가 없으면 hook은 기본 상태 디렉터리에 씁니다. 에이전트 자체 환경의 COLLIE_STATE_DIR도 항상 edge를 함께 수신합니다.

창 정보

휴대전화의 창 정보에는 창이 hook edge를 전송하는지 여부가 표시됩니다.

  • Hooks: live은 해당 창의 에이전트가 hook edge를 전송함을 의미합니다.
  • Hooks: live, holds permissions은 에이전트의 hook이 휴대전화에 대한 권한도 보류함을 의미합니다. 휴대전화에 보류된 권한을 참조하십시오.
  • Hooks: none은 Collie가 해당 창에서 hook edge를 받지 못했음을 의미합니다. hook이 설치되지 않았거나 설치 후 에이전트가 이벤트를 전송하지 않았습니다. Claude Code 2.1.301은 실행 중에 새 hook을 감지합니다. 구버전 Claude는 재시작하십시오.

브리지는 자체 재시작 시에도 활성 창 목록을 유지합니다. 브리지 재시작 후에도 해당 행은 "live" 상태를 유지합니다.

이전 Collie 버전에서 설치한 경우 권한 대화상자에 대한 edge를 전송하지 않습니다. collie hooks status에는 부분적(partial)으로 표시됩니다. 해당 위치에서 업데이트하려면 collie hooks install claude을 다시 실행하십시오.

휴대전화에 보류된 권한

$ collie hooks install claude --hold-permissions

이렇게 하면 Claude의 PermissionRequest에 hook이 하나 더 추가됩니다. Claude가 권한을 요청하면 hook이 요청을 보류하고 탭 입력을 기다립니다. 휴대전화에는 요청이 카드로 표시됩니다. 예 또는 No를 탭하면 hook을 통해 Claude로 다시 전달됩니다. Collie는 이를 위해 창에 키를 전송하지 않습니다. 설치에는 이 hook이 포함된 첫 버전인 Claude Code 2.0.45 이상이 필요합니다. 이전 버전은 거부됩니다.

  • hook은 hook edge와 동일한 방식으로 실행 중인 각 브리지를 찾습니다. hook-targets/을 읽고 모든 활성 브리지에서 보류합니다. 첫 번째 응답이 적용됩니다. 다른 휴대전화에는 "Another Collie answered"라고 표시됩니다.
  • 데스크 환경도 정상 작동합니다. 터미널에서 대화상자에 응답하면 휴대전화 카드에 "The desk answered first"라고 표시됩니다. 그 후 Collie는 탭 입력을 사용하지 않습니다.
  • Yes와 No만 hook을 통과합니다. "don't ask again"과 같은 옵션은 화면 응답으로 유지됩니다. Collie는 보류된 카드에서 해당 탭 입력을 거부합니다.
  • 보류된 요청의 제한 시간은 290초입니다. 그 후 대화상자는 화면에 유지되며 새 ID를 가진 일반 카드가 됩니다. 이전 탭 입력은 키 입력으로 변환되지 않습니다.
  • 브리지가 없으면 보류도 없습니다. 수신 대기 중인 브리지가 없거나 오류가 발생하면 hook은 아무것도 출력하지 않습니다. 그러면 Claude는 이전처럼 자체 대화상자를 표시합니다. hook은 단독으로 응답하지 않습니다.
  • 카드에는 표시된 입력이 표시됩니다. 이는 명령, 파일 경로 또는 다른 키 입력입니다. 위험한 Bash 플래그와 쓰기 작업이 파일에 넣는 전체 텍스트가 추가됩니다. Collie는 텍스트를 숨기거나 회전시키는 문자를 삭제합니다. 표시되는 입력에는 작성된 텍스트를 포함하여 1000자 제한이 있습니다. Collie는 더 긴 요청은 보류하지 않습니다. 카드에 전체를 표시할 수 없으므로 화면의 대화상자에서 응답합니다. 입력 줄 수가 상자에 표시되는 줄 수보다 많으면 카드에 해당 사실이 표시됩니다.
  • 보류된 요청은 해당 요청 자체를 표시하는 대화 상자만 소유합니다. 대화상자의 헤더에는 요청의 도구 이름이 명시되어야 합니다. 서브에이전트가 요청할 때 정확히 "from the ... agent"라고 표시되어야 하며 동일한 유형의 서브에이전트 이름을 명시해야 합니다. 입력의 모든 줄이 대화상자에 순서대로 표시되어야 합니다. 보류된 두 요청이 하나의 대화상자에 부합하면 어느 쪽도 이를 소유하지 않습니다. 다른 대화상자는 휴대전화에 자체 카드를 유지합니다. 그런 다음 요청은 보류 카드에서 대기하며, 해당 카드의 탭 입력으로만 응답할 수 있습니다. 새 요청이 표시된 후 처음 400ms 동안은 카드에서 탭 입력을 받지 않습니다. 해당 다른 대화상자에 키로 응답하고 Claude가 hook을 종료하면, 보류 카드에는 키로 응답했다고 표시됩니다.
  • 훅이 요청을 보류하는 동안 하위 에이전트의 요청은 대화 상자를 표시하지 않습니다. 이는 Claude Code 2.1.301에 적용됩니다. 보류 카드가 요청을 볼 수 있는 유일한 방법이 되므로, 카드에 도구와 표시된 입력이 나타납니다.
  • 백그라운드 요청은 지켜보는 스마트폰이 없더라도 보류 제한 시간까지 대기합니다. 그런 다음 Collie가 훅을 해제하고, Claude가 화면에 대화 상자를 표시합니다. Claude 2.1.301은 이를 거부하지 않습니다.
  • 질문과 계획은 화면 카드로 유지됩니다. AskUserQuestion 및 ExitPlanMode는 절대 보류되지 않습니다.

소켓은 <stateDir>/hold/sock입니다. 해당 폴더는 0700 모드이고 소켓은 0600 모드이므로 다른 사용자가 연결할 수 없습니다. 연결하기 전에 훅은 소켓, 해당 폴더 및 상태 디렉터리가 사용자 소유인지 확인합니다. 또한 다른 사용자가 두 폴더에 쓸 수 없는지 확인합니다. 브릿지는 자신이 창에 배치한 프로세스의 요청만 수락합니다. 그 외의 모든 요청은 surface.hold.dropped 한 줄과 함께 삭제합니다. 훅과 설정에는 토큰이 포함되지 않습니다. 각 카드는 도구, 표시된 입력 및 레이블의 해시를 전달합니다. 다른 해시로 탭하면 응답 없이 훅이 해제됩니다.

Claude가 읽는 설정이 훅을 보류할 때 창 정보에 "holds permissions"라고 표시됩니다. Collie는 사용자 설정, 두 개의 프로젝트 설정 파일 및 관리 설정을 읽습니다. disableAllHooks은 보류를 끄며, 관리 파일의 allowManagedHooksOnly도 마찬가지입니다.

플래그 없이 collie hooks install claude을 실행하여 보류를 다시 해제하십시오. collie doctor은 훅이 권한을 보류하는 설정 파일의 수를 표시합니다.

참고. 비콘과 훅 에지는 제어 채널을 제공하지 않습니다. Collie가 창을 언제 표시하고 언제 읽기하는지만 변경합니다. 텍스트 전송, 키 입력 주입, 창 이름 변경, 세션 종료 또는 접근 제어 우회를 수행할 수 없습니다. 위협 모델과 생략된 필드는 ADR 0024에 문서화되어 있습니다. 권한 보류는 유일한 제어 채널입니다. 스마트폰에서 탭하면 하나의 권한에 대한 Claude의 응답이 됩니다. 네 가지 요소가 이를 보호합니다. 소켓은 본인 전용이며(0700 폴더 내 0600 모드), 훅은 연결하기 전에 이를 확인합니다. 브릿지는 자신이 창에 배치한 프로세스에만 응답합니다. 탭은 도구의 해시, 표시된 입력 및 카드가 표시한 레이블을 전달해야 합니다. 응답은 오직 사람의 탭으로만 이루어집니다. Collie는 스스로 허용하거나 거부하지 않습니다.

Codex

Codex에는 하나의 외부 훅인 notify 명령이 있습니다. Collie는 Codex 턴이 끝날 때 이를 훅 에지로 사용할 수 있습니다.

$ collie hooks install codex
$ collie hooks status
/home/you/.codex/config.toml: installed

설치 시 $CODEX_HOME/config.toml(CODEX_HOME이 설정되지 않은 경우 ~/.codex/config.toml)의 맨 위에 한 줄을 씁니다. 이 줄은 파일 맨 위의 주석 뒤에 추가됩니다.

notify = ["/home/you/.local/bin/collie", "beacon", "emit", "codex"]

Codex는 하나의 알림 명령만 실행합니다. 설정에 이미 명령이 지정되어 있으면 Collie는 이를 그대로 두고 설치를 중단하며 메시지를 표시합니다. Collie가 파일을 TOML로 읽을 수 없으면 설치가 중단되고 해당 줄을 표시합니다. Collie는 첫 번째 변경 전에 파일의 복사본을 보관합니다. collie hooks uninstall codex은 설치 전의 정확한 바이트로 되돌립니다. 설치 시 파일이 생성된 경우 제거 시 파일이 삭제됩니다. 이미 열려 있는 Codex는 다시 시작할 때까지 새 줄을 인식하지 못할 수 있습니다.

Codex는 각 턴이 끝날 때 agent-turn-complete 이벤트를 하나 보냅니다. Collie는 이를 중지 에지로 기록하며, 그 후의 화면 읽기를 통해 창이 유휴 상태인지 결정합니다. 제한 사항은 다음과 같습니다.

  • Codex는 승인 대화 상자나 새 프롬프트에 대해 이벤트를 보내지 않습니다. 화면에만 대화 상자가 표시되며, 스마트폰에서의 전송은 Codex 창에 Confirmed로 표시되지 않습니다.
  • Codex 0.163.0은 백그라운드 헬퍼(codex app-server)에서 알림 명령을 실행합니다. Collie는 동일한 CODEX_HOME 및 이벤트 폴더를 가진 /proc 내의 Codex 창을 찾습니다. 이는 Linux 전용입니다.
  • 단일 CODEX_HOME의 단일 폴더에 있는 두 개의 Codex 창은 에지를 받지 못합니다. Collie가 둘을 구별할 수 없기 때문입니다. 해당 창은 훅이 없을 때와 마찬가지로 화면을 통해 계속 업데이트됩니다.
  • Codex는 새 작업의 이름을 지정하기 위해 짧은 숨겨진 턴도 실행합니다. 해당 턴은 중지 에지를 하나 더 보내므로 창에서 화면 읽기가 한 번 더 수행됩니다.

Collie는 Codex 메시지에 대해 Tab을 누릅니다. 턴 진행 중에 Codex는 메시지를 큐에 넣습니다. Codex에서 Tab은 유휴 입력창에서는 메시지를 전송하고 턴 진행 중에는 큐에 넣습니다. 따라서 두 상태 모두 Tab이 적합합니다. Enter는 실행 중인 턴을 제어하므로 Collie는 메시지에 대해 절대 Enter를 누르지 않습니다. / 또는 !로 시작하는 텍스트는 명령입니다. 유휴 입력창에서는 Enter를 사용하는데, Tab을 누르면 / 명령이 자동 완성되기 때문입니다. 턴 진행 중에는 Tab을 사용하며, Codex는 이를 메시지처럼 큐에 넣습니다. Codex는 ! 텍스트를 셸 명령으로 실행합니다. 수신 확인은 Codex가 해당 텍스트가 포함된 큐 행을 표시할 때만 큐에 추가됨으로 나타납니다.

Collie는 Codex 승인에 단일 키로 응답합니다. 옵션의 숫자, y 또는 Escape입니다. Codex 0.156의 신뢰 프롬프트만 이동식입니다. 여기에서 Collie는 화살표 키를 누르고 포인터를 다시 읽은 다음 Enter를 누릅니다. Codex 질문 대화 상자도 옵션의 숫자인 단일 키를 사용합니다. Codex 0.163.0에서는 숫자를 누르면 즉시 응답합니다. 마지막 질문에서는 모든 응답을 전송합니다.

하네스 프로필

Collie는 휴대전화에서 메시지를 전송하기 전에 에이전트의 입력 상자를 확인합니다. 프로필 파일은 한 에이전트의 해당 입력 상자를 정의합니다. 입력 상자의 시작과 끝 위치를 지정합니다. 초안이 어떻게 표시되는지, 어떤 키로 전송하는지, 긴 붙여넣기 시 에이전트가 어떤 텍스트를 렌더링하는지 명시합니다. 일반 셸 및 프로필이 없는 에이전트도 계속 전송을 받습니다. Collie는 이들의 입력 상자를 읽을 수 없으므로, 확인 없이 한 번에 한 줄씩 텍스트를 입력하고 Enter를 누릅니다. 마지막 행에 나타나는 비밀번호 프롬프트만 이를 중단합니다. Collie는 비밀번호 프롬프트에는 아무것도 입력하지 않으며, 휴대전화 화면에는 Type 버튼이 표시됩니다.

에이전트턴 진행 중 Enter전송 키프로브대조군
OpenCode메시지를 큐에 추가Enter예1.18.33
pi턴을 제어합니다. Alt+Enter는 큐에 추가합니다Windows에서는 Alt+Enter, Ctrl+Q짧은 텍스트를 입력하고 턴으로 전송합니다1.1.0
OMP턴을 제어합니다. Ctrl+Q는 큐에 추가합니다Ctrl+Q예18.4.10
Grok측정되지 않음Enter예1.0.41
Antigravity(agy)측정되지 않음Enter예1.1.17의 화면
Muse측정되지 않음Enter예1.4.7
Hermes(기존 CLI)기본적으로 턴을 중단합니다. Hermes의 /busy 설정을 통해 대기열에 넣거나 제어하도록 할 수 있습니다.Enter예0.22.2
Cursor CLI(cursor-agent)메시지를 큐에 추가Enter예2026.10.16
Kiro(kiro-cli)턴을 제어합니다. Collie는 턴이 끝날 때까지 전송을 보류합니다.Enter짧은 텍스트2.32.0

/model과 같은 명령은 항상 Enter와 함께 전송됩니다. 검사 전송(probed send)은 먼저 문자 하나를 추가로 입력합니다. Collie는 해당 문자가 입력 상자에 들어가는지 확인한 후 제거합니다.

  • OpenCode은(는) 입력 상자를 ┃개 행의 열로 그리며, ╹▀▀▀ 선으로 닫습니다. Collie는 이 행들을 통해 입력 상자를 찾습니다. 실행 중인 턴으로 전송된 메시지는 트랜스크립트에서 QUEUED 배지와 함께 대기합니다. 줄바꿈은 Ctrl+J로 입력됩니다. Collie는 입력 상자에 표시할 수 있는 길이보다 긴 메시지는 다시 읽을 수 없으므로 전송을 거부합니다.
  • pi은(는) 프롬프트 표시 없이 두 개의 구분선 사이에 입력 상자를 그립니다. Collie는 구분선 쌍과 pi가 그 아래에 그리는 상태 표시줄을 통해 이를 찾습니다. pi 대화 상자는 동일한 두 구분선 사이에 열립니다. 따라서 Collie는 맨 위 구분선부터 아래로 키 힌트와 목록을 읽습니다. pi에서 Enter는 실행 중인 턴을 제어하지만, Alt+Enter는 유휴 상태의 입력 상자에서 전송하고 턴 도중에는 큐에 추가합니다. 따라서 Collie는 Alt+Enter로 전송하며, Windows에서는 Ctrl+Q로 전송합니다. pi는 큐에 추가된 메시지를 입력 상자 위의 Follow-up: 행으로 표시합니다. 30행보다 높은 입력 상자는 입력 상자로 인식되지 않습니다. 화면은 알 수 없는 상태로 인식되며, 전송하려면 사용자가 직접 탭해야 합니다.
  • OMP에서는 입력란의 테두리 스타일을 선택할 수 있으므로 Collie는 이 중 5가지를 지원합니다. 하나는 상단에 상태 표시줄이 있는 열린 상자입니다. 그 외에는 한 쌍의 실선, 하단선이 없는 실선, 가운데가 빈 실선 한 쌍, 테두리 없는 상자가 있습니다. Collie는 OMP가 프롬프트 행 오른쪽 끝에 그리는 힌트를 잘라냅니다. OMP에서 Enter는 실행 중인 턴의 방향을 제어하지만, Ctrl+Q는 대기 상태의 입력란에서 바로 전송하고 진행 중인 턴에서는 대기열에 추가합니다. 따라서 Collie는 Ctrl+Q로 전송합니다. OMP는 입력란 위의 After yield 블록에 대기열 메시지를 나열합니다. OMP는 입력 텍스트 뒤에 흐린 글씨로 자동 완성을 표시할 수 있습니다. 이를 감지한 전송은 전송 키를 누르기 전에 멈추고 텍스트를 입력란에 남겨둡니다. 열린 상자에서 OMP는 긴 메시지의 마지막 줄 최대 17행만 보여줍니다. 그러면 Collie는 입력한 내용의 끝부분과 이 행들을 대조하여 확인하고 영수증에 이를 표시합니다. Collie는 해당 17행을 가득 채운 임시 보관 텍스트의 시작 부분을 볼 수 없으므로 '바꾸기'를 거부합니다. 삭제되는 내용은 없습니다.
  • Grok은(는) ❯ 프롬프트 행과 그 아래 키 힌트 행이 있는 모서리가 둥근 상자를 그립니다. 긴 초안은 상자 오른쪽 가장자리에 스크롤 막대를 표시합니다. 이러한 화면은 읽을 수 없는 것으로 인식되므로, 전송하려면 사용자가 직접 탭해야 합니다. 모델 목록은 상자 위에 열리며 상자의 일부로 계산됩니다. 목록이 떠 있는 동안에는 창이 비어 있는 것으로 인식되지 않습니다.
  • Antigravity(agy)은(는) 상자를 구분선, > 행, 구분선으로 구성하고 ? for shortcuts 바닥글을 붙여 그립니다. 턴은 상자 위에 ..., 상자 아래에 esc to cancel이(가) 있는 스피너 행을 표시합니다. Herdr는 이 에이전트의 이름을 agy 또는 antigravity(으)로 지정합니다. Collie는 둘 다 agy 아래에 정리합니다.
  • Muse은(는) 레이블이 붙을 수 있는 구분선, ❯ 행, 구분선으로 상자를 그립니다. 빈 상자는 회색 힌트를 표시하며, Collie는 해당 힌트를 텍스트가 없는 것으로 읽습니다. 상자 아래에 열리는 명령 팔레트는 작성 중인 초안으로 표시됩니다. 상자 아래의 백그라운드 작업 목록은 알 수 없는 상태로 인식되며, 전송하려면 사용자가 직접 탭해야 합니다. 실행 중인 턴에는 타이머와 esc to interrupt이(가) 있는 행이 표시됩니다.
  • Hermes(기존 CLI, hermes --tui은(는) 읽지 않음)은 상자를 구분선, ❯ 행, 구분선으로 그립니다. 64열 미만에서는 상자 아래에 구분선을 그리지 않습니다. 이름이 지정된 프로필은 ❯ 앞에 이름을 표시합니다. 줄바꿈은 Alt+Enter로 입력됩니다. display.cli_multiline_shortcuts이(가) 꺼져 있으면 Ctrl+J로 메시지를 전송합니다. 상자에는 최대 8행이 표시됩니다. 더 긴 메시지는 다시 읽을 수 없으므로 Enter를 누르기 전에 전송이 중단됩니다. Submit을 누르면 전송되지만 스마트폰에서는 전송 여부를 확인할 수 없습니다. Hermes는 입력한 텍스트 뒤에 이전 메시지의 나머지 부분을 회색으로 표시할 수 있습니다. 이 경우에도 Enter를 누르기 전에 전송이 중단되며, Submit은 입력한 내용만 전송합니다. 모델 선택기와 명령 팔레트는 트랜스크립트 위에 열리며, 열려 있는 동안 창은 여유 상태로 읽히지 않습니다.
  • 턴 진행 중인 Hermes은(는) 행을 ☤(으)로 시작하며, Collie는 해당 표시를 통해 턴을 읽습니다. 그 후 Enter가 수행하는 작업은 Hermes 자체 설정이므로 Collie는 턴 중에 절대 Enter를 누르지 않습니다. 턴 중 전송은 보류되며 턴이 끝나면 전송됩니다. Collie가 입력하는 동안 턴이 시작되면 Enter를 누르기 전에 전송이 중단되고 텍스트는 상자에 그대로 남습니다.
  • Hermes의 질문: 질문에 대한 입력 답변은 ✎ 행을 열며, 스마트폰에서의 전송이 이에 응답합니다. 보류된 메시지는 해당 행에 입력되지 않습니다. 질문이 닫힐 때까지 대기한 후 일반 메시지로 전송됩니다. 보류된 메시지가 대기하는 동안 새 전송이 대기열에 추가되므로, 스마트폰에서 응답하려면 보류된 메시지를 취소하십시오.
  • Cursor CLI(cursor-agent)은(는) 상자를 ▄ 구분선, → 행, ▀ 구분선으로 그립니다. 빈 상자에는 "Plan, search, build anything" 또는 "Add a follow-up"과 같은 회색 힌트가 표시되며, Collie는 이 힌트를 텍스트가 없는 것으로 인식합니다. !은(는) 상자를 자체 힌트가 있는 셸 프롬프트로 바꿉니다. Collie는 이 힌트를 텍스트로 인식하므로 메시지가 셸 모드로 들어가지 않습니다. 실행 중인 턴은 상자 위에 Running과(와) 같은 스피너 행을 표시하고 → 행 오른쪽 끝에 ctrl+c to stop을(를) 표시합니다. Collie는 해당 힌트를 잘라냅니다. 턴 중 Enter를 누르면 입력 상자 위의 follow-ups 상자에 메시지가 대기열로 들어갑니다. 상자에는 최대 6행이 표시되며 더 긴 초안은 스크롤됩니다. Collie는 높이가 더 높은 메시지를 다시 읽을 수 없으므로 입력된 텍스트를 상자에 남겨두고 Enter를 누르지 않습니다. 대화 상자(명령 승인, 질문, 폴더 신뢰 프롬프트)가 상자를 대체하므로 화면은 읽을 수 없는 상태로 인식됩니다. 실시간 프로브 전송 테스트는 2026.10.14 및 2026.10.16에 통과했습니다.
  • Kiro는 상태 표시줄, 폴더, 빈 줄, › 프롬프트 줄이라는 규칙에 따라 상자를 그립니다. Collie는 전체 프레임이 화면에 표시될 때만 입력합니다. 줄바꿈은 Ctrl+J로 입력됩니다. 턴이 실행되는 동안 프롬프트 줄에는 Kiro is working가 표시됩니다. Kiro에서는 Enter 키를 눌러 텍스트를 해당 턴으로 유도(steer)합니다. Collie는 실행 중인 턴에 Enter 키를 누르지 않습니다. Ctrl+S는 Kiro에서 steering과 큐 등록 사이를 전환하므로, Collie는 큐 키를 지정하지 않습니다. 따라서 Collie는 Kiro가 사용 중일 때 전송을 대기시키고, 상자에 여유가 생기면 전송합니다. 해당 프로필은 Herdr에서만 확인되었으며 tmux나 zellij에서는 확인되지 않았습니다.

Grok, Antigravity, Muse는 빌드 호스트에 설치되어 있지 않습니다. 해당 프로필은 각 에이전트의 저장된 화면을 기반으로 합니다. 프로필을 통해 실시간 메시지가 전송된 적이 없으므로, Collie는 해당 환경에서 모든 전송을 검사합니다. 턴 진행 중에 Enter 키가 어떤 동작을 하는지 측정한 적이 없습니다. 따라서 Collie는 화면에 턴 실행 중으로 표시될 때 전송을 거부하며 아무것도 입력하지 않습니다. 하네스가 실행 표시를 그리지 않는 경우 Collie는 이를 감지할 수 없으며, Enter 키의 동작은 에이전트가 결정합니다. OpenCode와 OMP는 확인된 버전보다 높은 버전에서 실시간 전송을 통과했습니다. Collie는 확인된 범위 내에서 전송이 통과할 때까지 모든 전송을 검사합니다. Hermes(클래식 CLI)는 Herdr에서만 0.22.2 버전(확인된 범위 내)의 실시간 전송을 통과했습니다. Ink TUI(hermes --tui 또는 이를 시작하는 설정)는 아직 읽히지 않으므로, 전송하려면 'Type here'를 누르십시오. Hermes 대화상자 전체에서 검사가 시도되지 않았으므로, Collie는 해당 환경에서도 모든 전송을 검사합니다.

확인된 버전보다 높은 버전에서도 정상 작동하며, 영수증에는 provisional이(가) 표시됩니다.

Steer 또는 대기열 등록

에이전트가 작업하는 동안 휴대폰에서의 전송은 턴을 기다리거나 턴 내부로 직접 전달될 수 있습니다. Send를 일반 탭하면 텍스트가 턴 종료 후 처리되도록 대기열에 등록됩니다. 이는 모든 에이전트에 동일하게 적용됩니다. Collie는 실수로 턴을 유도하지 않습니다.

steer는 한 번의 전송에 대해 사용자가 직접 선택하는 동작입니다. Send 버튼을 길게 누른 상태에서 Steer를 누르십시오. 에이전트는 현재 도구 호출이 끝난 후 같은 턴 내에서 해당 줄을 읽습니다. 이 줄은 에이전트가 작업 중일 때만 표시되며, 프로필에 steer 키가 정의된 에이전트(예: 현재 pi, Codex, OMP)에서만 나타납니다. 상자 아래의 짧은 힌트에는 탭하면 큐에 등록되고 길게 누르면 steer된다고 표시됩니다. Codex는 텍스트 바로 뒤에 Enter 키가 오면 붙여넣기로 인식하므로, Collie는 텍스트 입력 후 1초 동안 대기한 뒤 steer 키를 누릅니다.

영수증을 통해 처리 결과를 확인할 수 있습니다.

  • Steer 완료. 에이전트가 실행 중인 턴으로 해당 줄을 가져갔습니다. Collie가 에이전트의 화면 출력을 확인했습니다.
  • 대신 큐에 등록됨. steer를 요청했으나 에이전트가 턴 종료 후 처리하도록 해당 줄을 보관했습니다. 유실된 내용은 없습니다.
  • 입력됨, 제출되지 않음. 텍스트가 상자에 입력되었으나 steer 키가 이를 전송하지 않았습니다. Send를 누르거나 상자를 비우십시오.
  • 이 창에서는 사용할 수 없습니다. 에이전트 프로필에 steer 키가 없거나, Collie가 실행 중인 턴의 버전을 신뢰할 수 없거나, 텍스트가 명령어입니다. 아무것도 전송되지 않았습니다. Steer 없이 전송하십시오.
  • 휴대폰 앞의 사용자만 steer할 수 있습니다. 다른 출처로부터의 steer 요청은 거부됩니다.

Collie가 입력하는 동안 턴이 종료되면 해당 줄은 일반 전송으로 처리됩니다. Collie는 steer를 대기 상태로 유지하지 않습니다. 긴 steer는 명확한 신호 없이 끝날 수 있습니다. 이 경우 영수증에는 Collie가 결과를 알 수 없다고 표시되며 텍스트는 다시 전송되지 않습니다.

에이전트가 다른 에이전트에게 보내는 메시지(Walky talky)는 steer되지 않습니다. 항상 턴이 끝나기를 기다립니다.

GitHub에서 이 페이지 수정하기

The rest of the documentation