GitHub Repository Dossier · 정적 분석 · 커밋 고정

Grok Bot 0.18 재구성

공개 배포된 macOS 앱을 풀어 TypeScript로 다시 붙인 비공식 연구 저장소. 공식 릴리즈가 아니고, 라이선스도 없다. 코드를 읽기 위한 도시이지 실행 안내서가 아니다.

1 · Provenance

출처와 신뢰 등급

원본 URL
https://github.com/b-nnett/grok-bot-0.18-reconstructed
객체
repository root · owner b-nnett · repo grok-bot-0.18-reconstructed
요청 ref
not supplied → 분석 ref main
스냅샷 커밋
a9f633e09d49a85829b8236331b9e21f7e612634 (sha1)
루트 트리
b68f24972427952c4934e4364736fec62661044f
가시성 / 인증
public · unauthenticated REST + bare blob:none clone
민감도 / 게시
clear · allow (분석·짧은 인용. 프롬프트 덤프·설치본 바이너리 미재게시)
라이선스
SPDX 없음. GitHub license API 404. NOTICE.md가 업스트림 소스 라이선스 부재를 명시
캡처 구간
2026-08-25T03:39:25Z → 종료 시각은 receipt. ref drift 없음
동적 메타 (별도)
stars 1944 · forks 2184 · open issues+PRs 11 · 2026-08-25T03:37:40Z GitHub API
Evidence trust B
Implementation confidence medium
Runtime confidence unknown
Maintenance coverage low
Security / privacy confidence medium

B는 정적 분석의 정상 천장이다. 인벤토리 2385엔트리는 완전하고, 핵심 경로 30파일/3722줄은 읽었다. 실행·패키징·실기기 동작은 관찰하지 않았다.

2 · 읽기 전에

10분에 잡을 것

핵심 질문: 이 트리는 “유출된 Grok 가중치”가 아니라, 공개 DMG를 풀어 Electron/host/coordinator를 TypeScript로 재구성하고 추론 라우터를 얹은 연구 산출인가?

선행 개념. Electron 메인/프리로드/렌더러 분리, asar 패키징, Git LFS 포인터, SPDX 라이선스 ≠ NOTICE. 모르면 막히는 한 줄: README는 주장이고 코드가 팩트다.

멘탈 모델. 공식 앱(checksum-pinned DMG) + 읽기 가능한 source/ 런타임 + 좁은 렌더러 패치. 하이브리드. 업스트림 앱을 덮어쓰지 않는다고 주장한다(패키징 스크립트는 30파일 한도 밖, 미확인).

  • 10분: §3 채택 판단 + §4 엔트리포인트 세 개 + §10 라이선스.
  • 30분: §5 데이터 흐름 + §9 시크릿/텔레메트리/Docker + §11 원장.
  • 기여자: CONTRIBUTING의 npm run check 경로. 실행은 이 문서 범위 밖.

예상 소요: 요약 10분, 코드 인용까지 40분. 앱을 빌드하려면 별도 실행 리뷰.

점검 세 가지. (1) LICENSE 파일이 있는가? 없다. (2) 라우터 기본값이 Cursor인가? shared/inference-router.ts와 테스트가 그렇게 말한다. (3) CI가 이 커밋에서 초록인가? 아니다. 실패 1건.

3 · Executive verdict

채택 판단

한 줄

데스크톱 에이전트 재구성의 읽기 자료로는 맞다. 설치해 쓰는 제품으로는 아직 아니다.

맞다. Electron 데스크톱 에이전트의 프로세스 경계, 추론 라우팅, 로컬 Docker 박스, 시크릿 저장을 코드로 보고 싶을 때. 정적 리딩·보안 리뷰·“이게 유출 가중치냐” 판별.

아니다. 프로덕션 사용, 재배포, Windows/Linux 일상 사용, “공식 Grok Bot 대체”. 라이선스 부재 + 업스트림 바이너리 의존 + CI 실패 + 이슈 #9/#11이 라우팅 경로를 열린 결함으로 둔다.

성숙도: 실험. 커밋 2개(초기 import + 문서/설치본 보존). 릴리즈 0. 태그 0. 기여자 GitHub 계정 1명. 스타/포크는 관심 신호일 뿐 유지보수 신호가 아니다.

4 · What is actually implemented

실제 구현

지면의 중심은 README가 아니라 핀된 트리의 엔트리포인트다. 아래 인용은 모두 a9f633e09d49a85829b8236331b9e21f7e612634 기준.

verified — 코드가 존재하고 서로 맞다

세 프로세스 입구. Electron 메인은 startElectronMainProduction이 composition을 붙이고 app.whenReady 뒤 창을 만든다.

source/electron-main/main.ts#L446-L450

