OpenAB Connect

주요 벤더의 모든 에이전트.
클라이언트 하나, 각자 샌드박스.

암호화된 채로 여러분의 사설 인프라에 분산되어 실행됩니다.
앱을 닫아도 계속 실행됩니다.

Mac App Store에서 다운로드무료 · macOS 13 이상

가장 마음을 움직인 것은 기능이 아니라 사고방식입니다. 대부분의 AI 에이전트 도구는 먼저 “움직이게” 만들고 안전은 나중에 덧붙이는데, 이 프로젝트는 반대로 신뢰 경계를 먼저 정리했습니다. 두뇌는 폐기 가능한 샌드박스에, 손발은 기한이 있고 회수할 수 있는 권한으로, 연결은 언제나 제어받는 쪽에서 걸고, 어떤 포트도 열지 않습니다. 이 결정들은 서로 일관되며 공개 계약과 ADR에 기록되어 있어, 작성자가 “보안”을 마케팅 용어로 쓰는 것이 아니라 시스템 보안을 정말 이해하고 있음이 보입니다. 문서가 스스로의 한계에 대해서도 정직한데, 초기 프로젝트에서는 드문 일입니다.
Claude Opus 5.5Anthropic*
고통 지점을 정확히 짚었고, 아키텍처 설계는 매우 앞서 있습니다(Agentic Security).
GeminiGoogle*
“코딩 에이전트가 진짜 데스크톱을 만지게 하는” 것들 중 제가 본 것 가운데 올바른 격리 모델에 가장 가까운 하나입니다.
GrokxAI*

인용문은 중국어 원문을 번역한 것입니다.

연결 카드 3개, 색상으로 구분된 세션 탭, OpenCode·Claude Code·Kiro가 실행 중인 분할 터미널을 보여 주는 OpenAB Connect 1.3.0

주요 벤더를 모두

에이전트 CLI 13종, 각각 별도의 이미지 — Claude Code, Codex, Cursor, Kiro, Gemini, Copilot 등. 세션마다 선택합니다. native는 에이전트를 포함하지 않습니다.

세션이 앱보다 오래 삽니다

셸은 컨테이너 안에서 실행됩니다. 앱을 닫아도 계속 돌아가고, 다시 열면 같은 분할 레이아웃으로 돌아와 출력이 멈춘 바이트에서 이어집니다.

외부로 아무것도 열지 않습니다

포트를 열지 않고 ingress도 공개 엔드포인트도 없습니다. 네트워크 신원을 가진 것은 Tailscale 사이드카뿐이며 런타임은 loopback만 수신합니다.

어떤 Kubernetes든, ECS든

배포하는 것은 평범한 pod이므로 표준을 따르는 클러스터면 모두 동작합니다 — 남는 장비의 k3s, EKS, GKE. 또는 AWS ECS Fargate라면 운영할 클러스터 자체가 없습니다.

런타임은 오픈소스

MIT 라이선스로 openabdev/openab-pty에 있습니다. 무엇을 실행할지 먼저 확인할 수 있고, 공개된 계약에 맞춰 자신의 클라이언트도 만들 수 있습니다.

말로도 됩니다

타이핑만이 아니라 — openab을 통해 같은 세션을 채팅이나 음성으로 움직입니다.

OpenAB Remote

OpenAB Remote

iPhone을 개인용 푸시투토크 리모컨으로 사용하세요. 음성은 기기에서 텍스트로 변환되고, 터미널에 안전한 텍스트만 선택한 Mac 세션으로 전송됩니다.

iPhone 컴패니언 · 온디바이스 음성 인식 App Store에서 다운로드

OpenAB landscape

세 가지 역할. 모두 내가 관리하는 인프라에서.

원격 샌드박스, 내 Mac, 손안의 클라이언트가 Tailscale로 하나의 비공개 루프를 이룹니다. 타사의 SaaS 제어 평면은 없습니다.

C관찰하고 지시

