DeepSeek Harness(CLI: dsh)는 에이전트를 플러그인 조합으로 다룬다. 셸, 에디터, MCP, 브라우저, 메모리, Skill 카탈로그가 모두 Cordis 그래프에 걸린다. 공식 저장소 deepseek-ai/deepseek-harness는 설계를 분명히 한다—Everything is a Plugin. 아직 개발자 프리뷰라 호환이 깨질 수 있다. 일상 드라이버를 만드는 것은 다음 모델이 아니라, 어떤 플러그인을 붙이고, Skill을 어디서 찾으며, 권한을 어디까지 열었는지다.
커뮤니티는 몇 주 만에 dsh-plugin 주제에 수천 개 저장소를 채웠다. 이 정리본은 실무용 짧은 목록이다. 커널 기능, 스킬 마켓, 검색/비전/메모리/브라우저, 그리고 도구 카탈로그를 넘치지 않게 하는 방법. 기준 문서: DeepSeek Harness Docs와 플러그인 가이드.
Harness란 무엇인가: 플러그인, 프로필, Skill
또 하나의 채팅 사이트가 아니라 에이전트 런타임으로 생각하면 된다.
- 커널 패키지
@deepseek-ai/*는 배포본에 포함된다. bash, 에디터, MCP 리소스, plugin_manager, 공식skill도구. - 커뮤니티 패키지(npm 이름 또는
github:owner/repo)는dsh plugin --profile web add …로 현재 프로필에 넣는다. 번들 설치에는 재시작이 필요하다(dsh web). - Skill은 선택적 지시 파일(
SKILL.md)이지 세션 이벤트가 아니다. 파일시스템 제공자가 프로젝트와 사용자 루트를 순위대로 스캔한다. 모델 쪽 카탈로그는 보통name과description만 노출하고, 본문은 필요할 때 불러온다.
기본 로컬 스캔 순서(dsh-skill-filesystem): 프로젝트 .dsh/skills → 프로젝트 .agents/skills → 사용자 지정 디렉터리 → 사용자 DSH skills → 사용자 .agents/skills → 번들. 이름이 겹치면 프로젝트에 더 가까운 사본이 이긴다. 프로젝트 루트는 .git이 있는 가장 가까운 상위 디렉터리다.
배치는 my-skill/SKILL.md다. 프론트매터에는 최소한 name과 description이 필요하다. 이름은 소문자, 숫자, 하이픈만 허용한다. 재귀 **/SKILL.md 탐색은 지원하지 않는다.
실행하기: web 프로필과 설치 명령
Node.js가 필요하다(커뮤니티 플러그인은 종종 22+). 로컬 미리보기:
npx @deepseek-ai/dsh web
Web UI 기본값은 http://127.0.0.1:3080이다. 문서와 플러그인 작성자가 같다. 루프백에 바인딩하고, 인증 없는 dsh web을 0.0.0.0에 두지 마라. SSH에서는 포트를 포워딩하고, 플러그인 패널을 공인 IP에 올리지 마라.
표준 번들 설치:
dsh plugin --profile web add skillhub-plugin
# 또는 git 소스(운영에서는 커밋을 고정)
dsh plugin --profile web add "github:minivv/dsh-agent-skills"
# 재시작
# dsh web / dsh --profile web
dsh plugin add는 스펙을 pnpm에 넘긴다. npm, git, 또는 link: 로컬 경로. 모노레포 하위 패키지는 설정의 repository 소스(github:owner/repo#ref&path:/packages/foo)를 쓴다. plugin add는 &path:를 파싱하지 않는다.
구성을 보려면 dsh web --dump-config | grep name. dsh plugin --profile web remove pkg는 의존성을 지우지만 다시 쓰지 않는다—$DSH_HOME/profiles/web/cordis.patch.yml에 손으로 넣은 행은 직접 삭제하라.
2026 시작 스택(이대로 유지)
플러그인 레이더에서 스무 장을 연달아 누르지 마라. 이 세트를 일주일 고정한 뒤 추가하라.
| 계층 | 하나만 고르기 | 역할 |
|---|---|---|
| 런타임 | 공식 dsh web | 커널 도구 + 공식 skill 도구 + 플러그인 관리자 |
| Skill 발견 | dsh-agent-skills 또는 dsh-skills-anywhere | Claude / Codex / Cursor / OpenCode Skill 디렉터리 수집 |
| 설치 UI | skillhub-plugin 또는 공식 Discover | 채팅이나 설정에서 스킬/플러그인을 검색하고, 확인한 뒤 설치 |
| 웹 검색 | modsearch(또는 이미 돌리는 MCP) | 모델에 네이티브 검색이 없을 때 구조화 검색 |
| 비전 | modlens 또는 dsh-vision-toolkit 중 하나 | 붙여넣은 이미지 OCR/레이아웃; 둘 다 켜지 말 것 |
| 메모리 | examples에서 공식 MCP 오버레이 하나 | Memorix / MCP Reference Memory / Engram |
같은 범주에 플러그인이 둘이면 모델이 중복 도구를 뒤지고 컨텍스트가 요약으로 가득 찬다. 신뢰하는 HTTPS 마켓 인덱스만 추가하라.
Agent Skills: 스캔 순서와 관리 플러그인 3종
이미 ~/.claude/skills, ~/.codex/skills, ~/.cursor/skills 아래 SKILL.md 트리가 있을 가능성이 크다. DSH 자체는 .dsh/skills와 .agents/skills를 선호한다. 커뮤니티 플러그인은 ctx.skills에 추가 제공자를 등록한다.
dsh-agent-skills: 로컬 디렉터리 위의 설정 페이지
저장소: minivv/dsh-agent-skills.
dsh plugin --profile web add dsh-agent-skills
그다음 설정 → Agent Skills에서 인계를 켜고 재시작하라. ~/.agents/skills, ~/.claude/skills, ~/.codex/skills, ~/.config/opencode/skills, ~/.gemini/skills를 스캔한다. 원본 파일을 고치지 않고 디렉터리나 개별 Skill을 켜고 끌 수 있다. 상태는 $DSH_HOME/agent-skills/state.json에 있다. 호환 메모는 README(0.1.x와 0.2.x)를 본다.
dsh-skills-anywhere: 제로카피, 여러 에이전트, git Skill 저장소
비공식: noteflowai/dsh-skills-anywhere. 다른 제공자를 등록하며, 공식 skill 도구는 그대로 둔다.
- 사용자·프로젝트 수준 Skill 디렉터리 60개 이상(Claude Code, Codex, Cursor, Gemini CLI, OpenCode 등).
- Claude Code 플러그인 마켓플레이스에 중첩된 Skill.
- git Skill 저장소를 캐시에 얕게 클론한다. Cursor에서 고치면 다음 DSH 로드에 보인다.
- Web UI에서 출처별 Pin / Hide / Exclude. MCP로도 쓸 수 있다:
npx dsh-skills-anywhere mcp.
dsh plugin --profile web add dsh-skills-anywhere
npx dsh-skills-anywhere list
npx dsh-skills-anywhere add anthropics/skills
npx dsh-skills-anywhere doctor
프로젝트에서 DSH용으로 직접 쓴 Skill이 마켓플레이스 중복보다 우선한다. 「인계」형 발견 플러그인을 두 개 쌓지 말고, 주 탐색기를 하나만 고르라.
skillhub-plugin: 채팅에서 검색, 검사, 설치
cocofhu/skillhub. npm 이름은 skillhub-plugin이다(무관한 skillhub 패키지가 아니다. prepare를 돌리는 생 git 소스는 피하라):
dsh plugin --profile web add skillhub-plugin
채팅 카드로 Skill, 버전, 안전 플래그를 보고, 발견 가능한 디렉터리에 zip 설치한다. 설정에서 GitHub 릴리스를 올릴 수 있다. 플러그인 광장은 DSH 플러그인을 검색하고 카드에서 설치한 뒤 재시작을 요청한다. Node 22+가 필요하다. dsh web은 127.0.0.1에 바인딩하라.
Skill 마켓과 공식 플러그인 마켓
「마켓」은 둘이다.
- Skill 마켓:
SKILL.md번들을~/.dsh/skills에 떨어뜨린다(공식 도구가 이미 읽는 user-dsh 루트). - 플러그인 마켓: 설치 가능한 DSH 번들(npm 또는 고정 git 커밋)의 JSON 인덱스 하나.
커뮤니티 Skill 마켓
- dsh-skill-market(QQ-M/dsh-skill-market): 설정에서 GitHub Skill 저장소를 검색.
dsh plugin --profile web add "github:QQ-M/dsh-skill-market"후 재시작. - dsh-skills-marketplace(cxdyun/dsh-skills-marketplace): git URL + ref + sparse 경로로 가져와
~/.dsh/skills/…에 펼치고, 그룹 토글; 제거는 자신이 설치한 것만 건드린다.
같은 SKILL.md를 DSH, Claude, Codex에 쓸 수 있다. 사용자 루트에 쓰기 전에 스타, 최근 커밋, 설치 스크립트를 확인하라.
공식 Custom plugin markets
가이드: Plugin markets. DSH는 인덱스 소스를 함께 싣지 않는다. 실험 플러그인에서 Custom plugin markets를 켠 뒤, Discover에 https:// 인덱스 URL을 추가하라. 확인 설치는 여전히 일반 호환 검사를 한다. 마켓 문구는 제3자다. 커널은 JSON 형태를 검증하고, 소개문의 진실은 검증하지 않는다.
dshmarketplace.dev 같은 디렉터리는 검색 API와 선택적 dshmarketplace-plugin(/store)을 제공한다. 카탈로그로 보고, 확인창의 npm/git 스펙으로 설치한 뒤 버전을 고정하라.
기능 플러그인: 검색, 비전, 세션, 브라우저, 메모리
검색: modsearch
liustack/modsearch는 네이티브 웹 검색이 없는 모델을 메운다. 웹이나 X에 물어 구조화 JSON 증거를 받는다. 이미 안정적인 Brave/Tavily MCP를 돌리면 한 층을 더 쌓지 마라.
비전: modlens 또는 dsh-vision-toolkit
텍스트 전용 모델용:
- modlens(liustack/modlens): 이미지 붙여넣기 → OCR / 레이아웃 / 의미 JSON.
- dsh-vision-toolkit(Anionex/dsh-vision-toolkit): 다중 이미지 Q&A, 긴 스크린샷 OCR, UI 복원, pixel diff.
한 세트만 켜라. 겹치는 도구 스키마는 모델이 잘못된 쪽을 누르게 한다.
세션 검색: dsh-session-search
문서 예시: dsh plugin --profile web add "github:dsh-external/dsh-session-search#main". 모델 쪽 교차 세션 조회는 옵트인이며 cwd가 정확히 맞아야 한다—먼저 프라이버시 경계를 정하라. sqlite 인덱스는 있어도 조회 도구를 모델에 노출하지 않을 수 있다.
브라우저: 공식 browser-use와 제공자 하나
dsh-browser-use를 붙이고 제공자는 정확히 하나: Playwright MCP, Chrome DevTools MCP, 또는 Stagehand. 두 번째는 거부된다. 띄운 브라우저는 그 Agent/Session 소유이며, 세션을 버리면 띄운 상태도 사라진다(붙인 외부 브라우저는 유지).
메모리: 공식 MCP 예시, 기본은 전부 끔
examples/mcp-memory/에 Memorix, MCP Reference Memory, Engram 오버레이가 있다. 상호운용 샘플이지 추천이 아니다. 하나만 패치하라:
dsh web --patch "$PWD/examples/mcp-memory/memorix.cordis.yml"
실행마다 유지하려면 insert를 프로필 cordis.patch.yml에 합쳐라—기존 패치 파일을 덮어쓰지 마라. stdio 브리지는 자격 증명처럼 보이는 환경 변수와 DSH_*를 걷어낸다. 비밀은 프롬프트가 아니라 오버레이 config.env에 두라.
채널과 데스크톱: IM, Telegram, dsh-desktop
- dsh-im: QR 또는 자격 증명으로 Feishu, WeChat, DingTalk, WeCom, QQ, Slack, Telegram, Discord, WhatsApp. 외부 네트워크 면이 가장 크다—소스와 토큰 위치를 읽어라.
- 독립 telegram / qqbot 플러그인도 송신과 webhook 바인드 주소를 같은 기준으로 검토하라.
- dsh-desktop: 데스크톱 셸을 플러그인 호스트로 쓴다. 노트북에는 괜찮다. 클라우드 호스트에서는 web + SSH 포워드가 낫다.
채널 플러그인은 메시지를 들여온다. 비즈니스 상태 기계를 대체하지 않는다. 티켓, 빌드, 청구는 여전히 저장소와 데이터베이스에 둔다.
고르기, 제거하기, 잘못된 설치 피하기
dsh.bundle과 README를 읽어라. 프로필 이름이web(또는 당신 것)인지 확인.- 버전을 고정하라: 운영에서는
name@x.y.z또는github:owner/repo#<40-char sha>. - 설치 스크립트를 보라: git에
allowBuilds/prepare가 필요하면 미리 빌드된 npm 패키지를 선호하라. - 도구 이름 충돌: 비전 플러그인 둘이나 Skill 인계 둘을 돌리지 마라.
--dump-config로 확인. - 제거:
remove, 맞는 패치 insert를 지우고, 재시작. 설정이 비면 클라이언트 반쪽 패키지와 브라우저 콘솔을 확인. - 마켓 인덱스: HTTPS만. http 인덱스는 경로에서 설치 소스를 바꿀 수 있다.
공식 README는 THERE WILL BE COMPATIBILITY-BREAKING CHANGES라고 한다. dsh를 올린 뒤에는 커뮤니티 패키지를 한꺼번에 바꾸기 전에 각 플러그인의 engines.dsh를 읽어라. 유용한 Skill은 Git(프로젝트 .dsh/skills)에 두고, 프로필 전체 node_modules를 백업처럼 쓰지 마라.
Cloud Mac에서 실행하기
Harness는 7×24 cron, MCP stdio, 긴 세션에 맞는다. 고정 리전의 Cloud Mac에서 SSH로 dsh web을 루프백에 두고, 3080을 노트북 브라우저로 포워드할 수 있다. Skill과 cordis.patch.yml은 커밋하고, 비밀은 저장소가 아니라 키체인이나 KMS에 두라.
iOS / Xcode 작업은 그 Mac의 Xcode와 시뮬레이터를 쓴다. DSH는 에이전트와 도구만 조율한다. 브라우저 제공자를 하나만 골라, 헤드리스 CI와 같은 Chromium 프로필을 두고 싸우지 않게 하라.
FAQ
전체 Q&A는 페이지 JSON-LD에 있다. 짧은 버전: Skill은 플러그인이 아니다. Claude Skill 디렉터리는 발견 플러그인 뒤에 동작한다. Skill 마켓을 두 개 쌓지 마라. 메모리 오버레이는 하나. Web UI는 127.0.0.1에 두고 SSH로 포워드하라.