Omnara가 에이전트 실행 플랫폼을 셀프호스팅 오픈소스로 공개했다

Hacker News10일 전조회 1

에이전트를 실제 서비스에 붙이려면 모델 호출 코드보다 그 주변의 실행 환경, 비밀 값 관리, 권한 승인, 이벤트 스트리밍을 만드는 일이 더 오래 걸린다. Omnara는 이 주변부를 통째로 제품화한 관리형 에이전트 플랫폼이며, Apache 2.0 라이선스로 소스를 공개해 직접 호스팅할 수 있게 했다. 상용 클라우드 버전도 함께 운영되지만, 코드를 받아 자기 인프라에서 돌리는 경로가 열려 있다는 점이 이 프로젝트의 성격을 규정한다.

쓰임새는 설정 파일 하나에서 시작한다. agent.yaml에 모델 제공자와 모델 이름, 에이전트가 명령을 실행할 머신 풀을 적고 CLI로 실행하면 에이전트가 뜬다. CLI는 Node.js 22 이상에서 npx로 바로 호출되며, 로그인하지 않은 상태라면 첫 명령이 브라우저 로그인 창을 연다. 실행한 에이전트와는 터미널에서 대화를 이어가거나 대시보드에서 도구 호출 내역을 보며 답장할 수 있다. 코드에서 직접 띄우고 싶으면 TypeScript SDK(@omnara/sdk)를 쓴다. 대시보드에서 API 키를 발급해 환경 변수로 넣고, 설정을 등록한 뒤 에이전트를 생성하고 이벤트 스트림을 구독하는 흐름이다.

구조는 역할이 뚜렷하게 갈린다. 앱, CLI, 대시보드가 모두 같은 REST API를 통해 에이전트를 띄우고 메시지를 보내고 승인 요청에 답한다. 에이전트의 모든 단계는 Postgres에 이벤트 로그로 남는데, 이 기록 자체가 에이전트의 상태 역할을 한다. 그래서 워커가 죽거나 재시작해도 다른 워커가 그 에이전트를 이어받을 수 있다. 워커는 상태를 갖지 않고 모델 컨텍스트를 만들고 모델을 호출하고 도구를 실행하는 일만 하며, 한 턴을 처리하는 동안에만 에이전트에 붙는다. 처리량이 부족하면 워커를 늘리면 된다. 여기에 Redis와 첨부 파일·도구 출력용 블롭 스토리지가 곁들여진다.

모델은 OpenAI, Anthropic, OpenRouter, Amazon Bedrock, LiteLLM, Ollama는 물론 호환 엔드포인트라면 직접 호스팅한 모델까지 붙는다. 도구는 셸 명령, 파일 조작, 웹 검색·가져오기, 사람에게 질문하기 같은 기본 제공 세트에 사용자 정의 도구와 MCP가 더해진다. 스킬은 지시문과 파일을 한 번 묶어 두고 여러 에이전트에 붙여 필요할 때 불러 쓰는 방식이고, 메모리 스토어는 대화 사이에 유지되는 파일을 에이전트별로 읽기 전용 또는 읽기·쓰기 권한으로 공유한다. 에이전트가 새 컨텍스트로 서브에이전트를 띄우고 진행 상황을 확인하고 추가 지시를 보내는 것도 가능하며, 서브에이전트 역시 들여다볼 수 있는 완전한 에이전트다.

실행 환경 쪽 선택지도 넓다. macOS나 리눅스 노트북, VM, 컨테이너에 데몬을 설치하면 인바운드 포트나 SSH 키 없이 에이전트가 그 머신에서 명령을 돌리고 파일을 고친다. 혹은 Arker, Blaxel, boxd, CreateOS, Daytona, E2B, Freestyle, Modal, Superserve, Tenki, Unikraft 등 열한 곳의 샌드박스 제공자를 쓸 수 있다. 에이전트 하나가 GPU 서버 여러 대처럼 복수의 머신을 동시에 쓰고 그 사이를 옮겨 다닐 수도 있으며, 노트북이 오프라인이 되면 샌드박스에서 작업을 계속한 뒤 돌아와 동기화하는 식의 운용을 상정한다.

에이전트를 깨우는 방법은 시간과 사건 두 갈래다. 타임존을 지정한 크론 트리거로 기존 에이전트에 메시지를 보내거나 새 에이전트를 띄울 수 있고, Slack이나 Discord에서 봇을 멘션하면 스레드 안에서 에이전트가 답하고 질문하고 승인을 요청한다. GitHub에서는 풀 리퀘스트가 열리거나 누군가 멘션할 때 에이전트가 시작해 diff를 읽고 코멘트를 달고 리뷰를 제출한다. 그 밖의 서비스는 웹훅으로 연결한다. 위험한 호출은 즉시 실행, 사람에게 먼저 확인, 차단 중 하나로 정책을 걸 수 있고, 플랫폼이 그 설정을 강제하며 에이전트는 누군가 승인하거나 거부할 때까지 기다린다.

직접 설치하는 경로는 저장소를 클론한 뒤 docker compose로 app 프로필을 올리는 두 줄로 끝난다. localhost:8000에서 가입하면 되고, 로컬 개발 환경에서는 메일 제공자 없이도 api 컨테이너 로그에 찍히는 인증 링크로 가입할 수 있다. 다만 새 인스턴스에는 모델도 머신도 없어서, 콘솔에서 모델 제공자와 모델을 등록하고 접속할 컴퓨터를 머신으로 연결한 뒤 프로젝트에 공유해야 agent.yaml이 실제로 동작한다. 운영체제·프로젝트 단위의 역할 기반 접근 제어와 조직별로 멤버·프로젝트·비밀·모델·머신을 분리하는 멀티테넌시도 플랫폼 차원에서 제공된다.

이 프로젝트가 파고드는 지점은 에이전트 실행 계층의 소유권이다. Claude Managed Agents나 OpenAI Agents API를 쓰면 빠르게 시작할 수 있지만, 에이전트가 남기는 모든 단계의 기록과 비밀 값, 승인 흐름이 외부 서비스 안에 놓인다. Omnara는 그 기록을 자기 Postgres에 두고 분석, 평가, 학습 데이터셋 구성에 다시 쓸 수 있다는 점을 전면에 내세운다. 모델과 머신을 갈아끼울 수 있게 추상화해 둔 것도 특정 벤더에 실행 환경을 묶이지 않으려는 요구와 맞닿아 있다.

실무에서는 에이전트 루프를 직접 만들지 않고 API와 SDK로 가져다 쓰는 선택지가 하나 늘어난다는 뜻이 된다. OpenAPI 스펙(api/openapi/openapi.yaml), TypeScript SDK, CLI, MCP 서버가 함께 제공되므로 기존 사내 도구나 CI 파이프라인에 붙이기 수월하다. 코딩 에이전트에게 설정을 맡기고 싶다면 공개된 SKILL.md 경로를 프롬프트로 넘기는 방법도 안내되어 있다.

주의할 점은 원문이 직접 밝히고 있다. 로컬 기본 설정은 의도적으로 안전하지 않게 만들어져 있어서, 실제 배포에는 별도의 보안 구성을 따라야 한다. 또 셀프호스팅 인스턴스는 모델과 머신을 관리자가 직접 등록해야 첫 에이전트가 돌아가고, CLI는 Node.js 22 이상을 요구한다. 클라우드 버전을 쓰지 않는다면 Postgres와 Redis, 블롭 스토리지까지 포함한 운영 부담은 사용자 몫이다.