원문 캡처 · github.com
원문 캡처 · github.com

Cordane은 팀의 코딩 에이전트를 직접 소유한 컴퓨터에서 실행하고 어디서든 접속하도록 하는 자체 호스팅 제어판이다. Claude Code 같은 에이전트와 터미널, 개발 서버, 티켓을 다루며, 워커가 아웃바운드 연결 하나로 허브에 접속해 기업 NAT나 가정용 라우터 뒤의 컴퓨터에도 브라우저로 접근할 수 있다. 인바운드 포트, VPN, SSH 설정은 필요하지 않다.

Cordane 웹사이트 · 문서 · 로드맵 · 보안 안내

Cordane은 자체 호스팅 방식으로 모든 기능을 영구 무료로 제공한다고 설명한다. 컴퓨터에서 cordane up 한 번으로 시험하거나, 소형 VPS에 컨테이너 두 개를 설치해 팀에서 운영할 수 있다. 허브를 대신 운영하는 관리형 클라우드도 제공하며, 요금은 가격 안내에서 확인할 수 있다.

실제 실행 영상 전체 보기(3분 36초) · 기능별 짧은 안내 영상 30편 이상

터미널과 티켓으로 에이전트 작업 관리

Cordane은 컴퓨터에서 실제로 실행되는 터미널을 브라우저 탭으로 제공한다. 사용자의 로그인 셸과 설정 파일, 트루 컬러를 그대로 쓰며, 노트북을 닫거나 네트워크가 끊기거나 허브가 재시작돼도 터미널 세션이 유지된다. 휴대전화를 포함해 브라우저에서 다시 접속할 수 있고, 휴대전화에는 Ctrl·Esc·방향키를 위한 터치 키 바가 있다. 두 사람이 같은 활성 터미널에 동시에 접속할 수도 있다.

tmux 사용자라면 세션은 스페이스, 창은 나란히 놓인 터미널로 대응한다. 스페이스 정의에는 저장된 배치, 작업 디렉터리, 창마다 실행할 명령이 포함되며 필요할 때 환경을 다시 띄울 수 있다. 다만 이는 tmux 키 바인딩이나 복사 모드를 제공하는 완전한 대체품이 아니라 대안이다.

scp 없이 파일도 옮길 수 있다. 스페이스의 파일 메뉴에서 컴퓨터를 탐색해 파일이나 폴더 전체를 내려받고, 동영상·PDF·이미지·로그는 탭에서 열 수 있다. 파일을 끌어다 놓아 업로드할 수도 있다. 터미널에 cordane get report.pdf를 입력하면 다른 사용자에게 해당 파일을 내려받도록 제공한다. 별도로 공개하지 않는 한 파일은 소유자만 볼 수 있다.

칸반 보드에 티켓을 올리면 Cordane이 Git 워크트리를 만들고, 별도 포트에서 개발 서버를 시작한 뒤 코딩 에이전트에 작업을 맡긴다. 팀 전체가 진행 상황을 실시간으로 볼 수 있다. 티켓 시작 시각을 서버 시간이 아닌 사용자의 시간대로 지정할 수도 있다. 예를 들어 오전 7시로 설정하면 밤사이 작업이 실행돼 사용자가 출근했을 때 브랜치와 변경 사항을 확인할 수 있다.

변경 사항(diff)과 통과 표시를 검토한 뒤 병합할 수 있으며, 휴대전화에서도 검토와 병합이 가능하다. 수정이 필요하면 고칠 내용을 적고 변경 사항의 줄을 눌러 메모를 연결한 뒤 작업을 되돌려 보낸다. 스페이스가 열려 있으면 티켓에서 에이전트가 사용하던 같은 세션으로 보낼 수 있고, 같은 브랜치에서 백그라운드 작업으로 실행할 수도 있다.

프로젝트별로 실패한 검사를 에이전트에 자동 전달하도록 설정할 수 있다. 실패한 명령과 출력 마지막 부분을 보내며, 재시도 횟수는 사용자가 정한다. 이 기능은 기본적으로 꺼져 있고, 재시도 한도에 도달하면 티켓은 검토를 기다린다. GitHub에서 검토하는 경우에는 PR의 ‘변경 요청’도 같은 방식의 작업 회차로 처리한다. 이때 워커의 gh를 사용하며 저장소 협력자의 요청만 읽는다. 에이전트가 실행을 마칠 때 .cordane/outputs/에 남긴 기능 화면 캡처나 보고서 같은 파일은 티켓에 첨부된다.

