DOEON KWON
Building AI-native 3D worlds where agents and players share the same space, digging into spatial intelligence
Selected work
외부 LLM이 멀티플레이어 3D 월드에 영구 플레이어로 참여할 수 있습니다. 주변 맥락을 인식하고, 장소를 기억하고, 채팅하고, 이동하고, 허가된 월드 액션으로 build합니다.
외부 언어 모델이 SPACE0 월드 안에서 실제 플레이어로 살 수 있게 하는 embodiment 레이어를 만들었습니다. MCP tool 59개, 렌더러 없는 symbolic perception, claim-gated player action, prompt-injection boundary, spatial memory.
- MCP tool 59개가 perception, 이동, build, 채팅, 포스트, Agent 상태를 외부 LLM에 노출합니다
- spatial memory와 Agent 상태는 Supabase에 세션 간 영구적으로 저장됩니다
- god-mode 없음. 월드 액션은 server-side claim, 권한, rate limit을 거칩니다
Shows: agent API · symbolic perception · persistent memory · permissioned action · prompt-injection boundary
- MCP를 통한 렌더러 없는 symbolic perception. 위치, 주변 사람, 포스트, 채팅, 복셀 셀을 고정 grid-to-world 변환으로 해석합니다. GPU도 픽셀도 없이 외부 모델이 세계를 봅니다.
- permissioned action dispatch. 모든 월드 변경은 특권 모델 전용 API가 아니라 server-side claim, rate limit, 영구 신원을 거칩니다.
- prompt-injection boundary는 인식된 플레이어 텍스트를 명령 권한이 아닌 월드 콘텐츠로 봅니다. Agent가 판단할 수 있는 요청일 뿐이며, 신원, 규칙, 오너 지시를 덮어쓸 수는 없습니다.
Sensorium › Working memory › Perception fusion › Retrieval › Inference › Intent dispatch › Result ingestion
Contribution: SPACE0 공동창업자이자 창업 엔지니어로서 embodiment 스택 전체를 만들고 지금도 소유합니다. MCP 기반 symbolic perception, claim-gated action, prompt-injection boundary, spatial memory.

그 문서가 설명하는 월드 안에 올라온 메모리 설계 문서.

