← 기술 실천으로 돌아가기

AIAgent

DeepSeek Harness(dsh) 플러그인 안내: 쓸 만한 10개, AI 코딩 장면, 조합과 비용

약 14분

코드가 열린 모니터 앞에서 커피를 마시는 사람

최종 확인은 2026년 9월 18일입니다. 공식 저장소, 플러그인 설정 카탈로그, 설치 안내를 대조해 썼습니다. 근거는 DeepSeek Harness 공식 저장소, Plugin Config Catalog, 플러그인 패키징·설치 문서, DeepSeek API 요금 페이지입니다.

설정 카탈로그를 열면 @deepseek-ai/dsh-* 가 수십 개 줄지어 있습니다. 한국 팀에서도 흔한 첫 수는 “되는 건 다 깐다”입니다. Agent가 코드를 더 잘 쓸 거라는 기대입니다. 결과는 보통 반대입니다. 도구 이름이 컨텍스트를 채우고, MCP 프로세스가 샌드박스 밖에서 맨몸으로 돌며, 세션 로그가 부풀고, 먼저 오는 것은 청구서입니다. 패치 품질은 따라오지 않습니다.

먼저 결론입니다. DeepSeek Harness(dsh)의 구호는 Everything is a Plugin이지만, 코드를 쓸 때 사는 것은 “플러그인 개수”가 아닙니다. 저장소를 읽고, 파일을 고치고, 테스트를 돌리고, 절차서를 필요할 때만 꺼내고, 다시 재생하고, 측정하는 여섯 가지입니다. 아래 10개가 그 여섯을 덮습니다. 나머지는 화면, 데모, 갈아끼울 백엔드가 많습니다. 장면이 온 뒤에 더하면 됩니다.

8월에는 DeepSeek Harness 구조 분석을, 9월에는 Harness / Skill / Sandbox 실측을 썼습니다. 그 두 편은 실행 층을 왜 나누는지 답합니다. 이 글은 더 일상적인 질문만 받습니다. dsh로 코드를 쓰기로 한 뒤, 무엇을 깔고, 어떻게 맞추며, 한 달에 얼마가 드는지.

전부 깔지 말 것. 플러그인은 기능 목록이 아니라 조합

공식은 모델 어댑터, 도구 등록, 세션 로그, Agent 루프를 교체 가능한 패키지로 만들고 Cordis로 Profile에 겹칩니다. 입구는 dsh plugin --profile web add입니다. 명령은 Profile 디렉터리의 pnpm으로 넘어가고, dsh.bundle을 선언한 패키지만 층에 들어갑니다. 나중에 쓴 bundle, Profile의 cordis.patch.yml, 홈 패치, --patch가 이 순서로 덮습니다.

코드를 쓰는 사람에게는 이게 세 가지 실무가 됩니다.

  • 로드된 것과 모델에게 보여도 되는 것은 다릅니다. MCP 클라이언트는 외부 도구를 mcp__server__tool 형태로 등록합니다. 공식 문장은 분명합니다. 각 MCP 서버는 샌드박스 밖의 신뢰된 실행 파일이고, 기본값은 하나도 열지 않는 것입니다.
  • 층 순서가 승부를 가릅니다. 모델이나 샌드박스를 바꾸거나 특정 도구를 끌 때는 먼저 Patch를 칩니다. 코어를 복사하지 마십시오. dsh --profile web --dump-config로 그 머신이 실제로 띄우는 나무를 봅니다. 카탈로그 목차보다 이쪽이 맞습니다.
  • 저장소는 아직 개발자 프리뷰입니다. 호환이 깨질 수 있습니다. 갈아끼울 실행 층으로 검증하는 것은 괜찮습니다. 인증이 끝난 생산 플랫폼으로 보지 마십시오.

그래서 이 10개는 “공식 전체 목록”이 아닙니다. AI 코딩에서 나오는 빈도로 자른, 최소로 충분한 묶음입니다. 도구 순환이 멈추지 않을 때 무너지는 모양은 필드 이름만 다를 뿐 거의 같습니다. 다른 모델에서 한 번 밟았다면 Kimi K3 도구 호출 순환 중단과 나란히 읽으십시오. 루프를 먼저 멈추고, 그다음에 플러그인을 이야기합니다.

AI 코딩에 실제로 남는 Plugin 10개

각 패키지는 “어떤 사고 유형을 대신 지느냐”만 적습니다. 이름은 설정 카탈로그 기준입니다. 쌍으로 나오는 것은 같은 능력 이음의 정의, 제공자, 소비자입니다. 넣을 때는 양쪽을 같이 봅니다. 한쪽만 깔지 마십시오.

