
Dify 개발사인 LangGenius가 선보이는 「에이전트를 위한 오픈소스 백엔드 Mosoo」를 실제로 구동해 보았다
요약
Dify 개발사 LangGenius가 에이전트 배포를 위한 오픈소스 백엔드인 Mosoo를 공개했습니다. Mosoo는 샌드박스 관리, 세션 영속화, 사용량 측정 기능을 제공하여 로컬 에이전트를 상용 서비스 수준의 API로 전환할 수 있게 돕습니다.
핵심 포인트
- 에이전트 전용 'Supabase'를 표방하는 오픈소스 백엔드
- 샌드박스 관리, 세션 영속화, 사용량 측정 기능 제공
- TypeScript, Bun, Cloudflare 인프라 기반 기술 스택
- BYOK(Bring Your Own Key) 방식으로 모델 프로바이더 연결
Dify의 개발사로 알려진 LangGenius가 새로운 OSS 제품인 Mosoo를 공개했습니다.
한마디로 말하자면 "에이전트를 위한 백엔드 (Backend)"입니다. Claude Code나 Codex와 같은 코딩 에이전트를 로컬에서 사용하는 것은 쉽지만, 그것을 자신의 제품 사용자들을 위해 상시 가동시키고, 다수 인원·다수 세션에서 안전하게 구동하며, 비용을 가시화하고, 공개 API로 제공하려면…… 샌드박스 관리(Sandbox Management)·세션 영속화(Session Persistence)·사용량 측정(Usage Metering)과 같은 많은 메커니즘을 직접 구축해야 합니다. Mosoo는 그 부분을 대신해 주는 OSS입니다.
Mosoo가 커버하는 구성을 도식화하면 다음과 같습니다.
Web UI · Public API · Claude Code의 /skill
・채팅 채널 등 어떤 입구로 호출하더라도, 샌드박스 관리·세션 영속화·사용량 측정이라는 Mosoo의 공통 기반을 경유하여, 최종적으로 BYOK(Bring Your Own Key)로 가져온 모델 프로바이더(Model Provider)에 도달하는 구조입니다. 이어지는 장에서는 실제로 이 기반의 일부(샌드박스 기동·세션 영속화·비용 측정)를 구동하여 확인해 보겠습니다.
본 기사에서는 공식 사이트와 문서의 내용을 정리한 후, 실제로 계정을 생성하여 Agent를 하나 생성·공개하고, Web UI와 curl 양쪽에서 구동하여 얻은 실제 동작을 기술합니다.
Mosoo란 무엇인가