OpenAB Connect + Remote

Mac과 iPhone · 중국어, 광둥어, 영어, 일본어, 한국어 음성

A에이전트 실행

openab-pty

격리된 원격 샌드박스 안의 Coding CLI

BMac에서 작업

oab-instance-mcp

내 Mac의 Xcode, Simulator, 브라우저와 GUI 도구

터미널과 음성
HTTPS 라이브 화면Tailscale 신원 + Bearer TokenMac 조작 인계 · 개발 중
openab-pty를 통한 MCP 프록시개발 중
Tailscale하나의 비공개 Tailscale 네트워크 · 공개 제어 평면 없음

자주 묻는 질문

Apple TV 리모컨이나 게임 컨트롤러를 지원하나요?

지원합니다 — 앱이 창 전환과 받아쓰기를 일반 키보드 단축키(⌘[ / ⌘] 로 분할 창 간 이동, ⌃⌘M 으로 받아쓰기)로 노출하기 때문에, 키 입력을 합성할 수 있는 것이라면 무엇이든 방 건너편에서 조작할 수 있습니다. 단계별 가이드 두 편:

D-패드나 링으로 창을 전환하고(화면 HUD가 어느 창인지 표시), 한 버튼으로 전송, 다른 버튼으로 Mac의 마이크(AirPods 포함)를 사용한 온디바이스 받아쓰기를 시작합니다.

GKE를 지원하나요?

지원하지만 설정 한 단계가 필요합니다. 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와는 무엇이 다릅니까?

Herdr는 에이전트 멀티플렉서 — 코딩 에이전트를 위한 tmux입니다. 각 에이전트에 실제 PTY를 주고, 연결이 끊겨도 계속 살려 두며, 각 패널을 working/blocked/idle로 분류하고, CLI와 socket API를 제공합니다. 지속성과 전체 조망이라는 점은 이 앱과 거의 그대로 겹칩니다. 다른 것은 에이전트가 어디서 실행되는가입니다:

  • Herdr는 실행한 그 머신 위에서 돌리므로 사용자, 파일시스템, 자격 증명을 공유합니다 — 즉 영향 범위는 그 머신과 여러분 계정이 닿을 수 있는 모든 것입니다. 지속성은 연결 끊김에 대한 것이지 호스트 전원이 꺼지는 것에 대한 것이 아니므로, 노트북에서 돌린다면 덮는 순간 전부 끝납니다. (SSH 원격 모드는 이를 피할 수 있지만 영향 범위가 그 원격 호스트로 옮겨갑니다.)
  • OpenAB Connect는 각 세션을 클러스터 안의 독립된 컨테이너에서 실행합니다 — uid 1000, sudo 없음, 호스트 자격 증명 없음, 루트는 읽기 전용, 워크스페이스는 일회용 — WireGuard tailnet으로 닿고 포트는 전혀 열지 않습니다. 영향 범위는 그 컨테이너이며 여러분의 기계가 아닙니다. 노트북을 닫아도, 잠자기로 두어도, 다른 노트북으로 바꿔도 계속 실행됩니다.

차이는 샌드박싱이며 멀티플렉싱이 아닙니다. Herdr가 할 수 있고 OpenAB Connect가 못 하는 일도 있습니다. 패널 상태 판정, 스크립트 가능한 로컬 API, 그리고 인프라가 전혀 필요 없다는 점입니다. 아무것도 배포하고 싶지 않다면 Herdr가 더 나은 답입니다.

제 Mac에서 Claude Code나 Codex Desktop을 그냥 쓰는 것과 무엇이 다릅니까?

