Shopify가 사내 Slack에 상주시킨 AI 코딩 에이전트. 돌아가는 코드 분량보다 그것이 돌아가는 *인프라(Aquifer)*와 **“공개에서만 동작한다”**는 설계 철학이 더 큰 이야기다. River 자체는 Aquifer라는 내부 에이전트 플랫폼의 여러 profile 중 하나일 뿐이며, “다음 에이전트는 플랫폼이 아니라 프로필로 추가한다”는 구조가 이 엔티티의 핵심 주장이다. 원문: Burke Libbey·Javier Moreno·River 공동저자, “Under the River (2026)”, Shopify Engineering, 2026-05-28. 상세 요약은 2026-07-11-shopify-under-the-river.
개요
- 직원은 공개 Slack 채널에서
@river멘션으로 호출한다 (다이렉트 메시지 불가). - River는 코드 읽기·테스트 실행·PR 오픈·데이터 웨어하우스 조회·프로덕션 트레이스 분석을 수행하고, 때로는 “그 패턴은 안 좋다”며 계획에 반박한다.
- Tobi Lütke의 표현: “회사를 위한 교습 워크숍(a teaching workshop for our company).” 원문에 River가 공동저자로 표기됐다.
- River는 ~2026년 3월에 런칭했고, 2026-05-28에 공개된 글 시점에 Aquifer는 profile별로 점진 롤아웃 중.
Aquifer — River가 올라탄 3계층 분리 플랫폼
가장 결정적 설계: harness는 샌드박스 밖에 존재한다 (Anthropic “Scaling Managed Agents”, 2026-04, “Decouple the brain from the hands”가 검증).
| 계층 | 역할 | 수명 |
|---|---|---|
| Session | Postgres 기반 append-only 이벤트 로그, 영속 정체성 — “지금까지 무슨 일이 있었는가”의 정규 진실 | 영속 |
| Harness | 에이전트 루프(히스토리 읽기 → 모델 호출 → 도구 인텐트 방출), 샌드박스 밖 | 일회용(재생성 비용 저렴) |
| Sandbox | 코드 실행(파일시스템·셸·레포·bash·edit·build·test) | 일회용(대개 fresh) |
세 가지 결과 성질: 안전(파괴 명령 폭반 반경 바깥에 루프), 교체 가능성(모델·런타임·언어를 샌드박스 건드리지 않고 교체), 관측 가능성(전체 의사결정 스트림이 한 곳에서 보임).
- Session cells: 세션이 살아나면 Go 런타임 + 하네스를 같은 프로세스 그룹으로 실행하는 일회용 cell이 구체화. idle → 종료, 다음 호출에 새 cell(다른 호스트일 수 있음). 정체성·히스토리는 Postgres에 살아 끊김 없음. 철학: “세션 수준에서는 가축(cattle, not pets).”
- 가장 중요한 제약:
Cells die, sandboxes die, machines die. The conversation doesn't.(Slack 스레드가 그것을 서빙한 서버보다 오래 사는 것과 같다.)
Profiles over platforms
River는 Aquifer 위의 profile 하나다. profile = 데이터(시스템 프롬프트·스킬·확장·샌드박스 정책·모델 기본값)를 Nix로 만들어 bundle로 배포. PR 리뷰, 헤드리스 “pi” 에이전트 Vanilla도 별도 profile. 같은 기판 위 세 모드: Interactive(River), Automation(PR 리뷰, 사람 없이도), Job(CI/배치, 일회용). 새 에이전트 제품 = bundle 하나 추가, 새 플랫폼이 아니다.
공개 기본(public-by-default)
- “River only works in the open. No direct messages.”
- “사적 에이전트엔 천장이 있다 — 키보드 앞의 그 사람. 공개 에이전트는 그 이후의 모든 세션을 가르친다.”
- 공개 Slack transcript corpus → 패턴 채굴 → River의 스킬·프롬프트·기본값으로 역류 → “모델 재학습 없이 에이전트가 더 똑똑해진다.”
- 상호 철학: agent-friendly ≈ human-friendly — “코드베이스를 에이전트가 읽기 쉽게 만드는 일은 인간 엔지니어에게 진 빚을 갚는 것. 에이전트는 그 빚을 보이게 한다.”
규모 (원문 최근 30일 윈도우)
- 병합 PR ~1/8이 River 공동저자
- 5,170개 채널에서 59,918 세션, 7,000명 이상 작업 관여
- River 공동저자 PR 3,536건 병합
- 세션 중위 길이 19분, 도구 호출 중위 50회
- 매 세션마다
river_sessions테이블에 사용량 쓰임 (River 자기 기록)
“Under the River”에 담긴 두 근본 베팅 (2024 초)
- 모노레포 World로 전체 코드 통합
- 모든 것을 Nix로(개발·CI·프로덕션 동일 기판)
모노레포 이전은 “고통스러웠다” — CI 한 자릿수 배 확장, 머지 큐 load-bearing, 빌드 캐시가 제품화, 의존성 재컴파일 가정 위 테스트 인프라 재건.
관련 노트
- 2026-07-11-shopify-under-the-river — “Under the River” 상세 한국어 요약
- harness — 에이전트 하네스 개념; River·Aquifer는 Session/Harness/Sandbox 분리의 실증 사례
- moc-ai-agents-harness — 하네스 MOC
- 2026-07-11-building-the-future-of-agentic-infrastructure — Anthropic 좌담에서 Caitlyn이 River를 엔드투엔드 개발 에이전트 사례로 언급
- 2026-07-04-harness-engineering-for-self-improvement — 하네스를 영속 실행 시스템으로 본 정리 (안전 경계를 루프 밖에)
- loop-engineering / code-native-memory — 상태·지식을 파일로 영속화하는 회사 단위 실증