Generated: 2026-01-25
Version: 0.1.0
Jindo는 Ollama 기반의 로컬 모델 에이전트로, MCP (Model Context Protocol)를 완전히 지원합니다. 듀얼 모델 아키텍처로 conversation + function calling을 분리하며, ink 기반 TUI와 멀티 프로바이더 지원을 통해 최고의 사용자 경험을 제공합니다.
-
🤖 듀얼 모델 아키텍처
- Conversation 모델 (llama3.2:3b, phi-3-mini, llama3.1:8b)
- Function 모델 (functiongemma:270m)
- 자동 폴백: Function 모델 없으면 Conversation 모델 사용
-
🌐 멀티 프로바이더 지원
- Ollama (로컬 모델)
- OpenAI (GPT-4, GPT-3.5)
- Anthropic (Claude)
- Groq (빠른 추론)
- 모델 접두사 자동 라우팅 (openai:gpt-4, anthropic:claude-3, etc.)
-
🎨 ink TUI 인터페이스
- React 기반 터미널 UI
- 자동완성 및 탭 완성
- 키보드 내비게이션 (방향키, Tab, Esc)
- 실시간 스트리밍 출력
- 슬래시 명령어 지원
-
🔌 MCP 완전 지원
- MCP 서버 동적 연결/해제
- 도구 자동 등록 및 실행
- 환경변수 치환 (
${API_KEY}) - 내장 MCP 서버 레지스트리 지원 (향후)
-
🛠️ 내장 도구
- FileSystem 도구 (파일 읽기/쓰기)
- Shell 도구 (명령어 실행)
- Config 도구 (설정 관리)
- Model 도구 (모델 정보 조회)
-
⚙️ 고급 프롬프트 관리
- 중앙 PromptManager로 시스템/함수콜 프롬프트 관리
- 패키지 내장 + 사용자 오버라이드 우선순위
- 버전 관리 및 Langfuse 확장 준비
- 동적 프롬프트 로딩 및 캐싱
# npm 전역 설치
npm install -g jindo
# pnpm 전역 설치
pnpm add -g jindo
# npx (설치 없이 체험)
npx jindo --help# macOS
brew install ollama
# Linux
curl -fsSL https://ollama.com/install.sh | sh
# Windows (WSL)
wsl --install
curl -fsSL https://ollama.com/install.sh | shjindo init프리셋 선택:
lightweight(2.5GB VRAM, 빠름)balanced(3.5GB VRAM, 권장)highend(10GB VRAM, 고성능)
ollama pull llama3.2:3b # Conversation 모델
ollama pull functiongemma:270m # Function 모델# 기본 CLI 모드
jindo chat
# TUI 모드 (권장)
jindo chat --tuiJindo의 TUI는 React 기반 ink 라이브러리로 구현된 현대적인 터미널 인터페이스입니다.
- 🎨 현대적 UI: React 기반으로 빠르고 반응성이 뛰어남
- ⌨️ 키보드 내비게이션: 직관적인 단축키 지원
- 💡 자동완성: Tab 키로 명령어 및 텍스트 자동완성
- 📊 실시간 정보: 상태 표시 및 진행 상황 바로 확인
- 🎯 슬래시 명령어:
/help,/status,/model등 빠른 명령어
| 키 | 기능 | 설명 |
|---|---|---|
Tab |
자동완성 토글 | 제안 목록 표시/숨김 |
↑↓ |
제안 내비게이션 | 자동완성 항목 선택 |
Enter |
메시지 전송 | 현재 입력 메시지 전송 |
Esc |
제안 취소 | 자동완성 목록 숨김 |
Ctrl+C |
입력 지우기 | 현재 입력 내용 초기화 |
←→ |
제안 취소 | 자동완성 목록 숨김 |
/help • 도움말 표시
/clear • 채팅 기록 지우기
/status • 에이전트 상태 확인
/model • 현재 모델 정보
/mcp • MCP 서버 상태
/providers • 설정된 프로바이더 확인
/exit • 프로그램 종료╔══════════════════════════════════════════════════════════╗
║ 🐕 Jindo - Local AI Assistant (TUI Mode) ║
╚══════════════════════════════════════════════════════════╝
You: /status
Assistant: 📊 Agent Status
🤖 Model: ollama:llama3.2:3b
💬 Messages: 1
🔌 MCP Servers: 0 enabled
📚 Providers: 0
──────────────────────────────────────────────────────────────────
Tab: Suggestions • Ctrl+C: Clear • Esc: Cancel
Message... (Tab for autocomplete)_
TUI 모드는 CLI 모드에 비해 다음과 같은 장점이 있습니다:
- 더 나은 사용자 경험: 반응성 있는 UI와 직관적인 상호작용
- 자동완성: 명령어와 일반 텍스트 자동완성 지원
- 실시간 피드백: 상태 정보와 진행 상황 실시간 표시
- 키보드 중심: 마우스 없이 모든 작업 가능
Jindo 설정 초기화
jindo init [--preset <preset>] [--force]옵션:
-p, --preset <preset>: 프리셋 선택 (lightweight, balanced, highend)-f, --force: 기존 설정 덮어쓰기
인터랙티브 채팅 모드
jindo chat [-f <format>] [-v] [--no-streaming] [--tui]옵션:
-f, --format <format>: 출력 포맷 (text, markdown)-v, --verbose: 상세 출력--no-streaming: 스트리밍 비활성화--tui: ink 기반 TUI 인터페이스로 시작
설정 관리
jindo config get [path] # 설정 값 조회
jindo config set <path> <value> # 설정 값 설정
jindo config path # 설정 파일 경로 표시
jindo config reset # 설정 초기화예시:
jindo config get agent.conversationModel
jindo config set agent.conversationModel ollama:llama3.1:8b
jindo config set agent.maxHistoryMessages 100Ollama 모델 관리
jindo model list # 설치된/권장 모델 목록
jindo model download <model> # 모델 다운로드
jindo model set <type> <value> # 모델 설정
jindo model info <model> # 모델 정보타입:
preset: 프리셋 (lightweight, balanced, highend)conversation: Conversation 모델function: Function 모델
MCP 서버 관리
jindo mcp list # 설정된 서버 목록
jindo mcp add <name> [-c <command>] [-a <args...>] # 서버 추가
jindo mcp enable <name> # 서버 활성화
jindo mcp disable <name> # 서버 비활성화
jindo mcp remove <name> # 서버 제거~/.config/jindo/
├── config.yaml # 기본 설정
├── mcp-settings.json # MCP 서버 설정
└── .env # 환경변수 (선택)
agent:
conversationModel: ollama:llama3.2:3b # 대화 모델
functionModel: ollama:functiongemma:270m # 함수 호출 모델
outputFormat: text # 출력 포맷
maxHistoryMessages: 50 # 최대 히스토리 메시지
mcp:
servers: {} # MCP 서버 설정{
"servers": {
"brave-search": {
"enabled": true,
"command": "node",
"args": ["./server.js"],
"env": {
"BRAVE_API_KEY": "${BRAVE_API_KEY}"
},
"type": "custom"
}
}
}프롬프트는 다음 우선순위로 로드됩니다:
- 사용자 오버라이드:
~/.config/jindo/prompts/system.md - 패키지 내장:
node_modules/jindo/prompts/system.md - 하드코딩 기본값: 소스에 내장된 기본값
| 프리셋 | Conversation 모델 | Function 모델 | VRAM | 디스크 | 특징 |
|---|---|---|---|---|---|
| lightweight | ollama:phi-3-mini | ollama:functiongemma:270m | 2.5GB | 1.7GB | 빠름, 저사양 |
| balanced | ollama:llama3.2:3b | ollama:functiongemma:270m | 3.5GB | 1.9GB | 권장 |
| highend | ollama:llama3.1:8b | ollama:functiongemma:270m | 10GB | 5.0GB | 고성능 |
src/
├── core/ # 코어 로직
│ ├── AgentController.ts
│ ├── Conversation.ts
│ ├── Memory.ts
│ ├── ToolExecutor.ts
│ └── FunctionRouter.ts
├── models/ # 모델 어댑터
│ ├── OllamaAdapter.ts
│ ├── FunctionGemmaAdapter.ts
│ └── ModelSelector.ts
├── mcp/ # MCP 통합
│ ├── MCPRegistry.ts
│ ├── MCPToolWrapper.ts
│ ├── MCPService.ts
│ └── EnvSubstitution.ts
├── tools/ # 내장 도구
│ ├── internal/
│ └── index.ts
├── cli/ # CLI 인터페이스
│ ├── CLIInterface.ts
│ ├── commands/
│ └── slash-commands/
├── config/ # 설정 관리
│ ├── ConfigManager.ts
│ └── types/
└── interfaces/ # 인터페이스 정의
└── IInterface.ts
# 기본 모드로 시작
jindo chat
# TUI 모드로 시작
jindo chat --tui
# 프롬프트 지정하여 시작
jindo chat --system-prompt custom.md
# Markdown 출력으로 시작
jindo chat --format markdown
# Ollama 모델 변경
jindo chat --conversation-model ollama:llama3.1:8b
# OpenAI 사용 설정
jindo provider set openai:apiKey=your_key_here
jindo chat --conversation-model openai:gpt-4# OpenAI로 채팅
jindo provider set openai:apiKey=sk-xxx
jindo chat --conversation-model openai:gpt-4
# Anthropic 사용 설정
jindo provider set anthropic:apiKey=sk-ant-xxx
jindo chat --conversation-model anthropic:claude-3-sonnetpnpm build__dirname과 같은 Node.js 전역 변수 사용 시 TypeScript에서 오류가 발생할 수 있습니다. 다음 해결 방법들이 있습니다:
import { fileURLToPath } from 'node:url';
import { dirname } from 'node:path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);declare const __dirname: string;import { join } from 'node:path';
import { fileURLToPath } from 'node:url';
const projectRoot = join(fileURLToPath(import.meta.url), '..');const IS_PRODUCTION = process.env.NODE_ENV === 'production';
const CONFIG_PATH = IS_PRODUCTION
? join(projectRoot, 'config', 'production.yaml')
: join(projectRoot, 'config', 'development.yaml');pnpm test
pnpm test:coveragepnpm lint
pnpm lint:fixpnpm format
pnpm format:checkJINDO_CONFIG_PATH: 설정 디렉토리 경로 오버라이드DEBUG=1: 디버그 모드 활성화JINDO_PROMPT_SOURCE: 프롬프트 소스 (future: langfuse)
- 프로젝트 셋업 및 아키텍처
- Ollama 모델 통합
- 코어 기능 (AgentController, Conversation, Memory)
- MCP 통합
- CLI 기본 기능
- 내장 도구 기본 구조
- PromptManager 및 프롬프트 버전 관리
- ink 기반 TUI (방향키/자동완성)
- OpenAI/Anthropic/Groq Provider 추가
- 내장 도구 확장 (FileSystem, Shell)
- MCP 레지스트리 및 검색
- 멀티 에이전트 지원
- Langfuse/외부 프롬프트 관리
- Webpack/pkg 기반 실행파일
- 이 저장소 클론
pnpm install로 의존성 설치pnpm build로 빌드 확인- 기능 브랜치 생성
- Pull Request 제출
MIT License - LICENSE 파일 참조
- 🐛 버그 리포트: Issues
- 💡 기능 요청: Discussions
- 📖 문서: Wiki
Jindo: Your local AI assistant, powered by Ollama and MCP. 🐕🚀