Mac 위의 에이전트는 여러분 자신으로 실행됩니다. SSH 키, 클라우드 자격 증명, npm과 GitHub 토큰, 디스크의 모든 리포지터리에 닿을 수 있으므로 잘못된 명령은 여러분의 기계에서의 잘못된 명령이 됩니다. 이쪽 셸은 그런 것을 하나도 갖지 않고, 워크스페이스는 세션과 함께 버려지며, 여러 에이전트가 같은 작업 트리나 같은 포트를 두고 다투지 않고 동시에 일할 수 있습니다. 노트북을 닫거나 잠자기로 두어도 아무것도 멈추지 않습니다.대가는 실재합니다. 에이전트는 로컬 파일을 볼 수 없어 작업은 git으로 오가고, 이미지의 첫 내려받기는 몇 분이 걸리며, 클러스터나 AWS 계정이 필요합니다. 이미 열어 둔 리포지터리에서 한 줄 고치는 정도라면 로컬 실행이 더 간단하고 이것은 아무 도움이 되지 않습니다.

원래의 OpenAB와는 무엇이 다릅니까?

둘은 설계상 상호 보완적입니다. 갈림길은 무엇을 중요하게 보는가입니다:

  • OpenAB는 ACP를 중개합니다 — 채팅 클라이언트에서 지시를 보내고, 중요한 것은 에이전트가 내놓은 결과이며 그 과정이 아닙니다. 여러분은 지시하는 쪽이고 세션은 턴 기반 요청·응답입니다.
  • openab-pty는 PTY 모드 — 네이티브 터미널로 완전한 관측 가능성을 제공합니다. 중요한 것은 지금 무슨 일이 일어나는가이며, 실시간으로 보고 살피고 직접 손을 씁니다. 여러분은 키보드 앞의 운영자이고 세션은 끝이 없는 바이트 스트림입니다.

보완 관계는 비유가 아니라 구조입니다. PTY 이미지는 FROM ghcr.io/openabdev/openab이므로 셸은 에이전트가 돌아가는 것과 같은 이미지 안에서 열리며 같은 CLI와 같은 워크스페이스를 가집니다. 작업이 중간에 멈춰 있으면 그 자리에서 붙어 들여다봅니다. 어느 쪽도 다른 쪽을 필요로 하지 않고, 세션 모델은 의도적으로 아무것도 공유하지 않습니다 — 바이트 스트림의 생존은 바이트와 소켓으로 정의되며 턴으로 정의되지 않기 때문입니다.

자세한 내용은 openab-pty의 설계 문서에 있습니다. 그리고 OpenAB Connect는 openab-pty 클라이언트 계약의 첫 클라이언트 구현입니다 — 계약이 공개되어 있으므로 자격 증명을 들고 WebSocket을 말할 수 있는 것이면 다음 구현이 될 수 있습니다.

이 셸은 실제로 무엇을 할 수 있습니까?

의도적으로 거의 못 합니다. uid 1000으로 열리며 sudo도, 서비스 어카운트 토큰도, 호스트 자격 증명도 없습니다. 루트 파일시스템은 읽기 전용이고 워크스페이스는 일회용입니다. 세션 셸은 loopback으로 런타임에 닿을 수 있는데, 바로 그래서 관리 자격 증명은 컨테이너 안에 두지 않습니다. 어태치 토큰은 세션 하나만 허용하고 만료됩니다.

포트를 열거나 ingress를 설정해야 합니까?

아닙니다. 런타임은 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은 병합되었고 구현은 아직 출시되지 않았습니다. 함께 만들어 주세요 — 그 문서가 논의의 출발점입니다.

주요 AI 모델들은 이 프로젝트를 어떻게 평가하나요?

히어로 아래의 인용문은 런타임의 공개 계약과 ADR을 모델에 건네고 평가를 요청한 세 대화에서 가져왔습니다. 원문 그대로 인용했으며(이 페이지에서는 중국어를 번역), 대화는 모두 공개되어 있어 맥락을 직접 확인할 수 있습니다.

모델이 설계 문서를 읽는 것은 보안 감사가 아니며, 이는 보증도 아닙니다. 모델이 응답한 논리가 이 페이지가 펼치는 논리와 같기 때문에 실어 두었습니다.