OpenAB Connect + Remote
Mac과 iPhone · 중국어, 광둥어, 영어, 일본어, 한국어 음성
암호화된 채로 여러분의 사설 인프라에 분산되어 실행됩니다.
앱을 닫아도 계속 실행됩니다.
Mac App Store에서 다운로드무료 · macOS 13 이상
가장 마음을 움직인 것은 기능이 아니라 사고방식입니다. 대부분의 AI 에이전트 도구는 먼저 “움직이게” 만들고 안전은 나중에 덧붙이는데, 이 프로젝트는 반대로 신뢰 경계를 먼저 정리했습니다. 두뇌는 폐기 가능한 샌드박스에, 손발은 기한이 있고 회수할 수 있는 권한으로, 연결은 언제나 제어받는 쪽에서 걸고, 어떤 포트도 열지 않습니다. 이 결정들은 서로 일관되며 공개 계약과 ADR에 기록되어 있어, 작성자가 “보안”을 마케팅 용어로 쓰는 것이 아니라 시스템 보안을 정말 이해하고 있음이 보입니다. 문서가 스스로의 한계에 대해서도 정직한데, 초기 프로젝트에서는 드문 일입니다.
고통 지점을 정확히 짚었고, 아키텍처 설계는 매우 앞서 있습니다(Agentic Security).
“코딩 에이전트가 진짜 데스크톱을 만지게 하는” 것들 중 제가 본 것 가운데 올바른 격리 모델에 가장 가까운 하나입니다.
인용문은 중국어 원문을 번역한 것입니다.