같은 문서를 읽기 오버레이로 펼친 모습. 인덱스, 배치, 조직화.
라이브 3D 월드 안에서 공간 메모리 평가 루프를 만들고 돌렸습니다. 가림, 가시선, 기하학 주도 검색을 측정하고, 그 테스트가 드러낸 프로덕션 버그까지 다뤘습니다.
SPACE0 공간 메모리 평가 루프를 만들었습니다. 가림, 가시선, 기하학 주도 검색을 라이브 월드에서 검증해 모호했던 에이전트 메모리 주장을 측정 가능한 프로덕션 동작으로 바꿨고, 수정 사항은 돌아가는 릴레이에 다시 반영했습니다. 내부 연구-엔지니어링 결과물이고 공개 발표된 연구가 아닙니다.
- 라이브 월드 평가로 가림, 가시선, 기하학 주도 검색을 프로덕션 동작과 대조했습니다
- 사전 등록된 결과가 주장을 갈랐습니다. 공간 근접도를 선형 블렌드에 희석하면 자체 동결 기준에서 떨어지고, 기하학 주도 검색과 분리된 visibility predicate는 이깁니다
- 라이브 실행에서 가시성 쿼리를 조용히 무력화하던 릴레이 가시선 앵커 버그를 찾아 결과 기록 전에 고쳤습니다
- 하네스 규모: 통제 월드의 벽 뒤 타깃 849개, query 2,800회 세트, 릴레이로 수집한 memory 120개 corpus, 이어서 숨겨진 타깃 96개를 가진 scripted 라이브 월드 8개. 가설과 반증 기준은 채점 전 git에 동결
Shows: 평가 설계 · pre-registration · 라이브 시스템 계측 · occlusion 테스트 · research-to-product 디버깅
- 사전 등록된 반증이 제 역할을 했습니다. 공간 근접도를 최신성·중요도와 함께 섞어 희석한 기존 블렌드는 자체 동결 기준을 통과하지 못했고 (평균 ΔHit@5 -0.0375, p = 0.306, 위치 무시 벡터 베이스라인 이하), 같은 코퍼스에서 기하학 주도 가중치는 널을 결정적 승리로 뒤집었습니다 (+0.32, p < 10^-15).
- 라이브 시스템 테스트가 중요했습니다. 가림을 시뮬레이션에서 실제 돌아가는 릴레이로 끌어올리자 가시선 앵커 경로의 프로덕션 버그가 드러났습니다. visibility query가 대상 대신 관찰자 앵커로 내달려, 정작 평가해야 할 memory에서 조용한 무동작이었습니다.
- 수정 후 라이브 확인은 git에 동결된 사전 등록 하에, scripted 월드 8개와 벽 뒤 타깃 96개로 실제 구축된 기하학에 대한 가림을 쟀습니다 (false-visible 1.000에서 0.000, 합산 정확 McNemar p = 2.5x10^-29). 강건성 점검은 주장을 부풀리는 대신 좁혔습니다. 행동 수준 이득은 기하학이 아니라 객체 바인딩입니다.
Embodied capture › Pre-register › Falsify shipped blend › Retune geometry-led › Fix relay bug › Live-confirm
Contribution: 평가 설계, 구현, 파일럿, 작성, 주의사항 문서화를 SPACE0 팀을 위해 직접 이끌었습니다.
Rust로 쓴 공유 Manifold Dual Contouring 복셀 엔진을 실제 출시된 네이티브 제품으로 이식했습니다. App Store iOS 클라이언트, 그리고 실제 인증, 패키징, 서명 업데이트 전달을 갖춘 macOS/Windows 클라이언트.
공유 Manifold Dual Contouring 복셀 엔진을 감싸는 네이티브 제품 레이어를 소유했습니다. C FFI xcframework를 통한 Swift 6/TCA/Metal 기반 App Store iOS 클라이언트와 wgpu, Slint, 인증, 패키징, 서명 자동 업데이트를 갖춘 macOS 및 Windows 네이티브 클라이언트.
- iOS: Swift 6, TCA, Metal, Rust FFI를 갖춘 SPACE0 App Store 클라이언트
- 데스크톱: 코드 서명, Sparkle 및 WinSparkle 자동 업데이트를 갖춘 완전한 네이티브 Rust 클라이언트
- 하나의 xcframework가 device arm64, simulator arm64, simulator x86_64를 같은 코어에서 제공합니다
Shows: 네이티브 제품화 · Rust FFI · Metal/wgpu 클라이언트 · 서명 릴리스 · 크로스 플랫폼 런타임 연결
- iOS: Swift 6 엄격 동시성과 The Composable Architecture. 엔진은 세 슬라이스 xcframework로 패키징된 직접 쓴 C FFI를 통해 온디바이스에서 돌아갑니다.
- 데스크톱: wgpu 렌더러와 Slint 인터페이스를 갖춘 완전한 네이티브 Rust 클라이언트. 내장 브라우저 없이 실제 PKCE OAuth와 코드 서명된 Sparkle/WinSparkle 자동 업데이트.
- Rust FFI 마이그레이션: 출시된 앱 경로를 유지하면서 바이트 패리티 픽스처와 플랫폼별 패키징으로 엔진 경계를 넘어 네이티브 클라이언트를 옮겼습니다.
Contribution: 공유 Rust 엔진을 감싸는 네이티브 제품 레이어 전체를 소유합니다. iOS, 데스크톱, C FFI, xcframework 패키징, wgpu + Slint, PKCE 인증, 서명 자동 업데이트.
브라우저 에디터가 캡처된 Gaussian splat을 조각 가능하고 복셀 정렬된 월드 콘텐츠로 바꿔, 스캔이 보기 전용이 아니라 편집 가능해집니다.
캡처된 splat을 복셀 해상도 조각과 연결하는 WebGL/Three.js Gaussian splat 에디터를 만들었습니다. 3D 스캔이 정적 장면 캡처가 아닌 편집 가능한 월드 소재가 될 수 있습니다.
- Gaussian splat 조각을 위한 오픈소스 브라우저 에디터
- 복셀 해상도 조각이 캡처된 splat을 편집 가능한 월드 콘텐츠에 연결합니다
- scan-to-world 툴링을 위한 WebGL, Three.js 프로토타입
Shows: Gaussian splatting · 복셀 편집 · 브라우저 3D 툴링 · scan-to-world 워크플로우 · WebGL 프로토타이핑
- 캡처된 Gaussian splat을 완성된 장면이 아닌 원자재로 취급하는 브라우저 기반 에디터. 조각하고, 정렬하고, 복셀 해상도로 내보냅니다.
- 복셀 해상도로 조각하면 자유 형태 splat이 월드 그리드에 맞춰져, 스캔이 외래 메시가 아니라 이미 정렬된 복셀 장면으로 들어옵니다.
- scan-to-world 워크플로우를 탐색하고 SPACE0 에셋 파이프라인 방향을 잡기 위한 오픈소스 프로토타입으로 만들었습니다.
Captured splat › Browser viewer › Voxel-resolution carve › Editable world content
Contribution: Gaussian splat과 복셀 월드 편집을 연결하는 개인 오픈소스 프로토타입.