공식 FAQ에서는 다음과 같이 정의되어 있습니다.
Mosoo is an open-source backend for managed agents — think Supabase, but for cloud agents. It's self-hostable and BYOK, and it turns agents from one-off desktop scripts into deployable, metered, API-callable services you can build products on.
「에이전트 버전의 Supabase」라는 비유가 이해하기 쉽습니다. 로컬의 일회성 스크립트였던 에이전트를, 배포 가능·사용량 측정 가능·API 호출 가능한 「서비스 (Service)」로 바꾸는 포지셔닝입니다.
톱 페이지의 카피는 다음과 같습니다.
Managed agents, built open source.
One API for Codex, Claude Code, OpenClaw, and Hermes Agent. Run them as cloud agents in isolated sandboxes, and ship to your users without rebuilding the runtime.
Open source (Apache-2.0) -
Self-hostable (자신의 Cloudflare 계정에 원클릭 배포 가능) -
BYOK (Bring Your Own Key — 모델 프로바이더의 API 키는 직접 가져옴) -
현재는 Alpha 버전
개발사는 Dify와 동일한 LangGenius입니다. GitHub 리포지토리는 langgenius/mosoo 입니다.
기술 스택과 셀프 호스트 (Self-host)
README에 따르면 기술 스택은 다음과 같습니다.
- 언어: TypeScript (99% 초과)
- 패키지 매니저: bun (
>= 1.4.0-canary.1) - 태스크 러너: just (
>= 1.51) - 인프라: Cloudflare Workers (API), D1 (분산 SQL), R2, KV
- 로컬 실행 환경: Docker
로컬 개발은 just setup → just dev를 통해 http://localhost:8787에서 헬스 체크(Health Check)를 할 수 있습니다.
셀프 호스트는 톱 페이지에 있는 「Deploy to Cloudflare」 버튼을 통해 Cloudflare의 원클릭 배포가 가능합니다. Workers · D1 · R2 · KV가 자신의 계정 내에 자동으로 프로비저닝(Provisioning)되며, 프롬프트나 트래픽이 자신의 에지(Edge) 밖으로 나가지 않습니다. 운영 및 청구는 완전히 자신의 Cloudflare 계정 내에서 완결됩니다.
이번에는 셀프 호스트가 아니라, 공식에서 제공하는 매니지드 버전(try.mosoo.ai)으로 계정을 생성하여 검증했습니다.
왜 「백엔드 (Backend)」가 필요한가
FAQ 섹션에서 적절하게 언어화되어 있어 이를 인용합니다.
For a one-off problem, a local agent or a single Skill is the right, minimal tool — no need to abstract anything. The moment you have to build, evaluate, deploy, and run agents for other people, concurrently and for longer, the tooling fragments and you end up gluing point solutions across the whole lifecycle.
(일회성 문제의 경우, 로컬 에이전트 (Local Agent)나 단일 스킬 (Skill)이 적절한 최소한의 도구이며, 무엇인가를 추상화할 필요가 없습니다. 하지만 다른 사람들을 위해, 동시에, 그리고 더 장기적으로 에이전트를 구축, 평가, 배포 및 실행해야 하는 순간이 오면, 툴링이 파편화되어 전체 라이프사이클에 걸쳐 포인트 솔루션 (Point Solutions)들을 이어 붙이게 됩니다.)
A local agent only reproduces if the same files, session history, context, MCP tools, and Skills are available again. Mosoo makes the agent, its Skills, and its Knowledge first-class App resources instead of fragments on a personal machine, so a run reproduces from the API rather than a copy of your disk.
(로컬 에이전트는 동일한 파일, 세션 히스토리 (Session History), 컨텍스트 (Context), MCP 도구, 그리고 스킬이 다시 사용 가능할 때만 재현됩니다. Mosoo는 에이전트와 그 스킬, 그리고 지식 (Knowledge)을 개인용 머신의 파편이 아닌 일급 앱 리소스 (First-class App Resources)로 만들어, 실행 시 디스크의 복사본이 아닌 API를 통해 재현되도록 합니다.)
요컨대 「자신의 머신 위에 있는 Claude Code」는 해당 머신의 상태(파일, 히스토리, MCP 설정)에 의존하는 일회성 존재입니다. Mosoo는 이를 앱의 리소스 (Agent / Skill / Knowledge)로 추상화하여, API를 통해 언제든 동일하게 호출할 수 있는 상태로 만듭니다.
실행 모델도 특징적입니다.
Mosoo mounts a fresh sandbox the instant an agent runs, then tears it down when the turn ends. No standing fleet to pay for or babysit: compute appears on demand, scoped to the session, and disappears.
(Mosoo는 에이전트가 실행되는 즉시 새로운 샌드박스 (Sandbox)를 마운트하고, 턴 (Turn)이 종료되면 이를 제거합니다. 비용을 지불하거나 관리해야 하는 상시 플릿 (Standing Fleet)은 없습니다. 컴퓨팅 자원은 세션 범위 내에서 온디맨드 (On-demand)로 나타났다가 사라집니다.)
상시 가동되는 에이전트 군을 유지하는 것이 아니라, 실행할 때마다 일회용 샌드박스를 마운트하고 턴 종료와 함께 파기합니다. 이는 후술할 실측에서도 확인할 수 있었습니다.
핵심 개념
관리 화면을 조작해 본 결과, 다음과 같은 개념으로 구성되어 있습니다.
| 개념 | 설명 |
|---|---|
| App | Agent, Files, Config (Skills / MCP servers / Providers / Environments)를 묶는 단위. 로그인 직후 「Default App」이 자동 생성됨 |
| ... |
Runtime에 대한 답변도 흥미로워 인용합니다.
In the current alpha the Claude Agent SDK, OpenAI runtime, and OpenCode fallback runtime are live, and every harness is normalized to the same interface: streaming, tool calls, native resume, MCP permissions, and session replay. OpenClaw, Hermes, and Gemini are on the roadmap. Because the runtime is a swappable harness, an agent is configured once and resolves a single provider credential at launch, so you can move between vendors without touching the agent definition.
(현재 알파 버전에서는 Claude Agent SDK, OpenAI 런타임 (Runtime), 그리고 OpenCode 폴백 런타임 (Fallback Runtime)이 활성화되어 있으며, 모든 하네스 (Harness)는 스트리밍 (Streaming), 도구 호출 (Tool Calls), 네이티브 재개 (Native Resume), MCP 권한, 세션 리플레이 (Session Replay)와 같은 동일한 인터페이스로 정규화되어 있습니다. OpenClaw, Hermes, Gemini는 로드맵에 있습니다. 런타임은 교체 가능한 하네스이기 때문에, 에이전트는 한 번만 설정하면 실행 시 단일 프로바이더 (Provider) 인증 정보를 해결하므로, 에이전트 정의를 수정하지 않고도 벤더 간에 이동할 수 있습니다.)
에이전트의 정의 자체는 런타임에 의존하지 않는 형태로 유지되며, 실행 시점에 하나의 프로바이더 인증 정보를 해결하는 설계입니다.
실제로 Agent를 만들어 구동해 보기
여기서부터는 실제로 브라우저에서 계정을 생성하고, 에이전트를 하나 만들어 구동한 기록입니다.
1. 로그인 및 App 생성
mosoo.ai
「Log in」을 통해 try.mosoo.ai/login으로 이동하면, Google 로그인 또는 이메일+확인 코드로 로그인할 수 있습니다. 첫 로그인 시에는 「Default App」이 자동으로 생성되었습니다.
2. Agent 생성
사이드바의 「New agent」에서 생성합니다. 입력 항목은 이름과 Runtime 두 가지만 있어 심플합니다. 이번에는 다음과 같은 설정으로 support-copilot이라는 이름의 Agent를 만들었습니다.
- Runtime: Claude Agent SDK (Anthropic) - Model: Claude Sonnet 5 - Agent type: Assistant Agent
3. Provider key (BYOK) 등록
생성 직후에는 「Provider key required」라는 차단 메시지가 나타나며, 이 상태로는 실행할 수 없습니다. Config → Providers 화면에서 Anthropic의 API 키를 App 단위로 등록해야 합니다 (BYOK). 등록을 마치자 Claude Agent SDK와 OpenCode 두 Runtime 모두 「Ready・Anthropic configured」로 변경되었습니다.

