Opilot — GitHub Copilot VS Code 확장 프로그램용 Ollama
Version Tests codecov License: MIT
<p align="center">
<img src="https://raw.githubusercontent.com/voxslopuli/opilot/HEAD/logo.png" alt="Opilot" width="128" height="128">
</p>
<p align="center">
<strong style="font-size: 1.2em;">GitHub Copilot Chat 내부에서 완전한 도구 및 비전 지원을 갖춘 Ollama 모델 실행</strong>
</p>
Opilot은 전체 Ollama 생태계(로컬 모델, 클라우드 모델, 그리고 Ollama 모델 라이브러리)를 VS Code의 Copilot Chat 인터페이스에 직접 통합합니다. 로컬 모델을 사용할 때 대화 내용이 기기를 벗어나지 않으며, 에디터를 떠나지 않고도 모델 간 전환이 가능합니다.
<p align="center">
<a href="https://opilot.self.agency">📖 문서</a> •
<a href="https://marketplace.visualstudio.com/items?itemName=selfagency.opilot">🛒 마켓플레이스</a> •
<a href="https://github.com/selfagency/opilot">🐙 GitHub</a> •
<a href="https://github.com/selfagency/opilot/issues">🐛 이슈</a>
</p>
<p align="center">
<a href="https://ollama.ai">🌐 Ollama</a> •
<a href="https://github.com/ollama/ollama">📖 Ollama 레포지토리</a> •
<a href="https://ollama.ai/library">📚 모델 라이브러리</a>
</p>
✨ 기능
- 🦙 모든 Ollama 모델(All Ollama Models) — Ollama 라이브러리의 모든 모델을 사용하며, 클라우드 모델(ollama login 후)도 1급 Copilot 채팅 모델 및
@ollama 참여자로 활용할 수 있습니다.
- 🛠️ 모델 관리 사이드바(Model Management Sidebar) — 전용 Ollama 활동 바 패널에서 모델을 가져오고(Pull), 실행하고(Run), 검사하며(Inspect), 중지시키고(Stop), 삭제할 수 있으며, 실시간 상태 배지가 제공됩니다.
- 🎛️ 모델별 설정 패널(Per-Model Settings Panel) — 에디터 내 웹뷰(webview)에서 온도(temperature), top-p/top-k, 컨텍스트(context), 최대 토큰(max tokens), 사고 예산(thinking budget)을 조정할 수 있습니다. 이 설정은 모델별로 유지됩니다.
- 📡 상태 표시줄 활성 지표(Status Bar Heartbeat) — 항상 보이는 Ollama 서버 표시기로, 실행 중인 모델 개수, 연결 상태 및 리소스에 대한 툴팁이 제공됩니다.
- 💬 채팅 참여자(Chat Participant) — Copilot Chat에서
@ollama를 호출하여 선택한 로컬 모델과 전용적이고 히스토리 인식 대화(history-aware conversation)를 진행할 수 있습니다.
- 📝 Modelfile 관리자(Modelfile Manager) — 구문 강조 표시(syntax highlighting), 호버 문서(hover documentation), 자동 완성 기능을 갖춘 사용자 지정 Ollama modelfile을 생성, 편집 및 빌드할 수 있습니다.
- ⌨️ 인라인 코드 완성(Inline Code Completions) — 타이핑하는 동안 로컬 Ollama 모델이 구동하는 채우기식 중간 코드 제안(fill-in-the-middle code suggestions)을 받을 수 있습니다.
- 🔧 도구 호출(Tool Calling) — 호환 가능한 모델(MCP 서버, VS Code 명령어, 사용자 지정 스킬)을 위한 에이전트 워크플로우(agentic workflows)에서 전체 도구/함수 호출 지원 기능을 제공합니다.
- 🖼️ 비전 지원(Vision Support) — 비전 기능이 있는 모델에 이미지 입력을 할 수 있습니다. 비전 기능이 없는 모델의 경우, 프롬프트 오버플로를 방지하기 위해 이미지가 자동으로 제거됩니다.
- 💭 사고 과정 모델(Thinking Models) — 사고의 사슬(Chain-of-Thought)을 노출하는 모델(예: DeepSeek-R1, Qwen QwQ, Kimi)에 대해 접을 수 있는 '사고(Thinking)' 및 '응답(Response)' 섹션을 통해 확장된 추론 기능을 제공합니다.
- 🏠 로컬 실행 및 개인 정보 보호(Local Execution & Privacy) — 로컬 모델은 전적으로 사용자의 장치에서 실행되며, 어떠한 외부 서비스에도 데이터가 전송되지 않습니다.
- ⚡ 스트리밍(Streaming) — 채팅 참여자와 제공자 경로 모두에서 낮은 지연 시간 응답을 위한 실시간 토큰 스트리밍이 가능합니다.
- 🔒 보안 토큰 저장소(Secure Token Storage) — 원격 Ollama 인스턴스를 위한 인증 토큰은 VS Code의 암호화된 비밀(secrets) API에 저장됩니다.
🔧 요구 사항
- VS Code 1.111.0 이상
- GitHub Copilot Chat 확장 프로그램이 설치 및 활성화되어 있어야 함
- 로컬에 Ollama가 설치되어 있거나 (다운로드) 사용자가 제어하는 원격 Ollama 인스턴스가 필요함
🚀 빠른 시작 (Quick Start)
- Ollama 설치하고 실행합니다 (
ollama serve 또는 앱 열기)
- VS Code 마켓플레이스에서 Opilot을 설치하거나 (.vsix 파일 설치) 합니다
- 활동 표시줄에 Ollama 아이콘이 나타나면 클릭하여 사이드바를 엽니다
- 라이브러리 (Library) 패널에서 모델을 가져옵니다 (예:
llama3.2:3b)
- Copilot Chat을 열고, 모델 선택기를 클릭한 다음 Ollama 모델을 선택하거나 채팅하려면
@ollama를 입력합니다.
이 확장 프로그램은 로컬 Ollama 인스턴스를 http://localhost:11434에서 자동으로 감지합니다. 클라우드 모델을 사용하려면 먼저 ollama login을 실행해야 합니다. 원격 인스턴스를 사용하려면 VS Code 설정에 opilot.host를 설정하세요 (레거시 ollama.host도 여전히 지원됩니다).
⚙️ 구성 (Configuration)
VS Code 설정 열기 (Ctrl+, / Cmd+,) 후 "Opilot"을 검색합니다:
opilot.host - Ollama 서버 주소 (기본값: http://localhost:11434)
opilot.streamLogs - Ollama 서버 로그를 출력 채널로 스트리밍할지 여부 (기본값: true)
opilot.localModelRefreshInterval - 로컬 및 실행 중인 모델의 자동 새로고침 간격, 초 단위 (기본값: 30)
opilot.libraryRefreshInterval - 라이브러리 및 클라우드 모델 카탈로그를 위한 예약된 새로고침 간격, 초 단위 (기본값: 21600); 패널은 현재 시작 시점과 수동 새로고침 버튼을 통해 새로고침됩니다.
opilot.completionModel - 인라인 코드 자동 완성에 사용되는 모델 (예: qwen2.5-coder:1.5b). 비활성화하려면 공백으로 둡니다.
opilot.enableInlineCompletions - 인라인 코드 자동 완성을 활성화하거나 비활성화합니다 (기본값: true)
opilot.modelfilesPath - modelfile이 저장되는 폴더 (기본값: ~/.ollama/modelfiles)
opilot.diagnostics.logLevel - Ollama 출력 채널의 상세 수준 (debug, info, warn, error; 기본값: info)
레거시 ollama.* 설정은 계속 작동하며 활성화 시 자동으로 마이그레이션됩니다.
원격 Ollama 인스턴스를 사용하려면 autopilot.host를 업데이트하여 원격 서버를 가리키도록 설정하세요.
💬 사용법 (Usage)
모델 선택기 (Model Picker)
@ollama 핸들 없이 Copilot Chat에서 Ollama 모델을 사용하려면:
- VS Code에서 GitHub Copilot Chat 패널 열기
- 모델 선택기(model selector) 드롭다운 클릭
- Ollama 모델 선택 (로컬 또는 라이브러리 기반)
- 채팅 시작!
채팅 참여자 (Chat Participant)
모든 Copilot Chat 입력창에 @ollama를 입력하여 대화를 로컬 Ollama 인스턴스로 직접 연결할 수 있습니다:
@ollama explain the architecture of this TypeScript project
이 참여자는 '고정(sticky)'되어 있어, 한 번 호출되면 해당 스레드 동안 활성 상태를 유지합니다.
인라인 코드 완성 (Inline Code Completions)
코드를 입력하는 동안 인라인 코드 완성을 얻으려면 autopilot.completionModel을 로컬에 설치된 모델로 설정하세요. 작고 빠른 모델이 가장 좋습니다:
qwen2.5-coder:1.5b
deepseek-coder:1.3b
starcoder2:3b
완성은 모델이 지원하는 경우 필인-더-미들(fill-in-the-middle, FIM) 방식을 사용하며, autopilot.enableInlineCompletions으로 토글할 수 있습니다.
사이드바: 모델 관리 (Model Management)
Ollama 활동 표시줄 아이콘을 열면 네 개의 패널이 있는 사이드바가 나타납니다:
로컬 모델 (Local Models)
- 가족별(트리 뷰) 또는 단일 목록으로 모든 로컬 설치 모델 보기
- 패널 헤더의 필터 아이콘을 사용하여 이름으로 모델 필터링
- 레이아웃 아이콘을 사용하여 그룹화된 트리 뷰와 단일 목록 간 토글
- 로컬 모델 도구 모음의 톱니바퀴 아이콘에서 모델 설정(Model Settings) 열기
- 모델별 인라인 버튼: 시작(Start) (▶), 중지(Stop) (⏹), 삭제(Delete) (🗑)
- 실행 중인 모델은 VRAM 사용량과 로드된 시간을 표시합니다.
- 모델 기능 배지: 🧠 사고(thinking), 🛠️ 도구(tools), 👁️ 시각(vision), 🧩 임베딩(embedding)
- 30초마다 자동 새로고침됩니다 (
autopilot.localModelRefreshInterval을 통해 설정 가능); 설정이 변경되면 새로고침 간격은 자동으로 재시작됩니다.
모델 설정 패널 (Model Settings Panel)
개별 모델 생성 오버라이드를 구성하려면 **Ollama: 모델 설정 열기(Open Model Settings)**를 열거나 로컬 모델의 톱니바퀴 아이콘을 클릭하세요.
- 온도 (Temperature)
- Top-P
- Top-K
- 컨텍스트 창 (context window) (
num_ctx)
- 최대 토큰 수 (max tokens) (
num_predict)
- 사고 기능 토글 (thinking toggle) (
think)
- 사고 예산 (thinking budget) (
think_budget)
변경 사항은 즉시 적용되며, 확장 프로그램의 전역 저장소(global storage)에서 모델별로 영구적으로 보존됩니다.
상태 표시줄 심박수 (Status Bar Heartbeat)
Opilot은 지속적인 상태 표시줄 항목을 추가합니다:
- 확인 중일 때:
$(loading~spin) Ollama…
- 접근 가능할 때:
$(pulse) Ollama 또는 $(pulse) Ollama (N)
- 지연된 실패 후 오프라인일 때:
$(warning) Ollama offline
상태 표시줄 항목을 클릭하거나 Ollama: Check Server Health를 실행하여 즉시 연결 상태 확인을 할 수 있습니다.
클라우드 모델 (Cloud Models)
- Ollama Cloud에서 가져온 모델 보기 (로그인 필요,
ollama login 요구)
- 필터링, 패밀리별 그룹화 및 전체 접기 기능이 로컬 모델과 동일합니다.
- 인라인 버튼: 페이지 열기 (🔗), 실행 (▶), 중지 (⏹), 삭제 (🗑)
- 패널 헤더의 로그인 (👤) 버튼을 사용하여 인증합니다.
라이브러리 (Library)
- [ollama.ai/library]에서 수백 개의 사전 구성된 모델을 찾아봅니다.
- 모델은 패밀리별로 그룹화되어 있으며, 접을 수 있는 변형(variant) 자식 항목이 있습니다.
- 이름으로 필터링하고 최신순 또는 이름순으로 정렬합니다.
- 이미 로컬에 다운로드된 변형은 ✓ 체크 표시가 나타납니다.
- 모든 변형에서 풀(Pull) (⬇)을 클릭하여 스트리밍 진행 상황과 함께 다운로드합니다.
Modelfiles
사용자 지정 Ollama modelfile을 생성하고 관리하는 Modelfile Manager 패널입니다. 아래 Modelfile Manager를 참조하세요.
Modelfile Manager
새 Modelfile 생성하기
Modelfile Manager 패널 헤더의 + 버튼을 클릭합니다. 대화형 마법사(wizard)가 다음 과정을 안내합니다:
- 이름 (Name) — modelfile 이름을 입력합니다 (예:
pirate-bot)
- 기반 모델 (Base model) — 로컬에 설치된 Ollama 모델 중에서 선택합니다.
- 시스템 프롬프트 (System prompt) — AI 페르소나 또는 작업을 설명합니다.
마법사는 파일을 생성하고, 선택한 설정으로 미리 채운 다음, 편집기에서 열어줍니다.
Modelfile 빌드하기
창의 패널에서 아무 .modelfile을 마우스 오른쪽 버튼으로 클릭하고 Build Model from Modelfile을 선택하거나 (또는 명령 팔레트를 사용: Ollama: Build Model from Modelfile) 실행합니다. 이렇게 하면 파일과 함께 ollama create가 실행되며 VS Code 알림에 진행 상황이 스트리밍됩니다.
구문 지원 (Syntax support)
모든 .modelfile 파일은 다음 기능을 제공받습니다:
- 구문 강조 표시 (Syntax highlighting) — 키워드 (
FROM, PARAMETER, SYSTEM, TEMPLATE, ADAPTER, LICENSE, MESSAGE, REQUIRES), 매개변수 이름, 숫자, 문자열 및 주석에 대한 구문 강조 표시
- 툴팁 문서화 (Hover documentation) — 모든 키워드나 매개변수 이름 위에 마우스를 올리면 설명과 사용법을 볼 수 있습니다.
- 자동 완성 (Autocomplete) — Modelfile 키워드 및 일반적인 매개변수 이름을 위한 제안 기능
# Modelfile — pirate-bot
FROM llama3.2:3b
...
전체 구문 참조는 [Ollama Modelfile Docs]를 참고하세요.
🛡️ 개인 정보 보호 및 보안 (Privacy & Security)
- 사용자의 모델과 대화는 완전히 로컬에서 실행되며 외부 서비스로 데이터가 전송되지 않습니다.
- 확장 프로그램은 사용자의 로컬 Ollama 인스턴스(또는 지정된 원격 인스턴스)와만 통신합니다.
- 텔레메트리, 추적 또는 데이터 수집이 없습니다.
- 인증 토큰 (원격 인스턴스를 사용하는 경우)은 VS Code의 암호화된 시크릿 API를 사용하여 안전하게 저장됩니다.
Ollama의 보안 및 개인 정보 보호 모델에 대한 자세한 내용은 [Ollama GitHub repository]를 참고하세요.
🛠️ 개발 (Development)
전제 조건 (Prerequisites)
빌드 (Build)
pnpm run compile # 타입 검사 + 린트 + 번들링 (Task에 위임)
pnpm run watch # 타입 검사와 번들을 위한 병렬 감시(watch) 실행 (Task에 위임)
이 프로젝트는 표준 실행기(canonical runner)로 Task (go-task)를 사용합니다. 위의 package.json 스크립트는 기여자 및 CI에 발견 가능하고 일관된 인터페이스를 제공하기 위해 Task에 위임하는 얇은 래퍼(thin wrappers)입니다. 선호한다면 Task를 사용하여 직접 작업을 실행할 수 있습니다:
task compile
task unit-test-coverage
task extension-tests
로컬에 Task가 설치되어 있지 않은 경우, CI는 go-task/setup-task 액션을 사용합니다. 또는 pnpm/pnpx를 통해 실행할 수 있습니다: `pnpm dlx task <name>`.
테스트 (Testing)
pnpm test
pnpm run test:coverage
pnpm run test:extension
...
디버깅 (Debugging)
VS Code에서 프로젝트를 열고 F5를 눌러 확장 프로그램이 로드된 상태의 확장 프로그램 개발 호스트(Extension Development Host)를 실행합니다.
📄 라이선스 (License)
MIT 라이선스(MIT License) - 자세한 내용은 LICENSE를 참조하십시오.
Daniel Sieradski(https://self.agency) (@selfagency)가 유지 관리합니다.
📚 자료 (Resources)
Opilot