14/Documentation
설정
.env, 사용자 정의 슬래시 명령어, 키, 빠른 답장, 런처 및 서체, 화면 구성, Zen 모드, 언어
기본적으로 Collie는 collie pair 명령어로 페어링한 기기에만 응답합니다. 페어링된 기기는 모든 제어 권한을 가지므로, tailnet에서 해당 URL에 접근할 수 있는 사용자라도 먼저 페어링된 휴대전화가 필요합니다. COLLIE_TRUSTED_USER 설정이 없으면 모든 tailnet 로그인 사용자가 페어링 화면에 접근할 수 있으므로 브리지가 TRUSTED_USER 경고를 출력합니다. 접근을 더 제한하는 방법:
# in your .env
COLLIE_TRUSTED_USER=you@example.com # your tailnet login — Collie rejects anyone else
COLLIE_PUBLIC_HOSTS=myhost.tail1234.ts.net # only behind your OWN proxy; on a tailnet `collie
# start` discovers this for you설정 파일
Collie의 모든 설정은 TOML 파일로 작성할 수 있습니다. 모든 설정과 기본값이 포함된 파일을 작성하려면 다음을 실행하십시오.
collie config init그러면 머신 자체의 정의인 ~/.collie/config.toml이(가) 작성되고 경로가 출력됩니다. 파일 내의 모든 키가 주석 처리되어 있으므로 생성된 파일 자체는 아무것도 변경하지 않습니다. 키의 주석을 해제하고 다시 시작하십시오. 대신 collie config init --instance을(를) 실행하면 .env 옆에 config.toml이(가) 작성되며, 이 단일 인스턴스에 대해 머신 파일을 덮어씁니다.
| 파일 | 레이어 | 위치 지정 방식 |
|---|---|---|
~/.collie/config.toml | 머신 | 홈 디렉터리, 또는 COLLIE_CONFIG의 경로 |
<config-dir>/config.toml | 인스턴스 | CLI가 이미 확인하는 .env 외에 |
인스턴스 파일은 파일 단위가 아니라 키 단위로 우선 적용됩니다. 인스턴스 파일에 없는 키는 머신 파일의 값을 유지합니다. Herdr로 관리되는 설치 환경에서는 설정 디렉터리가 이미 인스턴스별로 분리되어 있고 바이너리 설치 환경에서는 ~/.config/collie이기 때문에 config.<instance>.toml는 없습니다. 따라서 단일 호스트의 두 번째 Collie는 설정을 자체 설정 디렉터리에 저장합니다. docs/deployment.md → 단일 호스트의 여러 Collie를 참고하십시오. 프로젝트 디렉터리 내부의 .collie/는 전혀 읽히지 않습니다.
세 가지 명령어로 파일을 제어합니다.
collie config init는 모든 설정과 기본값이 주석으로 포함된 파일을 작성합니다.collie config check는 읽힐 대상인 두 파일이나 지정한 단일 파일 하나를 검증합니다.collie config show는 두 경로와 모든 설정값, 그리고 해당 값의 출처를 출력합니다.
우선순위는 기본값, ~/.collie/config.toml, <config-dir>/config.toml, 그리고 .env를 포함하는 프로세스 환경 순으로 적용됩니다. collie config show는 모든 키에 대해 최종 적용된 출처를 한 번에 표시하므로, "폴링 주기가 왜 여전히 1500인가"에 대한 답을 한 줄로 확인할 수 있습니다.
키 오류로 인해 브리지 동작이 중단되지는 않습니다. 알 수 없는 키나 잘못된 타입은 collie config check가 출력하고 collie doctor가 보고하는 문제로 처리되며, 해당 키만 환경 변수의 값으로 대체됩니다. 파일의 다른 모든 키는 계속 적용됩니다.
Collie는 시작할 때만 config.toml을(를) 읽습니다. 파일을 수정한 후 collie restart을(를) 실행하십시오.
참고.[push] vapid_private또는[stt] stt_key를 포함하는 파일은.env와 정확히 동일하게 600 모드로 제한됩니다. Collie가 권한을 축소할 수 없는 경우 해당 키만 제외되며collie doctor가 이를 알립니다.
환경 변수가 여전히 우선 적용됩니다
Collie는 ~/.config/collie의 .env 파일에서 설정을 불러옵니다. Herdr가 설치를 관리하는 경우, CLI는 Herdr에 플러그인 설정 디렉터리(일반적으로 ~/.config/herdr/plugins/config/herdr.collie)를 쿼리합니다. 두 경로는 CLI 명령 전반에서 일관되게 해석되므로, 서비스는 여기에 시드된 파일을 읽습니다:
mkdir -p ~/.config/collie && cp .env.example ~/.config/collie/.env
# on a Herdr-managed install, seed Herdr's plugin config dir instead:
cp .env.example "$(herdr plugin config-dir herdr.collie)/.env"아래 경로는 ~/.config/collie/…을(를) 사용합니다. Herdr로 관리되는 설치 환경에서는 해당 접두사를 $(herdr plugin config-dir herdr.collie)(으)로 바꾸십시오.
Collie는 시작할 때만 .env을(를) 읽습니다. 파일을 수정한 후 collie restart을(를) 실행하십시오.
.env.example 파일에 모든 옵션이 나열되어 있으며, collie config init --print도 마찬가지입니다.
여기에는 COLLIE_PORT, COLLIE_SERVE_MODE=http(Headscale 또는 .internal 도메인용), COLLIE_SERVE_PORT(:443 이외의 포트에서 HTTPS를 노출하려는 경우, docs/deployment.md → 단일 호스트의 여러 Collie 참조)이 포함됩니다. CLI는 serve 매개변수를 읽어 bridge로 전달하지 않고 tailscale serve을(를) 구성합니다.
각 섹션에 포함된 내용
설정 파일은 모든 설정을 [section] 아래에 그룹화합니다. 키의 환경 변수 이름은 COLLIE_ 뒤에 대문자로 된 키 이름을 붙인 형식이므로, [bridge] poll_ms는 COLLIE_POLL_MS가 됩니다.
| 섹션 | 포함된 내용 |
|---|---|
bridge | 폴링 주기, 읽을 줄 수, 상태 저장 위치 |
network | 포트, 바인드 주소, 허용된 호스트 및 오리진 |
mux | 이 collie가 미러링하는 멀티플렉서 종류 및 해당 위치 |
access | Tailscale 신원 게이트, 기기 헤더, 감사 추적, 시크릿 마스크 |
push | 세 가지 Web Push(VAPID) 값 |
uploads | 첨부 파일 크기 상한 및 허용되는 추가 텍스트 타입 |
journal | 각 하네스가 자체 세션 로그를 보관하는 위치 |
crew | 리드가 멤버에게 부여하는 예산 및 피어 자체 브라우저 |
standby | deputy의 보조 진입점: 포트, 바인드 주소, 활성화 여부 |
update | 릴리스를 가져오는 위치, 유지할 버전 수, 릴리스 확인용 GitHub 토큰 |
serve | Collie가 프런트 도어를 게시할지 여부, 게시 대상 및 경로(base_path) |
Collie가 멀티플렉서와 함께 실행하는 durable agent는 config.toml에 포함되지 않습니다. 각각은 .env와 동일한 폴더에 있는 sources.json의 항목 하나입니다(Durable agent). | stt | 음성-텍스트 변환, collie stt setup 실행 전까지 없음 |
여러 에이전트 홈 디렉터리에서 히스토리를 읽으려면 COLLIE_TRANSCRIPT_ROOT에 쉼표로 구분된 목록을 지정하십시오.
docs/deployment.md은(는) 커스텀 도메인 및 리버스 프록시를 다룹니다. Collie는 동일 출처 정책(SOP)을 적용하므로 커스텀 호스트 이름이나 외부 TLS 종단 장치는 명시적으로 허용 목록에 추가해야 합니다:
COLLIE_ALLOWED_ORIGINS=https://collie.example.com이 설정이 없으면 UI가 빈 페이지로 로드됩니다. 자세한 내용은 문제 해결을(를) 참조하십시오.
자체 슬래시 커맨드
Herdr 플러그인 /fork-in-herdr나 커스텀 /deploy 같은 머신 전용 명령어는 commands.toml에 지정하십시오. 이는 동일한 리더와 로드 패턴을 공유하는 6개 설정 파일 중 하나입니다.
| 파일 | 범위 | confirm/danger 플래그 | 라이브 다시 로드 |
|---|---|---|---|
commands.toml | 선택 사항, 행마다 설정 | confirm = true | 예, 재시작 불필요 |
keys.toml | 선택 사항, 행마다 설정 | danger = true | 예, 재시작 불필요 |
quick-replies.toml | 선택 사항, 행마다 설정 | 없음 | 예, 재시작 불필요 |
theme.toml | 없음, 페이스는 디바이스 설정입니다 | 없음 | 예, 다음 페이지 새로고침 시 적용됩니다 |
launchers.toml | 없음, 대신 정확한 명령으로 매칭됨; [phone]은(는) 휴대전화가 추가하는 행을 전환함 | 없음 | 예, 하지만 이미 열려 있는 탭은 다음 로드 시에만 행을 다시 읽음 |
cache-rules.toml | 없음, 대신 정확한 규칙 ID로 일치시킵니다 | 없음 | 예, 재시작 불필요 |
이 파일들은 설정 파일에 의해 변경되지 않습니다. 인스턴스 config.toml의 디렉터리를 공유하고, 고유한 형식과 자체 라이브 리로드를 유지하며, 어떤 것도 이를 설정 파일에 병합하지 않습니다.
플래그가 설정된 행은 실행되기 전에 두 번 탭하여 확인해야 합니다. 이 파일들을 편집하면 서비스를 재시작하지 않아도 변경 사항이 적용됩니다. Collie가 특정 행을 거부하면 journalctl --user -u collie -n 20에 줄 번호와 오류가 출력됩니다.
cp commands.toml.example ~/.config/collie/commands.toml[[commands]]
scope = "omp" # optional; omit for every pane
command = "/fork-in-herdr"
description = "Fork this conversation into a new herdr tab"
[[commands]]
scope = "claude"
command = "/statusline"
description = "Set the status line"
bar = true
bar_label = "Status"구성된 행과 일치하는 창에는 해당 행만 표시됩니다. ADR 0018에 설명된 대로 가장 범위가 좁은 행이 우선합니다.
확인하려면 창을 열고 /을(를) 탭하십시오. 첫 번째 화면에 구성한 행이 나타납니다.
동작 행에 명령어 배치하기
bar = true 또한 해당 행을 키보드 위에 있는 한 줄의 버튼 배열인 동작 행에 배치합니다. 바 행은 여전히 일반 팔레트 행이므로 두 영역 모두에 나타납니다. bar_label은 버튼의 텍스트이며 슬래시를 제외한 명령어 이름이 기본값입니다.
동작 행은 키보드 위에 배치된 하나의 여백 없는 띠 형태인 벨트입니다. Collie 고유의 컨트롤인 Keys, Type, Quick, Agent 및 디스플레이 기어가 벨트에 직접 위치합니다. 실행 중인 harness 고유의 명령어는 그 옆에 harness의 브랜드 색상이 옅게 입혀진 섹션에 위치하므로, 어떤 버튼이 에이전트에 입력되는지 한눈에 확인할 수 있습니다. 옆으로 드래그하면 벨트가 스크롤되며 아무것도 누락되지 않습니다.
각 harness는 다음 순서대로 자체 버튼을 제공합니다:
| Harness | 버튼 |
|---|---|
| Claude Code | Model, Effort, Compact, Resume |
| Codex | Model, Compact, Resume |
| pi | Model, Compact, Tree, Resume |
| omp | Model, Compact, Tree, Resume |
| opencode | Model, Compact, Resume |
| Grok Build | Model, Compact, Resume |
| Muse Code | Model, Effort, Compact, Resume |
| Antigravity (agy) | Model, Compact, Resume |
Codex, Grok, Antigravity에는 Effort 버튼이 없습니다. /model 선택기에서 추론 강도도 함께 설정하기 때문입니다. Grok에서 단독 /effort 키는 선택기를 전혀 열지 않습니다.
pi와 opencode에는 effort 명령어가 없습니다. pi는 해당 설정을 키 패드로 유용하게 제어할 수 없는 모달인 /settings 내부에 두고, opencode는 키 하나로 변형을 순환합니다.
opencode는 두 버튼을 자체 방식으로 처리합니다. Model은 /models 키를 전송하고 Resume은 /sessions 키를 전송합니다. 세션에 턴이 하나 이상 있어야 Compact가 작동하는데, opencode가 해당 시점에만 /compact 입력을 받기 때문입니다.
omp의 Tree 버튼은 Compact와 Resume 사이에 위치합니다. 미러에서 omp 고유의 세션 트리를 열며, 이는 세션의 이전 시점으로 이동하는 선택기입니다. 동일한 명령어인 /tree는 omp의 명령 팔레트에도 있습니다.
모든 harness 버튼은 명령어를 있는 그대로 전송합니다. Model은 /model를 전송하고, 에이전트 고유의 모델 선택기가 창에서 제어권을 넘겨받습니다. Collie는 모델 이름 목록을 보관하지 않습니다. 해당 목록은 harness의 소유이며 별도 통지 없이 변경되기 때문입니다. Effort도 동일하게 작동합니다.
사용자가 지정한 바 행은 해당 창에 대해 기본 제공된 harness 세그먼트를 대체하며, 다른 모든 곳은 그대로 둡니다. Agent 팔레트는 별도의 영역이므로 하나의 바 행이 이를 지우지 않습니다(ADR 0043).
12자를 초과하는 bar_label는 축약되어 표시되며 버튼은 그대로 나타납니다. true 또는 false가 아닌 bar는 잘못된 confirm와 마찬가지로 해당 행을 삭제합니다.
명령 팔레트와 마찬가지로 에이전트가 사용 중인 동안에도 행이 전송됩니다. 창이 텍스트를 수신했을 때만 체크 표시가 나타납니다.
Switch 버튼은 벨트의 오른쪽 끝에 위치하며 창 전환기를 엽니다. 얇은 선 뒤에 레이어 표시만 단독으로 그리며 텍스트는 표시하지 않습니다. 벨트의 어느 위치에서든 위로 드래그하면 동일한 전환기가 열립니다. 옆으로 드래그하면 대신 벨트가 스크롤됩니다.
Files 버튼 왼쪽에 있는 agents 표시는 해당 창에서 실행 중인 서브에이전트의 수를 셉니다. omp와 Gentle Shell의 경우, 스마트폰에서 해당 창의 Chat이 열려 있는 동안에만 백그라운드 작업을 카운트하며, Screen 뷰에서는 카운트하지 않습니다.
텍스트 상자에 텍스트나 첨부 파일이 있으면 벨트 오른쪽 끝, Switch 버튼 왼쪽에도 X가 표시됩니다. 한 번 탭하면 상자와 저장된 임시 저장이 비워지며 창에는 아무것도 전송되지 않습니다. 그런 다음 X는 Undo로 바뀌어 텍스트와 첨부 파일을 다시 복원합니다. Undo는 키 입력, 첨부 파일 추가, 전송, 다른 벨트 버튼 탭, 창 나가기 등 다음 작업을 수행할 때까지 유지됩니다. 벨트를 스크롤해도 유지됩니다.
왼손잡이입니까? Settings → Appearance → Hand 항목을 Left 설정하십시오. 벨트 방향이 바뀝니다: Switch 버튼과 X 버튼이 왼쪽 끝(Send 위)으로 이동하고, Keys 버튼이 가장 오른쪽 버튼이 되며 나머지 버튼은 왼쪽으로 스크롤됩니다. Send와 Attach는 답변 입력창 왼쪽으로 이동합니다. 이 설정은 기기별로 적용되며 다음에 창을 열 때 반영됩니다.
확인하려면 Claude Code, Codex, pi 또는 omp를 실행 중인 창을 엽니다. 색상이 입혀진 세그먼트가 키보드 위 행의 오른쪽에 위치합니다. 설정 → 모양 → Harness 단축키에서 기기별로 해당 세그먼트를 비활성화할 수 있으며, Collie 고유의 컨트롤은 유지됩니다.
턴 중지
중지 버튼은 벨트의 시작 부분인 Collie의 다른 버튼들 앞에 위치하므로 스크롤 없이 볼 수 있습니다. 하네스 프로필에 중지 키가 지정된 모든 에이전트에 표시되며, 실행 중인 항목이 없을 때는 흐리게 비활성화됩니다. 위치와 크기를 유지하므로 턴이 시작되거나 끝날 때 다른 버튼이 움직이지 않습니다. 흐리게 비활성화된 버튼을 탭해도 아무 작업도 수행되지 않으며 아무것도 전송되지 않습니다. 중지 키가 없는 에이전트에는 버튼이 표시되지 않습니다. Stop은 아무것도 입력하지 않으며 메시지를 보내지 않습니다. 에이전트 자체의 중지 키를 한 번 누르고 무슨 일이 일어났는지 알려줍니다.
Stop은 두 번 탭해야 합니다. 첫 번째 탭은 버튼을 활성화합니다. 단어가 Stop? 상태로 바뀌고 버튼 크기는 유지됩니다. 4초 이내에 다시 탭하여 턴을 중지하십시오. 0.4초 이내에 즉시 발생하는 두 번째 탭은 동일한 터치로 간주되어 무시됩니다. 기다리면 활성화가 해제되고 아무것도 눌리지 않습니다. 다른 창을 열어도 활성화가 해제되며, 턴이 끝나면 버튼이 흐리게 비활성화됩니다. 두 번째 탭이 처리 중인 동안에는 버튼이 추가 탭을 받지 않으므로 빠르게 세 번째 탭을 하더라도 Stop이 두 번 눌리지 않습니다.
턴을 중지하는 키는 하네스 자체의 선택이며, 하네스 프로필이 이를 보유합니다. 대부분의 에이전트는 Escape로 중지되고, 일부는 Ctrl+C로 중지되며, 일부는 Escape를 두 번 눌러야 합니다. 이 페이지가 아니라 프로필이 결정합니다.
키가 입력된 후 Collie는 최대 3초 동안 화면을 다시 읽고 상자 아래에 세 가지 중 하나를 알려줍니다.
| Receipt | 의미 |
|---|---|
| 중지되었습니다. | 키가 입력되었으며, 두 번 연속 화면을 읽은 결과 턴이 끝난 것으로 확인되었습니다. 입력 상자가 비어 있습니다. |
| Stop을 전송했습니다. 에이전트가 아직 바쁜 상태로 보입니다. | 키가 입력되었지만 Collie가 두 번 연속 화면을 읽었을 때 턴이 끝난 것을 감지하지 못했습니다. 잠시 기다린 후 필요한 경우 Stop을 다시 탭하십시오. |
| 거부 | 아무것도 누르지 않았습니다. 표시된 문장이 이유를 설명합니다. |
중지 키로 인해 대화 상자가 대신 열린 경우 Collie가 이를 알리고 해당 카드로 안내합니다.
OMP를 비롯한 일부 에이전트는 턴을 중단하면 대기열에 있던 메시지를 입력란으로 되돌립니다. 키를 누른 직후 Collie가 입력란에서 해당 메시지를 발견하면 영수증에 표시됩니다. 예: "중단되었습니다. 대기 중이던 1개의 메시지가 에이전트에 임시 보관 상태로 돌아왔습니다." Chat에서는 해당 메시지가 입력란으로 복귀됨 카드로 이동합니다. 함께 되돌아온 메시지들은 하나의 카드를 공유합니다.
카드에는 두 개의 버튼이 있으며, 둘 다 먼저 입력란을 다시 확인합니다. 전송 버튼은 턴이 대기 상태이고 입력란에 해당 텍스트가 정확히 들어 있을 때만 임시 보관 텍스트를 전송합니다. 취소 버튼은 입력란에 해당 텍스트가 그대로 남아 있을 때만 입력란을 비웁니다. 텍스트를 수정한 경우 취소 버튼을 누르면 카드가 제거되고 아무 키도 입력하지 않습니다. 임시 보관 텍스트가 남아 있는 동안 새 메시지는 거부되며, 거부 알림에서 해당 카드를 확인하도록 안내합니다.
키를 누르면 문제가 발생할 수 있는 경우 Collie는 누르기 전에 거부합니다.
- 대화 상자가 열려 있습니다. Escape를 누르면 해당 대화 상자에 응답하게 됩니다. 대신 해당 카드에서 응답하십시오.
- 상자에 입력한 텍스트가 있으며, 이 하네스의 중지 키를 누르면 텍스트가 지워집니다. 상자를 비우거나 Keys 보드의 Clear 버튼을 사용한 후 Stop을 다시 탭하십시오.
- Collie가 이 창을 읽을 수 없습니다. 읽을 수 없는 화면에는 키를 누르지 않습니다. 이는 Collie가 턴 실행 여부를 알 수 없는 화면도 포함합니다.
- 턴이 이미 종료되었습니다. 중지할 항목이 없으므로 아무것도 누르지 않았습니다.
- 이 머신은 아직 스마트폰에서 중지할 수 없습니다. crew 환경에서 창을 실행하는 머신에 이전 버전의 Collie가 설치되어 있습니다. 업데이트한 후 중지하십시오.
crew 머신에서 제시간에 응답이 오지 않으면 Collie가 이를 알립니다. Stop이 이미 입력되었을 수 있으므로 Stop을 다시 탭하기 전에 창을 확인하십시오.
Stop은 항상 사용자의 탭으로만 동작합니다. 워키토키 메시지, 훅, 명령줄, 대기열에 들어간 작업은 이를 누를 수 없습니다. crew 환경에서는 창을 실행하는 머신이 키를 누르고 화면을 읽은 다음 lead를 통해 영수증을 돌려보냅니다.
지속 에이전트로 실행되는 프로그램은 기존의 Stop 설정을 유지합니다. arm을 사용하지 않고 자체 영수증을 통해 지정된 턴을 중지합니다.
입력창 비우기
Keys 보드의 칩 행 끝에 있는 Clear 버튼은 arm 없이 한 번의 탭으로 하네스의 입력창을 비웁니다. Collie는 텍스트에 필요한 만큼 하네스 자체 삭제 키를 누르고, 입력창을 다시 읽은 후 비워졌는지 또는 비워지지 않은 이유를 벨트 위의 알림으로 표시합니다. 입력창이 비어 있거나, 대화 상자가 열려 있거나, 링크가 끊어졌을 때는 버튼이 회색으로 표시되며, 입력창이 비워지지 않으면 Collie는 남은 내용을 그대로 두고 다시 누르지 않습니다.
Clear 후에는 알림창에 2분 동안 복원가 표시됩니다. 한 번 탭하면 텍스트가 줄바꿈 없이 한 줄로 입력창에 다시 입력되므로 아무것도 전송되지 않습니다. 입력창에 다시 입력하거나 다른 창을 열면 Restore가 사라집니다. 브리지는 지워진 텍스트를 Clear 영수증과 함께 메모리에 보관하며, 로그나 디스크에 절대 기록하지 않습니다.
자체 키 프리셋
commands.toml 옆에 위치한 keys.toml에서 Keys 트레이의 Presets 행을 바꿀 수 있습니다:
cp keys.toml.example ~/.config/collie/keys.toml[[keys]]
scope = "claude" # optional; omit for every pane
label = "Yes"
keys = ["Down", "Enter"] # several chords go out as one batch창이 정의된 행과 일치하면 기본 Ctrl C/D/U/R/L/Z 버튼 대신 사용자의 프리셋만 표시합니다(ADR 0018). 이 행들은 운영자로서 사용자의 것이며 모든 휴대전화에 전달됩니다. 그 위의 패드(Esc, 화살표, Enter/Tab/Space, 보조 키)는 여기서 설정하지 않습니다. 각 휴대전화가 자체적으로 배치합니다. 다음 섹션을 참조하십시오.
키 조합(chord)은 tmux가 아닌 herdr의 구문을 사용합니다.
| 키 | 키 조합 | 지원 여부 |
|---|---|---|
| Ctrl+C | ctrl+c (C-c 아님) | 예 |
| Shift+Tab | shift+tab | 예 |
| Ctrl+F7 | ctrl+F7 | 예 |
| Page Up | — | 아니요 |
| Home | — | 아니요 |
| End | — | 아니요 |
| Delete | — | 아니요 |
확인하려면 창을 열고 Keys → Presets을 눌러 새 버튼을 확인하십시오. Collie가 행을 거부하면 journalctl --user -u collie -n 20에서 오류 세부 정보를 확인하십시오.
사용자 정의 키 패드
Keys 패드를 재배치할 수 있습니다. 키을(를) 열고 레이블 옆의 연필을 탭하십시오:
- 키 옆의 연필을 탭하십시오. 창 위로 긴 시트가 열립니다.
- 키를 다른 위치로 드래그하거나, 키를 탭하고 4개의 화살표 단추를 사용하십시오.
- 빈 셀에 키를 추가하려면 점선으로 표시된 +을(를) 탭하고, 키를 선택한 후 변경 또는 제거을(를) 탭하십시오.
패드는 7개 열로 이루어진 그리드입니다. 키는 단일 셀을 차지하며 가로로 더 넓거나(1, 2 또는 3열) 세로로 더 길게(1 또는 2행) 설정할 수 있습니다. 키를 선택하고 너비 또는 높이을(를) 탭하여 크기를 조정하십시오. 오른쪽 및 아래쪽으로 확장됩니다. 다른 키를 덮거나 패드를 벗어나는 크기는 흐리게 표시되며, 탭하면 어느 키가 간섭하는지 표시됩니다. Collie는 다른 키를 임의로 이동하지 않습니다. 행 추가을(를) 사용하면 맨 아래에 행이 최대 8개까지 추가됩니다. 변경 사항은 독에 즉시 반영됩니다. Collie는 패드를 현재 브라우저에 저장하므로, 다른 브라우저는 레이아웃을 공유받기 전까지 기본 패드로 시작합니다. 기본값은 이전에 사용하던 패드이며, Space 바가 3셀 너비이고 Enter가 둘째 행의 왼쪽 끝에 있습니다:
Esc Tab Shift Ctrl Alt Up ^C
Enter Space (3 wide) Left Down Right키를 드래그하면 해당 영역 전체가 이동합니다. 같은 크기의 키 위에 놓으면 두 키의 위치가 서로 바뀝니다. 간섭이 발생하는 다른 위치에 놓으면 대상 윤곽선이 회색 점선으로 바뀌고, 어느 키가 간섭하는지 안내선에 표시되며, 키가 원래 위치로 돌아갑니다. 화살표 단추는 간섭하는 키를 건너뛰고 키가 들어갈 수 있는 다음 위치에서 멈춥니다. 들어갈 자리가 없으면 비활성 상태를 유지합니다.
키는 최대 3개의 한정자 키와 1개의 키 조합(예: Ctrl+Alt+Shift+T)을 전송합니다. 최대 4단계의 짧은 시퀀스(예: Ctrl+B 입력 후 C)를 전송할 수도 있습니다. 시퀀스는 하나의 호출로서 순서대로 전송됩니다. 키 빌더에서 해당 조합을 구성하려면 문자, 이름 지정됨 또는 F 키을(를) 선택하십시오. 기본 패드에 있는 키처럼 고정되는 Ctrl, Alt, Shift 키를 만들려면 한정자을(를) 선택하십시오. 한 번 탭하면 다음 키에 적용되고, 다시 탭하면 유지되며, 세 번째로 탭하면 해제됩니다. 한정자 키는 단독으로 작동하므로 단계나 이름이 없습니다. 모든 키는 내장 키와 동일한 경로를 거칩니다. 창이 잠겨 있거나 오프라인인 동안에는 대기하고, 프로그램을 중지할 수 있는 키(Ctrl+D, Ctrl+Z 또는 Ctrl+C가 포함된 시퀀스)는 한 번 더 탭하도록 요청하며, 멀티플렉서가 전송할 수 없는 키는 회색으로 표시됩니다.
| Control | 기능 |
|---|---|
| Presets | 기본값, Claude Code, 접두사 (Ctrl+B), Vim, 탐색. 각 항목은 미리보기를 표시하며 패드를 교체하기 전에 확인합니다. |
| 공유: 레이아웃 복사 | 클립보드에 짧은 코드를 복사합니다. 일반 http에서는 코드를 직접 선택하여 수동으로 복사하십시오. |
| 공유: 레이아웃 가져오기 | 공유받은 레이아웃 코드를 붙여넣으십시오. Collie가 코드를 확인하고, 미리보기를 표시하며, 적용하기 전에 확인합니다. |
| 기본값 복원 | 미리보기를 표시한 후 원래 패드로 되돌립니다. |
이전 버전의 코드도 계속 가져올 수 있으며, 모든 키가 단일 셀로 처리됩니다. 패드에 Esc, Enter 또는 화살표 키가 없으면 되돌리기과(와) 함께 안내 줄이 표시됩니다. 접두사 (Ctrl+B) 프리셋은 Ctrl+B 접두사를 전송하므로 창 내부에서 실행 중인 tmux에 적합합니다. 탐색 프리셋에는 Herdr가 전송할 수 없는 Home, End, PgUp, PgDn이 포함되어 있어 Herdr 창에서는 회색으로 표시됩니다(ADR 0092).
자체 빠른 답장
quick-replies.toml에서 Quick 독 문구를 맞춤 설정할 수 있습니다:
cp quick-replies.toml.example ~/.config/collie/quick-replies.toml[[replies]]
scope = "claude" # optional; omit for every pane
title = "confirm"
items = ["yes", "no"] # sent verbatim, one per button창이 사용자의 규칙과 일치하면 기본 그룹(ADR 0018) 대신 사용자 그룹이 적용됩니다. 기본 문구는 영어입니다(yes, commit and push, drastically simplify).
다른 언어로 실행하거나 approve 같은 단어를 특정 하네스에 보내려면 이 파일을 사용하십시오. scope = "shell"을 설정하면 표준 셸 창을 대상으로 지정하며, 그렇지 않으면 y/n만 수신합니다.
확인하려면 창을 열고 Quick을 눌러 그룹을 확인하십시오. 행을 로드하지 못하면 journalctl --user -u collie -n 20에 오류가 출력됩니다.
사용자 정의 런처
탭 한 번으로 keys.toml 옆의 launchers.toml에서 선언한 명령을 실행합니다.
cp launchers.toml.example ~/.config/collie/launchers.toml[[launchers]]
command = "htop" # required; the shell line, typed verbatim into the fresh shell
label = "Top" # optional; defaults to the first word of command
# cwd = "~/dev/collie" # optional; absent means "here" — see below행이 열리는 위치는 행 자체가 아니라 실행하는 위치에 따라 달라집니다. 새 페이지(Shell 후 Command 선택의 행)에서 시작하면 폴더 이름을 딴 새 Space가 생성되고, 행의 레이블이 탭 이름으로 지정됩니다. 위로 쓸어올려 여는 전환 시트인 pane에서 탭하면 그 옆에 행의 이름을 딴 새 해당 창 자체 Space의 탭가 열립니다.
어느 쪽이든 브리지는 새 셸에 command을 입력하고 Enter 키를 보냅니다. 명령어는 자체 수명을 가집니다. 스스로 종료되는 명령어는 Space나 탭을 함께 닫고, htop는 사용자가 종료할 때까지 유지됩니다.
cwd은 해당 새 Space나 탭이 열리는 위치입니다. 행에 고정 폴더를 지정하면(위의 htop과 같이) 행의 어느 위치를 탭하든 해당 설정이 우선 적용됩니다.
이를 생략하면 "here"를 의미합니다. 대시보드는 홈 디렉터리에서 열고, 창은 해당 창 자체의 cwd에서 엽니다. 즉, cwd가 없는 행은 항상 특정 체크아웃 최상위에 머무는 대신 작업 중인 체크아웃을 따라 이동합니다.
이 파일 및 휴대폰에서 추가된 행(아래)이 허용 목록입니다. POST /api/launch은(는) 해당 행 중 하나와 정확히 일치하는 command, 머신 자체 목록에 있는 에이전트 id(머신이 해당 에이전트의 명령어를 직접 입력함) 또는 일반 셸만 수락합니다. 변경 사항은 재시작 없이 즉시 적용되지만, 이미 열려 있는 탭은 다음 로드 시에만 행을 다시 읽습니다.
두 가지 선택적 키를 통해 행에 대한 추가 정보를 휴대폰에 전달합니다:
[[launchers]]
command = "claude-danger"
label = "Claude Code, no prompts"
# The agent that reads the row: it is listed under Agent with that agent's mark.
harness = "claude"
# The line skips permission prompts, but an alias hides its flags.
no_prompts = true행은 세 위치에 표시됩니다:
- New 페이지에서 (대시보드에서 + New 탭). 상단 스위치에는 에이전트 | 셸가 표시됩니다.
harness가 있는 행은 에이전트 선택 메뉴에 있습니다.harness가 없는 행은 명령어 선택 메뉴(즉 셸 아래의 선택 메뉴)에 있습니다. - 대시보드의 Launch 섹션에 표시됩니다. Spaces처럼 접힙니다.
- 스위처 시트의 Launch 섹션에 표시됩니다. (창에서 위로 스와이프).
New 페이지에서 cwd가 없는 행은 사용자가 지정한 폴더에서 실행되며, 고정 폴더가 있는 행은 해당 입력 필드 대신 해당 폴더를 표시합니다. 행은 worktree에서 시작되지 않으므로 이를 위해서는 agent나 Shell을 선택하십시오. 고정 폴더가 있는 행은 홈 디렉터리 기준으로 단축되어 표시됩니다. cwd가 없는 행은 스위처에 "here"로 표시됩니다(대시보드는 이미 홈 디렉터리를 의미하므로 아무것도 표시되지 않습니다). 행을 선언하지 않으면 두 섹션 모두 표시되지 않습니다.
crew(여러 머신, 단일 휴대폰 연결 lead) 환경에서 각 머신은 이 파일의 자체 복사본을 읽습니다. 행을 탭하면 lead가 아니라 탭 동작이 발생한 대시보드나 창의 해당 머신에서 실행됩니다.
New 페이지의 에이전트 선택 항목은 Collie의 자체 목록입니다: Claude Code, Codex, opencode, pi, omp, Grok, Hermes, Kiro, Muse 및 Antigravity. Kiro는 설정된 도구 권한을 유지한 채 시작됩니다. 머신의 로그인 PATH에 없는 에이전트는 목록에 비활성화된 상태로 남아 "설치되지 않음"으로 표시됩니다. 다른 터미널 에이전트를 사용하려면 위와 같이 해당 에이전트의 행을 선언하십시오. 셸 아래의 명령어 선택 항목에 표시되고, 일반 명령처럼 창에서 시작되며, Collie는 상태를 표시하지 않습니다.
확인하려면 대시보드를 새로고침하고 herd 아래를 확인하십시오. 행을 로드하지 못하면 journalctl --user -u collie -n 20에 오류가 출력됩니다.
휴대전화에서 추가된 실행기
휴대폰은 머신에 자체 행을 추가할 수 있습니다. 해당 행은 해당 머신의 상태 폴더인 launchers-added.json에 보관되며 launchers.toml에는 저장되지 않고 다른 머신으로 복사되지도 않습니다.
New 페이지에서 에이전트 선택 메뉴 아래 또는 명령어 선택 메뉴 아래의 직접 추가을 탭하십시오. 선택한 머신의 /new/add 페이지가 열립니다. 상단에서 에이전트 또는 명령어를 선택하십시오. 에이전트에는 두 가지 방식이 있습니다: recipe(하네스, 옵션 칩, Collie가 입력할 정확한 라인) 및 명령 작성. 명령 행은 항상 직접 작성합니다. 추가를 누르면 새 행이 선택된 상태로 New 페이지로 돌아갑니다. 양식 아래의 이 머신에 추가됨에는 휴대폰이 추가한 모든 행이 이름 변경 및 제거과 함께 나열되며, launchers.toml의 행은 잠금 표시와 함께 아무 작업도 제공되지 않습니다. 추가 작동 방식을 열면 이 머신의 launchers.toml 경로와 복사 가능한 예제 행이 포함된 간단한 설명이 표시됩니다.
[phone]
adds = true # default true: a phone may add rows built from a recipe
free_text = false # default false: a phone may also add a line typed by hand
run = true # default true: a phone may run a one-off command, and run it again from history[phone] 테이블을 launchers.toml 내부 어디에나 배치하십시오. true 또는 false가 아닌 값은 false로 읽힙니다. 브리지는 스위치를 강제 적용합니다. 거부된 추가 작업은 아무것도 변경하지 않으며, 스위치로 비활성화된 행은 즉시 시작을 중단합니다. 행은 파일에 그대로 유지되므로 스위치를 다시 켜면 복원됩니다.
recipe는 에이전트와 브리지 자체 테이블의 옵션 칩(예: Claude Code 및 "Skip permission prompts")의 조합입니다. 휴대폰은 ID만 전송하고 브리지가 라인을 구성합니다. 모든 칩은 해당 에이전트 자체의 --help에서 읽어왔습니다:
| 에이전트 | 옵션 | 추가 내용 |
|---|---|---|
| Claude Code | 권한 확인 건너뛰기 | --dangerously-skip-permissions |
| Claude Code | 계획 모드 | --permission-mode plan |
| Claude Code | 모델: opus, 모델: sonnet | --model opus, --model sonnet |
| Claude Code | 마지막 작업 계속 | --continue |
| Codex | 승인 및 샌드박스 건너뛰기 | --dangerously-bypass-approvals-and-sandbox |
| Codex | 항상 묻지 않음 | --ask-for-approval never |
| Codex | 읽기 전용 샌드박스, 웹 검색 | --sandbox read-only, --search |
| opencode | 자동 승인, Plan 에이전트, 마지막 세션 이어하기 | --auto, --agent plan, --continue |
| pi | 마지막 세션 이어하기, Thinking: 높음 | --continue, --thinking high |
| omp | 마지막 세션 이어하기, Thinking: 높음 | --continue, --thinking=high |
claude-danger 같은 별칭이나 일반적인 htop와 같은 자유 입력 줄은 free_text = true이(가) 있어야만 가능합니다. 이 설정이 없으면 명령 작성에 비활성화된 행 하나가 시스템에서 "꺼짐"으로 표시되고 추가은(는) 꺼진 상태로 유지됩니다. 이 설정이 있으면 추가이(가) 켜지기 전에 줄 확인에 모든 숨겨진 문자가 해당 코드(예: ⟨U+200B⟩)로 기록된 줄이 표시됩니다. 최대 200자이며, 브리지는 추가할 때와 읽을 때마다 제어 문자, 줄 또는 단락 구분 기호, bidi 제어 문자를 거부합니다.
시스템은 최대 20개의 추가된 행을 보관합니다. 어떤 행의 내용이 launchers.toml에 있는 행과 같으면 launchers.toml의 행이 우선합니다. 추가된 각 행에는 이를 추가한 페어링된 기기가 기록됩니다. 해당 기기를 취소하면 휴대폰에서 또는 collie devices revoke 명령으로 기기의 행이 삭제되며, 감사 로그에 모든 추가, 이름 변경 및 삭제가 기록됩니다.
주의. 권한 확인 프롬프트를 건너뛰는 행에는 "프롬프트 없음" 배지가 표시됩니다. 각 기기는 해당 행을 처음 시작하기 전에 한 번 묻고 명령, 폴더, 시스템을 표시합니다. 시스템에서 휴대폰이 추가한 모든 행을 끄려면 adds = false을(를) 설정하십시오.durable agent 접근(실험적 기능)
Collie가 터미널과 함께 실행하는 각 durable agent는 sources.json의 항목 하나이며, collie durable attach에 의해 작성됩니다(Durable agent). 아래의 처음 세 변수는 default라는 이름의 durable agent 하나를 구동하는 durable 전용 인스턴스(COLLIE_MUX=durable)를 위한 구형 형식입니다. 소켓 또는 토큰이 포함된 URL 중 하나만 설정하고, 둘 다 설정하지 마십시오.
| 변수 | 예시 | 의미 |
|---|---|---|
COLLIE_DURABLE_SOCKET | /run/user/1000/durable/session.sock | 이 머신에 있는 durable agent의 비공개 Unix 소켓입니다. 절대 경로, 최대 103바이트, mode 0600 |
COLLIE_DURABLE_URL | https://durable-member.example.com | TLS 뒤에 배포한 durable agent의 주소입니다. https://만 허용되거나, 이 머신에 있는 durable agent의 경우 http://127.0.0.1:<port>입니다. 최대 2048바이트, 쿼리 없음 |
COLLIE_DURABLE_TOKEN | your-32-byte-random-token-here | URL로 보내는 모든 요청에 함께 전송되는 베어러 토큰입니다. 최소 32바이트여야 합니다. 이 토큰을 저장하는 파일의 모드는 600이어야 하며, Collie는 이를 절대 출력하지 않습니다. |
COLLIE_PROGRAMS | off | durable agent를 비활성화하는 킬 스위치입니다. bridge는 sources.json을 무시하고, 한 줄의 로그를 기록하며, durable agent를 등록하지 않으므로 휴대전화에 Durable agents 섹션이 표시되지 않습니다. collie doctor 및 collie durable list는 durable agent가 꺼져 있음을 나타냅니다. 설정을 해제한 후 collie restart하여 복구하십시오. 위의 env 형식은 꺼지지 않습니다 |
둘 다 설정되었거나, 토큰 없는 URL, 또는 URL 없는 토큰은 설정 오류입니다. 인스턴스는 시작되지만 해당 이유로 durable agent에 접근할 수 없다고 표시됩니다. https 환경에서 모든 폴링은 요금이 청구되는 요청이므로, Collie는 휴대전화가 조회 중일 때는 2초마다, 그렇지 않을 때는 10초마다 폴링합니다. Durable agent에서 각 방식이 차단하는 항목과 차단하지 않는 항목을 확인할 수 있습니다.
durable agent의 starter (실험적 기능)
durable agent는 사용자가 해당 에이전트에서 연 New 페이지의 새 대화 아래에 자체 starter 목록을 표시합니다. starter는 코드 리뷰와 같이 대화를 시작하는 명명된 방식입니다. 텍스트를 입력받지 않으며, 사용자가 탭하면 durable agent가 무엇을 시작할지 결정합니다. 새 대화는 패널로 열립니다. 동일한 요청 ID로 다시 탭하면 동일한 대화가 열리고 새 대화는 시작되지 않으며, durable agent가 응답하지 않으면 다시 시도에서 동일한 요청 ID를 전송합니다. 연결할 수 없는 durable agent는 starter를 표시하지 않습니다. 이 기능은 실험적이며 마이너 릴리스에서 변경될 수 있습니다.
일회성 명령 및 실행 기록
휴대폰은 론처가 아닌 명령도 한 번 실행할 수 있습니다. Collie는 지정한 폴더에서 셸을 열고 론처 행을 시작할 때와 동일한 방식으로 명령줄을 입력합니다. 해당 줄은 자유 입력 줄과 동일한 규칙을 따릅니다. 최대 200자이며 제어 문자, 구분 기호 또는 bidi 문자를 포함할 수 없습니다. 일회성 명령은 새 브랜치에서 시작되지 않습니다.
페어링된 휴대폰은 이미 셸을 열고 입력할 수 있으므로 이 기능은 기본적으로 켜져 있습니다. 해당 시스템에서 이 단축 기능을 제거하려면 [phone] 테이블에서 run = false을(를) 설정하십시오.
새 세션 페이지에서 셸(으)로 전환하십시오. 그러면 명령어 선택 항목 끝에 두 가지 항목이 추가됩니다. 해당 시스템의 실행 기록에 있는 명령줄을 나열하는 최근 그룹과 명령 입력…입니다. 명령 입력…을(를) 선택하면 선택 항목 바로 아래에 텍스트 필드가 나타납니다. 명령줄을 입력하고 시작(또는 실행 표시가 된 리턴 키)를 누르십시오. 시작 위의 줄에는 실행되는 항목과 위치가 표시됩니다(예: "bluefin의 ~/projects에서 htop 실행"). 일회성 명령줄에는 worktree 스위치가 꺼진 상태로 유지됩니다.
처음 실행하기 전에 Collie는 시스템에 줄을 확인하도록 요청합니다. 확인 단계에서는 아무것도 실행하지 않으며 아무것도 보관하지 않습니다. 해당 줄에 --dangerously-skip-permissions과(와) 같이 권한 확인 프롬프트를 건너뛰는 플래그가 포함되어 있으면, 이 휴대폰은 "프롬프트 없음" 배지가 있는 행과 마찬가지로 시작하기 전에 한 번 묻습니다. 해당 줄이 위의 규칙을 위반하면 알림에 이유가 표시되고 아무것도 실행되지 않습니다.
다시 실행하려면 최근에서 줄을 선택하십시오. 폴더를 직접 변경하지 않은 경우 폴더 필드는 해당 줄이 마지막으로 실행된 폴더로 채워집니다. 최근의 줄을 선택한 동안에는 선택 항목 아래에 기록에서 삭제 및 기록 지우기이(가) 표시됩니다. 기록 지우기은(는) 실행 전 먼저 확인합니다. 페이지 상단의 다시 실행 행도 일회성 실행을 반복합니다. run = false을(를) 사용하면 최근의 줄이 목록에 비활성화된 상태로 유지되고 명령 입력…은(는) 사라집니다. 1.19.0 이전 버전의 시스템에는 둘 다 표시되지 않습니다.
시작된 각 명령은 해당 시스템의 상태 폴더 내 commands-recent.json에 보관됩니다. 이 파일에는 각 명령이 마지막으로 실행된 폴더와 함께 최신 항목부터 최대 12개의 줄이 보관됩니다. 줄을 다시 실행하면 맨 위로 이동합니다. TOKEN=abc deploy, 비밀번호가 포함된 URL 또는 token, secret, password과(와) 같은 단어 등 시크릿이 포함된 것으로 보이는 줄은 실행은 되지만 보관되지는 않습니다. 휴대폰에서 한 줄을 삭제하거나 목록을 지울 수 있습니다. run = false을(를) 설정하면 목록은 계속 표시되지만 목록 내의 어떤 항목도 시작되지 않습니다. crew에서는 각 시스템이 자체 목록을 보관하며 시스템 간에 복사되지 않습니다.
이 목록은 권한이 아닙니다. 목록에서 줄을 시작하는 것은 페어링된 기기가 필요한 새로운 일회성 실행이므로 기기 페어링을 해제하거나 취소해도 목록은 그대로 유지됩니다. 입력한 시크릿이 줄에 포함될 수 있으므로, 감사 로그에는 일회성 명령의 전체 줄이 아닌 첫 번째 단어와 길이만 기록됩니다.
자체 서체
인터페이스 글꼴은 기기별 설정입니다. 설정 → 모양 → 서체에서 System, Space Grotesk, Aldrich(기본값), IBM Plex Sans, Geist, Atkinson Hyperlegible Next 중에서 선택할 수 있습니다. 서체를 지정하는 테마은 테마를 선택할 때 서체를 여기에 한 번 기록합니다. 네 번째 구성 파일인 theme.toml에 사용자 지정 글꼴을 추가할 수 있습니다.
cp theme.toml.example ~/.config/collie/theme.toml
mkdir -p ~/.config/collie/fonts
cp departure.woff2 ~/.config/collie/fonts/[[font]]
family = "Departure Mono" # the picker's label AND the CSS family
file = "departure.woff2" # a bare name inside fonts/, woff2 only
weight = "400 700" # optionalcommands.toml 및 기타 설정 파일의 동작과 달리, 사용자 지정 글꼴은 기본 제공 목록을 대체하지 않고 끝에 추가됩니다(ADR 0033). 글꼴은 작업을 트리거하지 않으므로 가려질 대상이 없습니다.
기본 제공 항목 아래에 표시되며, 각 클라이언트 기기에서 자체 글꼴을 선택합니다.
참고할 세 가지 동작은 다음과 같습니다.
- 첫 로드 시 레이아웃 이동. 사용자 지정 글꼴은 메트릭이 일치하는 대체 글꼴이 없어 초기 로드 중에 미세한 레이아웃 이동이 발생합니다. 기본 제공 글꼴은 빌드 시점에 대체 글꼴이 생성되므로 이 현상을 방지합니다.
- 콜드 로드 지연. 콜드 로드는 짧은 지연 시간과 함께 파일을 가져오며, 캐시된 클라이언트는 즉시 렌더링합니다.
- 크롬 UI 전용. 선택한 글꼴은 Collie의 크롬 UI에만 적용됩니다. 터미널 미러, 트랜스크립트, 렌더링된 마크다운은 자체 서체를 유지합니다.
- 다음 새로고침 시 즉시 반영. 변경 사항은 재시작할 필요 없이 다음 페이지를 새로고침할 때 적용됩니다. 잘못된 설정은
journalctl --user -u collie -n 20를 통해 확인할 수 있는 오류를 기록합니다.
사용자 지정 캐시 규칙
공급자가 변경한 프롬프트 캐시 유효 기간을 수정하려면 cache-rules.toml를 사용합니다.
cp cache-rules.toml.example ~/.config/collie/cache-rules.tomlCollie는 harness 및 공급자당 하나의 규칙을 제공합니다. Collie는 기록된 날짜에 공급업체 페이지에서 각 규칙을 읽어왔습니다. 공급업체는 사전 통지 없이 해당 값을 변경할 수 있습니다. 에이전트와 공급업체 사이에 위치한 프록시인 게이트웨이 역시 이를 변경할 수 있습니다. Collie가 업데이트를 제공할 때까지 이 파일을 사용하여 값을 재정의하십시오.
[[rule]]
id = "claude.api"
ttl_seconds = 3600
source_url = "https://platform.claude.com/docs/en/build-with-claude/prompt-caching"
retrieved = "2026-09-12"
note = "our gateway sends ttl 1h on every request"Collie는 네 가지 규칙을 모두 만족할 때만 행을 유지합니다. id은 기본 제공 규칙을 지정해야 합니다. ttl_seconds은 1부터 86400 사이의 정수여야 합니다. source_url는 비어 있지 않은 문자열이어야 합니다. retrieved은 유효한 YYYY-MM-DD 날짜로 파싱되어야 하며 오늘보다 늦은 날짜일 수 없습니다. 유효하지 않은 행은 삭제되고 로그에 기록됩니다. 파일의 나머지 부분은 그대로 적용됩니다.
두 가지 규칙이 파일의 의미를 추가로 결정합니다. 동일한 id을 가진 두 행은 오류가 아닙니다. 나중에 나오는 행이 적용됩니다. 빈 문자열로 작성한 note은 행 전체를 삭제하므로 해당 필드를 생략하십시오.
행은 해당 id이 지정하는 티어 규칙에 바인딩됩니다. 해당 티어 아래의 모델별 분할도 함께 이동하므로 한 행이 해당 티어의 모든 모델을 포괄합니다.
참고. 숫자를 변경할 수 있습니다. 출처 페이지나 조회 날짜는 제거할 수 없습니다. 규칙 카탈로그에는 두 필드가 모두 필요합니다.
collie doctor은 세 가지 항목을 확인합니다. cache-claims은 기본 제공 규칙을 180일 동안 아무도 재확인하지 않았을 때 경고합니다. cache-rules는 삭제된 모든 행과 삭제 사유를 명시합니다. cache-env은 셸에 ENABLE_PROMPT_CACHING_1H 또는 FORCE_PROMPT_CACHING_5M를 설정했을 때 이를 표시합니다. 브리지는 별도 서비스로 실행되며 에이전트의 환경 변수를 읽을 수 없습니다. 브리지가 읽을 수 있도록 이 Claude Code 변수들을 여기에 반영하십시오.
작성할 수 있는 규칙 ID는 다음과 같습니다.
| 규칙 ID | 적용 대상 |
|---|---|
claude.subscription | Claude 구독(Pro 또는 Max) 기반 Claude Code |
claude.api | API 키 또는 서드파티 제공업체 기반 Claude Code |
codex.subscription | ChatGPT 플랜으로 로그인한 Codex CLI |
codex.api | OpenAI API 키 기반 Codex CLI |
pi.anthropic, opencode.anthropic | Anthropic과 통신하는 pi 또는 opencode |
pi.openai, opencode.openai | OpenAI와 통신하는 pi 또는 opencode |
pi.google, opencode.google | Google과 통신하는 pi 또는 opencode |
pi.unknown, opencode.unknown | TTL을 문서화하지 않은 업스트림 기반 pi 또는 opencode |
프롬프트 캐시 카운트다운
각 에이전트 창의 칩은 해당 에이전트의 프롬프트 캐시가 유지되는 시간을 표시합니다.
지원되는 모든 하네스는 현재 대화를 캐시합니다. 하네스는 해당 캐시가 유지되는 동안 더 낮은 요금을 청구합니다. 칩은 에이전트의 마지막 요청 이후 유휴 시간을 카운트다운합니다. 전체 세션 유지 시간은 추적하지 않습니다. 새 요청이 발생할 때마다 타이머가 초기화됩니다.
칩의 모래시계는 세 가지 색상 중 하나로 상태를 나타내며 옆에 표시되는 숫자는 회색으로 유지됩니다. 모래시계는 유효 시간이 넉넉할 때는 녹색, 마지막 4분의 1 동안은 빨간색, 유효 시간이 만료되거나 턴에서 전체 요금을 지불하면 파란색으로 표시됩니다. 칩은 파란색 상태일 때 cold을 표시하고 1분 미만으로 남았을 때는 초 대신 <1m을 표시합니다.
일부 동작은 시간이 남아 있어도 캐시를 삭제합니다: 다른 모델로의 /model 전환, effort 변경, compaction, /reload-plugins --force입니다. Claude Code가 트랜스크립트에 동작을 기록하는 즉시 칩이 파란색으로 바뀌며, 시트에 동작 이름이 표시됩니다. opencode도 compaction 및 모델 변경을 동일한 방식으로 보고합니다.
칩은 창 작업 공간 뒤쪽인 창 헤더 두 번째 줄의 오른쪽 끝에 위치합니다. crew에서는 같은 줄의 칩 옆에 머신 이름이 표시됩니다. 칩을 탭하면 기본 규칙인 규칙 ID, 벤더 출처 페이지, 조회 날짜를 확인할 수 있습니다.
참고. 값은 측정됨 표시가 없는 한 실시간 측정값이 아니라 날짜가 기록된 벤더 주장 수치입니다. Claude Code는 캐시 유효 시간을 트랜스크립트에 직접 기록하므로 Claude 창의 값은 대개 측정값입니다.
일부 창에는 칩이 표시되지 않습니다. 이는 정상 동작입니다. 창은 에이전트가 한 턴을 완료한 후에만 칩을 표시합니다. Collie는 측정 전에는 어떠한 가정도 하지 않습니다. 하네스에 저널 어댑터가 없거나 벤더가 수명 데이터를 공개하지 않는 경우 창에 아무것도 표시되지 않습니다.
Collie는 캐시가 만료되기 전에 휴대폰으로 푸시 알림을 보낼 수도 있습니다. 한 변수가 전송 시점을 제어합니다.
| 변수 | 기본값 | 의미 |
|---|---|---|
COLLIE_CACHE_WARN_SECONDS | 300 | 감시 중인 창의 캐시가 만료되기 몇 초 전에 푸시를 보낼지 지정합니다. 최솟값은 30, 최댓값은 3600입니다. |
이 설정은 푸시 알림만 제어합니다. 칩이 빨간색으로 바뀌는 시점은 제어하지 아닌. 빨간색 임계값은 각 규칙 TTL의 4분의 1로 고정되어 있습니다. 푸시 자체는 이 설정값과 창 자체 캐시 수명의 절반 중 더 짧은 시점에 트리거됩니다. 따라서 5분 캐시(Codex, OpenCode, pi, omp)는 설정된 300초보다 짧더라도 캐시가 만료되기 약 2분 30초 전에 경고합니다. 특정 창 또는 전체 창에 대한 경고를 활성화하는 방법은 voice-and-push.md을 참조하십시오.
첨부 파일
메시지 입력란 옆의 클립 아이콘은 호스트로 파일을 업로드하고 메시지에 파일 경로를 삽입합니다.
# in your .env
COLLIE_MAX_UPLOAD_MB=25 # default 10, floor 1, ceiling 512
COLLIE_UPLOAD_EXTRA_TYPES=rb,ex,zig # bare extensions, no dotCollie는 소유자 전용 권한으로 <state-dir>/uploads 아래에 파일을 저장하고 초안에 절대 경로를 추가합니다. 터미널은 붙여넣은 파일을 직접 처리할 수 없으므로 에이전트가 해당 경로에서 파일을 읽습니다. 업로드된 파일은 작성된 지 48시간 후에 삭제됩니다.
| 설정 | 기본값 | 기능 |
|---|---|---|
COLLIE_MAX_UPLOAD_MB | 10 | 허용되는 최대 파일 크기(정수 메가바이트 단위). 범위를 벗어나거나 정수가 아닌 경우 기본값으로 대체되고 경고가 기록됩니다. |
COLLIE_UPLOAD_EXTRA_TYPES | (비어 있음) | 아래 목록 외에 추가로 허용할 텍스트 형식입니다. 쉼표로 구분된 확장자 목록이며, 접두사 점은 무시되고 영문자와 숫자가 아닌 문자는 경고와 함께 제외됩니다. |
두 종류의 파일이 허용되며, 서로 다르게 검사됩니다.
이미지 파일은 이름이나 선언된 형식이 아닌 시그니처 바이트로 식별됩니다: png, jpg, gif, webp. SVG는 이미지가 아닌 스크립트를 포함하는 마크업이므로 의도적으로 거부됩니다.
텍스트 파일은 확장자로 식별되며, 바이트 검사로 유효성을 판단합니다. 첫 4 KB에 NUL 또는 비정상적인 제어 바이트가 포함된 파일은 파일명과 관계없이 거부됩니다. 기본 제공 목록은 md, markdown, txt, json, jsonl, yaml, yml, toml, csv, tsv, log, xml, html, htm, css, js, jsx, mjs, cjs, ts, tsx, py, go, rs, sh, bash, sql, diff, patch입니다.
참고. COLLIE_UPLOAD_EXTRA_TYPES 항목은 텍스트 형식만 추가합니다. 이미지는 비교할 시그니처가 필요하므로 이 방식으로 바이너리 형식을 추가할 수 없습니다.COLLIE_MAX_UPLOAD_MB 값을 올리면 두 가지 다른 수치도 함께 증가합니다. 브릿지는 업로드 크기를 측정하기 전에 전체 내용을 메모리에 읽어 들이므로, 제한 값이 크고 여러 업로드가 동시에 발생하면 그만큼 많은 메모리를 사용합니다. 또한 런타임의 본문 제한은 업로드 경로뿐 아니라 모든 경로에 적용되므로, 제한 값을 올리면 큰 본문이 모든 핸들러에 도달할 수 있으며 해당 핸들러 자체 제한에 의해 거부됩니다. 48시간이 지나기 전에는 아무것도 삭제되지 않으므로, 업로드 디렉터리에는 최대 이틀 동안 전송된 데이터가 보관됩니다. 기본으로 올리지 말고 필요한 경우에만 값을 올리십시오.
crew 환경에서는 두 설정이 머신별로 적용되며, 파일을 저장하는 머신이 해당 설정을 적용합니다. 리드는 업링크를 절약하기 위해 전달 전에 초과 크기의 본문을 거부하지만, 자체 설정값을 기준으로 거부합니다. 모든 멤버에 동일한 값을 설정하십시오. 그렇지 않으면 피어가 리드가 통과시킨 데이터를 거부할 수 있습니다.
즐겨찾기 및 최근 폴더
새 세션 페이지에는 이전에 작업을 시작했던 폴더가 나열되므로 경로를 입력하는 대신 폴더를 탭하면 됩니다.
Folder 필드 아래에는 실행 대상 시스템을 위한 두 개의 목록이 있습니다. 최근에는 작업이 시작되었던 최근 8개 폴더가 최신순으로 보관됩니다. 정상 작동하고 폴더를 지정한 실행만 계산되며, 빈 필드는 이미 홈 디렉터리를 의미하므로 홈 디렉터리는 나열되지 않습니다. 새 브랜치의 자체 폴더는 다시 돌아갈 위치가 아니라 새로 체크아웃한 위치이므로 추가되지 않습니다.
경로를 직접 입력할 수도 있습니다. ~/projects 및 /srv/www은(는) 표기된 그대로 동작합니다. projects과(와) 같이 앞에 / 또는 ~이(가) 없는 이름은 새 셸의 cd projects처럼 홈 아래에 있는 폴더이며, 탭하기 전에 Start 위의 줄에 전체 경로(~/projects)가 표시됩니다. ..이(가) 포함된 경로는 거부됩니다. 해당 폴더는 실행을 수행하는 시스템에 이미 존재해야 하며 디렉터리여야 합니다. 폴더가 없으면 아무것도 시작되지 않고 Start 위에 "이 시스템에 … 폴더가 없습니다."라는 알림이 표시됩니다. Collie는 입력하는 중에는 확인하지 않고 Start를 탭할 때만 확인합니다. crew에서는 선택한 시스템이 자체 디스크를 확인합니다.
행을 탭하면 Folder 필드가 채워지고 아무것도 시작되지 않으므로 위의 선택 항목을 변경할 수 있습니다. 행 옆의 별표를 누르면 별표를 누른 순서대로 최대 12개까지 즐겨찾기(으)로 이동합니다. 별표를 다시 탭하면 Recent 맨 위로 다시 이동합니다.
두 목록 아래에 Browse가 있습니다. 탭하면 필드에 있는 폴더의 하위 폴더가 표시되며, 필드가 비어 있으면 홈의 하위 폴더가 표시됩니다. 폴더를 탭하여 이동하면 필드도 이를 따릅니다. 위로 또는 목록 위의 경로 일부를 누르면 뒤로 이동합니다. Git 저장소인 폴더에는 git 배지가 표시됩니다. Recent 행을 탭하는 것처럼 이 폴더 사용를 누르면 필드가 채워집니다.
필드에 ~/src/plektra-와 같이 존재하지 않는 경로가 포함된 경우, Browse는 존재하는 가장 가까운 폴더(~/src)에서 열리고 나머지 이름(plektra-)으로 시작하는 이름만 나열합니다. 따라서 필드에 입력하면 목록이 좁혀집니다. 홈 외부 경로는 "여기에 탐색할 항목이 없습니다"라고 표시됩니다.
Browse는 Files 뷰의 제한 사항에 따라 홈 폴더 아래의 폴더 이름만 읽습니다. 점을 직접 입력하지 않는 한 점으로 시작하는 폴더를 숨기고, .git 또는 Collie의 자체 상태 및 설정 폴더는 절대 나열하지 않으며, 홈 외부로 연결되는 링크를 따르지 않고, 최대 200개의 폴더만 표시합니다. 아무것도 생성하지 않으며 Files와 마찬가지로 페어링된 장치가 필요합니다.
이 목록은 휴대폰이 아니라 시스템에 속합니다. 각 시스템은 COLLIE_STATE_DIR에 의해 변경되지 않는 한 상태 디렉터리인 ~/.local/state/collie/folders.json의 folders.json에 자체 목록을 보관합니다. 사용하는 모든 기기에서 동일한 목록을 볼 수 있으며, 파일은 폴더에서 처음 시작하거나 처음 별표를 누른 후에만 생성됩니다. 동일한 목록이 새 worktree 아래의 기타 폴더을(를) 채우며, 여기서 브랜치의 자체 폴더가 들어갈 폴더를 선택합니다.
crew에서는 각 머신이 자체에 존재하는 폴더를 유지하며, 페이지에는 선택한 머신의 목록이 표시됩니다. 이전 버전의 Collie를 실행하는 머신에는 목록이 없으므로 페이지에 아무것도 표시되지 않습니다. Browse는 선택한 머신의 디스크도 나열하며, 이전 머신에서는 업데이트가 필요하다고 표시됩니다.
시크릿 마스킹
Collie는 창 텍스트의 알려진 비밀 값 형태를 휴대전화에 전달하기 전에 마스킹합니다.
# in your .env; the default is on
COLLIE_REDACT=off| 변수 | 기본값 | 동작 방식 |
|---|---|---|
COLLIE_REDACT | on | 미러, Chat, History, 푸시 알림, Files의 파일 본문, Changes의 diff에서 API 키, JWT, PEM 개인 키, 베어러 토큰 및 password= 값을 마스킹합니다. off 설정 시 있는 그대로 전송합니다. |
설정 파일에서는 [access] redact 항목입니다. 마스크는 가려진 내용의 너비를 유지하므로 미러의 레이아웃이 깨지지 않습니다. 신뢰도가 높은 형태만 감지하며, 제한 사항은 보안에 나와 있습니다.
crew 환경에서는 리드 역시 자체 설정에 따라 멤버가 전송하는 텍스트를 마스킹합니다. 리드와 해당 멤버 둘 다 COLLIE_REDACT=off 설정을 켰을 때만 멤버의 텍스트가 마스킹되지 않은 상태로 휴대전화에 도달합니다.
문제 신고
한 창에서 Collie 문제로 추정되는 원인으로 전송이 3회 연속 실패하면, 회신란 위에 문제 신고를 제안하는 카드가 나타납니다. 설정 → 시스템 → 전송 실패 시 신고 제안 설정으로 해당 기기에서 카드를 끌 수 있습니다(브라우저에 저장되며 기본값은 켜짐). 창 메뉴의 문제 신고 항목과 설정의 동일한 카드에 있는 문제 신고 버튼을 통해서도 해당 시트를 계속 열 수 있습니다.
GitHub에서 열기 또는 보고서 복사 버튼을 누르기 전까지는 스마트폰에서 아무것도 외부로 전송되지 않으며, Collie는 GitHub 토큰을 보유하지 않습니다. 보고서에 포함되는 내용과 전송 전 확인 방법은 문제 해결에 설명되어 있습니다.
다중 세션
기본적으로 단일 Collie 인스턴스가 발견된 모든 Herdr 세션을 처리합니다.
COLLIE_MULTI_SESSION=on(기본값)은 구성 루트 아래의 명명된 모든 Herdr 세션을 검색하여 제공하며, 헤더에서 전환할 수 있습니다. COLLIE_MULTI_SESSION=off을 설정하면 기본 Herdr 세션만 제공합니다. 비공개 또는 샌드박스 세션을 포함하여 검색된 모든 Herdr 세션은 동일한 URL을 통해 접근할 수 있습니다. 보안에서는 이 동작을 주의해야 할 위험 요소로 분류합니다.
사용량 창
모델 옆의 점은 설정 없이 Claude 및 Codex의 5시간 및 7일 한도를 표시합니다.
# turn every source off
COLLIE_ACCOUNT_WINDOWS=0
# turn on opencode and grok too, or name the ones you want
COLLIE_ACCOUNT_WINDOWS=all
COLLIE_ACCOUNT_WINDOWS=claude,codexCollie는 이 머신에서 Claude 로그인 파일을 읽고 Claude Code의 /usage 호출과 동일한 Anthropic 사용량 엔드포인트를 호출합니다. 로그인 정보는 저장되거나 다른 곳으로 전송되지 않습니다. Collie는 해당 하네스의 창이 열려 있는 동안에만 요청하며, 다른 사람이 읽을 수 있는 로그인 파일(0600보다 느슨한 파일) 및 만료된 로그인은 건너뜁니다. Codex는 토큰을 전송하지 않으며 자체 파일을 읽습니다.
| 형식 | 활성화 대상 |
|---|---|
설정되지 않음, 1, on, true, yes | 기본 세트: claude 및 codex |
0, off, false, no | 없음: 로그인 또는 세션 파일을 읽지 않으며 아무것도 요청하지 않음 |
all | 모든 소스: claude, codex, opencode 및 grok |
claude,codex | 대소문자 구분 없이 공백을 포함하여 지정한 하네스 |
Collie가 인식하지 못하는 ID는 경고와 함께 삭제되고 인식된 ID만 켜지므로, 오타로 인해 지정하지 않은 소스가 켜지지 않습니다. 설정 파일에서 [bridge] account_windows는 true 또는 false, 동일한 형식의 문자열, 또는 ["claude", "codex"]와 같은 배열을 허용합니다.
각 소스는 서로 다른 대상을 읽습니다.
- Claude, 기본적으로 활성화되어 있습니다. Collie는
~/.claude/.credentials.json또는$CLAUDE_CONFIG_DIR/.credentials.json를 읽고api.anthropic.com에 요청합니다. - Codex, 기본적으로 활성화되어 있습니다. Collie는 로그인을 읽지 않으며 아무에게도 요청하지 않습니다. ChatGPT 로그인 시 Codex는 창을 자체 세션 파일(
$CODEX_HOME/sessions또는~/.codex/sessions)에 기록하며, Collie는 지난 2시간 동안 생성된 최신 파일의 끝부분을 읽습니다. API 키를 사용하는 Codex에는 표시할 창이 없습니다. - OpenCode Go, 기본적으로 비활성화되어 있습니다. 활성화하면 Collie는 OpenCode 로그인 저장소(
~/.local/share/opencode/auth.json또는$XDG_DATA_HOME아래)의opencode-go항목을 읽고opencode.ai에 요청합니다. Go 항목이 없으면 아무것도 요청하지 않습니다. - Grok, 기본값은 꺼짐. 활성화하면 Collie는
grok login가 유지하는 로그인 정보(~/.grok/auth.json또는$GROK_HOME아래)를 읽고cli-chat-proxy.grok.com에 크레딧을 요청합니다.
참고. OpenCode Go 및 Grok은 다른 도구들이 해당 엔드포인트에 사용하는 형식을 따르며, 아직 실제 계정으로 확인되지 않았습니다. 사용자가 직접 지정하기 전까지 꺼져 있는 이유입니다. pi 및 OMP는 아직 여기에 창을 표시하지 않습니다.
collie doctor에서는 모든 소스를 account-windows 행에 표시합니다. 켜짐 또는 꺼짐 상태, 읽는 파일, 요청 대상 호스트가 표시됩니다. 터미널에는 statusLine 경로가 있습니다.
컨텍스트 점에는 별도의 설정이 필요하지 않습니다. pi, OMP, Codex, OpenCode의 경우, Collie는 세션 로그에서 마지막 턴의 토큰 수를 읽습니다. 모델의 컨텍스트 창 크기는 Codex의 로그나 디스크에 있는 하네스 자체 모델 목록(pi의 경우 models-store.json, OMP의 경우 models.db, OpenCode의 경우 ~/.cache/opencode/models.json)에서 읽습니다. 해당 목록에 이름이 없는 모델에는 컨텍스트 점이 표시되지 않지만, 모델 이름은 계속 표시됩니다. 또한 하네스가 세션 비용을 보고할 경우 점 뒤에 달러 단위의 비용을 태그에 표시합니다. Claude Code는 래핑된 상태 줄을 통해, pi, OMP, OpenCode는 자체 로그를 통해 보고합니다. Codex에는 해당 정보가 없으므로 태그에 비용이 표시되지 않습니다.
다크 모드 / 라이트 모드
참고. Collie는 기본적으로 휴대폰의 화면 모드 설정을 따릅니다.
고정하려면 Settings → Appearance을 열고 테마 카드 아래의 모양 카드를 찾은 다음 System, Light, Dark 중 하나를 선택하십시오. 테마 카드는 색상을 선택하고, 이 카드는 색상의 밝은 쪽 또는 어두운 쪽을 선택합니다. 이 설정은 브리지 대신 브라우저의 기기별에 저장됩니다. 노트북이 OS 설정을 따르는 동안 휴대폰은 Dark 상태를 유지할 수 있습니다. 이 설정은 동일한 기기에서 새로고침하거나 PWA를 다시 설치해도 유지됩니다.
터미널 미러는 의도적으로 다르게 동작합니다
미러는 항상 어두운 배경에 렌더링됩니다. 라이트 모드는 개별 span의 색상을 다시 지정하는 대신 전체 요소를 반전시킵니다.
에이전트는 어두운 배경에 맞춰 조정된 절대 24비트 색상 코드(38;2;r;g;b)를 출력하며, 다운스트림 파서는 이를 안정적으로 재매핑할 수 없습니다. 흰색 위에 직접 렌더링하면 대부분의 에이전트 출력 대비율이 3:1 미만으로 떨어집니다. 반전 처리는 의도된 대비를 보존합니다. 측정값은 ADR 0002에 문서화되어 있습니다.
이 구현에는 두 가지 실제적인 영향이 있습니다.
- 에이전트가 다크 테마를 사용하도록 설정하십시오. Claude Code, codex, opencode, pi의 기본값입니다. 에이전트가 라이트 테마를 사용하면 밝은 배경용 어두운 색상 값을 출력하므로, 두 모드 모두에서 Collie 내 가독성이 떨어집니다. 이는 Collie 자체가 아니라 에이전트 출력에서 비롯된 문제입니다.
- 라이트 모드에서는 Diff 및 강조 표시된 행이 어두운 블록으로 렌더링됩니다. 대비는 그대로 유지되지만 시각적 무게감이 반전됩니다.
참고. iOS에 설치된 라이트 모드에서는 상태 표시줄 텍스트가 흰색으로 유지되어 배경과 겹쳐 보일 수 있습니다. iOS는 웹 앱이 이 값을 동적으로 업데이트하도록 허용하지 않습니다. 이 제한을 피하려면 설치된 PWA 대신 브라우저에서 Collie를 직접 실행하십시오.
Zen mode
참고. Zen 모드는 기본적으로 꺼져 있습니다.
설정 → 기기 → Zen 모드에서 활성화할 수 있습니다(브라우저의 기기별로 저장됨). 활성화하면 Find 및 History 옆의 ⋮ 아래에 있는 창 메뉴에 Zen mode 옵션이 추가됩니다. 이 옵션을 탭하면 헤더, 탭 및 창 스트립, 에이전트 statusline, composer dock 등 모든 Collie UI 요소가 숨겨집니다. 터미널 미러만 계속 표시됩니다. 오른쪽 상단 모서리의 플로팅 버튼이나 Escape 키를 누르면 인터페이스가 복원됩니다.
Zen 모드는 일시적입니다. 설정은 유지되지만 창을 전환하거나 페이지를 새로고침하면 활성 상태가 재설정됩니다. 창은 항상 기본 크롬과 함께 열립니다.
터미널 미러는 Zen 모드에서도 폴링을 계속하며, 대화형 버퍼 요소는 계속 작동합니다. 프롬프트 버튼, "Load older", "Show entire history" 컨트롤은 크롬이 아닌 콘텐츠 스트림의 일부이므로 계속 사용할 수 있습니다.
대형 화면
참고. 태블릿이나 펼친 Fold 기기에서는 창 화면에 여러 창이 나란히 표시됩니다. 세로로 평평하게 든 휴대전화 화면은 변경되지 않습니다.
화면 너비가 600 CSS 픽셀 이상이고 높이가 480 픽셀 이상일 때 창 화면에 해당 레이아웃이 적용됩니다. 가로로 든 휴대전화는 높이가 480 픽셀 미만이므로 휴대전화 레이아웃을 유지합니다. 끄려면 설정 → 모양 → 대형 화면 레이아웃을 열고 끔를 선택하십시오. 기본값인 자동는 화면이 충분히 큰 경우 레이아웃을 켭니다. 선택 항목은 기기별로 저장됩니다.
레이아웃은 세 부분으로 나뉩니다.
- 사이드바. 창 전환기에 표시되는 것과 동일한 창 목록을 나열합니다. 상단 행의 버튼을 누르면 좁은 아이콘 레일 형태로 접히며, 선택 항목은 이 기기에 유지됩니다. 상단 행의 ColliePWA 표시는 홈으로 이동합니다. 하단에는 새 공간 및 Settings가 배치됩니다.
- 창 행. 각 공간은 고유한 행을 유지하며, 해당 행은 가로로 스크롤됩니다. 표시할 창을 사이드바에서 탭하십시오. 길게 누르면(마우스 우클릭) 현재 위치한 창을 대체하는 여기서 열기 또는 해당 창 옆에 추가하는 옆에서 열기가 표시됩니다. 창을 행 안으로 드래그할 수도 있습니다. 보기에서 제거를 누르면 행에서 창이 제거됩니다. 에이전트는 계속 실행됩니다.
- 공간 헤더. 공간 이름, 탭, 새 탭을 위한 +가 포함됩니다. 휴대전화에서와 마찬가지로 탭을 길게 누르면(마우스 우클릭) 이름 변경하거나 탭 닫기할 수 있습니다. 작업 중인 탭을 닫으면 옆에 있는 탭의 창으로 이동합니다. 두 개의 버튼을 누르거나 세로로 스와이프하면 위 또는 아래 공간으로 이동합니다.
각 창의 너비는 행의 1/2, 4/5 또는 전체 중 하나입니다. 창 너비는 360 픽셀보다 좁아질 수 없으므로, 더 좁아지게 만드는 너비는 제공되지 않습니다. 행에 해당 크기의 창 두 개를 표시할 수 없는 경우 모든 창의 너비는 전체가 되며 컨트롤은 숨겨집니다. 스크롤을 멈추면 행이 창의 시작 위치에 맞춰 정렬되며, 옆으로 스크롤해도 브라우저의 이전 페이지로 이동하지 않습니다. 행은 항상 창 추가로 끝납니다. 여기에는 행에 표시되지 않은 이 공간의 창 목록이 각각 여기서 열기와 함께 표시됩니다(해당 창이 행의 마지막 창이 됨). 또한 해당 창의 머신과 폴더에서 New 페이지를 열고 에이전트를 현재 창 옆에 이 공간의 새 탭으로 추가하는 이 공간에 새 에이전트 생성, 그리고 새 공간에 새 에이전트 생성도 제공합니다.
폴더블 기기를 노트북처럼 들고 사용하는 경우(아래 참조)를 제외하고 각 창에는 고유한 벨트가 있습니다. 작업 중인 창에는 프레임과 응답 상자가 표시됩니다. 다른 창의 벨트를 탭하면 해당 창에 동작이 수행되고 그곳으로 이동합니다. 동작을 수행하지 않고 이동하려면 창을 탭하십시오.
레이아웃은 이 기기에만 저장되며, 뒤로 가기 및 공유 링크는 이전과 동일하게 작동합니다.
폴더블 기기. 반쯤 펼친 폴더블 기기에서 Chrome 및 Samsung Internet은 접히는 부분을 기준으로 화면을 분할합니다. 노트북처럼 들고 있을 경우 대화 내용은 접히는 부분 위쪽에 유지되고, 벨트와 더 긴 응답 상자는 아래쪽에 배치됩니다. 접히는 부분 아래쪽에는 작업 중인 창만 벨트를 유지합니다. 다른 창에는 Chat만 표시됩니다. 이 분할은 너비와 관계없이 적용되므로 반쯤 펼친 플립형 휴대전화에도 적용됩니다. 키보드가 올라와 있는 동안에는 레이아웃이 평평한 상태로 돌아갑니다. 책처럼 들고 있을 경우 너비 600 픽셀부터 분할이 적용됩니다. 창이 두 개인 경우 각 절반에 창이 하나씩 표시되고 사이드바는 레일 형태로 변경됩니다. 창이 하나인 경우 사이드바가 한쪽 절반에 열려 있고 창이 다른 쪽 절반을 채웁니다. 다른 브라우저에서는 평평한 레이아웃만 표시됩니다.
창 탐색
스마트폰 및 대화면 레이아웃에서 제스처를 통해 창과 스페이스 사이를 이동합니다. 좌우로 움직이면 전환기 순서에 따라 해당 스페이스의 이전 및 다음 창으로 이동합니다. 상하로 움직이면 이전 및 다음 스페이스로 이동합니다. 첫 번째 또는 마지막 창이나 스페이스에서는 이동해도 그대로 유지됩니다. 설정 → 모양 → 창 탐색에서 방식을 선택하십시오. 변경 사항은 다음에 창을 열 때 적용됩니다.
| 방식 | 동작 방식 |
|---|---|
| 두 손가락 | 기본값입니다. 채팅 또는 터미널에 한 손가락을 가만히 댄 상태에서 두 번째 손가락을 화면에 댑니다. 스마트폰이 진동하고 현재 위치를 나타내는 상자가 표시됩니다. 두 번째 손가락으로 쓸어넘깁니다. 짧게 쓸어넘기면 한 단계 이동하고, 길게 쓸어넘기면 더 많이 이동합니다. 두 번째 손가락을 뗀 다음 첫 번째 손가락을 떼면 해당 위치로 이동합니다. |
| 조이스틱 | 벨트 바로 위의 핸들을 누른 채 같은 손가락을 드래그합니다. 다른 창 위에서 손을 떼면 해당 창으로 이동하고, 시작 위치로 돌아와서 손을 떼면 그대로 유지됩니다. 스마트폰에서는 위로 빠르게 드래그하면 창 전환기가 열립니다. |
| 끔 | 제스처를 사용하지 않습니다. 창 전환기를 통해서는 여전히 이동할 수 있으며, 대화면에서는 사이드바와 스페이스 헤더로도 이동할 수 있습니다. |
상자에는 스페이스 지도 위에 이동할 대상 창의 이름과 상태, 소속 스페이스 및 스페이스 내 위치가 표시됩니다. 쓸어넘기지 않고 첫 번째 손가락을 떼거나, 두 번째 손가락을 댄 상태에서 첫 번째 손가락을 떼거나, 세 번째 손가락을 대면 현재 위치에 그대로 머뭅니다. 손가락을 뗄 때 손가락 아래의 항목은 탭되지 않습니다. 기기에서 제스처가 처음 시작될 때, 벨트 위의 짧은 안내 메시지에 동작 방식과 비활성화 위치가 표시됩니다.
이 제스처는 페이지 자체의 터치 동작을 유지합니다. 손가락 하나만 누르고 있으면 새로운 동작이 수행되지 않으며, 길게 누르면 여전히 텍스트가 선택되고 메뉴가 열립니다. 첫 번째 터치 후 300ms 이내에 닿는 두 번째 손가락은 핀치로 간주되므로 핀치 줌이 계속 작동합니다. 스크롤 중이던 손가락이나 스마트폰 자체 뒤로 가기 제스처가 있는 화면 좌우 가장자리에서 시작된 손가락은 제스처를 시작하지 않습니다. 두 번째 손가락이 닿는 순간부터 첫 번째 손가락을 뗄 때까지 페이지에서 선택 및 스크롤이 보류되며, 이전에 선택한 영역은 해제됩니다. 창 탐색은 터치 전용이며 마우스로는 동작하지 않습니다. TalkBack이 켜져 있으면 TalkBack이 두 손가락 쓸어넘기기를 직접 사용하므로 제스처가 동작하지 않아야 합니다. 창 전환기로는 계속 이동할 수 있습니다.
채팅 보기
1.17.0부터 에이전트 창의 기본 뷰는 참고. Chat입니다. 터미널은 한 번만 탭하면 전환됩니다.
에이전트 창은 채팅에서 열립니다. Chat은 터미널 대신 에이전트 자체의 대화를 렌더링합니다. 사용자의 턴, 에이전트의 응답, 접힌 블록 뒤에 숨겨진 추론 과정, 단계별 카드가 표시됩니다. 컴포저, 벨트, 창 메뉴는 기존 위치에 그대로 유지됩니다. 터미널을 보려면 창의 ⋮ 메뉴를 열고 Terminal view을 탭하십시오. 이 선택 사항은 브라우저에 저장되어 기기 전체에 적용되며, 터미널을 이미 선택한 기기는 해당 설정을 유지합니다. 같은 메뉴의 채팅 보기을 누르면 다시 전환됩니다.
Claude Code가 작업 중일 때 메시지를 큐에 넣으면 Chat의 Waiting to send 카드에 표시되며, 카드의 Send now 버튼을 누르면 대기 중인 큐 전체가 실행 중인 턴으로 즉시 전송됩니다. 해당 버튼이 해당 에이전트에서 이를 위해 정의한 키인 Ctrl+Enter를 누르기 때문에 Claude Code에서만 이 기능을 제공합니다. 읽기 전용 기기와 저장된 사본에서는 이 버튼이 숨겨집니다.
OMP와 pi를 포함한 대부분의 다른 에이전트는 턴이 끝날 때까지 대기열에 있는 메시지에 대해 로그에 아무것도 기록하지 않습니다. 이 에이전트들의 경우, 에이전트 로그에 각 메시지가 프롬프트로 나타날 때까지 Chat은 Collie 자체가 대기열에 넣은 메시지를 동일한 Waiting to send 카드에 그립니다. 해당 카드에는 버튼이 없습니다. Collie는 에이전트의 대기열에서 메시지를 꺼낼 수 없으므로 취소 버튼이 없습니다. 메시지를 취소하려면 턴을 중단하십시오.
대기열에 있던 메시지가 어디로 이동했는지 Collie가 더 이상 확인할 수 없으면, 카드가 사라지는 대신 확인되지 않음 문구가 표시됩니다. 이는 에이전트가 빈 입력란 상태로 연속 두 번 대기하거나 실행 중인 턴 없이 30분이 지난 경우 발생합니다. 해당 카드의 취소 버튼을 누르면 카드가 제거되고 아무것도 전송되지 않습니다.
디스플레이 기어에는 기본적으로 꺼져 있는 스트레치텍스트 회신 스위치가 있습니다. 이 스위치를 켜면 채팅, 전체 회신 카드 및 기록에 cc-stretch 플러그인으로 작성된 회신이 축약형으로 표시되며, 구문을 탭하면 해당 내용이 열립니다. 막대가 없는 {{name}}은(는) name(으)로 표시됩니다.
Chat에서 한 가지 기능이 미완성된 것으로 알려져 있습니다. Hermes는 예를 들어 압축을 수행할 때 Collie가 턴을 읽은 후 로그에서 해당 턴을 제거할 수 있습니다. 그러면 Chat은 세션을 다시 읽을 때까지 해당 턴을 계속 표시합니다. 터미널에는 이러한 문제가 발생하지 않습니다.
채팅은 화면이 아니라 에이전트의 세션 로그를 읽습니다. 즉, Collie가 창에서 실행 중인 세션을 알고 에이전트가 멀티플렉서에 이를 알려야만 창에 채팅이 표시됩니다. 창 자체는 이를 알아낼 수 없습니다.
| 멀티플렉서 | 세션을 보고하는 주체 | 채팅 지원 대상 |
|---|---|---|
| Herdr | 해당 에이전트와 일치하는 Herdr 연동. herdr integration install <agent> 명령어로 한 번 설치한 후(예: claude, codex, opencode, pi, omp, grok, hermes) 에이전트를 재시작하십시오 | 연동이 설치되어 있고 Collie가 읽을 수 있는 세션 로그가 있는 모든 에이전트 |
| tmux, zellij, Tern (experimental) | Collie의 비콘 훅 | collie hooks install claude 이후 Claude Code에만 해당 |
| tuios | tuios 데몬 | 데몬이 보고하는 에이전트 |
OpenClaw는 Chat을 위해 Herdr 연동이 필요하지 않습니다. Herdr는 OpenClaw 세션을 전달하지 않으므로, Collie는 openclaw tui(agent main (main) | session work | …)의 바닥글에서 세션 이름을 읽어 $OPENCLAW_STATE_DIR 또는 ~/.openclaw 아래에 있는 해당 에이전트의 세션 데이터베이스를 읽기 전용으로 엽니다. 상태 폴더가 다른 곳에 있다면 openclaw_root을(를) 설정하십시오. 창은 자신을 Herdr에 에이전트 openclaw(으)로 보고해야 합니다. Collie는 OpenClaw의 설정 파일이나 게이트웨이 토큰을 절대 읽지 않습니다.
Kiro 역시 Herdr 연동이 필요하지 않습니다. Herdr는 kiro-cli 창 에이전트의 이름을 kiro(으)로 지정하며, Collie는 실행 중인 Kiro가 해당 창에 유지하는 잠금을 통해 창의 세션을 찾습니다. Collie는 --v3 또는 --agent-engine v3(으)로 시작되었거나 Kiro 자체 설정에서 엔진으로 V3이 설정된 Kiro V3 세션을 읽습니다. V1 또는 V2 세션에는 채팅이나 기록이 없습니다. Kiro가 세션을 다른 위치에 보관하는 경우 kiro_root을(를) 설정하십시오.
herdr integration status 명령어로 설치된 연동을 확인할 수 있습니다. 훅은 에이전트가 시작될 때 읽히므로, 설치 시점에 이미 실행 중이던 에이전트는 재시작해야 합니다. Oh My Pi는 pi가 아닌 omp 연동입니다. 두 에이전트는 서로 다른 두 개의 훅을 사용하며 하나의 로그 형식을 공유합니다.
새 에이전트 창은 읽을 내용이 생성되기 전에도 "Send a message to start"라는 한 줄과 함께 Chat을 즉시 표시합니다. Codex는 첫 번째 메시지 이후에만 세션을 보고하고, pi는 첫 번째 응답 이후에만 로그를 기록하므로 둘 다 이러한 방식으로 시작됩니다. 대화가 생성되는 즉시 화면에 나타납니다.
Chat이 표시할 수 없는 상황이 발생하면 창은 터미널로 폴백합니다. 읽을 내용이 생성되기 전에 에이전트가 질문을 던지거나, 첫 번째 턴이 끝났는데도 여전히 세션이 없거나 읽을 로그 파일이 없는 경우입니다. 그러면 터미널에 누락된 항목을 지정하는 한 줄이 표시되고 ⋮ 행에 그 이유가 나타납니다. 아무것도 읽을 수 없고 다른 징후도 없이 1분 동안 실행되는 첫 번째 턴 역시 폴백됩니다. 세션 없이 처음 열었을 때 이미 작업 중이던 창은 터미널을 즉시 표시합니다. 나중에 세션이나 로그가 도착하면 창은 다시 Chat으로 돌아갑니다. 누락된 훅과 누락된 기능을 구분할 수 있도록 Chat은 이 행을 숨기지 않습니다. collie doctor은 해당 창들을 agent-sessions 아래에 나열하고 각 창을 수정하는 연동 라인(integration-<agent>)을 명시합니다. 문제 해결 페이지의 창에 채팅 또는 기록이 없음 아래에 세부 절차가 있습니다.
오프라인 읽기
bridge에 연결할 수 없는 경우 스마트폰은 마지막으로 저장된 사본을 표시하며, 읽을 수는 있지만 작업을 실행할 수는 없습니다.
스마트폰은 각 창에 대해 마지막으로 확인한 터미널 텍스트와 Chat이 렌더링한 최신 Chat 턴 등 두 가지를 유지합니다. 원시 터미널 화면을 Chat으로 유지하지는 않습니다. Collie를 열었을 때 약 1.5초 이내에 bridge가 응답하지 않으면 스마트폰은 이 저장된 사본을 즉시 렌더링하고, bridge가 응답하면 실시간 데이터로 교체합니다.
저장된 사본은 실시간 화면과 다르게 표시됩니다.
- 에이전트 목록이 흐리게 표시되고, 각 상태는 과거형("was working", "needed you")으로 표시되며, 헤더에는 as of 및 저장된 시간이 표시됩니다.
- Chat 창에는 "Saved copy from"과 시간이 표시됩니다. 이전 턴은 여전히 bridge에 보관되어 있습니다.
- 프롬프트 버튼, 카드, 전송 버튼이 비활성화됩니다. 저장된 사본을 탭해도 에이전트에 도달할 수 없습니다.
연결 표시줄에 세 가지 원인 중 하나가 나타납니다.
| 표시줄 | 원인 | 스마트폰 표시 내용 |
|---|---|---|
| 오프라인 상태입니다 | 스마트폰에 네트워크가 없다고 표시됨 | 저장된 사본 및 해당 시간 |
| bridge에 연결할 수 없습니다. 연결 상태나 Tailscale을 확인하십시오. | 실패한 기타 모든 읽기 작업 | 저장된 사본 및 해당 시간 |
| 페어링 화면 | bridge가 이 기기를 거부함: 페어링되지 않음, 해지됨 또는 만료됨 | 저장된 내용 없음. 거부되면 사본이 삭제됩니다. |
Tailscale과 같은 VPN은 비행기 탑승 모드에서도 휴대전화의 네트워크 플래그를 켜진 상태로 유지하므로, 표시줄이 "네트워크 없음"과 "브리지가 중단됨"을 항상 구분하지는 못합니다. 이 경우 브리지가 응답하지 않는다고만 표시합니다.
앱이 열려 있는 동안에는 응답을 받지 못한 첫 번째 폴링에서 표시줄과 저장된 복사본이 나타납니다. 폴링은 최대 6초 동안 대기하며, 이는 브리지가 멀티플렉서를 대기하는 시간보다 1초 더 깁니다. 서버 오류(5xx)는 2회 연속 발생할 때 적용됩니다. 화면의 내용은 그대로 유지되며, 첫 번째 실시간 응답이 수신되면 실시간 뷰가 다시 표시됩니다.
앱으로 돌아온 직후에는 응답을 받지 못한 첫 번째 폴링만으로 판단하지 않습니다. Tailscale 링크가 복구되는 데 잠시 시간이 걸릴 수 있으므로, 휴대전화는 0.5초 후에 다시 요청하고 해당 폴링 역시 응답을 받지 못할 때만 표시줄을 표시합니다.
설정 → 기기의 이 휴대전화에 채팅 유지 설정은 Chat 턴을 휴대전화에 유지할 기간을 지정합니다.
| 값 | 기능 |
|---|---|
| 끔 | Chat 턴을 유지하지 않으며 이미 보관된 항목을 삭제합니다. |
| 1일 | 기본값 |
| 7일 | 일주일 동안 보관합니다. |
터미널 텍스트는 자체적인 24시간의 유효 기간을 가지며, 이 설정으로 변경되지 않습니다. 터미널 뷰에서 오프라인 복사본은 해당 터미널 텍스트뿐입니다.
참고. 휴대전화는 브리지가 이미 마스킹한 텍스트만 보관하며, 창에서 비밀번호를 요구하는 동안에는 해당 창의 복사본을 삭제합니다. 전화기가 유지하는 항목에 모든 항목, 크기 제한 및 유효 기간이 나열되어 있습니다.
Changes
파일 화면는 Changes 세그먼트 아래에 에이전트가 작업 공간의 git 저장소에서 변경한 내용을 표시합니다. 설정 → 기기 → Changes의 기기별 설정 두 개가 저장소를 탐색할 범위를 결정합니다.
| 설정 | 기본값 | 기능 |
|---|---|---|
| 이 폴더 내에서 저장소 찾기 | 켜짐 | 상위 저장소가 무시하는 저장소를 포함하여 워크스페이스 폴더 아래 폴더에 있는 저장소도 나열합니다. |
| 탐색할 깊이 | 2 | 워크스페이스 폴더 아래로 검색을 진행할 폴더 단계 수(1~4) |
검색 방식에 대한 자세한 내용은 대상 폴더 및 저장소을 참고하십시오.
Language
Collie 인터페이스는 12개 언어로 제공됩니다. 설정 → 모양 → 언어에서 설정하십시오.
- English
- Deutsch
- Español
- 한국어
- 日本語
- 中文
- Русский
- Italiano
- Français
- Português
- Türkçe
선택 사항은 기기별로 브라우저에 로컬로 저장됩니다. 터미널 미러는 번역되지 않은 상태로 유지됩니다. 에이전트의 원시 출력을 표시하며, 빠른 응답, 메뉴 레이블, 키 캡은 기본 화면이나 키보드 이름과 일치합니다.
알림 제목도 이 설정을 따릅니다. 한국어로 설정된 기기에는 "claude needs you"가 "claude 입력 대기"로 수신됩니다. 기기는 다음에 Collie를 열 때 새 설정을 적용하며, 그전까지는 제목이 이전 언어로 유지됩니다. 제목 아래의 본문은 창의 고유 이름과 위치이며 번역되지 않습니다(Web Push).