프로젝트 소개
Gateship은 코딩 에이전트를 위한 로컬 소프트웨어 배포 런타임입니다. 운영자가 작업을 정의하면 Gateship은 격리된 Git 워크트리를 할당하고, 선택된 로컬 Claude Code 또는 Codex 클라이언트를 실행하며, 작업에 작성된 수락 명령을 검증합니다. 이후 독립적인 읽기 전용 리뷰어에게 변경 사항 검토를 요청하고, 그 결과를 squash-merge된 풀 리퀘스트(PR)를 통해 배포합니다. 이 제품은 웹 우선 및 로컬 우선 방식으로 설계되었습니다. Bun이 127.0.0.1에서 인터페이스를 제공하고 SQLite가 실행 상태와 활동을 저장하며, 실행 경로에 터미널 키 입력이나 tmux 세션이 개입하지 않습니다.
요구 사항 및 자격 증명 처리. 호스트 이식성이 필요한 경우 Windows 및 macOS에서는 Docker Desktop을, Linux에서는 Compose 플러그인이 포함된 Docker Engine 설치를 권장하며, 이미지에는 제공자 및 GitHub CLI가 포함되어 있습니다. 네이티브 macOS 및 Linux 설치에는 구독 로그인이 완료된 Claude Code 및/또는 Codex CLI와 gh auth login --web 및 gh auth setup-git을 통해 인증된 GitHub CLI가 필요합니다. 소스에서 실행하는 경우에만 Bun 1.2.3 이상이 필요하며, Git은 대상 저장소에서 브랜치와 워크트리를 생성할 수 있어야 합니다. Gateship은 운영자의 로그인된 claude 또는 codex 바이너리를 실행하고 에이전트 자식 프로세스에 허용 목록 기반 환경을 전달하며, 제공자 자격 증명 파일을 읽지 않고 Agent SDK를 사용하지 않습니다. GitHub 배포는 주변의 개인 액세스 토큰 대신 gh가 소유한 자격 증명 저장소를 사용합니다.
설치 및 업데이트. 설치 스크립트는 기본적으로 ~/.local/bin에 gateship과 짧은 별칭인 gship을 배치하며, GATESHIP_INSTALL_DIR로 대상 경로를 변경할 수 있습니다. 스크립트를 다시 실행하면 기존 설치를 대체하며, GATESHIP_VERSION으로 특정 릴리스를 고정할 수 있습니다. 소스 빌드는 bun install --frozen-lockfile 후 bun run build:release를 사용하며, 개발 시에는 Bun으로 진입점을 직접 실행할 수 있습니다. 네이티브 설치의 경우 설정에서 업데이트 확인을 선택할 수 있으며(기본값은 꺼짐), 실행 프로세스는 최대 하루에 한 번 공식 릴리스를 확인하고 릴리스 태그 커밋, 플랫폼 에셋, SHA256SUMS.txt 및 후보 버전 출력을 검증한 뒤, 터미널 외부 실행이나 활성 진단이 없을 때만 업데이트를 수행합니다. 정확한 릴리스 버전과 커밋을 반환하지 않는 후보는 중단되며 이전 바이너리가 복구, 재시작 및 검증됩니다. 컨테이너 및 소스 체크아웃에서는 자동 적용이 불가능하며 그 이유가 보고됩니다.
빠른 시작. GitHub 클론에서 gship을 실행하면 로컬 제어 표면이 시작되고 http://127.0.0.1:7777이 출력되며, gship --port 8080으로 다른 포트를 선택할 수 있습니다. 웹 인터페이스는 처음 로드될 때 로컬 Git 메타데이터, origin URL 및 로컬 origin/main 참조만 확인하며, 암시적으로 저장소를 가져오거나 생성하지 않습니다. 디렉토리가 비어 있거나 불완전한 경우, 설정 메뉴는 에이전트 구독 설정을 위해 유지되지만 운영 표면에는 정확한 복구 명령이 표시됩니다. 운영자 이름과 IANA 시간대는 선택 사항이며 명시적으로 저장한 후에만 보관됩니다. 실행 중인 프로세스는 작업 디렉토리를 변경할 수 없으므로, 프로젝트 경로가 변경되면 의도한 클론에서 Gateship을 재시작해야 합니다.
에이전트 CLI. 쉘 기능을 갖춘 에이전트는 다른 런타임을 시작하거나 .gship 디렉토리를 직접 편집하는 대신, 버전 관리되는 기계 판독 가능 인터페이스를 통해 실행 중인 서비스를 사용할 수 있습니다: gship agent guide, gship agent operations, gship agent call status.get 및 JSON 입력을 사용하는 issues.get과 같은 호출이 가능합니다. 모든 에이전트 명령은 ANSI나 진행 출력 없이 하나의 JSON 객체를 출력하며, URL 플래그는 다른 포트에서 실행 중인 서비스를 가리킵니다.
브라우저 워크플로우를 통해 운영자는 유형화된 Gateship 명령을 호출하는 외부 에이전트와 함께 작업을 설명하고 다듬을 수 있으며, 세션 간 핸드오프를 위한 영구적인 프로젝트 브리프를 유지하고 작업을 명시적으로 승인할 수 있습니다. 결정 단계에서는 작업이 중단되고 주의를 기다리며, 진행 상황, 공개 에이전트 텍스트, 도구 이름, 검증 및 리뷰는 SSE를 통해 추적됩니다. 로컬 브라우저 알림을 통해 탭 외부에서도 운영자에게 알릴 수 있습니다. 영구적인 실행 상태를 잃지 않고 Claude와 Codex를 전환할 수 있으며, 명시적 제어 기능이 결정론적 폴백 역할을 합니다. 선택 사항인 React 진단 도구는 격리된 정확한 SHA 체크아웃에서 수동으로 또는 프로젝트가 유휴 상태일 때 매일/매주 일정으로 실행됩니다. 발견된 사항은 기각하거나 승인되지 않은 작업으로 승격시킬 수 있습니다. 진단은 배포 게이트 외부에 머물며 작업을 자동으로 수정하거나 승인하지 않고, 진단 점수가 배포를 차단할 수 없습니다. 벤치마크 패널은 결과, 인간의 주의, 수정 라운드, 제공자 대기 시간, 실제 시간, 비용 및 제공자/모델 팩트를 별도 항목으로 표시하며, 평가 모델이나 합성 점수를 사용하지 않습니다.
런타임 흐름. 운영자 작업은 외부 대화형 에이전트로 전달된 후 유형화된 Gateship 명령을 거쳐 원격 main의 백로그 레코드로 이동합니다. Gateship은 격리된 워크트리를 생성하고, 선택된 구현 세션을 실행하며, 수락 명령을 검증합니다. 이후 동일한 제공자를 통해 독립적인 읽기 전용 리뷰를 수행하고, 발견 사항이 있을 때 한 번의 자동 수정을 시도한 뒤, 커밋 및 푸시를 수행하고 풀 리퀘스트를 엽니다. CI 이후 squash 자동 병합이 이루어지면 origin/main을 갱신하고 깨끗하게 관리된 워크트리와 로컬 브랜치를 해제합니다. 검증 명령이 없는 이슈는 프리플라이트에서 실패하며, 리뷰는 기계적 읽기 전용 기능만 갖춘 새로운 세션으로 실행됩니다.
컨테이너 배포. 멀티 아키텍처 이미지는 Windows 및 macOS의 Docker Desktop과 Linux의 Docker Engine에서 실행되며, 동일한 릴리스 태그 아래 linux/amd64 및 linux/arm64 변형을 제공합니다. 이미지에는 컴파일된 바이너리, git, GitHub CLI, Claude Code CLI 및 Codex CLI가 포함되어 있습니다. 두 제공자 CLI 릴리스는 고정되어 있으며, 자식 세션에서 Claude Code의 자체 업데이트는 비활성화되어 실행 중에 기록된 워크플로우 리비전 뒤의 실행 파일이 조용히 교체되지 않도록 합니다. Compose는 포트를 루프백으로만 게시하고, 이미지 파일 시스템을 읽기 전용으로 유지하며, 임시 /tmp를 제공하고, 권한 상승을 방지하며, 호스트 uid가 다른 바인드 마운트에 필요한 권한을 제외한 Linux 기능을 제거합니다. 제공자 및 GitHub 인증은 첫 부팅 시 컨테이너 내부에서 발생하며 이름 지정된 상태 볼륨에 유지됩니다. 선택한 저장소의 런타임 데이터베이스와 워크트리는 프로젝트 바인드의 .gship 디렉토리에 유지됩니다. 동일한 이미지와 볼륨으로 컨테이너를 재생성하면 동일한 SQLite 상태, 워크트리 및 로그인이 복구됩니다. README의 업데이트 및 복구 가이드는 매니페스트 다이제스트가 포함된 버전 지정 이미지 태그 사용, 서비스 중단, 상태 볼륨 및 .gship 디렉토리 백업, 롤백을 위한 이전 다이제스트 복구를 권장합니다. gship doctor --json은 자격 증명 없이 아키텍처, 이미지, 볼륨 권한, Git, gh, Claude, Codex, 로그인 및 로컬 연결 상태를 보고합니다.
보안. HTTP 서버는 기본적으로 127.0.0.1에만 바인딩되며, 브라우저 변경 사항은 추가적으로 동일 출처 localhost 요청을 요구합니다. 읽기 경로는 자체 인증이 없으므로 루프백 바인딩이 유일한 경계입니다. 컨테이너 이미지의 경우 Docker의 게시된 포트 프록시가 서비스에 도달하려면 bind-host 변수를 0.0.0.0으로 설정해야 하며, 이 경우 경계는 호스트에서 포트가 어떻게 게시되는지로 이동합니다. 다른 인터페이스로 게시하면 모든 인증되지 않은 읽기 경로가 노출됩니다. 구현자는 격리된 워크트리 내부에서 의도적으로 쓰기 권한을 가지며, 네이티브 모드에서는 Gateship을 실행하는 사용자의 파일 시스템 권한을 가집니다. 컨테이너 모드에서는 컨테이너 및 명시적 마운트로 제한됩니다. 읽기 전용 리졸버와 리뷰어는 Claude의 기능을 Read, Grep, Glob으로 제한하고 MCP 및 슬래시 명령을 비활성화하며, Codex는 사용자 설정과 MCP가 비활성화된 읽기 전용 샌드박스에서 실행합니다. 에이전트 및 GitHub CLI 자식 프로세스는 환경 허용 목록을 받으며, 검증 명령은 신뢰할 수 있는 프로젝트 명령으로 간주되어 서비스 환경을 유지합니다. Gateship은 제공자나 GitHub 자격 증명을 위한 웹 또는 SQLite 필드를 가지지 않습니다. 이는 신뢰할 수 있는 단일 운영자를 위한 프로세스 격리이지, 멀티 테넌트 비밀 샌드박스가 아닙니다.
영구 상태 및 복구. 실행 메타데이터, 제공자 선택, 이벤트, 운영자가 유지하는 프로젝트 브리프 및 제공자당 하나의 사이클 리졸버 세션 ID는 .gship 아래의 SQLite 파일에 저장됩니다. 각 실행은 자체 제공자, 네이티브 세션 ID 및 워크트리 경로를 저장합니다. 서비스가 재시작되면 소유자가 없는 진행 중인 실행은 중단된 상태가 되며, 워크스페이스를 잃거나 중복으로 시작하는 대신 재개할 수 있습니다. 병합이 확인되면 Gateship은 관리된 깨끗한 워크트리, 로컬 브랜치 및 오래된 원격 추적 참조를 제거합니다. 실패한 실행도 동일하게 해제되지만, origin/main에 없는 커밋을 포함한 브랜치는 더티 워크트리 및 소유자 없는 잔여물과 함께 보존됩니다. 정리는 시작 시 재시도됩니다. 런타임 소스는 원격 origin/main 참조이며, 실행 허용 전과 병합 후에 가져옵니다. 사용자의 로컬 main 브랜치는 의도적으로 건드리지 않습니다.
개발, 커뮤니티 및 라이선스. 프로젝트는 Bun으로 빌드되며 타입 체크, 테스트, 린팅 및 데드 코드 분석 명령을 제공하며, 릴리스 전 모든 세트를 실행하는 ship 게이트를 운영합니다. 기여는 기여 가이드, 행동 강령 및 보안 정책을 따르며, 외부 베타 사용자는 유지 관리자가 수동으로 분류하는 문서화된 피드백 경로를 통해 정제된 관찰 내용을 제출할 수 있습니다. Gateship은 MIT 라이선스로 출시되었습니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.