export function startElectronMainProduction(bindings: ElectronMainProductionBindings): ElectronMainRuntime {
  const composition = createElectronMainProductionComposition(bindings);
  const runtime = startElectronMain(composition.dependencies);
  composition.bindRuntime(runtime);
  return runtime;
}

Host는 락 → 게이트웨이 listen → box-exec daemon. SAND_USE_EXISTING_BOX_EXEC_DAEMON=1이면 데몬을 안 띄운다.

source/host/main.ts#L123-L171

Coordinator는 carrier를 못 받으면 process.exit(2)로 실패 닫힘. 추론 라우터를 여기서 조립한다.

source/node-agent-coordinator/main.ts#L66-L71

라우터 계약. 제공자 집합은 네 개로 고정된다.

source/shared/inference-router.ts#L1-L3

export const SAND_INFERENCE_PROVIDERS = ["cursor", "claude-code", "codex", "openrouter"] as const;

Cursor가 아니면 sendPrompt를 로컬 큐에 태워 runRoutedProviderText로 보낸다. Claude Code만 MCP 브리지를 만들고, 나머지는 툴 목록을 직접 넘긴다.

source/node-agent-coordinator/inference-router.ts#L162-L228

테스트가 기본값을 Cursor로, 네 제공자 round-trip을 고정한다. tests/router-settings.test.mjs#L18-L24 — 테스트 존재 ≠ 통과. CI는 이 SHA에서 실패.

Bootstrap. 아카이브 DMG SHA-256이 맞으면 복사, 없으면 공개 URL fetch 후 해시 불일치면 삭제.

scripts/bootstrap-runtime.mjs#L28-L59

로컬 Docker. 이미지·컨테이너·루프백 게이트웨이가 상수다.

source/electron-main/box/local-docker-host-connector.ts#L13-L17

export const LOCAL_DOCKER_BOX_IMAGE = "public.ecr.aws/k0i0n2g5/cursorenvironments/universal:sand-box-latest";
export const LOCAL_DOCKER_BOX_CONTAINER = "grok-bot-local-vm";
export const LOCAL_DOCKER_GATEWAY_URL = "http://127.0.0.1:1340";

소유 라벨이 없는 동명 컨테이너는 재사용하지 않는다. #L104-L111. 런타임 바이트가 없으면 재고 VM 기동을 거부한다. #L127.

시크릿. 파일명 sand-secrets.json, 스코프 암호문 접두 scoped:v1:, Cursor 토큰 키 두 개. 암호화 불가면 in-memory.

source/electron-main/secrets/secret-store.ts#L10-L23

업데이터 가드 (테스트에 고정된 문자열).

tests/reconstructed-updater-guard.test.mjs#L19-L21 — 패키징이 SAND_DISABLE_UPDATES/SENTRY/TELEMETRY ??= "1"을 주입한다고 주장. 환경 변수로 다시 켤 수 있다.

partial

  • 라우팅된 제공자 경로: 코드는 있으나 이슈 #9(툴 실행기 없음), #11(시크릿이 Mac-side store에 안 감)이 열려 있다.
  • 프론트엔드: frontend/는 부분 재구성. 패키징은 배송된 렌더러 + 좁은 Router 패치.
  • 텔레메트리 기본 off: 가드는 테스트에 있고, initSandSentryForDesktopenabled가 참이면 DSN으로 init한다. sentry.ts#L64.

claimed — README만, 이 30파일에서 미확인

  • 별도 번들 ID + ad-hoc 서명, 업스트림 앱 미덮어쓰기 — PROVENANCE 주장. package-macos.mjs는 한도 밖.
  • “앱이 뜨고 라우팅·플러그인·로컬 Docker가 쓸 만하다” — 프로젝트 상태 문단. 실행 관찰 없음.

unknown / not run

npm ci, bootstrap, package, Docker pull, 프로바이더 로그인, 테스트 통과. CI 실패의 정확한 스텝은 워크플로 로그 미열람.

5 · Architecture

아키텍처와 실행 흐름

문서가 그리는 층과 코드 입구는 대체로 같다. 차이는 “읽기 가능한 frontend가 UI 기준선”이 아니라는 점 — 패키징 기준선은 핀된 배송 렌더러다 (docs/ARCHITECTURE.md, 17줄).

shipped renderer (checksum-pinned) │ preload / RPC ▼ electron-main (main.ts → production composition) │ ├── secrets / settings / updater gate ├── remote box connector └── local Docker connector → 127.0.0.1:1340 │ ▼ coordinator (carrier fail-closed) │ inference router cursor │ claude-code │ codex │ openrouter │ host + MCP tools

턴 하나 (라우팅 제공자). UI sendPrompt → coordinator dispatch가 Cursor가 아니면 가로챔 → 트랜스크립트 JSON(mode 0o600)에 user 엔트리 append → 1.2초 composing 유지 → runRoutedProviderText 스트림 → assistant append. Cursor면 가로채지 않고 원격으로 통과.