4. Preview에서 실행
Provider key 등록 후, 화면 오른쪽의 Preview Chat에서 실제로 메시지를 보내보겠습니다.
당신은 무엇을 할 수 있나요? 자기소개를 해주세요.
상태가 Working → Thinking으로 전이되더니, 몇 초 후 스트리밍(Streaming) 방식으로 응답이 돌아왔습니다.
저는 Claude Code (Anthropic에서 제작한 CLI 에이전트)입니다. 소프트웨어 엔지니어링 관련 태스크를 도와드릴 수 있습니다.
주요 기능:
- 코드 관련: 버그 수정, 신규 기능 구현, 리팩토링, 코드 설명 및 리뷰
- 파일 조작: 기존 코드 검색·독해·편집 (Read/Edit/Write/Glob/Grep 등의 도구 사용)
- 조사: 코드베이스 구조 이해, 문서 검색, 웹 검색 및 웹 페이지 취득
- 실행: 셸(Shell) 명령어 실행 (빌드, 테스트, 의존성 설치 등)
- Git/GitHub: 커밋 생성, PR 생성, Issue/PR 확인 (gh CLI 경유)
- 프론트엔드 작업: 변경 내용을 브라우저에서 실제로 동작 확인하며 구현
현재 디렉토리 (
/workspace/se/01KXGPF35YVA6Q8XJGCRR9JGR5)에서 작업 중인 프로젝트가 있다면, 그 내용을 알려주시면 구체적으로 지원하겠습니다.
「Claude Agent SDK」를 선택하면, 실체는 Claude Code (CLI 버전) 그 자체가 샌드박스(Sandbox) 내에서 구동된다는 동작을 확인할 수 있었습니다. 워크스페이스 경로에 Agent ID가 포함되어 있는 것으로 보아, Agent마다 전용 샌드박스 디렉토리가 마운트(Mount)되어 있다는 점도 알 수 있습니다. 마케팅 사이트에 기재되어 있던 「mosoo run을 하면 /workspace가 마운트된다」라는 데모가 그대로 입증된 형태입니다.

