<h1 align="center">
<picture>
<source srcset="resources/app-icons/obsidian-dark.png" media="(prefers-color-scheme: dark)">
<img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/resources/app-icons/obsidian.png" alt="Otis" width="112">
</picture><br>
Otis
</h1>
<p align="center">
<b>생각하고, 창조하고, 일을 처리하는 데 도움을 주는 개인용 AI 에이전트입니다.</b><br>
사용자의 컴퓨터 또는 클라우드에서 오픈 모델로 구동됩니다.
</p>
<p align="center">
<a href="https://triangllabs.ai/otis"><b>macOS, Windows 및 Linux용 다운로드</b></a> ·
<a href="#install">터미널 설치</a> ·
<a href="#a-session-start-to-finish">투어</a> ·
<a href="#documentation">문서(Docs)</a>
</p>
<p align="center">
<a href="https://github.com/TrianglLabs/otis/releases/latest"><img src="https://img.shields.io/github/v/release/TrianglLabs/otis?label=release&color=6b5cff" alt="최신 릴리스"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-6b5cff" alt="MIT 라이선스"></a>
<img src="https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-6b5cff" alt="macOS, Windows 및 Linux">
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/docs/screens/hero.png" alt="두 개의 Otis 세션이 나란히 작동하며, 각각의 편집 내용을 diff로 보여주고, 캔버스에 열린 Word 문서와 추가 세션들이 칩 형태로 대기하는 모습" width="960">
</p>
Otis는 연구, 글쓰기, 문서 및 코드를 위한 AI 에이전트입니다. 사용자의 하드웨어에 로컬 모델을 설정하거나,
이미 실행 중인 모델에 연결합니다.
- 설정 작업 없이 로컬 모델 사용. Otis는 사용자의 하드웨어에 맞는 모델을 추천하고, 이를 다운로드하여 실행합니다. 계정 생성이나 원격 측정(telemetry)이 필요 없으며 오프라인에서도 작동합니다.
- 로컬 또는 호스팅 환경 선택 가능. 토큰당 비용 없이 로컬 모델을 실행하거나, 자체 Fireworks AI, Together AI, Baseten, Prime Intellect, 또는 River AI 키를 사용하여 호스팅 모델을 사용할 수 있습니다. 원하는 모델을 선택하고 작업을 유지하세요.
- 네트워크 끊김 시에도 지속 작동. 호스팅 모델에서 세션이 진행되다가 메시지 중간에 로컬 모델이나 로컬 서버로 전환되며, 온라인 상태가 되면 다시 원래대로 돌아옵니다. 웹 검색 기능은 웹 연결이 가능해질 때까지 대기합니다. 설정(Settings)에서 이 기능을 끌 수 있습니다.
- 작업 과정 표시. 생각하는 과정, 모든 명령어, 모든 편집 내용을 diff 형태로 보여주며, 위험한 작업을 수행하기 전에 승인 절차를 거칩니다. 문서가 대화창 옆에 열린 상태로 최대 네 개의 세션을 나란히 볼 수 있습니다.
- 사용자 기록 보존. 대화 내용과 저장된 아티팩트는 사용자의 디스크에 남아있습니다. 호스팅 추론(inference) 및 웹 검색은 해당 제공업체와 직접 연결됩니다.
설치 (Install)
데스크톱 앱. triangllabs.ai/otis 또는
GitHub Releases. macOS 및 Linux의 arm64와 x64, Windows의 x64를 지원합니다. Linux 사용자는 AppImage 실행 파일을 터미널 명령어와 분리된 위치(예: ~/.local/bin/otis-desktop)에 두고, 런처 항목이 그곳을 가리키도록 설정해야 합니다.
터미널. macOS 및 Linux의 경우:
curl -fsSL https://github.com/triangllabs/otis/releases/latest/download/install.sh | bash
otis
Windows PowerShell에서 실행하는 경우:
irm https://github.com/triangllabs/otis/releases/latest/download/install.ps1 | iex
otis
기존 CLI 설치는 otis update 명령어로 업데이트할 수 있습니다. Windows의 경우 에이전트가 셸 명령을 Git for Windows를 통해 실행하므로, 이 역시 설치해야 합니다. 데스크톱 앱의 터미널 탭은 PowerShell을 열어줍니다.
세션 시작부터 끝까지 (A session, start to finish)
<table style="width:100%; border-collapse: collapse;">
<tr>
<td width="38%" valign="middle" style="padding: 15px; border: 1px solid #eee;">
<b>1. Otis가 작동할 환경 선택</b><br><br>
첫 실행 시 하나의 질문을 합니다. <b>로컬(Local)</b>은 사용자의 장치에 가장 적합한 모델을 추천하고 다운로드하여 Otis가 관리하는 llama.cpp 서버를 통해 실행하므로, Otis는 오프라인으로 작동합니다. 또는 Ollama, LM Studio, oMLX, 사용자가 운영하는 모든 OpenAI 호환 서버, 또는 이미 운영 중인 NVIDIA PAIR 클러스터에 연결할 수 있습니다. <b>호스팅(Hosted)</b>은 사용자의 Fireworks AI, Together AI, Baseten 또는 Prime Intellect 키를 사용합니다.
</td>
<td width="62%" style="padding: 15px; border: 1px solid #eee;">
<img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/docs/screens/onboarding.png" alt="첫 실행: 호스팅 또는 로컬 선택" width="100%">
</td>
</tr>
<tr>
<td valign="middle" style="padding: 15px; border: 1px solid #eee;">
<b>2. 중단했던 곳부터 이어서 작업하기</b><br><br>
홈 화면은 모든 폴더에 걸쳐 최근 세션과 생성된 문서를 목록으로 보여줍니다. 하나를 열거나 그냥 타이핑을 시작하면 됩니다. <code style="font-family: monospace;">⌘K</code>는 제목 및 내용을 통해 모든 세션을 검색합니다. 상단의 스위처는 사용자의 루틴(routines)으로 전환됩니다.
</td>
<td style="padding: 15px; border: 1px solid #eee;">
<img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/docs/screens/home.png" alt="홈: 작성기 위 최근 세션 및 문서" width="100%">
</td>
</tr>
<tr>
<td valign="middle" style="padding: 15px; border: 1px solid #eee;">
<b>3. 질문하고 작동하는 과정을 지켜보기</b><br><br>
모든 단계가 보입니다: 모델의 사고 과정, 각 명령어, 그리고 diff로 표시되는 모든 편집 내용이 그렇습니다. Otis는 워크스페이스 외부에서 명령을 실행하거나 파일을 건드리기 전에 사용자에게 질문합니다. 작업 중 방향을 조절하거나 후속 작업을 예약할 수 있으며, 완료되면 요약(summary), diff 통계, 컨텍스트 미터 등을 받게 됩니다.
</td>
<td style="padding: 15px; border: 1px solid #eee;">
<img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/docs/screens/done.png" alt="완료된 작업: diff, 요약 테이블 및 테스트 결과" width="100%">
</td>
</tr>
<tr>
<td valign="middle" style="padding: 15px; border: 1px solid #eee;">
<b>4. Canvas에서 작업 검토하기</b><br><br>
대화 옆에서 문서를 미리 보고, 편집 내용을 추적하며, 저장된 버전들을 다시 확인할 수 있습니다.
</td>
<td style="padding: 15px; border: 1px solid #eee;">
<!-- 이미지 Placeholder 유지 -->
</td>
</tr>
</table>
PDF 파일, Word 문서, 스프레드시트, 슬라이드 덱, Markdown, 웹페이지, Mermaid 다이어그램은 각각 탭으로 열리며, 렌더링을 위해 장치를 벗어나는 것은 없습니다. 터미널 탭(<code>⌃`</code>)은 작업 폴더에 있는 셸(shell)을 열어줍니다.
<td><img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/docs/screens/canvas.png" alt="문서 탭과 PDF 미리보기가 있는 캔버스" width="100%"></td>
</tr>
<tr>
<td valign="middle">
<b>5. 여러 세션을 동시에 실행하기</b><br><br>
사용자가 다른 곳으로 전환해도 세션은 계속 작동합니다. 컴포저(composer) 위의 칩들은 화면 밖에 있는 세션들을 보여주며, 점(dot)은 여전히 작동 중인 것을 나타냅니다. 칩이나 <code>⌘K</code>에서 가져온 세션을 가장자리로 드래그하여 최대 네 개까지 나란히 배치하거나, 카드로 드래그하여 교체할 수 있습니다. 나중에 기록(history)에서 세션을 열면, 이전에 화면을 공유했던 세션들이 배치했던 순서대로 다시 옆에 나타납니다. 하나의 창 안에서도 여러 세션이 다른 폴더에서 작동할 수 있습니다. Otis는 백그라운드 세션이 완료되면 사용자에게 알리고, 세션이 끝나거나 Otis가 포커스되지 않은 상태에서 승인을 기다릴 때 소리를 재생할 수 있습니다. 'Keep awake'를 켜면(설정 → 일반) 세션이나 루틴이 작동하는 동안 컴퓨터가 절전 모드에 들어가지 않지만, 디스플레이는 여전히 절전합니다.
</td>
<td><img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/docs/screens/split.png" alt="다른 세션들이 칩 형태로 있는 두 개의 나란한 세션" width="100%"></td>
</tr>
<tr>
<td valign="middle">
<b>6. 자리를 비운 동안에도 실행되도록 하기</b><br><br>
루틴(routine)은 사용자가 선택한 모델에서 스케줄에 따라 폴더 내에서 실행되는 프롬프트입니다. 각 실행은 일반 세션과 같습니다. 실시간으로 관찰하거나 나중에 열어볼 수 있으며, 점은 확인하지 않은 것을 표시합니다. 루틴은 요청하지 않는 한 읽기만 합니다. 채팅에서 루틴을 요청하면 Otis가 먼저 사용자에게 물어본 후 저장합니다.
</td>
</tr>
앱이 열려 있는 동안 실행되거나, 또는 otis serve 아래에서 24시간 내내 실행됩니다.</td>
<td><img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/docs/screens/routines.png" alt="Routines: cards for each scheduled prompt, with New routine first and a pager" width="100%"></td>
</tr>
<tr>
<td valign="middle">
<b>7. 모델 선택하기. 작업을 유지하세요.</b><br><br>Otis가 접근할 수 있는 모든 모델을 하나로 모아 놓은 선택기가 있습니다: 메모리 요구 사항이 있는 관리형 로컬 모델, 자체 서버의 모델, 그리고 호스팅되는 모델입니다. 별표는 이 컴퓨터에 가장 적합한 로컬 모델을 나타냅니다.
</td>
<td><img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/docs/screens/picker.png" alt="The model picker with local, oMLX, and hosted sections" width="100%"></td>
</tr>
<tr>
<td valign="middle">
<b>8. 터미널에서 가져오거나 스크립트에서 실행하기</b><br><br>데스크톱 앱에서 작업하거나, 터미널에서 가져오거나, 동일한 에이전트와 로컬 세션을 사용하여 스크립트에서 작업을 실행할 수 있습니다. `otis exec`은 일반적인 JSON 또는 스트리밍 JSONL 출력을 가진 헤드리스(headless) 방식으로 스크립트 및 CI를 위해 실행합니다.
</td>
<td><img src="https://raw.githubusercontent.com/TrianglLabs/otis/HEAD/docs/otis-cli.png" alt="The Otis terminal interface showing an edit as a diff" width="100%"></td>
</tr>
</table>
otis exec "Explain this repository"
otis exec --continue --auto "Run the tests and fix the failure"
otis exec --file requirements.pdf --file notes.docx "Compare these documents"```
```txt
desktop app / OpenTUI terminal / headless CLI
└─ Otis shared application runtime
├─ Conversation lifecycle, tools, permissions, and coworkers
...
루틴
홈 화면의 Routines 탭에는 사용자가 선택한 폴더에서 스케줄에 따라 실행되는 프롬프트가 포함되어 있습니다. 이는 매일 특정 시간에 또는 일정 간격마다, 사용자의 키보드 조작 없이 자동으로 작동합니다. 각 실행은 일반적인 세션이며, 현재 모델이나 루틴을 위해 지정한 다른 모델로 진행됩니다. 이 과정은 작업하는 동안 세션 스트립(session strip)에 표시되어 사용자가 확인하거나 개입할 수 있으며, 이후에도 기록으로 남아 있습니다. 루틴은 사용자에게 요청하지 않는 한 도구를 읽기만 합니다. 루틴은 데스크톱 앱이 열려 있는 동안 또는 otis serve를 실행하는 장치에서 24시간 내내 작동합니다. 터미널을 통해 routines 도구로 루틴을 저장하고 목록화할 수는 있지만, 직접 실행하지는 않습니다. 또한 채팅창에 "여기 테스트 스위트를 매일 밤 두 시에 실행해 줘"라고 요청하면, Otis가 먼저 사용자에게 물어본 후 해당 루틴을 저장합니다. 모델은 요청 없이 루틴에게 도구를 부여할 수 없으며, 이 전환(switch)은 에디터에서 사용자가 직접 결정해야 합니다.
프로젝트 (Projects)
열리는 모든 폴더는 하나의 프로젝트입니다. 홈 화면의 Projects 탭에는 해당 폴더들이 표시되며, 고정된 순서로 먼저 나열되고 세션 정보와 마지막 활동 기록이 함께 제공됩니다. 각 카드는 고정(pin) 상태를 가지고 있습니다. 프로젝트 페이지에서는 이름을 지정하고, 그 안에서 세션을 시작하며, 이 폴더의 자체 AGENTS.md 파일 다음에 Otis가 모든 세션 시작 시 읽을 지침을 작성할 수 있습니다. 이 지침은 프로젝트 세션 옆에 있는 Otis의 데이터 폴더(data folder)에 저장되므로, 리포지토리(repository)가 아니거나 파일을 추가하고 싶지 않은 폴더에도 적용됩니다. 이름은 해당 폴더가 명명된 모든 곳—팔레트(palette), 홈 카드, 헤더—에 표시됩니다. 세션 역시 고정할 수 있으며, 홈 화면의 카드나 ⌘K 메뉴에서 할 수 있습니다. 고정된 세션들은 최근 사용 목록 위에 자체 행을 유지합니다.
대화는 분기될 수 있습니다. 데스크톱 앱에서는 자신이 보낸 메시지에 마우스를 올리고 "여기서 새 세션 만들기(New session from here)"를 선택하거나, ⌘K 팔레트에서 세션을 마우스 오른쪽 버튼으로 클릭하고 "세션 복제(Duplicate session)"를 선택할 수 있습니다. 터미널에서는 /fork 명령어를 사용하여 현재 세션을 끝 지점에서 분기합니다. 이 분기된(branch) 세션은 동일한 폴더 내의 새 세션이며, 해당 턴까지의 대화를 보존하고 그 지점부터 계속됩니다. 반면 원본 세션은 이후의 턴들을 유지합니다. 분기는 폴더가 아니라 대화 내용을 되돌립니다(rewind): 원본이 진행하면서 변경한 파일들은 원래 상태를 유지합니다.
다른 기기에서 작업하기
계속 전원이 켜져 있는 장치는 자신의 Otis 런타임(runtime)을 사용자의 다른 장치에 있는 데스크톱 앱으로 제공할 수 있습니다. 해당 장치의 앱에서 '설정(Settings)' → '일반(General)' → '서버(Server)' → '다른 기기가 연결하도록 허용(Let your other devices connect)'을 켜면, 청취하는 네트워크를 선택하고 (Tailscale이 있다면 Tailscale을 선호함) 다른 곳에서 사용할 주소와 페어링 토큰(pairing token)을 표시합니다. 이 앱은 꺼질 때까지 시작할 때마다 다시 제공됩니다. 앱이 없는 장치는 대신 데몬(daemon)을 실행합니다:
otis serve --host <private address>