사진 한 장이면 파이프라인 job이 시작됩니다.

완성된 3D 모델, 어느 월드에나 바로 올릴 수 있습니다.

박물관 탁자를 배치 가능한 에셋으로 캡처.
휴대폰 사진 하나가 월드에 바로 올릴 수 있는, 리깅되고 압축된 game-ready 3D 에셋이 됩니다. GPU 워커, 검증, rig 병합, material map, web/iOS/데스크톱 내보내기가 뒤에서 처리됩니다.
휴대폰 사진 하나를 리깅되고 압축된 game-ready 3D 에셋으로 바꾸는 파이프라인을 만들었습니다. GPU 워커에서 셀프 호스팅한 Hunyuan3D 2.1, UniRig 자동 리깅, 생성된 material map, atomic claim Supabase RPC job queue를 통한 meshopt/KTX2/USDZ 출력.
- SaladCloud RTX 4090 워커에서 셀프 호스팅한 Hunyuan3D 2.1. 웨이트를 이미지에 내장해 콜드 워커도 체크포인트 다운로드 없이 시작합니다
- 하나의 albedo에서 material map(normal, height, roughness, AO)을 생성합니다
- Redis 없는 GPU job queue를 Supabase 위에 만들었습니다. RPC로 atomic하게 claim하고 앱과 독립적으로 확장됩니다
Shows: GPU worker orchestration · 3D 에셋 검증 · rig 병합 · material-map 생성 · 크로스 플랫폼 내보내기
- SaladCloud RTX 4090에서 Python GPU worker로 Hunyuan3D 2.1을 셀프 호스팅했습니다. 콜드 스타트 속도를 위해 모델 weight를 컨테이너 이미지에 내장했습니다.
- UniRig로 자동 리깅. 단순화된 proxy에서 skeleton과 skinning을 예측하고 여러 seed를 채점한 뒤, 토폴로지, UV, 텍스처가 살아있도록 풀 해상도 메시에 rig를 다시 합칩니다.
- 검증과 실패 처리를 갖춘 프로덕션 에셋 경로. 메시 생성, rig 병합, material map 생성, 압축, 내보내기에서 나쁜 출력은 job으로 실패하고 월드에 유출되지 않습니다.
Contribution: 오픈 모델을 바탕으로 엔드 투 엔드로 혼자 만들었습니다. GPU 워커, UniRig 병합, material map 생성, meshopt, KTX2, USDZ 내보내기, Supabase RPC job queue, 미리보기 렌더링.
월드당 하나의 Cloudflare Durable Object가 presence, 편집, 채팅, agent action을 담당해 사람과 Agent가 같은 라이브 공간을 공유합니다.
공유 라이브 기반을 만들었습니다. SPACE0 월드당 하나의 Cloudflare Durable Object가 presence, 편집, 채팅, agent action을 담당합니다. 단기 서명 토큰이 모든 연결을 인증하고 오작동 Agent는 다음 참여 시 차단 목록에 올라갑니다.
- 월드당 하나의 Cloudflare Durable Object, 메모리에서 presence와 세션 상태를 유지합니다
- web 앱이 발행한 단기 서명 토큰이 모든 연결을 인증합니다
- 각 Durable Object가 자체 레이턴시와 메시지 볼륨을 보고합니다
- Ray Vibe Awards 2025 Best Social Vibe 수상. 심사위원은 '대부분의 브라우저 게임이 시도조차 하지 않는 캐주얼한 presence'를 짚었습니다
Shows: 라이브 세션 모델 · agent·player presence · 서명된 실시간 인증 · Durable Objects · WebSocket 인프라
- 월드당 하나의 Durable Object가 presence와 세션 상태를 메모리에 유지합니다. 모든 읽기는 DO 안에서 로컬로 처리되고 쓰기는 연결된 모든 클라이언트에 즉시 전파됩니다.
- 오작동 Agent는 rate limit을 위반하거나, 잘못된 action payload를 보내거나, server-side claim 거부를 반복해서 받는 Agent입니다. 세션 중이 아닌 다음 참여 시 차단 목록이 작동합니다.
- web 앱이 발행한 단기 서명 토큰이 모든 WebSocket 연결을 게이팅합니다. 릴레이는 claim된 신원을 절대 신뢰하지 않습니다.
Web / iOS / desktop › signed token › Durable Object per world › backend (voxel store)
Contribution: web, iOS, 데스크톱, MCP 구동 Agent가 하나의 라이브 세션 모델을 공유하는 릴레이 아키텍처를 만들고 소유합니다.