에이전트 CLI 13종, 각각 별도의 이미지 — Claude Code, Codex, Cursor, Kiro, Gemini, Copilot 등. 세션마다 선택합니다. native는 에이전트를 포함하지 않습니다.
셸은 컨테이너 안에서 실행됩니다. 앱을 닫아도 계속 돌아가고, 다시 열면 같은 분할 레이아웃으로 돌아와 출력이 멈춘 바이트에서 이어집니다.
포트를 열지 않고 ingress도 공개 엔드포인트도 없습니다. 네트워크 신원을 가진 것은 Tailscale 사이드카뿐이며 런타임은 loopback만 수신합니다.
배포하는 것은 평범한 pod이므로 표준을 따르는 클러스터면 모두 동작합니다 — 남는 장비의 k3s, EKS, GKE. 또는 AWS ECS Fargate라면 운영할 클러스터 자체가 없습니다.
MIT 라이선스로 openabdev/openab-pty에 있습니다. 무엇을 실행할지 먼저 확인할 수 있고, 공개된 계약에 맞춰 자신의 클라이언트도 만들 수 있습니다.
타이핑만이 아니라 — openab을 통해 같은 세션을 채팅이나 음성으로 움직입니다.
iPhone을 개인용 푸시투토크 리모컨으로 사용하세요. 음성은 기기에서 텍스트로 변환되고, 터미널에 안전한 텍스트만 선택한 Mac 세션으로 전송됩니다.
App Store에서 다운로드OpenAB landscape
원격 샌드박스, 내 Mac, 손안의 클라이언트가 Tailscale로 하나의 비공개 루프를 이룹니다. 타사의 SaaS 제어 평면은 없습니다.
Mac과 iPhone · 중국어, 광둥어, 영어, 일본어, 한국어 음성
격리된 원격 샌드박스 안의 Coding CLI
내 Mac의 Xcode, Simulator, 브라우저와 GUI 도구
지원합니다 — 앱이 창 전환과 받아쓰기를 일반 키보드 단축키(⌘[ / ⌘] 로 분할 창 간 이동, ⌃⌘M 으로 받아쓰기)로 노출하기 때문에, 키 입력을 합성할 수 있는 것이라면 무엇이든 방 건너편에서 조작할 수 있습니다. 단계별 가이드 두 편:
D-패드나 링으로 창을 전환하고(화면 HUD가 어느 창인지 표시), 한 버튼으로 전송, 다른 버튼으로 Mac의 마이크(AirPods 포함)를 사용한 온디바이스 받아쓰기를 시작합니다.
지원하지만 설정 한 단계가 필요합니다. GKE의 기본 kubeconfig는 토큰이 필요할 때마다 외부 자격 증명 헬퍼인 gke-gcloud-auth-plugin을 실행합니다. OpenAB Connect는 Mac App Store로 배포되며, App Sandbox는 샌드박스 앱이 그런 외부 헬퍼를 실행하는 것을 허용하지 않으므로, 그에 의존하는 kubeconfig로는 배포할 수 없습니다.
해결책은 static kubeconfig입니다. exec 블록 대신 토큰이나 클라이언트 인증서를 직접 담은 kubeconfig를 gcloud가 제한 없이 동작하는 자신의 기기에서 만든 뒤 앱이 그 파일을 가리키게 하세요. Google 서비스 계정 키 기반 kubeconfig가 지속적인 형태이고, 짧은 수명의 토큰도 되지만 만료됩니다. EKS에서 이 문제가 없는 것은 앱이 외부 플러그인이 아니라 자체 SDK로 AWS와 통신하기 때문입니다. GKE에도 같은 간극을 메우기 위해 네이티브 GCP 자격 증명이 로드맵에 있습니다.
kubectl exec이나 SSH와 무엇이 다릅니까?둘 다 셸은 주지만, 살아남는 세션은 주지 않습니다. exec 도중에 터미널을 닫으면 프로세스는 연결과 함께 죽습니다. 여기서는 세션이 컨테이너 안에 살아 있어서 앱을 닫는 것은 WebSocket 하나를 닫는 일에 그칩니다. 다음 실행에서 출력이 멈춘 바이트부터 다시 붙고 같은 분할 레이아웃을 복원합니다. 배포 방식도 다릅니다. 클라이언트에 kubeconfig가 없고 port-forward도 없으며, 자격 증명이 허용하는 범위는 클러스터 전체가 아니라 세션 하나입니다.
Herdr는 에이전트 멀티플렉서 — 코딩 에이전트를 위한 tmux입니다. 각 에이전트에 실제 PTY를 주고, 연결이 끊겨도 계속 살려 두며, 각 패널을 working/blocked/idle로 분류하고, CLI와 socket API를 제공합니다. 지속성과 전체 조망이라는 점은 이 앱과 거의 그대로 겹칩니다. 다른 것은 에이전트가 어디서 실행되는가입니다:
uid 1000, sudo 없음, 호스트 자격 증명 없음, 루트는 읽기 전용, 워크스페이스는 일회용 — WireGuard tailnet으로 닿고 포트는 전혀 열지 않습니다. 영향 범위는 그 컨테이너이며 여러분의 기계가 아닙니다. 노트북을 닫아도, 잠자기로 두어도, 다른 노트북으로 바꿔도 계속 실행됩니다.차이는 샌드박싱이며 멀티플렉싱이 아닙니다. Herdr가 할 수 있고 OpenAB Connect가 못 하는 일도 있습니다. 패널 상태 판정, 스크립트 가능한 로컬 API, 그리고 인프라가 전혀 필요 없다는 점입니다. 아무것도 배포하고 싶지 않다면 Herdr가 더 나은 답입니다.
Mac 위의 에이전트는 여러분 자신으로 실행됩니다. SSH 키, 클라우드 자격 증명, npm과 GitHub 토큰, 디스크의 모든 리포지터리에 닿을 수 있으므로 잘못된 명령은 여러분의 기계에서의 잘못된 명령이 됩니다. 이쪽 셸은 그런 것을 하나도 갖지 않고, 워크스페이스는 세션과 함께 버려지며, 여러 에이전트가 같은 작업 트리나 같은 포트를 두고 다투지 않고 동시에 일할 수 있습니다. 노트북을 닫거나 잠자기로 두어도 아무것도 멈추지 않습니다.대가는 실재합니다. 에이전트는 로컬 파일을 볼 수 없어 작업은 git으로 오가고, 이미지의 첫 내려받기는 몇 분이 걸리며, 클러스터나 AWS 계정이 필요합니다. 이미 열어 둔 리포지터리에서 한 줄 고치는 정도라면 로컬 실행이 더 간단하고 이것은 아무 도움이 되지 않습니다.
둘은 설계상 상호 보완적입니다. 갈림길은 무엇을 중요하게 보는가입니다:
보완 관계는 비유가 아니라 구조입니다. PTY 이미지는 FROM ghcr.io/openabdev/openab이므로 셸은 에이전트가 돌아가는 것과 같은 이미지 안에서 열리며 같은 CLI와 같은 워크스페이스를 가집니다. 작업이 중간에 멈춰 있으면 그 자리에서 붙어 들여다봅니다. 어느 쪽도 다른 쪽을 필요로 하지 않고, 세션 모델은 의도적으로 아무것도 공유하지 않습니다 — 바이트 스트림의 생존은 바이트와 소켓으로 정의되며 턴으로 정의되지 않기 때문입니다.
자세한 내용은 openab-pty의 설계 문서에 있습니다. 그리고 OpenAB Connect는 openab-pty 클라이언트 계약의 첫 클라이언트 구현입니다 — 계약이 공개되어 있으므로 자격 증명을 들고 WebSocket을 말할 수 있는 것이면 다음 구현이 될 수 있습니다.
의도적으로 거의 못 합니다. uid 1000으로 열리며 sudo도, 서비스 어카운트 토큰도, 호스트 자격 증명도 없습니다. 루트 파일시스템은 읽기 전용이고 워크스페이스는 일회용입니다. 세션 셸은 loopback으로 런타임에 닿을 수 있는데, 바로 그래서 관리 자격 증명은 컨테이너 안에 두지 않습니다. 어태치 토큰은 세션 하나만 허용하고 만료됩니다.
아닙니다. 런타임은 127.0.0.1에 바인드하고 TLS 키를 갖지 않습니다. 같은 pod의 Tailscale 사이드카만 네트워크 신원을 가지며, 둘은 pod의 네트워크 네임스페이스 안에서 loopback으로 통신합니다. 트래픽은 WireGuard tailnet을 통해 도달하고 암호화는 그쪽이 담당합니다.
아무것도 전달되지 않습니다. 여기에 서비스가 없습니다. 앱이 연결하는 서버는 모두 여러분이 자신의 클러스터나 자신의 AWS 계정에 배포한 것입니다. 계정도, 가입도, 분석도, 텔레메트리도 없습니다. 입력한 자격 증명은 macOS 키체인에 남고 여러분 자신의 런타임 외에는 어디로도 전송되지 않습니다.
가능합니다. 런타임은 MIT 라이선스로 openabdev/openab-pty에 있고 클라이언트 계약도 공개되어 있어, 이 앱을 쓰지 않고 자신의 클라이언트를 만들 수도 있습니다. 이 앱은 그 계약의 한 구현이며 오픈소스가 아닙니다.
가능합니다. 앱 메뉴의 Demo Mode는 샘플 연결 두 개와 미리 녹화된 터미널만으로 동작하며 어떤 네트워크 연결도 하지 않습니다. 아무것도 배포하기 전에 앱을 평가할 수 있도록 넣었습니다.
세 번의 클릭 뒤에 여덟 단계가 진행됩니다. 자격 증명을 만들어 키체인에 저장하고, namespace를 확인하고, secret과 볼륨을 만들고, pod을 적용한 뒤, 실행을 기다리고, tailnet 참여를 기다리고, 관리 평면을 검증합니다. 매니페스트를 쓸 필요가 없습니다. 어떤 이미지의 첫 배포는 클러스터가 이미지를 받아오는 동안 몇 분이 걸릴 수 있습니다.
워크스페이스는 버려집니다. 이 부분은 확실합니다. 그 세션을 위해서만 존재하며, 세션을 삭제하면 함께 사라집니다.
확실하지 않은 것은 프로세스입니다. 세션을 삭제하면 해당 세션의 프로세스 그룹이 종료되지만, 그 그룹을 의도적으로 벗어난 프로세스 — nohup이나 setsid로 띄운 백그라운드 작업 — 는 pod이나 task가 교체될 때까지 살아남을 수 있습니다. 여전히 같은 샌드박스 안에 갇혀 있어 새로 닿을 수 있는 것은 없지만, 그 pod의 CPU와 메모리를 계속 씁니다.
그래서 앱에서는 깔끔하게 종료된다고 말하지 않고 best-effort라고 밝힙니다. 아무것도 남지 않게 하려면 pod이나 task를 삭제하십시오.
아직 안 됩니다 — 개발 중입니다. 지금은 각 세션이 독립적이어서 여러분이 각 에이전트에 지시하며, 에이전트끼리 일을 위임하지는 않습니다.
설계는 공개되어 있습니다. OpenAB의 Agent Control Plane ADR를 따르며, 채팅 플랫폼을 거치지 않고 ACP over WebSocket으로 에이전트가 직접 위임하도록 하는 허브앤스포크 등록·라우팅 서비스입니다. 채팅 경유는 레이트 리밋과 지연을 부르고, 사람을 위한 채널에 오케스트레이션 잡음을 쏟아붓습니다. 구성은 세 가지입니다. 누가 살아 있고 어떤 라벨을 가졌는지 아는 Registry, 이름·라벨·namespace로 보내는 Router, 위임 깊이·순환·namespace· allowlist를 다루는 Policy입니다.
그 설계의 한 가지는 이 앱의 방식과 맞아떨어집니다. 에이전트가 컨트롤 플레인으로 바깥으로 연결하므로, 네트워크를 넘어 동작시키는 데 어느 쪽에도 인바운드 포트가 필요하지 않습니다.
ADR은 병합되었고 구현은 아직 출시되지 않았습니다. 함께 만들어 주세요 — 그 문서가 논의의 출발점입니다.