OpenWorker: 개발자를 위한 Andrew Ng의 로컬 우선(Local-First) AI 동료 설명
요약
Andrew Ng이 공개한 OpenWorker는 사용자의 API 키를 활용하여 로컬 환경에서 실행되는 '결과물 중심'의 AI 에이전트입니다. aisuite 라이브러리를 기반으로 구축되었으며, 도구 호출의 위험도를 분류하여 사용자의 승인을 받는 정교한 권한 모델을 제공합니다.
핵심 포인트
- 채팅이 아닌 문서 초안, 캘린더 조정 등 실제 결과물(Artifact) 생성에 집중
- 추론 서비스를 직접 판매하지 않고 사용자의 API 키나 Ollama를 활용하는 로컬 우선 방식
- aisuite 라이브러리를 활용한 프로바이더 불가지론적(Provider-agnostic) 설계
- 도구 호출의 위험도를 4가지 클래스로 분류하여 체계적인 권한 관리 제공
OpenWorker는 2026년 7월 말에 출시되었습니다. 이 프로젝트는 MIT 라이선스를 따르며, 사용자의 자체 기기에서 실행되고, 추론(Inference) 서비스를 판매하는 대신 사용자의 API 키를 사용합니다.
핵심 가치는 명확하며 그대로 반복할 가치가 있습니다: 이것은 채팅 기록이 아닌 완료된 작업을 전달하는 에이전트입니다. 디스크에 작성된 문서 초안, 실제 수치가 포함된 Slack 답장, 실제로 재조정된 캘린더와 같은 결과물을 제공합니다.
현재 많은 데스크톱 에이전트들이 존재합니다. 이 포스트는 이 에이전트가 구조적으로 무엇이 다른지, 현재 어떤 상태인지, 그리고 어떻게 실행하는지에 대해 다룹니다.
한 단락 요약
OpenWorker는 데스크톱 앱입니다. 로컬 Python 에이전트 서버 위에 구축된 React UI를 감싸는 Tauri 쉘(Shell) 형태입니다. 사용자에게 결과물(예: "이 세 개의 파일과 Jira 티켓을 바탕으로 고객 브리핑을 준비해줘")을 입력하면, 이를 단계별로 분해하고 사용자의 파일, 터미널, 연결된 SaaS 앱에 접근하여 결과물(Artifact)을 생성합니다. 메시지 전송, 쉘 명령 실행, 캘린더 작성 등 중요한 작업이 수행되기 전에 반드시 멈춰서 사용자에게 확인을 요청합니다.
엔진은 Ng의 프로바이더 불가지론적(Provider-agnostic) LLM 라이브러리인 aisuite를 기반으로 구축되었습니다. 이는 생각보다 더 중요한 의미를 갖습니다. OpenWorker는 aisuite를 통해 무엇을 구축할 수 있는지 보여주는 참조 구현(Reference implementation)으로 명시적으로 포지셔닝되어 있으므로, 여러분이 직접 자체 하네스(Harness)를 구축하려 한다면 이 코드베이스는 그 자체로 작동 예시가 됩니다.
실제로 차별화되는 네 가지 요소
1. OpenWorker 추론 서비스가 없음
사용자는 API 키를 붙여넣거나, Ollama를 지정하여 아예 사용하지 않을 수도 있습니다. 큐레이션된 목록에는 OpenAI, Anthropic, Google을 비롯하여 DeepSeek, GLM, Kimi, Qwen, MiniMax, Mistral, Grok과 같이 OpenAI와 호환되는 벤더들이 포함되어 있으며, Together 및 Fireworks를 통한 오픈 웨이트(Open-weight) 모델도 포함됩니다. 약 30개의 모델이 도구 호출(Tool-calling) 작업에 대해 검증된 것으로 표시되어 있습니다. 그 외의 다른 모델 문자열을 지정할 수도 있지만, 그에 따른 위험은 사용자가 직접 감수해야 합니다.
실질적인 결과는 다음과 같습니다: 비용은 제공업체의 청구서와 동일하며, 모델을 교체하는 것은 데이터 마이그레이션이 아닌 드롭다운 선택 한 번으로 이루어집니다.
2. 권한 모델은 확인 대화창이 아닌 타입(Typed)으로 정의됩니다
이 부분은 제가 실제로 소스 코드를 읽어보고 싶을 정도입니다. 대부분의 에이전트(Agent) 프로젝트는 승인 과정을 UI의 미적 요소로 취급합니다. 반면 OpenWorker는 모든 도구 호출(Tool call)을 네 가지 위험 클래스 중 하나로 분류합니다:
| 위험 클래스 (Risk class) | 의미 |
|---|---|
read | 부수 효과(Side effects) 없음 |
| ... |
그 후 다섯 가지 권한 모드가 각 클래스에 대해 어떤 일이 일어날지를 결정합니다. discuss와 plan은 읽기 전용(Read-only)입니다. interactive는 기본값으로, 쓰기(Write), 명령(Command), 외부 동작(External actions)을 수행하기 전에 사용자에게 묻습니다. auto는 모든 것을 허용하되 경로 범위(Path-scoped) 내로 제한됩니다. custom은 사용자가 지정한 도구 목록을 자동으로 승인합니다.
두 가지 설계 선택이 눈에 띕니다. 첫째, 무인 실행(Unattended runs)이 자율성의 한계를 높이는 것이 아니라, _인간에게 도달하는 방식_을 바꾼다는 점입니다. 인라인(Inline)으로 나타났을 프롬프트들이 받은 편지함(Inbox)으로 라우팅되며, 사용자가 응답할 때까지 세션이 일시 중단됩니다. 사용자가 자리를 비웠다고 해서 에이전트가 조용히 권한을 획득하는 일은 없습니다. 둘째, 상시 "항상 허용" 규칙은 external 클래스에만 제한됩니다. 셸 명령(Shell commands)은 의도적으로 매번 확인을 요청합니다.
3. 명시적인 프롬프트 인젝션(Prompt-injection) 대응 태세를 갖추고 있습니다
출시된 오퍼레이터 페르소나(Operator persona)는 도구, 로그, 웹 페이지, 파일 및 수신 메시지에서 오는 콘텐츠를 명령(Instruction)이 아닌 신뢰할 수 없는 _데이터(Data)_로 취급하도록 모델에 지시합니다. 이는 사용자의 과제로 남겨두는 것이 아니라, 앱과 함께 제공되는 페르소나에 직접 작성되어 있습니다. 사용자의 Slack과 받은 편지함을 읽는 에이전트에게 이는 선택 사항이 아니며, 이를 가정하지 않고 명시적으로 기술한 점은 매우 바람직합니다.
4. 로컬 우선(Local-first)은 문자 그대로의 의미에 가깝습니다
대화 내용(Conversations), 커넥터 토큰(connector tokens), 모델 키(model keys)는 로컬 비밀 저장소(local secret store)에 저장됩니다. 모델 호출은 사용자의 기기에서 설정된 제공자(provider)로 직접 전달됩니다. 유일한 클라우드 구성 요소는 원클릭 커넥터를 위한 OAuth 핸드셰이크(handshake)를 처리하는 작고 선택적인 브로커(broker)뿐이며, 토큰은 서버 측에 저장되는 대신 사용자의 기기로 전달됩니다. 로그인 과정을 완전히 건너뛰고 수동으로 생성한 자격 증명(credentials)으로 커넥터를 연결할 수도 있습니다.
즉시 사용할 수 있는 기능
- 실질적인 결과물 - 문서, 스프레드시트, 보고서, 웹 페이지 등을 디스크에 파일 형태로 작성하여 바로 열어볼 수 있습니다.
- 25개 이상의 커넥터 - GitHub, Slack, Jira, Notion, Linear, HubSpot, Outlook, monday.com, Gmail, Google Calendar 등을 비롯하여 터미널 및 로컬 파일 시스템을 지원합니다. MCP를 통해 접근 가능한 모든 것도 도구별 제어와 함께 연결할 수 있습니다.
- Slack을 진입점으로 활용 - 채널에서
@OpenWorker를 언급하면 데스크톱에서 세션이 열리고, 사용자의 로컬 도구로 작업이 수행되며, 답변은 스레드 답글로 돌아옵니다. - 예약된 자동화 - 모닝 브리핑, 주간 보고서, 채널 상시 모니터링 등을 수행합니다. 실행 결과는 전체 스크립트(transcripts)와 함께 앱에 저장됩니다.
설정
옵션 A: 앱 설치 (5분 소요)
- 리포지토리(repo)의 릴리스 링크에서 다운로드하세요: macOS (Apple Silicon) (macOS 12 이상, 서명 및 공증 완료, 자동 업데이트 지원). 또는 Windows 10/11 x64 (참고: Windows 빌드는 아직 코드 서명이 완료되지 않아 SmartScreen 경고가 표시될 수 있습니다).
- 앱을 열고 모델 키를 추가하거나, 실행 중인 Ollama 인스턴스를 지정하세요.
- 실제 작업을 부여하세요. 단순히 "안녕"이라고 하기보다는, 파일이 첨부되고 정의된 출력 형식이 있는 작업을 시도하세요.
처음 몇 번의 세션 동안은 interactive 모드로 두는 것이 좋습니다. 모델이 어떤 권한을 요청하는지 관찰하는 것이 모델이 무엇을 하고 있는지 정확한 멘탈 모델(mental model)을 구축하는 가장 빠른 방법입니다.
옵션 B: 소스에서 실행
사전 요구 사항: Python 3.10+, Node 20+, 그리고 브라우저 UI 대신 데스크톱 셸(desktop shell)을 사용하려는 경우 rustup을 통한 Rust 툴체인(toolchain)이 필요합니다.
git clone https://github.com/andrewyng/openworker
cd openworker
...
그 다음 두 번째 터미널에서:
cd surfaces/gui
npm install
npm run dev # Vite 개발 포트에서 브라우저 UI 실행
브라우저 UI 대신 전체 데스크톱 앱을 사용하려면, 마지막 단계를 surfaces/gui/에서 npm run tauri dev로 교체하세요. Tauri 셸은 창을 실행하고 Python 서버 자체를 감독(supervise)하므로, 이 경우에는 2단계를 건너뛸 수 있습니다.
서버는 uvicorn 기반의 FastAPI이며, 기본적으로 127.0.0.1:8765에 바인딩(bound)됩니다.
테스트 실행:
.venv/bin/pytest # 백엔드 (backend)
cd surfaces/gui
npm test # GUI 단위 테스트 (unit tests)
...
서버의 --cwd 플래그에 주의하세요. 이는 에이전트의 경로 범위 지정 파일 액세스(path-scoped file access)가 고정되는 워크스페이스 루트(workspace root)입니다. 첫 실행 시에는 홈 폴더가 아닌 임시 디렉터리(scratch directory)를 지정하세요.
코드에서 살펴볼 부분
| 디렉터리 | 내용 |
|---|---|
coworker/ | Python 백엔드 - 에이전트 엔진, 모델 제공자(model providers), 커넥터(connectors), MCP 클라이언트, 메모리, 자동화 |
| ... |
사용 목적이 아닌 학습을 위해 방문했다면, docs/와 coworker/에 있는 권한 엔진(permission engine)이 가장 가치 있는 읽을거리입니다. 디자인 로그(design logs)는 단순히 API를 문서화하는 것을 넘어 설계 선택 이유를 설명합니다.
살펴볼 가치가 있을까요?
다음 중 하나라도 본인에게 해당한다면, 그렇습니다:
- 실제 업무 시스템을 다루는 데스크톱 에이전트(desktop agent)를 원하지만, 벤더(vendor)에게 자신의 Slack 토큰과 파일 시스템(filesystem)을 넘겨주고 싶지는 않은 경우.
- 에이전트 하네스(agent harness)를 구축 중이며, 권한 게이팅(permission gating), 커넥터 관리(connector management), 그리고 MCP 통합을 위한 실질적이고 프로덕션 수준의 참조 모델이 필요한 경우. 약 32,000줄의 Python 코드와 78개의 백엔드 테스트 모듈은 단순한 데모가 아니라 학습할 가치가 있는 실제 코드베이스입니다.
- 호스팅된 에이전트(hosted agents)를 사용할 수 없는 컴플라이언스(compliance) 제약 사항이 있는 경우. 로컬 우선(Local-first) 방식에 BYO-key(본인 키 사용) 및 MIT 라이선스의 조합은 매우 드문 조합입니다.
- 완전히 로컬인 모델(local models)을 대상으로 에이전트를 실행하고 싶은 경우. Ollama 경로를 사용하면 키가 전혀 필요하지 않습니다.
다음의 경우에는 보류하세요:
- 안정성이 필요한 경우. 이 프로젝트는 v0.1.x 버전이며, 소수의 기여자와 며칠밖에 되지 않은 리포지토리(repo)를 가진 자체 표기 오픈 베타(open beta) 상태입니다. 자동 업데이트 기능은 편리하지만, 그만큼 기반 시스템이 계속 변한다는 것을 의미합니다.
- 코딩 에이전트(coding agent)를 기대하는 경우. 이 도구는 터미널 및 파일과 함께 작동하지만, 프레임워크의 초점은 서비스 작성(writing your service)이 아닌 지식 작업(knowledge work) — 브리핑, 보고서, 편지함 분류(inbox triage), 일정 관리 — 에 맞춰져 있습니다.
솔직한 요약
여기서 흥미로운 주장은 "작업을 수행하는 에이전트"가 아닙니다. 누구나 그런 것을 출시하고 있습니다. 흥미로운 점은 지루한 인프라(infrastructure) — 누가 무엇을 할 수 있는지, 비밀 정보(secrets)가 어디에 저장되는지, 무엇이 데이터가 아닌 명령(instruction)으로 간주되는지 — 가 사후에 덧붙여진 것이 아니라 타입 시스템(typed system)으로 설계되었다는 점입니다. 이 앱을 전혀 사용하지 않더라도 읽어볼 가치가 있는 부분은 바로 이 지점입니다.
아직 초기 단계입니다. 거친 부분이 있을 수 있고, Windows 서명(signing) 문제가 해결되기를 기다려야 하며, 커넥터 목록이 변할 수도 있습니다. 하지만 이 카테고리에서 신뢰할 수 있는 오픈 소스, 로컬 우선, 모델 불가지론적(model-agnostic) 옵션을 기다려 왔다면, 이 프로젝트는 실패 모드(failure modes)를 먼저 고려한 사람들이 만든 첫 번째 결과물처럼 보입니다.
Repo: github.com/andrewyng/openworker
Site: openworker.com
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기