<p align="center">
<img src="https://raw.githubusercontent.com/cjhyy/codeshell/HEAD/assets/codeshell-dog-icon.png" alt="CodeShell mascot" width="120" />
</p>
CodeShell
<p align="center">
<a href="README.md">English</a> · <a href="README.zh-CN.md">简体中文</a>
</p>
<p align="center">
<strong>범용 AI 에이전트 오케스트레이션 프레임워크입니다 — 터미널, 헤드리스 환경, 그리고 완전한 데스크톱 앱을 지원합니다.</strong>
</p>
<p align="center">
<a href="https://www.npmjs.com/package/%40cjhyy%2Fcode-shell"><img src="https://img.shields.io/npm/v/%40cjhyy%2Fcode-shell" alt="npm version" /></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue" alt="MIT license" /></a>
<a href="package.json"><img src="https://img.shields.io/badge/node-%3E%3D20.10-339933" alt="Node.js >=20.10" /></a>
<a href="tsconfig.json"><img src="https://img.shields.io/badge/TypeScript-5.x-3178C6?logo=typescript&logoColor=white" alt="TypeScript" /></a>
<a href=".github/workflows/release.yml"><img src="https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-555" alt="macOS, Windows, and Linux" /></a>
</p>
<p align="center">
<img src="https://raw.githubusercontent.com/cjhyy/codeshell/HEAD/assets/codeshell-promo.png" alt="CodeShell desktop AI agent orchestration promotional image" width="860" />
</p>
CodeShell은 세 가지 모습을 갖춘 오케스트레이션 엔진입니다:
- 대화형 및 헤드리스 에이전트 실행을 위한 터미널 CLI (
code-shell),
- 채팅, 파일/브라우저/터미널/diff 패널, 모델 및 자격 증명(credential) 관리, 확장 마켓플레이스, 자동화 기능, 그리고 휴대폰 원격 제어 기능을 갖춘 Electron 데스크톱 앱,
- 자체 제품에 엔진을 임베딩할 수 있는 프로그래밍 방식의 SDK (
import { Engine } from "@cjhyy/code-shell").
핵심은 의도적으로 **도메인 비종속적(domain-agnostic)**입니다. 턴 루프(turn loop), 컨텍스트 관리, 권한(permissions), MCP 통합, 후크(hooks), 태스크(tasks), cron, 서브 에이전트(sub-agents), 세션(sessions), 메모리 등 모든 것이 일반적인 형태로 유지됩니다. 코딩 도구, git/worktree 동작 방식, LSP, 검토(review), 할당량(quota), 그리고 코딩 프롬프트는 물리적으로 분리된 @cjhyy/code-shell-capability-coding 패키지에 존재하며 CLI/데스크톱 호스트에 의해 구성됩니다. (참고: packages/core/CONTRIBUTING.md: "코어는 정책이 아닌 메커니즘만 담당합니다.")
상태: 0.9.x. 데스크톱 앱이 주요 제품이며, CLI와 SDK는 동일한 코어 엔진을 공유합니다. 게시된 릴리스 및 현재 릴리스 승인 기록을 참조하십시오.
CodeShell의 장점 (Why CodeShell)
- 하나의 엔진으로 여러 제품 구동(One engine, many products) — 동일한 런타임이 코딩, 리서치, 자동화, 브라우저 태스크, 그리고 장기 실행 워크플로우를 구동합니다. 동작 방식은 포크된 코드베이스가 아닌 프리셋과 도구로 표현됩니다.
- 터미널 우선, 헤드리스 준비 완료, 데스크톱 완벽 지원(Terminal-first, headless-ready, desktop-complete) — 터미널에서 대화형으로 실행하거나, 일회성 헤드리스 작업을 수행하거나, 전체 시각적 데스크톱 클라이언트를 사용할 수 있습니다.
- 기본적으로 권한 인지(Permission-aware by default) — 높은 영향력을 가진 동작(쓰기, 셸 사용, git)은 세션/프로젝트 범위와 신뢰할 수 있는 컨텍스트를 위한
bypass 모드를 갖춘 명시적인 승인 흐름 뒤에 위치합니다.
- 끝단까지 확장 가능(Extensible end-to-end) — 프리셋, 내장 도구, MCP 서버, 후크, 스킬, 플러그인(CC 및 Codex 형식), 서브 에이전트, cron 작업은 모두 일급 시민(first-class)이며, 데스크톱 UI를 통해 발견하고 설치할 수 있습니다.
- 로컬 우선 및 개인 정보 보호(Local-first & private) — 세션, 기록, 자격 증명, 메모리는
~/.code-shell/ 아래에 저장되며, 자격 증명 파일은 소유자 전용(0o600)으로 작성됩니다.
빠른 시작 (Quick start)
CLI
npx @cjhyy/code-shell
...
Node.js >= 20.10이 필요합니다.
데스크톱 앱
데스크톱 앱(packages/desktop)은 Electron 클라이언트입니다. 소스에서 실행하려면 다음과 같습니다:
스트리밍 출력을 지원하는 채팅 기능, 파일/브라우저/터미널/diff 패널이 나란히 배치된 도킹 스테이션, 모델 및 자격 증명(credential) 관리, 확장 마켓플레이스, 자동화/cron 스케줄링, 영구 목표 설정(persistent goals), 메모리, 그리고 휴대폰 리모컨을 제공합니다. 이 모든 기능은 세션별 에이전트 워커 프로세스를 통해 동일한 핵심 엔진을 구동합니다.
데스크톱 미리보기
<p align="center">
<img src="https://raw.githubusercontent.com/cjhyy/codeshell/HEAD/assets/codeshell-desktop-screenshot-en.png" alt="Playwright로 캡처한 실제 CodeShell 데스크톱 앱 스크린샷" width="860" />
</p>
기능 (Features)
핵심 엔진 (@cjhyy/code-shell-core)
- 스트리밍 출력 및 단계별 생명주기 이벤트를 갖춘 턴 기반 에이전트 루프
- 컨텍스트 압축(Context compaction) (도구 쌍 보존 방식) 및 디스크 상의 영속적인 세션 지속성
- 세션/프로젝트 규칙 캐싱 및 체인 명령 가드(chained-command guards)를 갖춘 권한 제한 도구 실행
- 훅 파이프라인 (사용자 + 프로젝트 + 플러그인 훅) 및 전체 MCP 클라이언트 통합
- 장기 실행 및 자체 속도 조절 워크플로우를 위한 일급 태스크(tasks), 서브 에이전트, cron, 슬립 기능
- 스톱 후크 심사(stop-hook judge)와 명시적인
complete_goal 선언을 갖춘 영구 목표 설정 (Persistent goals)
- 메모리 + 꿈 (Memory + Dream): 턴별 메모리 주입과 LLM 통합 패스
- 통합 모델 카탈로그: 태그 기반 구성으로 텍스트/이미지/비디오 제공업체를 하나로 묶고, UI 제어 및 도구 설명에 영향을 미치는 모델별 매개변수 정의 포함
- 백그라운드 셸 작업, 비용 추적, 턴 단위 파일 되돌리기/다시 실행(undo/redo)
| 프리셋 (Preset) | 목적 (Purpose) | 추가 도구 (Extra tools) |
|---|
harness-min | 임베딩을 위한 도메인 중립 핵심 기본값 | 최소 파일 시스템, 셸, MCP, 메모리, 작업 및 에이전트 메커니즘 |
| ... | | |
프리셋은 시스템 프롬프트, 내장 도구 세트 및 권한 기본값을 선택합니다. 이는 SDK, CLI의 --preset 플래그 또는 설정을 통해 구성할 수 있습니다.
터미널 사용자 경험(UX) (@cjhyy/code-shell-tui)
- 전체 화면/흐름 모드, vim 모드 입력 및 입력 기록이 있는 대화형 REPL (Ink 기반).
- 일회성 실행을 위한 헤드리스(headless)
run 모드와 더불어 repl, sessions, 및 runs 하위 명령어.
- 슬래시 명령어,
@ 언급을 통한 파일/스킬 검색, 명령어 자동 완성, REPL 내 크론 스케줄링.
Shift+Tab 권한 모드 순환, 기록 탐색, 세션 재개 및 비용/사용량 보고.
데스크톱 앱 (@cjhyy/code-shell-desktop)
- 스트리밍 채팅, 이미지 첨부 파일(업로드/드래그/붙여넣기) 지원 및 런타임 스티어링/큐 모델 제공 (큐 = 비간섭적 단계 간 삽입; "스티어" = 중단 후 재전송)
- 대화 옆에 배치되는 패널 도킹: 읽기 전용 파일(Files) 패널, 브라우저(Browser) 패널(CDP 기반, 선택 영역 앵커 동기화), 인터랙티브 터미널(Terminal)(node-pty), 그리고 비교/검토(Diff/Review) 패널
- 모델 카탈로그 및 연결: 제공업체/모델에 대한 전체 CRUD 기능, 회사별 자격 증명 재사용, 매개변수 문서가 도구 설명으로 노출됨
- 자격 증명(Credentials): API 키, 브라우저 쿠키 로그인(임베디드 웹뷰로 처리할 수 없는 사이트를 위한 전용 로그인 창 포함), 다중 계정 쿠키 자격 증명, 그리고 권한 토큰/링크 게이트
- 확장 기능(Extensions): 플러그인/스킬/MCP 관리 및 마켓플레이스 제공 (업로드된 아카이브를 포함하여 CC- 및 Codex 형식의 플러그인 설치), 기능 개요, 서브 에이전트(Agent 역할) 관리
- 자동화(Automation): 읽기 전용 계약 강제 적용 기능을 갖춘 cron/예약 작업, 작업별 기록 및 메모리, 그리고 장기 작업을 위한 실행(runs) 보기
- Mimi 후속 조치: 알림 등록 또는 원래 작업의 명시적 승인된 지속 기능, 다음 시간 확인, 재조정, 취소 등을 하나의 '후속 조치가 필요한 목록'에서 처리; 현재 질문과 실제 작업 목표를 통해 메모리 검색
- 영구 목표(Persistent goals), 메모리 관리(핀 고정/편집/지우기, 수동 Dream), 훅(hooks) 구성, 그리고 전체 국제화(i18n)(중국어 / 영어)
- 휴대폰 원격 제어: 로컬 WebSocket을 통해 모바일 웹 앱에서 데스크톱 세션 제어
- 온보딩 마법사, 신뢰 게이트, 앱 업데이트기, 명령 팔레트(⌘K), 프로젝트 간 세션 검색(⌘P), 그리고 인-트랜스크립트 검색(⌘F)
예를 들어, Mimi에게 작업 세션(work Session)을 생성하지 않고 내일 오전 10시에 알림을 설정해 달라고 요청할 수 있습니다. 작업을 계속하려면 명시적인 승인이 필요합니다. Wake는 데스크톱 앱이 열려 있는 동안 실행되며, 재시작 후 기본 복구 기간은 예정 시간으로부터 24시간입니다. 만료된 항목은 실패 이유를 유지하며, 불확실한 전송이나 시작은 자동으로 다시 재생되지 않습니다.
Core 자체는 최소한의 harness-min 프리셋으로 기본 설정됩니다. CLI와 Desktop은 코딩 기능 패키지를 구성하며, 호스트 기본값은 terminal-coding입니다. 런타임 가드(Runtime guards)는 사용 불가능한 제공업체(providers), 자격 증명(credentials), 쿠키 또는 활성 목표(active goal)가 필요한 도구를 숨길 수 있습니다.
- 파일/작업 공간 (File / workspace):
Read, Write, Edit, ApplyPatch, Glob, Grep
- 셸/실행 (Shell / execution):
Bash, BashOutput, KillShell, ListShells, PowerShell, REPL, Sleep
- 웹/미디어/브라우저 (Web / media / browser):
browser_observe, browser_act, browser_navigate, WebSearch, WebFetch, GenerateImage, GenerateVideo
- 계획/오케스트레이션 (Planning / orchestration):
AskUserQuestion, AskUserQuestionAsync, EnterPlanMode, ExitPlanMode, ToolSearch, TodoWrite, Agent, AgentCancel, DriveAgent, DriveClaudeCode, CheckQuota
- 자동화/통합 (Automation / integration):
CronCreate, CronDelete, CronList, Config, Skill, AddMarketplace, InstallCapability, MCPTool, ListMcpResources, ReadMcpResource, EditModelCatalog, ConfigureModelConnection
- 메모리/자격 증명/목표 (Memory / credentials / goals):
MemoryList, MemoryRead, MemorySave, MemoryDelete, UseCredential, InjectCredential, complete_goal, cancel_goal
- 터미널 코딩 프리셋 추가 기능 (Terminal-coding preset extras):
EnterWorktree, ExitWorktree, NotebookEdit, LSP, Brief
InstallCapability를 사용하면 대화에서 마켓플레이스 플러그인, 독립형 프로젝트 Skill, MCP 서버를 나열하고, 검사하고, 설치하고, 업데이트하고, 활성화하고, 비활성화하며, 제거할 수 있습니다. MCP 구성은 private-local, shared-project, user-wide 범위를 지원합니다. 변경 사항(mutations) 및 외부 Skill 레지스트리 검사는 계속 승인 게이트(approval-gated)를 거쳐야 합니다.
프로그램 방식 API
메타 패키지는 핵심 엔진을 재내보내므로, 레거시 SDK 임포트도 작동합니다:
import { Engine } from "@cjhyy/code-shell";
const generalEngine = new Engine({
...
모든 것은 패키지 루트에서 내보내집니다 — import { ... } from "@cjhyy/code-shell" (또는 @cjhyy/code-shell-core에서 직접). /run, /arena, 또는 /product 하위 경로 진입점은 없습니다.
실행 가능한 SDK 예제는 examples/에 있습니다 — 각각은 bun run <파일>로 직접 실행되며, API 키가 구성되지 않은 경우 --dry-run (스크립트 모의 LLM)을 지원합니다:
설정
CLI 프리셋 선택:
npx @cjhyy/code-shell --preset general
npx @cjhyy/code-shell --preset terminal-coding
설정 기반 구성 (~/.code-shell/settings.json, 프로젝트 레벨 오버라이드 포함):
{
"agent": {
"preset": "general",
...
지원되는 agent 설정: preset, enabledBuiltinTools, disabledBuiltinTools, customSystemPrompt, appendSystemPrompt.
전체 화면 모드 (TUI)
CodeShell의 터미널 UI는 기본적으로 전체 화면(alt-screen + ScrollBox)입니다 — 창 크기 조정 시 깨끗하게 다시 그려지는(repaints cleanly) 모드입니다. Flow mode는 리사이즈 후 스크롤백에 중복 콘텐츠를 표시할 수 있습니다. 이는 CodeShell이 지우기 전에 터미널이 이전 뷰포트를 위로 밀어내기 때문입니다.
시작 시 CODESHELL_FULLSCREEN=0|false|off로 제외하거나, /fullscreen off로 런타임에 토글할 수 있습니다. Flow mode는 전사 기록(transcript)이 터미널의 네이티브 스크롤백으로 흐르도록 합니다 (셸 히스토리를 CodeShell 위에 표시하는 것을 선호하는 경우 유용합니다).
스트림 유휴 감시 장치 (기본 활성화)
OpenAI와 호환되는 제공자(provider)는 청크 없이 CODESHELL_STREAM_IDLE_TIMEOUT_MS ms(기본값 90000) 동안 유휴 상태인 모든 LLM 스트림을 중단시킨 후, 기존의 withRetry 정책을 통해 재시도하며, 이는 CODESHELL_STREAM_WATCHDOG_RETRIES(기본값 2)에 의해 제한됩니다. 이 기능은 상위(upstream) 오류가 무기한이 아닌 약 90초(s)로 제한되도록 합니다. 제외하려면 CODESHELL_ENABLE_STREAM_WATCHDOG=0을 설정하세요. 사용자가 시작하는 중단(Esc / Ctrl+C)은 절대 재시도되지 않습니다.
아키텍처 (Architecture)