허브는 모든 워커에 스킬을 설치한다. Claude Code, Codex, opencode, pi는 세션을 시작할 때 이를 읽으므로 별도로 안내하지 않아도 두 통신 경로를 사용할 수 있다. 모든 실행에는 정확한 프롬프트와 변경 사항, 실행한 검사 등 전체 감사 기록이 남는다.

Cordane은 기존 이슈 추적기를 대체하는 프로젝트 관리 도구가 아니라 에이전트 작업을 실행하는 계층이라고 설명한다. Sentry, Jira, GitHub Issues, Linear의 티켓은 이슈 URL을 붙여 넣거나 필터를 설정해 가져올 수 있다. Cordane 티켓이 완료되면 원본 이슈도 닫힌다.

티켓은 다른 티켓에 종속되도록 설정할 수 있다. 한 번의 작업으로 끝내기 어려운 계획은 하위 티켓으로 나눠 차례로 실행할 수 있다. 어떤 에이전트가 적합한지 모를 때는 같은 티켓을 두세 에이전트에 동시에 맡길 수 있다. 각 에이전트는 별도의 워크트리와 브랜치에서 작업하며, 변경 사항과 검사 결과를 나란히 비교해 하나를 선택한다. 워커가 저장소 파일을 읽어 매니페스트를 감지하고 설정·시작·검사 훅을 제안하므로 새 프로젝트를 빈 양식에서 시작하지 않아도 된다.

에이전트가 권한 요청에서 멈추거나 실행에 실패했을 때, 계획 승인이 필요할 때, 작업이 검토 단계에 들어갔을 때 Cordane은 해당 에이전트의 담당자에게 알린다. 알림은 브라우저, 웹훅(ntfy·Slack·Discord용 설정 제공), 허브에 SMTP가 설정된 경우 이메일로 받을 수 있다. 에이전트는 실행 중에도 cordane mcp를 통해 티켓을 읽고 댓글을 달거나 후속 티켓을 만들고 파일을 첨부하거나 사람의 확인을 요청할 수 있다.

헤드리스 실행마다 에이전트 CLI가 보고하는 사용량을 기록한다. 토큰 수와 Claude Code·opencode의 비용이 포함된다. 프로젝트별 인사이트 페이지에서는 에이전트별 실행 횟수, 성공률, 소요 시간과 비용을 확인할 수 있다.

에이전트와 노트북에서 터미널 제어

스페이스에서 같은 cordane mcp 서버를 쓰면 에이전트가 해당 스페이스의 다른 터미널을 조작할 수 있다. 명령을 실행해 출력과 종료 코드를 받고, 키 입력을 보내거나 출력이 나올 때까지 기다리며, 다른 창의 에이전트에 작업을 넘길 수 있다. 에이전트는 자신이 속한 스페이스에만 접근한다. 기본 설정에서 Sentry·Jira·Linear·GitHub 티켓을 가져와 작업하는 에이전트나 해당 티켓을 읽은 에이전트는 이웃 항목만 읽을 수 있다.

개인 API 토큰을 만들면 노트북의 MCP 클라이언트에서도 기능을 쓸 수 있다. Claude Code나 Cursor는 https://<hub>/api/v1/mcp로 연결하고, Claude Desktop은 로그인해 연결할 수 있다. 이를 통해 스페이스를 시작·중지하고 배치를 정의하며 워커 앱을 실행하고 스페이스를 공유하거나 터미널을 조작한다. 관리자는 토큰을 비활성화하거나 관리자에게만 허용할 수 있다. 터미널 입력은 감사 로그에 기록된다.

앱은 터널 없이 미리보기 링크로 공유할 수 있다. 워커의 앱은 고정된 하위 도메인(myapp--worker.your-domain)에서 워커의 아웃바운드 연결을 통해 제공된다. ngrok이나 바뀌는 호스트 이름, 사용자별 요금은 필요하지 않다. 인증은 기본으로 켜져 있으며, 앱을 공개로 바꾸면 계정이 없는 사람도 접속할 수 있다. 티켓 미리보기는 팀 전용이다. 다만 Cordane은 웹훅을 받기 위한 인바운드 터널이 아니라 미리보기를 공유하는 기능이다.

