<img src="https://raw.githubusercontent.com/jimoto-no-llm/rustdsh/HEAD/assets/icon.png" width="96" alt="rdsh icon">
rdsh — dsh를 위한 빠르고 안전한 Rust 런처
ci
dashboard
docs
codecov
release
crates.io
license
rust
日本語 · 简体中文
독립적인 커뮤니티 프로젝트이며, DeepSeek 또는 DeepSeek Harness의 공식 프로젝트가 아닙니다.
rdsh는 DeepSeek Harness (dsh)를 위한 빠르고 안전한 런처입니다.
이것은 자주 사용되는 CLI(Command Line Interface) 작업들(토큰 계산, 코드 검색, 세션 관리)을 네이티브 Rust로 포팅하는 동시에, 대화 워크플로우와 모델 실행은 상위 dsh에 투명하게 위임합니다. 기존의 모든 인자 및 옵션은 변경 없이 계속 작동합니다.
rdsh를 사용하는 이유?
⚡ 밀리초 단위 프로세스 실행: rdsh --version은 약 0.90ms 만에 시작되며 최대 RSS는 약 2.9MB인 반면, Node.js 기반의 dsh --version은 약 88ms와 약 66MB를 사용합니다. 이는 순수 프로세스 실행만을 의미하며, 부팅된 에이전트 프로필은 여전히 상위(upstream) Node.js에서 실행되므로 대화 시작 및 세션 메모리는 상위 시스템과 동일하게 유지됩니다. 벤치마크를 참조하세요.
- 🔄 100% 드롭인 호환성:
rdsh 네이티브가 아닌 하위 명령어(subcommands)는 상위 dsh로 바로 전달됩니다. 기존 스크립트와 워크플로우는 변경 없이 계속 실행됩니다.
- 🛠 빠른 네이티브 유틸리티: Node.js를 시작하지 않고도 토큰 추정, 코드 검색, 세션 목록화, 건강 진단(
rdsh doctor) 등을 즉시 수행할 수 있습니다.
- 🛡 기본적으로 안전함 (Safe by Default): 읽기 전용 명령어는 소스 파일을 절대 수정하지 않으며, 자격 증명(credentials)을 자동으로 동기화하거나 내보내지 않습니다. 또한 Linux 환경에서
rdsh_inspect를 명시적으로 공유된 파일로 제한할 수 있습니다.
- 🛠 빠른 네이티브 유틸리티: Node.js를 시작하지 않고도 토큰 추정, 코드 검색, 세션 목록화, 로컬 전제 조건 검사(
rdsh doctor --json) 등을 수행할 수 있습니다.
- 🛡 기본적으로 안전함 (Safe by Default): 읽기 전용 명령어는 소스 파일을 절대 수정하지 않으며, 자격 증명을 자동으로 동기화하거나 내보내지 않습니다. 또한 에이전트 도구(agent tools)를 Linux 환경에서 명시적으로 공유된 파일로 제한할 수 있습니다.
이 하이브리드 분리(hybrid split)의 설계 근거는 docs/PHILOSOPHY.md에 문서화되어 있습니다.
목차
목차
Quick Start (빠른 시작)
이미 Claude Code, Codex, Cursor, VS Code Copilot, OpenCode 또는 Gemini CLI를 사용하고 있습니까?
MCP를 통해 프로젝트 대시보드 연결하기를 사용하여 현재 코딩 에이전트를 유지하면서 작업, 질문 및 구조화된 UI를 공유할 수 있습니다.
이 진입점은 Node.js 22+가 필요하며, DSH와 Rust는 선택 사항입니다.
1. 설치 (사전 빌드 바이너리)
Linux / macOS / WSL:
curl -fsSL https://github.com/jimoto-no-llm/rustdsh/releases/latest/download/install.sh | bash -s -- --from-release
Windows (PowerShell):
$f = Join-Path $env:TEMP 'rdsh-install.ps1'
Invoke-WebRequest -Uri https://github.com/jimoto-no-llm/rustdsh/releases/latest/download/install.ps1 -OutFile $f -UseBasicParsing
& $f -FromRelease
또는 crates.io에서 크레이트를 설치합니다 (Rust 1.85+ 필요):
cargo install은 소스에서 빌드하여 릴리스 아카이브와 동일한 바이너리를 설치합니다. Debian/Ubuntu 및 Fedora/RHEL 사용자는 apt/dnf를 사용하여 릴리스 .deb/.rpm도 설치할 수 있습니다.
2. Verify & Setup (확인 및 설정)
rdsh --version && rdsh doctor
rdsh setup
참고: Codex CLI (ChatGPT OAuth) 또는 opencode에서 기존 로그인 정보가 있다면, rdsh auth --import --provider openai-codex로 가져올 수 있습니다.
3. 대화 시작하기
rdsh tui
rdsh --profile web
요구 사항
| 항목 | 상세 내용 |
|---|
| OS | Linux, macOS, WSL, Windows (네이티브) |
| ... | |
설치
네이티브 패키지 (.deb / .rpm)
Debian/Ubuntu (및 WSL) 또는 Fedora/RHEL의 Linux x86_64 사용자는 OS 패키지 관리자를 사용하여 동일한 릴리스 바이너리를 설치할 수 있습니다. 최신 릴리스에서 .deb 또는 .rpm을 다운로드하여 해당 파일을 직접 설치하면 되며, 추가 리포지토리는 구성할 필요가 없습니다.
sudo apt install ./rdsh_<version>_amd64.deb
sudo dnf install ./rdsh-<version>-1.x86_64.rpm
<version>은 선행 v가 제거된 릴리스 태그입니다 (v0.6.0의 경우 0.6.0). 이 패키지는 라이선스 및 README와 함께 /usr/bin/rdsh를 설치하므로, 설치 직후에도 rdsh --version이 작동합니다. Rust 툴체인이나 install.sh가 필요하지 않습니다. rdsh-linux-x64.tar.gz처럼 두 패키지 모두 glibc 빌드를 포함하고 있으므로, musl 아카이브와 install.sh는 구형 배포판을 위한 대체 수단으로 유지됩니다.
소스에서 빌드 및 고급 옵션
Linux / macOS / WSL:
git clone https://github.com/jimoto-no-llm/rustdsh.git
cd rustdsh
./install.sh
...
Windows (PowerShell):
git clone https://github.com/jimoto-no-llm/rustdsh.git
cd rustdsh
.\install.ps1 # build + %LOCALAPPDATA%
dshin에 설치
...
| OS | 스크립트 | 참고 사항 |
|---|
| Linux / macOS | ./install.sh | cargo 또는 curl 필요 (없으면 rustup을 통해 안내). |
| ... | | |
패키지 관리자 (Homebrew / Scoop / winget)
macOS와 Windows의 고급 사용자는 패키지 관리자가 설치된 rdsh 바이너리를 소유하도록 할 수 있습니다. packaging/에 있는 매니페스트는 정확한 릴리스 아카이브와 해당 SHA-256 값을 고정합니다.
docs/PACKAGE-MANAGERS.md에는 설치 명령어와 업데이트 절차가 나열되어 있습니다.
macOS (Homebrew) — Apple Silicon 또는 Intel 아카이브를 설치합니다:
brew install --formula ./packaging/homebrew/rdsh.rb
Windows (Scoop):
scoop install https://raw.githubusercontent.com/jimoto-no-llm/rustdsh/main/packaging/scoop/rdsh.json
Windows (winget) — winget 1.6 이상 버전은 세 개의 매니페스트를 직접 읽습니다. 이들을 microsoft/winget-pkgs에 제출하는 것은 수동 단계로 남아 있습니다:
winget install --manifest .\packaging\\winget
이러한 채널들은 한 번의 릴리스만 추적하므로, 새로운 태그가 제공되려면 python3 scripts/update-packaging-manifests.py --version vX.Y.Z를 실행하여 새로 고쳐야 합니다.
사용법
dsh 호환성으로 실행하기
표준 dsh 명령어를 변경 없이 실행합니다:
rdsh tui
rdsh --profile web --patch x.yml
rdsh --dry-run tui -- --resume id
./install.sh --as-dsh로 설치하면, dsh를 입력하는 것이 자동으로 빠른 rdsh 런처를 사용합니다.
빠른 네이티브 명령어
네이티브 도구는 Node.js를 시작하지 않고 Rust에서 실행됩니다:
rdsh tokens ./README.md
echo
Windows 환경에서 압축된 세션 히스토리는 rdsh가 부모 접합점(parent junctions)을 안전하게 거부할 수 있을 때까지 열리지 않습니다. 따라서 `sessions --tokens`는 해당 히스토리들을 누락시킬 수 있으며, 그 합계는 부정확합니다.
필수 플러그인 계층(dsh-base에 포함되지 않은 상위 도구들과 번들된 rdsh 플러그인)은 오직 `plugins/install.sh`에만 존재했으며, 이 스크립트는 단독으로 실행되는 것이 없습니다. 바이너리를 업그레이드해도 프로필 매니페스트는 건드리지 않기 때문에, 설치 과정에서 필수 패키지들을 아무런 신호 없이 놓칠 수 있습니다. 동일한 카탈로그가 바이너리에 컴파일되므로, 체크아웃(checkout) 과정을 거치지 않고도 릴리스 설치를 통해 격차(gap)를 확인하고 메울 수 있습니다:
```sh
rdsh plugins status
dsh plugins status --profile web --json
dsh plugins install
...
패키지는 dsh plugin --profile <name> add <spec> (여기서 RDSH_DSH_BIN이 CLI를 재정의함)을 통해, 체크아웃 설치 프로그램과 정확히 동일하게 처리됩니다. 번들된 플러그인은 체크아웃에서 해결되며, 체크아웃이 없으면 조용히 건너뛰는 대신 누락되었다고 보고합니다. rdsh doctor는 초기화된 모든 프로필에 대해 동일한 격차를 출력하며, --profile desktop은 rdsh desktop install로 전달됩니다. 계층과 ID에 대한 내용은 plugins/recommended.md를 참조하십시오.
rdsh auth를 사용한 자격 증명 공유
외부 자격 증명은 값(value)을 보여주지 않고 목록화됩니다. 소스 및 자격 증명을 선택할 때까지 아무것도 복사되지 않습니다. OAuth 복사본은 DSH의 기존 버전-1 저장소인 $DSH_HOME/.credentials.yaml를 사용하며, API 키는 이름이 지정된 참조(named refs)를 사용합니다. 선택 정책은 $DSH_HOME/rdsh-auth-sharing.json에 식별자만 포함하고 있습니다.
rdsh auth
dsh auth --json
dsh --dry-run auth --select codex:openai-codex --import
...
일회성 가져오기(one-time import)의 경우 rdsh auth --import --provider openai-codex --source codex 또는 rdsh auth --import --ref OPENAI_API_KEY --source codex를 사용합니다. 이러한 필터는 미래 복사 동의(future-copy consent)를 저장하거나 확장하지 않으며, --select/--unselect는 별도의 영구 정책 변경입니다.
개별 자격 증명에 대해 --select/--unselect를 반복해야 합니다. 선택(Selecting)은 부트(boot), 덤프-설정(dump-config), 플러그인(plugin), 원시 dsh 위임(raw dsh delegation) 및 설정(setup)을 포함하여 해당 CLI/공급자로부터의 미래 가져오기를 가능하게 합니다. --import는 선택 사항을 즉시 적용합니다. 심지어 다른, 선택되지 않은 CLI에서 발생한 더 새로운 권한도 선택할 수 없습니다. 더 새로운 DSH 권한과 기존 API-key 참조(refs)/기록은 그대로 유지됩니다. 기타 항목, 주석 및 줄 바꿈은 보존됩니다. Unix 자격 증명 및 정책 파일은 모드 0600을 사용합니다.
인벤토리(inventory)는 Codex의 ~/.codex/auth.json과 OpenCode의 $XDG_DATA_HOME/opencode/auth.json (또는 해당 플랫폼 기본 데이터 디렉터리), 그리고 레거시 ~/.config/opencode/auth.json 폴백을 확인합니다. OpenCode용 선택기(Selectors)는 DSH 공급자 ID를 사용하며, opencode:openai-codex는 그 openai 로그인을 위한 선택기입니다.
환경 변수 키 영속성(Environment-key persistence)은 DEEPSEEK_API_KEY, OPENAI_API_KEY 및 ANTHROPIC_API_KEY를 지원합니다. 이는 라이브 인증 테스트가 아닌 형식/존재 여부 확인입니다.
이미 rdsh에 제공된 환경 변수는 rdsh가 파일을 작성하지 않아도 DSH와 그 자식 프로세스에 상속됩니다. JSON 인벤토리는 이 경로를 persistent=false로 표시하고, 목적지를 나열하며, 이를 중지/철회하는 방법을 설명합니다. 참조(reference)를 사용하는 것은 저장에 동의하는 것이 아닙니다. setup --yes는 더 이상 모든 환경 키를 저장하지 않으므로, auth --select env:NAME --import를 사용하여 각각을 선택해야 합니다.
대화형 설정 및 웹 양식은 여전히 명시적이고 개별적인 키 저장을 허용합니다.