1. dsh-tool-fs + dsh-tool-fs-search: 먼저 저장소를 본다

디렉터리를 읽지 않은 모델이 “리팩터하겠습니다”라고 말합니다. 파일 읽기와 심볼·문자열 검색은 그다음 수정의 전제입니다. 이 쌍이 없으면 정밀 치환은 틀린 경로 위에서 자신 있게 달립니다.

2. dsh-tool-str-replace-editor: 덩어리로 고친다. 파일 전체를 다시 쓰지 않는다

코딩에서 비싼 실패는 “못 고친 것”이 아닙니다. 한 호출이 파일 전체를 모델 기억 속 옛 버전으로 덮는 일입니다. 문자열 치환 편집기는 옛 조각과 새 조각을 내게 하고, 충돌하면 실패합니다. 조용히 덮지 않습니다. 여러 파일을 손볼 때는 “완성 파일을 생성하기”보다 싸고, 되돌리기도 쉽습니다.

3. dsh-tool-bash + dsh-bash-sandbox: 테스트는 돌아야 하고, 닫혀 있어야 한다

빨간 테스트를 고치고, 린터를 돌리고, 빌드 로그를 봅니다. 마지막은 셸입니다. 공식 Process Sandbox가 보는 것은 같은 호스트 자식 프로세스가 남기는 파일 부작용뿐입니다. read-only는 쓰기를 거절하고, workspace-write는 세션 작업 공간만 허용하며, danger-full-access는 격리를 건너뜁니다. 격리를 요청했는데 백엔드가 없으면 SANDBOX_UNAVAILABLE로 멈춥니다. 조용한 맨몸 실행은 금지입니다. 네트워크 격리는 이 세 모드 밖입니다. 읽기 전용이 바깥 통신까지 막을 것으로 기대하지 마십시오.

4. dsh-tool-lsp + dsh-lsp-stdio: 컴파일러의 입을 루프에 붙인다

모델이 “타입이 맞다”고 느끼는 것과 언어 서버가 오류를 내는 것은 다른 일입니다. stdio LSP는 정의 이동, 진단, 심볼 조회를 도구로 만듭니다. TypeScript, Go, Rust처럼 진단이 두꺼운 언어에 맞습니다. 스크립트 저장소나 문서만 다루는 일이면 먼저 넣지 마십시오. 도구 이름을 한 라운드 줄입니다.

5. dsh-tool-skill + dsh-skill-filesystem: 절차서는 필요할 때만 나온다

코드 스타일, 배포 점검, 테스트 입구를 Skill로 씁니다. 모델은 평소 목록만 보고, 손을 댈 때 skill({ name })을 부릅니다. 프로젝트 루트에서는 .dsh/skills가 먼저이고 .agents/skills가 다음입니다. Skill은 권한 시스템이 아닙니다. 매뉴얼이 분명할수록 샌드박스가 없을 때 더 위험합니다. 층 나눔은 앞선 실측에 맡기고, 여기서는 한 가지만 강조합니다. 코딩에서는 시스템 프롬프트에 늘어선 “반드시 지켜라”를 이걸로 바꿉니다.

6. dsh-mcp-client: GitHub 같은 바깥 도구를 한 줄로 붙인다

인스턴스 하나가 MCP 서버 하나입니다. stdio면 @modelcontextprotocol/server-github를 당기고, 모델이 보는 것은 mcp__github__create_issue 같은 한정 이름입니다. 맞는 일은 “PR 댓글을 읽고, 이슈를 나열하고, checks를 보는 것”입니다. 일상 기본 도구로 두지 마십시오. 비밀은 환경 변수입니다. 프로세스는 샌드박스 밖입니다. 서버를 하나 더 열 때마다 신뢰면이 하나 늘어납니다.

7. dsh-plan-mode: 계획을 쓴 뒤에 작업 공간을 만진다

여러 파일 리팩터, 공개 API 변경, 마이그레이션 스크립트. 모델이 생각하면서 쓰기 시작하면 위험합니다. Plan mode는 “단계를 적고 사람이 보게 하는 일”을 플러그인 행동으로 만듭니다. 프롬프트로 침착을 부탁하지 않습니다. 단위 테스트 하나면 없어도 됩니다. 만지는 디렉터리가 셋을 넘으면 먼저 켭니다.

8. dsh-tool-todo: 여러 단계를 세션에 못 박는다