팀은 GitHub 로그인과 관리자가 관리하는 허용 목록을 사용하고, 프로젝트를 팀과 공유할 수 있다. 각 팀원은 자신이 소유한 비공개 워커에서 작업한다. 허브는 5달러짜리 VPS에서 직접 호스팅하거나 관리형 클라우드(your-team.cordane.app)로 운영할 수 있으며, 어느 방식이든 워커는 사용자의 하드웨어에 남는다. Cordane은 코드와 비밀 정보, 컴퓨팅 자원이 사용자가 관리하는 컴퓨터 밖으로 나가지 않는다고 설명한다.

영상과 구현 방식

Cordane은 기능별 짧은 영상이 연출된 장면이 아니라며, 촬영 당일 모델이 만들어 낸 결과물을 보여준다고 설명한다.

주제별 영상은 @cordanehq에서 볼 수 있다. 내부 작동 방식은 아웃바운드 WebSocket 하나로 연결하기에서 설명한다.

Cordane은 Go 바이너리 하나를 허브 역할의 cordane server와 워커 역할의 cordane worker로 나눠 쓴다. 워커는 WebSocket으로 허브에 접속하며, 허브가 워커에 먼저 연결하지 않는다. 따라서 포트 전달이나 인바운드 방화벽 규칙이 필요하지 않다. 허브 상태는 SQLite에 저장한다. 데이터베이스 서버 없이 백업할 수 있고, 내장 Litestream 복제로 S3 호환 버킷에 저장하거나 쉽게 내보낼 수 있다.

컴퓨터를 워커로 등록하는 명령은 다음과 같다.

text
cordane worker join https://your-team.cordane.app --token crdjt_…

내 컴퓨터에서 시험하기

서버나 DNS, GitHub 앱 없이 한 명령으로 시작할 수 있다. 설치 스크립트는 Linux와 macOS용 cordane 바이너리를 설치한다.

sh
curl -fsSL https://cordane.ai/install.sh | sh # the `cordane` binary (Linux, macOS)
cordane up

두 단계를 한 번에 실행하는 방법도 있다. ~/.local/bin이 아직 PATH에 없는 경우에도 사용할 수 있다.

sh
curl -fsSL https://cordane.ai/install.sh | sh -s up

cordane up은 이 컴퓨터를 워커로 삼아 localhost에서 허브를 시작하고, 로그인한 다음 브라우저에서 보드를 연다. 단일 사용자용 허브는 루프백 주소에서만 연결을 받는다. 로그인 링크는 터미널에서 확인할 수 있으며 cordane login을 실행하면 새 링크를 출력한다. 앱 미리보기는 Chrome, Firefox, Edge에서 http://<app>--<worker>.localhost:8080으로 연다. Safari에서는 --path-previews를 사용한다.

데이터는 모두 ~/.cordane-local에 저장되므로 이 디렉터리를 삭제하면 처음부터 다시 시작할 수 있다. 명령을 실행하는 동안 터미널과 에이전트가 작동하며 Ctrl-C를 누르면 멈춘다. cordane up --install-service를 쓰면 백그라운드에서 계속 실행된다. 로그인 시 시작하는 systemd 사용자 서비스나 launchd 에이전트로 설치한다.

휴대전화에서 접속하거나 팀과 함께 쓰거나 항상 실행하려면 허브를 자체 호스팅하거나 관리형 클라우드를 이용한다. 어느 방식이든 사용자의 컴퓨터는 워커로 남는다.

허브 자체 호스팅

소형 VPS 한 대에서 허브와 자동 TLS를 제공하는 Caddy, 두 컨테이너를 실행한다. 이미지는 GHCR에서 공개되므로 Docker 외에 별도 소프트웨어를 설치할 필요가 없다. 먼저 허브의 호스트 이름(예: cordane.example.com)을 VPS 주소로 가리키는 DNS A 레코드를 설정한다.

sh
git clone https://github.com/cordane/cordane.git
cd cordane/deploy
cp .env.example .env # fill in the values below, then:
docker compose up -d
docker compose logs -f # both containers; Ctrl-C once the hub is listening

.env에 다섯 개 값을 설정하면 실행할 수 있다. 허브 URL, 비밀 키, 로그인에 쓸 GitHub OAuth 앱의 ID와 비밀 키가 필요하다.

  • EXTERNAL_URL / CONTROL_HOST: 허브 URL과 호스트 이름
  • CORDANE_SECRET_KEY: openssl rand -base64 32로 만들며 백업해야 한다.
  • CORDANE_GITHUB_CLIENT_ID/SECRET: GitHub OAuth 앱의 ID와 비밀 키다. 앱 만들기 화면에서 홈페이지는 EXTERNAL_URL, 콜백 주소는 ${EXTERNAL_URL}/api/v1/auth/github/callback으로 설정한 뒤 새 클라이언트 비밀 키를 생성한다.