5. Logs / Cost 탭에서 실행 결과 확인
Agent 상세 화면에는 Preview 옆에 Logs · Cost · Terminal 탭이 있습니다.
Logs 탭의 「Sessions」에는 실행 이력이 세션 단위로 기록됩니다. 이 글을 작성하기 위해 Preview와 API(후술)를 모두 실행한 후의 상태에서는 다음과 같은 2건이 기록되어 있었습니다.
| SESSION | STATUS | RUNTIME | MODEL | REPLAY |
|---|---|---|---|---|
| Mosoo란 무엇인지 한마디로 알려주세요. | IDLE | claude-agent-sdk | claude-sonnet-5 | ended 9h ago |
| 당신은 무엇을 할 수 있나요? 자기소개를 해주세요... | IDLE | claude-agent-sdk | claude-sonnet-5 | ended 9h ago |

Cost 탭에서는 이러한 실행에 소요된 실제 비용의 누적액이 표시됩니다.
- Agent spend: $0.05 - Runs: 2 - Avg tokens / run: 22.1K - Cache hit: 100%

「App・Agent・Model별로 비용을 분해하여 보여준다」는 FAQ의 답변("An App overview with agent lifecycle status, recent threads, provider keys, runtime dependencies, and App usage broken down by agent and model with token and cache details.")은 목업(Mockup)이 아니라 실제로 작동하는 대시보드였습니다.
Publish하여 public API로 호출하기
Publish
Agent의 상태는 처음에는 Draft입니다. 오른쪽 상단의 「Publish」를 누르면 확인 모달이 나타나며, 몇 초 만에 v1 live로 전환되었습니다. Agents 목록에서는 Published 상태와 Agent ID를 확인할 수 있습니다.

