OpenWork: 오픈소스 Claude Cowork 대안 이해하기
핵심 요약
OpenWork는 OpenCode를 기반으로 한 데스크톱용 AI 작업 환경으로, 에이전트 기반 업무를 터미널이 아닌 제품처럼 다루게 해준다.
워크스페이스, 세션, 권한 관리, 플러그인·스킬 관리 등을 한 인터페이스에서 제공해 지식 노동자가 반복 작업과 설정 지옥에서 벗어나도록 돕는다.
OpenWork가 무엇인지 한눈에 이해하기
OpenWork는 "Claude Work / Cowork"류의 인터랙티브 작업 환경을 오픈소스로 구현한 데스크톱 앱이다.
겉으로는 깔끔한 GUI지만, 안에서는 OpenCode 서버와 플러그인 시스템을 활용해 AI가 코드를 분석하고 작업을 수행하는 흐름을 관리한다.
사용자는 명령행 도구를 배우지 않고도 프로젝트 폴더를 선택하고, 세션을 만들고, AI의 실행 계획과 진행 상황을 GUI로 확인하며, 필요한 권한을 승인하는 식으로 에이전트 작업을 제어할 수 있다.
왜 OpenWork가 필요한가: 문제 의식
많은 지식 노동자는 강력한 CLI 도구가 있어도, 설치와 설정, 각 프로젝트별 반복 설정 작업 때문에 실제로 활용하지 못한다.
특히 "에이전트가 코드를 읽고 작업하는" 시스템은 로그와 설정 파일이 여기저기 흩어져 있어, 무슨 일이 어떻게 일어났는지 추적하기 어렵고 보안·권한 관리도 번거롭다.
OpenWork는 이런 문제를 해결하기 위해, 확장 가능하면서도 감사 가능하고, 권한이 분리된 형태의 "에이전트 작업용 UI"를 제공하는 것을 목표로 한다.
핵심 기능 개요: v0.1에서 할 수 있는 것들
OpenWork의 가장 기본적인 흐름은 워크스페이스를 선택하고, OpenCode 서버를 띄운 뒤, 세션에서 프롬프트를 주고받으며 실행 계획과 진행 상황을 확인하는 것이다.
앱은 실행 과정에서 OpenCode가 생성하는 todo(할 일) 계획을 타임라인처럼 시각화하여, 어떤 단계가 언제 실행되고 있는지, 다음에 무엇을 할 예정인지 한눈에 보여준다.
또한 권한이 필요한 작업(예: 파일 쓰기, 외부 호출)이 등장하면 별도 권한 요청으로 띄워 "이번에만 허용", "항상 허용", "거부" 같은 결정을 사용자가 직접 내릴 수 있게 해준다.
Host 모드와 Client 모드: 어떻게 OpenCode와 연결되는가
OpenWork는 크게 두 가지 방식으로 OpenCode 서버와 연결된다.
Host 모드에서는 사용자가 선택한 로컬 폴더에서 opencode serve를 자동으로 실행해, 해당 디렉터리를 워크스페이스로 삼는 로컬 서버를 띄운다. 이때 기본적으로 127.0.0.1에 바인딩해, 외부에서 바로 접근할 수 없도록 안전하게 동작한다.
Client 모드에서는 이미 어딘가에서 돌아가고 있는 OpenCode 서버의 URL을 입력해 원격 서버에 붙는다. 이 방식은 팀용 개발 서버나 클라우드에서 실행 중인 OpenCode와 상호작용할 때 유용하다.
두 모드 모두 내부적으로는 @opencode-ai/sdk/v2/client를 사용해 세션 조회·생성, 프롬프트 전송, SSE 기반 실시간 이벤트 구독, todo 및 권한 요청 조회를 처리한다.
세션, 스트리밍, 실행 계획: 작업 흐름 관리
OpenWork의 작업 단위는 "세션"이다. 한 세션은 특정 워크스페이스에서의 대화와 실행 기록, 권한 승인 이력 등을 하나의 흐름으로 묶는다.
사용자는 세션을 새로 만들거나 기존 세션을 선택해 프롬프트를 보내고, SSE(EventSource) 기반 스트리밍을 통해 모델의 응답과 계획 업데이트를 실시간으로 확인할 수 있다.
OpenCode가 생성하는 todo 목록은 단순 텍스트가 아니라 타임라인 UI로 표현되며, 어느 단계에서 무엇을 실행했는지, 어떤 단계가 보류 중인지, 어떤 부분에서 권한 승인이 필요한지가 시각적으로 드러난다.
스킬과 플러그인: 확장성과 재사용
OpenWork는 반복 업무를 재사용 가능한 단위로 묶기 위해 템플릿과 스킬, 플러그인이라는 세 가지 축을 제공한다.
템플릿은 자주 쓰는 워크플로(예: "새 기능 브랜치 생성 → 테스트 코드 추가 → PR 설명 초안 작성")를 저장해 두었다가 필요할 때 다시 실행하는 기능이며, 로컬에 저장되어 개인 맞춤형 도구처럼 사용할 수 있다.
스킬은 .opencode/skill 폴더 아래에 설치되는 모듈형 기능 집합으로, OpenWork의 스킬 매니저에서 목록을 보고, 원격 패키지(OpenPackage)를 설치하거나, 로컬 폴더를 가져와 스킬 디렉터리로 복사하는 방식으로 관리할 수 있다.
OpenCode 플러그인은 opencode.json에 선언되는 확장 기능으로, 예를 들어 "plugin": ["opencode-wakatime"]처럼 적어두면 OpenCode가 해당 기능을 불러와 활용한다.
OpenWork는 이 opencode.json을 읽고 쓰는 UI를 제공해, 프로젝트 단위(<workspace>/opencode.json)와 글로벌 단위(~/.config/opencode/opencode.json 또는 XDG_CONFIG_HOME) 설정을 모두 한 화면에서 관리하도록 돕는다.
설치와 실행: 개발자 관점에서의 준비물
OpenWork를 직접 빌드해서 사용하려면 몇 가지 필수 도구가 필요하다.
먼저 Node.js와 패키지 관리자로 pnpm이 필요하며, 데스크톱 앱 빌드를 위해 Tauri용 Rust 도구 체인(cargo, rustc)을 설치해 두어야 한다. 그리고 OpenCode CLI(opencode)가 PATH에 있어야 Host 모드에서 서버를 띄울 수 있다.
소스 설치 후에는 pnpm install로 의존성을 설치하고, 데스크톱 앱 개발 모드는 pnpm dev, 웹 UI만 띄우고 싶다면 pnpm dev:web 명령을 사용한다. 테스트 및 빌드는 pnpm typecheck, pnpm build:web, pnpm test:e2e 등으로 진행할 수 있다.
스킬 설치에 사용하는 opkg가 전역 설치되어 있지 않다면, OpenWork는 자동으로 pnpm dlx opkg install <package> 형태로 대체 실행해 사용성을 유지한다.
보안과 감사 가능성: 안전하게 에이전트를 쓰기 위한 설계
에이전트가 코드와 파일, 외부 서비스에 자유롭게 접근하는 구조는 편리하지만, 동시에 "무엇을 했는지 알 수 없고, 과도한 권한을 가진 블랙박스"가 되기 쉽다.
OpenWork는 이를 완화하기 위해 기본적으로 모델의 세부 추론 내용과 민감한 도구 메타데이터는 숨기되, 실행된 작업의 결과와 중요한 단계, 권한 요청 내역은 명확히 드러나도록 UI를 구성한다.
또한 Host 모드를 로컬 루프백 주소(127.0.0.1)에 바인딩해 외부 접속을 막고, Tauri의 폴더 선택 기능과 별도의 capability 설정(src-tauri/capabilities/default.json)을 통해 앱이 접근 가능한 자원과 권한을 제한한다. 이로써 "어디까지 허용할지"를 개발자가 비교적 명확히 제어할 수 있다.
인사이트
OpenWork는 "에이전트가 알아서 해준다"는 막연한 약속을, 워크스페이스·세션·계획·권한이라는 구조로 구체화해 주는 도구라고 볼 수 있다.
실무에서 활용하려면, 자주 반복되는 업무를 먼저 템플릿/스킬로 정리하고, 프로젝트별 opencode.json과 글로벌 플러그인 구성을 명확히 구분하는 것이 좋다.
처음에는 Host 모드로 소규모 개인 프로젝트에서 사용해 보며 권한 요청과 실행 계획 흐름에 익숙해지고, 이후 팀 환경에서는 Client 모드로 원격 OpenCode 서버에 접속해 공용 스킬과 플러그인을 운영하는 구조로 확장해보는 접근을 추천할 수 있다.
출처 및 참고 : different-ai/openwork: An open-source alternative to Claude Cowork, powered by OpenCode
이 노트는 요약·비평·학습 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.