이 간단한 모드는 호스트 이름 하나와 일반 인증서를 사용하며, 미리보기 주소는 /w/{worker}/{app}/ 형태다. 와일드카드 하위 도메인 미리보기에는 DNS API 토큰이 필요하다. 전환에는 .env에서 세 줄을 바꾸면 된다. 자세한 내용은 deploy/README.md를 참고한다.

EXTERNAL_URL을 열어 GitHub로 로그인한다. 가장 먼저 로그인한 계정이 관리자가 되므로 바로 로그인해야 한다. 이후 워커 페이지에서 토큰을 받아 컴퓨터를 연결한다.

sh
curl -fsSL https://<your-hub>/install.sh | sh # installs the `cordane` binary
cordane worker join https://<your-hub> --token crdjt_… # token from the hub's Workers page

join은 컴퓨터를 등록하고 워커를 계속 실행한다. 로그아웃한 뒤에도 실행하려면 systemd나 launchd에서 cordane worker run을 실행한다. 설정은 워커를 계속 실행하는 방법에 안내돼 있다.

첫 에이전트 실행

  1. 워커에 사용할 에이전트를 설치하고 일반 터미널에서 한 번 로그인한다. 예를 들면 Claude Code의 claude, codex, opencode, pi가 있다. Cordane은 컴퓨터에 설치된 에이전트를 제어하며 자체 로그인을 제공하지 않는다.
  2. 새 프로젝트를 만들 때 워커와 저장소를 선택한다. 저장소는 복제할 수 있는 SSH·HTTPS URL이거나 워커에 이미 체크아웃된 저장소여야 한다. 구현 작업을 하려면 ‘에이전트의 명령 실행 허용’을 켠다. 이 설정은 기본적으로 꺼져 있다. 백그라운드(헤드리스) 구현에서는 에이전트가 권한 확인 없이 실행되기 때문이다.
  3. 새 티켓에서 ▶ Plan을 선택하면 티켓의 스페이스가 열리고 에이전트가 작업한다. 계획이 등록되면 ✓ Approve를 누른 뒤 Implement를 선택한다. 이 버튼은 스페이스에서 에이전트를 실시간으로 제어하므로 필요한 권한을 물으면 해당 창에서 답한다. 또는 프로젝트의 에이전트 명령에 claude --dangerously-skip-permissions처럼 권한 확인을 건너뛰는 명령을 설정할 수 있다. 작업이 끝나면 티켓은 변경 사항과 함께 검토 단계로 이동하며, 워커에 gh가 있으면 PR도 생성된다.

S3 호환 버킷 백업과 와일드카드 모드 설정은 deploy/README.md에 안내돼 있다.

라이선스 키는 필요하지 않다. Community 등급은 워커 1개, 프로젝트 1개, 사용자 2명, 동시 에이전트 실행 3회를 제공하며 모든 기능을 영구 무료로 쓸 수 있다. 라이선스 확인 요청도 보내지 않는다. 키가 없는 허브가 Cordane에 보내는 유일한 요청은 업데이트 확인이며, 전송 정보는 릴리스 채널 이름뿐이다. CORDANE_UPDATE_CHECK=off로 업데이트 확인을 끌 수 있다.

유료 라이선스 키는 사용량 제한을 높이며, 유예 기간 동안 오프라인에서도 계속 작동한다. 따라서 Cordane 서비스가 중단돼도 작업을 막지 않는다고 설명한다. 자세한 내용은 가격 안내를 참고한다.

문제 제보와 라이선스

Cordane은 공개 저장소의 Issues에서 버그 제보와 기능 요청을 받는다. 보안 관련 사항은 SECURITY.md를 참고한다.

저장소에 포함된 문서와 배포 설정은 MIT 라이선스로 제공되며, 자유롭게 복사·포크·수정할 수 있다(LICENSE). 다만 배포에 사용되는 ghcr.io/cordane/cordane과 ghcr.io/cordane/caddy 컨테이너 이미지는 Sitedity SRL이 소유한 독점 소프트웨어다. Community 등급에서는 무료로 실행할 수 있으며, 그 밖의 경우에는 이용 약관이 적용된다. 라이선스 구분은 NOTICE에 설명돼 있다.