공개 후에는 다음 정보가 API Access 패널에 표시됩니다.
Agent ID (bare ULID, 예: 01KXGNZXVWXFJA69PEW01KZSCA)
API Token (Settings → API tokens에서 발행)
API Reference (https://mosoo.ai/docs/api-reference/)
curl로 Thread 생성하기
공식 문서의 「Quickstart」에 따라, 실제로 curl을 사용하여 Thread를 생성해 보겠습니다.
export MOSOO_API_BASE="https://try.mosoo.ai/api/v1"
export MOSOO_API_TOKEN="mst_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
export MOSOO_AGENT_ID="01KXGNZXVWXFJA69PEW01KZSCA"
...
응답 (실제 출력, 일부 발췌):
{
"links": { "thread": "/api/v1/threads/01KXGPP3HSE9Q0KJAETSENEBQ4" },
"run": {
...
thread.id를 사용하여 이벤트 로그를 폴링(Polling)합니다.
curl -sS "$MOSOO_API_BASE/threads/$MOSOO_THREAD_ID/events?limit=100" \
-H "Authorization: Bearer $MOSOO_API_TOKEN"
실제로 흘러나온 이벤트의 type을 시계열로 나열하면, 샌드박스(Sandbox)의 기동부터 Claude Code의 응답까지의 내부 스테이지가 그대로 보입니다.
user.message
session.status ("run.queued")
session.status ("Runtime timing context_hydration: 896 ms.")
...
run.queued부터 Web Search 도구의 호출, 응답의 스트리밍(Streaming) 전송, 토큰 사용량 기록까지 모든 것이 공개 이벤트로서 하나의 타임라인에 올라와 있음을 확인할 수 있었습니다. 소요 시간은 대략 큐 투입부터 완료까지 약 38초 (그중 context_hydration = 샌드박스 기동 및 컨텍스트 복원에 약 4.5초 전후)였습니다.
최종적인 Run의 상태를 가져오면 completed로 되어 있으며, finalOutput.text에 Agent의 최종 답변이 들어 있습니다.
curl -sS "$MOSOO_API_BASE/threads/$MOSOO_THREAD_ID" \
-H "Authorization: Bearer $MOSOO_API_TOKEN"
막혔던 점: Agent는 「Mosoo 자신」을 모른다
이 부분은 실제로 해보고 나서야 처음 알게 된 동작입니다. 「Mosoo란 무엇인지 한마디로 알려주세요」라고 물었더니, Agent(Claude Code)는 WebSearch 도구로 「Mosoo란 무엇인가」를 검색하여, 청소기 브랜드인 「MOOSOO」의 정보를 가져와 다음과 같이 대답했습니다.
MOOSOO(모수)는 일중 합작 기업 「JIMO」가 전개하는 가전 브랜드로, 가성비 좋은 코드리스 청소기 등을 주로 Amazon, Rakuten 등에서 판매하고 있습니다.
물론 틀린 말입니다 (본래의 Mosoo.ai와는 무관합니다). 이는 결함이라기보다, Assistant Agent의 기본 설정에는 자사 문서 등의 **Knowledge (지식)**가 아무것도 연결되어 있지 않기 때문에 발생한 지극히 당연한 동작입니다. FAQ에 나와 있듯이, Agent 구축 시에는
"You set the agent's runtime, attach Skills, connect Knowledge, bind Channels, and wire in API integrations"
라는 절차를 통해 Knowledge나 Skills를 명시적으로 연결해야 합니다. 이번에는 최소 구성 상태로 테스트했기 때문에, "토대가 되는 기초 지식을 갖추지 못한 범용 에이전트"가 그대로 웹 검색에 의존하게 된 결과가 나왔습니다. 뒤집어 말하면, Mosoo 자체는 모델의 지식이나 도구(Tool)의 동작 그 자체에는 관여하지 않고, 어디까지나 실행 환경과 배선(Wiring)을 제공하는 레이어(Layer) 역할에 충실하다는 증거라고도 할 수 있습니다.
Web UI와 API는 동일한 데이터를 공유한다
API를 통해 생성한 Thread는 Web UI의 「Runs」 화면에도 그대로 표시되었습니다.
| Mosoo가 무엇인지 한마디로 알려주세요. |
[support-copilot] done |

Cost 탭 또한, Web UI에서 호출한 분량과 API에서 호출한 분량이 합산되어 $0.05 / 2 runs / cache hit 100%라고 표시됩니다. "CLI에서도 콘솔에서도 동일한 App 상태를 조작할 수 있다"라는 메인 페이지의 문구("Manage everything from the CLI or the console.")는, 실제로 API와 UI 양쪽에서 동일한 Agent를 호출하여 확인할 수 있었습니다.
배포 측면: 어디서든 동일한 Agent를 호출할 수 있다
마케팅 사이트에서는 공개한 Agent로 연결되는 경로로 다음을 소개하고 있습니다 (Skill.md 내보내기와 API 호출은 이번에 실제로 확인하였으며, 채널 연동은 이번에 검증하지 않았습니다).
- Skill.md 내보내기: App을 Skill.md로 내보내어, Claude Code 등의
/skill로서 그대로 재사용 가능 - Public Thread API:
POST /v1/agents/{agentId}/threads형태의 타입 지정(Typed) HTTP 엔드포인트로 호출 (이번에 검증한 방식) - 채팅 채널 연동: Slack / Lark / Discord / Telegram / WeChat에 직접 바인딩하여 사용자가 채팅창에서 Agent와 대화 가능
FAQ의 답변에서도 "Through whichever surface you bind to it: a typed HTTP API, a /skill in Claude Code, Web Threads, Slack, Lark, GitHub, or your own app."라고 설명되어 있어, 하나의 Agent 정의를 여러 입구에서 호출하는 설계 사상이 일관되게 유지되고 있습니다.
Mosoo CLI와 코딩 에이전트용 문서
Overview 화면 상단에는 코딩 에이전트(Claude Code나 Cursor 등)에 Mosoo를 통합하기 위한 원라이너(One-liner)가 준비되어 있었습니다.

curl -fsSL https://install.mosoo.ai/install.sh | bash
이 명령어 하나로 Mosoo CLI 설치, @mosoo Skill 설치, try.mosoo.ai 로그인, 클라우드 준비 상태 체크(doctor)까지 수행됩니다.
나아가 mosoo.ai/docs/coding-agents/에는 "Mosoo API for coding agents"라는, 인간이 아닌 에이전트를 위해 작성된 API 문서가 공개되어 있습니다. "추측으로 ID나 필드를 생성하지 마라", "Mosoo는 실행 환경 그 자체를 제공하므로, 앱 측에서 병행하여 샌드박스(Sandbox)나 툴 러너(Tool Runner)를 구현하지 마라"와 같이, AI 에이전트에게 직접 읽히는 것을 전제로 한 지시문들이 나열되어 있는 점이 특징적이었습니다. Claude Code 등에 Mosoo 연동 코드를 작성하게 할 때는, 이 페이지를 그대로 컨텍스트(Context)로 전달하는 것이 가장 빠른 경로가 될 것으로 보입니다.
Dify / n8n / OpenClaw / Claude Code와의 차이점
Mosoo는 기존의 워크플로우 기반(workflow platform)이나 에이전트 런타임(agent runtime)을 대체하는 것이 아니라고 FAQ에서 명시하고 있습니다.
Dify와 n8n은 결정론적(deterministic) 워크플로우에 강점이 있으며, OpenClaw, Claude Code, Hermes는 범용 에이전트 런타임(general agent runtime)으로서 강점이 있습니다. Mosoo는 이들을 대체하지 않습니다. 대신 이들 위에 위치하여, 사용자가 직접 해당 계층을 재구축할 필요 없이 버전 관리(versioning), 샌드박싱(sandboxing), 앱 사용(App usage) 처리가 포함된 배포 가능한 서비스(deployable services)로서 두 종류 모두를 실행하는 백엔드 역할을 수행합니다.
| 제품 | 특화 영역 | Mosoo와의 관계 |
|---|---|---|
| Dify / n8n | 결정론적(deterministic) 워크플로우 실행 | Mosoo가 이를 배포 가능한 서비스로 실행하는 백엔드가 됨 |
| ... |
「결정론적 워크플로우로 충분한지, 아니면 범용 에이전트에게 맡겨야 하는지」에 대한 판단에 대해서도 FAQ는 실무적인 답변을 제공합니다.
단계가 정해져 있고 재현성(repeatability)을 원하는 경우에는 결정론적 워크플로우(deterministic workflow)를 사용하고, 경로가 개방적이며 추론(reasoning)을 통해 진행되기를 원하는 경우에는 범용 에이전트(general agent)를 사용하십시오. Mosoo의 역할은 모든 시나리오를 단일 엔진에 강제로 맞추는 것이 아니라, 하나의 프로덕션 및 라이프사이클 API(production and lifecycle API) 뒤에서 이 두 가지를 모두 실행하는 것입니다.
현재 위치와 라이선스
- 라이선스:
Apache-2.0 - 비용: 셀프 호스팅(self-host) 시 Mosoo 자체에 대한 인당 과금(per-seat billing)은 없음 (BYOK 방식이므로 모델 제공업체 측의 종량제 과금은 별도로 발생) - 상태:
Alpha. 오픈 런타임과 라이프사이클 API는 작동하지만, 미성숙하거나 파괴적 변경(breaking changes)이 있을 수 있음을 전제로 함. Inventory·Deploy·Channel 관련 기능은 「수 개에서 수천 개의 에이전트 규모까지 확장(scale)」하는 것을 염두에 두고 설계 중이라고 합니다.
대상 사용자 또한 FAQ에서 명확하게 정의되어 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기