월드 surface에 놓인 이미지 포스트, web.

깊이와 클리핑이 그대로 살아있는 미디어 카드, web.
포스트가 패널이 아닌 월드 안에 살아서 월드 자체가 소셜·UGC surface가 됩니다. 텍스트, 이미지, 동영상 카드가 하나의 백엔드에서 web, 데스크톱, iOS에 렌더링됩니다.
세 플랫폼에서 인월드 미디어 포스트를 출시했습니다. surface에 올려진 텍스트, 이미지, 동영상 카드는 web(Three.js), 데스크톱(wgpu 위 GPU 가속 Slint 캔버스), iOS(SwiftUI)에서 깊이 보정 decal로 렌더링되고 모두 같은 백엔드를 씁니다.
- 세 렌더러(Three.js, wgpu, SwiftUI)가 하나의 공유 백엔드를 읽습니다
- 데스크톱: GPU 가속 Slint 캔버스 위 드래그, 크기 조정, 전체 실행취소/다시 실행을 갖춘 design-surface 편집 도구로 작동합니다
- 모든 클라이언트(web/desktop/iOS)에서 올바른 깊이, 가림, 표면 정렬로 decal이 투영됩니다
Shows: in-world UGC surface · 크로스 플랫폼 decal 렌더링 · design-surface 편집 · 실행취소/다시 실행 · 공유 백엔드
- 포스트는 사이드바 패널이 아닌 월드 공간에 있습니다. 깊이 보정 decal로 표면에 앉아있어 월드 자체가 UGC surface가 됩니다.
- 데스크톱에선 캔버스가 곧 저작 도구입니다. 포스트가 놓일 바로 그 월드 공간 뷰에서 배치하고 편집합니다. 별도 에디터가 없습니다.
- 하나의 백엔드가 세 개의 별개 렌더러(Three.js web, wgpu 데스크톱, SwiftUI iOS)를 지원하면서 포스트 스키마에 플랫폼별 차이가 없습니다.
Contribution: 세 플랫폼 모두 직접 만들고 출시했습니다.

모든 컴포넌트를 페이지에서 바로 미리보기할 수 있습니다.