시스템 프롬프트. system-prompt-assembly.ts는 베이스 프롬프트에 메모리·워크플로·채널·프로필을 조립한다. 본문 덤프 system-prompt.ts(69 KiB)는 이 공개 HTML에 넣지 않는다. 조립 경로만 확인: system-prompt-assembly.ts#L1-L36.

6 · Installation — commands not run

설치와 첫 성공 (실행하지 않음)

요구: macOS Apple Silicon, Node 26.5.x, Xcode CLT, Git LFS, (옵션) Docker Desktop, Claude Code/Codex 로컬 로그인.

commands — not run

git clone <repository-url>
cd grok-bot-0.18-reconstructed
git lfs install
git lfs pull
npm ci
npm run bootstrap
npm run check
npm run package
open "dist/Grok Bot 0.18 Reconstructed.app"

성공 신호(프로젝트 주장): dist/Grok Bot 0.18 Reconstructed.app과 bootstrap의 checksum 로그. 이 분석은 둘 다 관찰하지 않았다.

정리: generated .cache .build dist src/app/dist는 gitignore. Docker 컨테이너 grok-bot-local-vm은 설정 라이프사이클로 중지한다고 문서화. uninstall 스크립트는 선택된 30파일에 없다.

비실행 영수증. checkout/worktree/install/build/test/run/container/hooks/submodules/LFS smudge/filters/textconv = 전부 no.

7 · Recommended reading order