“flaky 테스트를 고치고, 회귀를 넣고, README를 고친다”를 채팅 기억에만 맡기면 마지막 한 스텝이 빠집니다. Todo는 목록을 세션 안의 갱신 가능한 객체로 만듭니다. Skill(어떻게 하는지)을 대체하지 않습니다. Plan(할지, 무엇을 먼저 할지)도 대체하지 않습니다.

9. dsh-compaction-tool-result-pruner + dsh-token-meter: 긴 세션은 결과를 자른 뒤에 모델을 바꾼다

AI 코딩 청구가 죽는 곳은 첫 라운드가 아닙니다. 열 번째에도 테스트 로그 전체, diff 전체, 페이지 수집 전체를 창에 남겨 둘 때입니다. 결과 가지치기는 더 이상 참조되지 않는 도구 출력을 버립니다. token meter는 라운드마다 얼마가 나갔는지 보여 줍니다. 계측이 없으면 모델이 비싼지, 플러그인이 창을 채운 것인지 가리지 못합니다.

10. dsh-session-persistence-sqlite: 세션은 재생되어야 한다. 메모리에서만 살지 않는다

프로세스 재시작, 탭 전환, 다른 사람이 원인을 쫓습니다. 다음 라운드는 디스크 로그에서 다시 만들어져야 합니다. JSONL로도 남길 수 있습니다. SQLite가 세션 단위 조회와 “왜 그 한 줄을 고쳤는지” 사후 대조에 더 맞습니다. 이 층이 없으면 위 9개 플러그인의 현장은 스크린샷으로만 복기됩니다.

AI 코딩 플러그인 스택. 읽기·수정, 격리 실행, 계획·할 일, MCP, 계측
먼저 읽기·수정과 격리를 넣고, 장면이 온 뒤에 계획, MCP, 계측을 더합니다. 비용의 본체는 토큰과 컨텍스트이지, 플러그인 개수가 아닙니다.

흔한 네 장면, 넣는 것을 바꾼다

같은 10개를 매 작업마다 전부 열 필요는 없습니다. 일 기준으로 고르는 편이 “있어 보이는 구성”보다 쌉니다.

장면 A: 빨간 테스트를 고친다. 최소는 fs / search, str-replace, bash+sandbox입니다. 실패 로그를 읽고, 고치는 범위를 최소로 두고, 같은 테스트를 다시 돌립니다. Skill은 저장소에 “먼저 이 명령”이 정해져 있을 때만 올립니다. Plan과 MCP는 이 장면에서 잡음입니다.

장면 B: 여러 파일 리팩터. A에 plan-mode, todo, LSP를 더합니다. 어떤 심볼을 고치고 어떤 테스트가 초록이어야 하는지를 먼저 쓰게 한 뒤, 쓰기를 승인합니다. 계획 없이 치환을 열면 흔한 결말은 공개 함수 이름만 반쯤 바뀌고 호출부는 옛 이름을 남기는 것입니다.

장면 C: GitHub PR을 보고 고친다. MCP 클라이언트를 더하고 서버는 하나만 엽니다. PR diff, checks, 댓글을 가져옵니다. 파일을 고치는 본체는 그대로 editor와 sandbox입니다. 이슈 생성, 머지, 브랜치 삭제를 일상 편집 기본 목록에 섞지 마십시오.

장면 D: 긴 세션, 여러 라운드 탐색. compaction과 token-meter를 더하고 세션은 SQLite로 옮깁니다. 파일 20개를 읽은 뒤에 도구 결과를 자르지 않으면, 이후 매 라운드는 이미 지난 로그에 돈을 냅니다. 더 센 모델로 바꿔도 부푼 창은 구해지지 않습니다.

일상·팀·비용 세 세트

위 장면을 복제 가능한 Profile 세 개로 접습니다. 작업마다 cordis.yml을 손으로 고치는 것보다 되돌아가기 어렵습니다.

조합기본으로 연다먼저 열지 않는다맞는 사람
일상 코딩fs / search, editor, bash+sandbox, skillMCP, 자식 Agent, 전체 Web Search혼자 버그를 고치고 작은 기능을 씀
팀 협업일상 + plan + todo + SQLite + GitHub MCP 하나두 번째 MCP, danger-full-access재생이 필요하고 PR을 보며 고침
비용 통제일상 + token-meter + 결과 가지치기 + FlashPro를 기본, 긴 로그를 안 자름매일 수십 라운드를 돌림