각 페이지에 라이브 미리보기와 cargo·npm 복붙 설치가 함께 있습니다.
Slint 네이티브 앱을 위한 오픈소스 컴포넌트 레지스트리. 컴포넌트 56개, npm과 Rust crate 설치 도구, MCP 서버, 라이브 Slint-WASM 문서를 제공합니다.
slintcn을 만들었습니다. Slint 네이티브 앱을 위한 shadcn 스타일 컴포넌트 레지스트리로, 컴포넌트 56개와 블록 8개, npm과 crates.io 설치 도구, AI Agent를 위한 MCP 서버, 라이브 Slint-WASM 문서를 포함합니다. SPACE0 데스크톱 작업에서 시작해 네이티브 클라이언트에 다시 적용했습니다.
- 컴포넌트 56개와 블록 8개를 같은 레지스트리에서 npm 또는 crates.io로 설치할 수 있습니다
- GitHub 스타 60개, r/rust 런칭 62K 뷰
- MCP 서버로 AI Agent가 컴포넌트를 탐색하고 설치하고 조합할 수 있습니다
Shows: 오픈소스 레지스트리 설계 · Slint 컴포넌트 시스템 · npm·crates.io 배포 · MCP 툴링 · WASM 라이브 문서
- 하나의 레지스트리가 npm과 crates.io 설치 도구 모두를 지원합니다. web 툴링과 네이티브 Rust 클라이언트가 중복 없이 같은 컴포넌트 소스를 공유합니다.
- MCP 서버가 레지스트리를 AI Agent에 노출합니다. Agent가 컴포넌트를 탐색하고 문서를 읽고 이름으로 프로젝트에 설치할 수 있습니다.
- 실제 제품에 필요해서 시작했습니다. 컴포넌트 시스템은 SPACE0 데스크톱 클라이언트에서 자랐고, 레지스트리에 오르기 전에 실제 제품에서 먼저 동작했습니다.
Contribution: SPACE0 데스크톱 작업에서 시작해 독립 오픈소스 프로젝트로 운영 중입니다.
하나의 타입 기반 단일 소스(single source of truth)에서 디자인 토큰, 카피, 물리 상수, 분석 이벤트를 drift가 출시되기 전에 web, Swift, Rust, Slint로 팬아웃합니다.
디자인 토큰, 카피, 물리 상수, 스카이/카메라 설정, 분석 이벤트를 위한 하나의 타입 기반 단일 소스가 생성기를 통해 web, iOS Swift, Rust, Slint로 팬아웃됩니다. Drift는 출시 전에 pre-push 게이트에서 실패합니다.
- TOML 기반 코드젠이 설정을 web CSS/TypeScript, iOS Swift, 네이티브 Rust, Slint로 팬아웃합니다
- 실제 버그 클래스를 잡았습니다. 한 클라이언트에서 다른 값으로 drift된 물리 상수
- Drift는 프로덕션이 아닌 pre-push 게이트에서 잡힙니다
Shows: 코드젠 파이프라인 · 타입 기반 설정 · 크로스 플랫폼 drift 방지 · pre-push 게이트 · TOML 소스
- 하나의 TOML 파일이 소스를 정의하고 생성기가 web CSS/TypeScript, iOS Swift, 네이티브 Rust, Slint로 팬아웃합니다. 모든 플랫폼이 같은 값을 읽습니다.
- 실제 버그 클래스를 잡았습니다. drift된 상수는 낙하 속도를 좌우했고, 그대로 나갔다면 클라이언트 간 물리가 어긋났을 텐데 게이트가 pre-push에서 잡았습니다.
- Drift는 프로덕션이 아닌 pre-push 게이트에서 실패합니다. 생성기가 자신의 출력을 검증하므로 깨진 코드젠은 빌드에 도달하지 못합니다.
TOML config › generator › web TS / CSS › iOS Swift › native Rust / Slint
Contribution: 코드젠 시스템과 그 게이트를 만들고 소유합니다.
Background
Recognition
Writing
Contact