정독 순서

  1. 사용자 (20분): NOTICE → README 주장만 대조 → §4 엔트리포인트.
  2. 운영자 (40분): bootstrap-runtime.mjs → package.json scripts → check.yml → Docker connector.
  3. 기여자 (1h): CONTRIBUTING → tests/*.test.mjs → inference-router.ts.
  4. 보안 리뷰어 (1h): secret-store.ts → sentry.ts → local-docker-host-connector.ts → system-prompt-assembly.ts (덤프 파일은 별도 게이트).
8 · Health and releases

유지보수 신호

2커밋 (전체 역사)
0릴리즈 / 태그
failCI at a9f633e0
1944 / 2184stars / forks (관심만)

HEAD 2026-08-23T20:52:48Z “Document project and preserve original installers”. 부모는 2026-08-22T17:38:52Z “Initial reconstructed source import” (+541 271줄).

CI: 워크플로 1개 .github/workflows/check.yml — ubuntu-latest, Node 26.5.0, npm ci + npm run check + frontend build + publication:check. 캡처된 런 1건 conclusion=failure. PR #5는 LFS checkout 부재를 원인으로 지목(머지되지 않음).

이슈 샘플(PR 행 제외): 열린 6, 닫힌 0. 제목은 Windows 지원, 릴리즈 아티팩트, 라이선스 질의, 라우팅 시크릿/툴 결함. 비저자 인간 응답 시간: 표본 코멘트 미페치 → unknown.

PR 샘플 8: 열림 5, 닫힘 3, 샘플 안 merged_at 없음. 외부 PR이 쌓여 있다.

기여자 API: b-nnett 2 contributions. 기여 건수 집중 ≠ bus factor.

커뮤니티 프로필 health 57. license 파일 없음. CONTRIBUTING/SECURITY/README 있음. CODEOWNERS 404. Dependabot 설정 404.

9 · Security, privacy, supply chain

보안 · 프라이버시 · 공급망

보고: SECURITY.md는 민감 계정 사용 금지, 비공개로 오너에게 보고하라고 한다. 지원 제품이 아니라고 명시.

네트워크/실행 경계. bootstrap은 공개 DMG URL로 fetch. Docker는 ECR 퍼블릭 이미지 pull + 루프백 1340. 라우터는 Cursor 세션, Claude Code, Codex, OpenRouter(API 키)로 나간다. 로컬 추론 자격은 local-docker-credential/inference.json에 mode 0o600.

텔레메트리. Sentry 어댑터와 DSN 심볼이 코드에 있다. 재구성 패키징은 disable env를 기본 주입한다고 테스트가 말한다. 명시 env는 존중. Statsig·OpenTelemetry 의존성이 package.json에 있다. 기본 경로가 실제로 침묵하는지는 실행 없이는 unknown.

시크릿. Electron safeStorage. 평문 레거시 접두 plaintext:v1: 파서가 남아 있다. 암호화 불가면 메모리. 이슈 #11은 라우팅 제공자 시크릿이 Mac-side store에 도달하지 않는다고 주장 — 코드/이슈 충돌, 실행 미검증.

공급망. lockfile 있음. CI는 npm ci --no-audit. SECURITY.md는 Electron 42.1 / Undici 5 / Connect 1 / AI SDK 4 advisories를 추적 중이라고 한다. 공개 어드바이저리 API는 빈 배열 — 빈 값 ≠ 취약점 0. CodeQL/Dependabot alert = unknown.

LFS. 원본 DMG/EXE 포인터만 트리에 있다. 이 캡처는 LFS를 가져오지 않았다.

10 · License

라이선스와 채택 조건

SPDX: 없음. GitHub /license 404. community profile license: null.

NOTICE.md 원문 취지: 공개 바이너리에서 나온 비공식 재구성, Anysphere/Cursor/xAI/SpaceX와 무관, 업스트림 소스 라이선스를 주장하거나 부여하지 않음, Git에서 바이너리를 뺐다고 재배포가 안전해지지 않음, LFS 설치본은 각자 약관.

이 도시의 게시 형태: 변형적 한국어 분석 + 짧은 필요 인용 + 커밋 고정 링크. README 완역 없음. 저장소 전수 복제 없음. 시스템 프롬프트 덤프 없음. 설치본 바이너리 없음. 법률 자문 아님.

11 · Claim ledger

주장 검증 원장

ID주장판정신뢰근거
C001비공식 재구성, 공식 릴리즈 아님supportedhighREADME + NOTICE
C002bootstrap이 0.18.0 DMG SHA-256을 검증한다supportedhighbootstrap-runtime.mjs:28-59; 실행은 안 함
C003라우터 4제공자partialmedium코드+테스트 vs 이슈 #9/#11
C004로컬 Docker는 루프백partialmedium상수 127.0.0.1:1340; pull 미실행
C005업데이터/Sentry/텔레메트리 기본 offpartialmedium가드 테스트; env로 재활성 가능
C006별도 번들 ID + ad-hoc 서명unknownlow문서만, package-macos.mjs 미선택
C007재배포 가능한 소스 라이선스contradictedhighNOTICE + license 404
C008CI greencontradictedhighrun conclusion=failure
C009프론트엔드 전체가 원본 React로 복원contradictedhighREADME가 스스로 부정
C010LFS로 설치본 보존partialmedium.gitattributes 포인터; 바이너리 미취득

충돌을 코드가 자동 승리하지 않는다. C003은 구현과 열린 이슈를 같이 둔다.

12 · Authored Links — No Translation

원문 링크 원장 — README는 완역하지 않는다

저장소 루트 README의 한국어 완역은 싣지 않는다. 소스 코드가 SSOT이고 팩트이며, README는 저자의 주장이다. 문장은 §11과 §4의 대조 입력이다. 원문이 필요하면 핀된 README.md(blob e3eff1cab35077ad446da52b336d17878ce64e9f, 226줄)를 읽어라.

README가 저작한 발생 7개(이미지 1 + 링크 6). 이미지는 독립 라이선스 미확인이라 재게시하지 않는다.

  1. 표제 아래 스크린샷 — 생략된 미디어: Router 설정 스크린샷 (라이선스·상표 미확인, 핫링크 없음)
  2. “Preserved original installers” — research-archives/README.md
  3. “Architecture” — docs/ARCHITECTURE.md
  4. “Project status” — CONTRIBUTING.md
  5. 같은 문단 — docs/PUBLISHING.md
  6. 같은 문단 — PROVENANCE.md
  7. 같은 문단 — NOTICE.md
13 · Collection coverage

수집 범위와 실패

핀 SHA a9f633e09d49a85829b8236331b9e21f7e612634. API 버전 요청 2022-11-28 (지원 목록에 2026-03-10, 2022-11-28). REST 30, 파일 30, 줄 3722, hop 1. 인벤토리 2385 엔트리, blobs 2111, sizes_complete true, truncated false.

선택: README/NOTICE/PROVENANCE/SECURITY/CONTRIBUTING/ARCHITECTURE/PUBLISHING, package.json, check.yml, research-archives README, .gitattributes, bootstrap, 세 엔트리포인트, inference-router 2종, Docker connector, secret-store, update-gate, sentry, system-prompt-assembly, 테스트 8.

의도적 생략: system-prompt.ts 본문, ProductionRenderer 209 KiB, 설치본 바이너리, 라우터 스크린샷, packages/ 프로토콜 생성물.

실패: license/CODEOWNERS/dependabot 404. 트리 API를 커밋 SHA로 치면 루트 SHA가 커밋 ID가 되어 캡처 스크립트가 거부 — 트리 ID로 재요청해 해결. LFS smudge 금지. 이슈 코멘트 본문 미페치.

공개 증거: evidence/index.json · 배달 영수증: delivery-receipt.json

정적 도시. 실행·설치·벤치 없음. 캡처 ID 839dba41-10ef-444c-8b80-63fa9efec51a. 원본 github.com/b-nnett/grok-bot-0.18-reconstructed.