웹 검색과 자식 Agent를 쓰지 말라는 뜻이 아닙니다. 기본 비용이 높고 실패면이 넓습니다. 공식 카탈로그에는 dsh-web-search-deepseek, dsh-tool-web, 여러 subagent 구현이 있습니다. 문서를 찾거나 읽기 전용 조사를 떼어 낼 때 Patch로 엽니다. 일상 bundle에는 쓰지 마십시오.

넣는 순서를 기억하십시오. @deepseek-ai/dsh-base를 먼저 올리고 dsh plugin --profile web add로 패키지를 더한 뒤, 마지막에 Profile patch로 노출하고 싶지 않은 도구를 끕니다. GitHub에 호스팅되고 prepare가 있는 소스 플러그인은 pnpm 10이 빌드 스크립트를 막습니다. 공식 안내대로 허용한 뒤에 깔십시오. 전역 위험 권한으로 넓히지 마십시오.

배포 비용: 토큰, 머신, 플러그인 세금

플러그인 자체에는 거의 라이선스 비용이 없습니다. 내는 돈은 모델 토큰, 항상 켜 둔 머신, 샌드박스 밖으로 나간 외부 프로세스입니다.

토큰이 본체입니다. 2026년 9월 공식 요금은 100만 토큰 단위입니다. deepseek-flash는 캐시 히트 약 0.003 / 0.006달러, 미스 0.15 / 0.30달러, 출력 0.60 / 1.20달러(오프피크 / 피크)입니다. deepseek-v4-pro는 미스 0.66 / 1.32, 출력 1.98 / 3.96입니다. 피크는 월요일부터 금요일 UTC 01:00–04:00과 06:00–10:00입니다. 한국 시간으로는 10:00–13:00과 15:00–19:00이라, 평일 출근·오후 근무대와 겹칩니다. 오프피크는 반값입니다. “파일 8개를 읽고 테스트 로그를 두 라운드 가져오고 짧은 패치를 쓰는” 일만으로 입력이 수만 토큰에 닿습니다. 자르지 않으면 열 번째 라운드는 앞 아홉 라운드 로그를 다시 냅니다.

일상 어림. 하루 30루프, 평균 입력 2만(미스) + 출력 1천. Flash 오프피크면 하루 약 0.11달러, 한 달 약 3달러입니다. 같은 횟수를 Pro 기본으로 두고 테스트 출력을 창에 남기면 월 청구는 쉽게 수십 달러로 갑니다. 아끼는 순서는 도구 결과를 자르고 캐시를 맞춘 뒤, Pro를 올릴지 정하는 것입니다. 모델을 먼저 바꾸지 마십시오.

머신이 두 번째입니다. npx @deepseek-ai/dsh web 기본은 이 기기의 127.0.0.1:3080만 엽니다. 낮에 쓰고 밤에 끄기에 맞습니다. 세션 SQLite, Skill 디렉터리, 샌드박스 정책을 24시간 붙이려면 꺼지지 않는 노드가 필요합니다. 노트북 뚜껑을 닫거나 집 NAT가 바뀌면 원격 동료는 같은 세션을 못 봅니다. 클라우드 Mac mini의 값은 “API보다 똑똑하다”가 아닙니다. 프리뷰 Harness를 지금 산출물을 내는 머신에서 떼는 일입니다. Seatbelt, 유닉스 도구, 고정 cwd는 잠드는 Windows 노트북을 원격 조종하는 것보다 예측하기 쉽습니다.

플러그인 세금이 세 번째입니다. MCP 서버를 하나 더 열 때마다 샌드박스 밖 프로세스와 비밀 한 세트가 늘어납니다. LSP는 언어 서버를 상주시킵니다. 웹 수집은 페이지 HTML을 컨텍스트에 붓습니다. DeepSeek 요금표에는 안 나오지만 Flash의 싼 이점을 먹습니다. 일상 네 점 세트의 세금은 거의 0입니다. 팀 세트에 GitHub MCP 하나를 더하면 아직 수지가 맞습니다. 검색, 자식 Agent, 두 번째 MCP를 전부 기본으로 열면 비용은 토큰에서 운영으로 샙니다.

저장소는 프리뷰입니다. Harness와 고객 작업을 같은 빌드 머신에 용접하면 루프, 절차서, 파일 격리 세 가지가 출고 경로 위에 겹칩니다. 버려도 되는 노드, 되돌릴 수 있는 노드, 권한을 조일 수 있는 노드. 배포 비용으로 사야 하는 것은 그것입니다.

더할 때와 더하지 말 때

지금 상황제안이유
함수 하나, 테스트 한 줄일상 네 점 세트Plan / MCP / LSP는 여분 도구 이름
공개 API, 또는 디렉터리 셋 이상plan + todo + LSP를 더함단계를 맞춘 뒤 쓰기를 허용
PR 댓글이나 checks를 보며 고침GitHub MCP 하나만외부 도구는 기본 신뢰면. 쌓지 말 것
매일 수십 라운드, 청구가 뛰기 시작meter + 가지치기 + Flash창에 무엇이 쌓였는지 본 뒤 모델을 바꿈
Skill과 Sandbox 경계가 아직 흐림플러그인을 넓히지 않음매뉴얼이 두꺼울수록 맨몸 쓰기는 위험

직접 짠 “while 루프와 도구 두세 개”에 비해 dsh의 이득은 층 순서, 세션, 격리가 이미 나뉘어 있다는 점입니다. 값은 프리뷰 단계의 파괴와, 설정 카탈로그를 다 누르지 않는 절제입니다. 올해 정말로 모델 백엔드나 샌드박스를 바꾸거나 같은 Skill을 여러 저장소에서 쓸 때만 이 10개가 수지가 맞습니다. 모델이 잡담하는지만 보려면 전체 스택은 필요 없습니다.

한 줄로. 2026년에 DeepSeek Harness로 코드를 쓸 때 이기는 사람은 가장 많이 깐 사람이 아닙니다. “이번 일에 몇 층만 필요한지”를 말할 수 있는 사람입니다. 읽고, 고치고, 돌리고, 필요할 때만 설명합니다. 세션은 재생되고 토큰은 측정됩니다. 플러그인은 조합이지 수집이 아닙니다.

자주 묻는 질문

10개를 한 번에 다 깔아야 합니까?

아닙니다. 먼저 fs / search, editor, bash+sandbox, skill입니다. Plan, LSP, MCP, 가지치기, SQLite는 장면이 온 뒤에 더합니다. 카탈로그의 나머지는 교체 백엔드나 화면이 많고, 코딩 필수 항목이 아닙니다.

MCP 플러그인은 안전합니까?

공식은 각 MCP 서버를 샌드박스 밖의 신뢰된 실행 파일로 적습니다. 기본값은 하나도 켜지 않는 것입니다. 필요한 하나만 열고 비밀은 환경 변수에 두십시오. 일상 편집 도구와 같은 기본 목록에 섞지 마십시오.

코딩 기본 모델을 왜 Pro로 두지 않습니까?

코딩 비용의 본체는 “모델이 모자란 것”이 아니라 여러 라운드에 남는 도구 결과입니다. 공식 Flash 오프피크 출력은 약 0.60달러 / 백만 토큰, Pro는 약 1.98달러입니다. 먼저 로그를 자르고 캐시를 맞춘 뒤, 그 작업만 Pro로 올릴지 정합니다.

지금 생산 코딩 플랫폼으로 올려도 됩니까?

실행 층 샘플로 검증하고 격리해 실험하는 것은 됩니다. 생산 인증이 끝난 플랫폼으로 보지 마십시오. 공식 저장소는 개발자 프리뷰입니다. 프리뷰본과 지금 산출물을 내는 머신을 나누는 일이 “생산에 올려도 되느냐”를 논하는 일보다 먼저입니다.

클라우드 Mac mini에 버려도 되는 dsh 노드를 두기

AI 코딩 플러그인 스택은 cwd를 고정하고 SQLite 세션을 상주시켜야 하며, macOS에서는 Seatbelt를 탑니다. 유일한 출고 빌드 머신에서 프리뷰 dsh와 GitHub MCP를 돌리면 루프, 절차서, 외부 프로세스가 고객 작업 위에 겹칩니다. M4 Mac mini 통합 메모리면 안정 빌드 옆에 권한을 조이고 되돌릴 수 있는 Harness를 둘 수 있습니다. 대기 전력 약 4W입니다. 네이티브 유닉스와 SSH로 Skill 디렉터리와 샌드박스 작업 공간을 잠들지 않는 한 대에 못 박을 수 있습니다.

일상 코딩 노드와 출고 빌드를 나누고 싶다면 Kvmkit 클라우드 Mac mini M4로 격리 머신을 더할 수 있습니다—요금제 보기. 플러그인 조합과 토큰 실험이 시험할 장소를 갖고, 출고 중인 머신을 끌어내리지 않습니다.

dsh만 돌릴 격리 노드가 필요합니까?

프리뷰 플러그인 묶음을 출고 머신에서 떼십시오. 요금과 연결은 가격·도움말.