SSD Nodes Learn Hosting plans →
가이드 Matt Connor작성자 Matt Connor

DeepSeek Harness 필수 플러그인 5가지 추천

DeepSeek Harness 환경에서 VPS 운영 효율을 높이는 핵심 플러그인 5종을 소개합니다. 예산 관리, 도구 권한 설정, 인젝션 스캔, 영구 메모리 및 LAN 접근 제어 기능을 통해 에이전트의 안정성과 보안을 강화하는 방법을 확인하십시오.

설치할 가치가 있는 DeepSeek Harness 플러그인

DeepSeek Harness 플러그인은 사용자의 에이전트 내부에서, 에이전트의 권한으로, 사용자가 비용을 지불하는 머신 위에서 실행되는 서드파티 코드입니다. 커뮤니티 목록에는 20개가 넘는 카테고리와 1,000개가 넘는 항목이 있습니다. 임대형 가상 사설 서버(VPS)를 운영한다면 다음 5가지가 필요합니다. 지출 한도 설정을 위한 dsh-budget, 도구 게이팅을 위한 dsh-permission-rules, 인젝션 및 비밀 정보 스캔을 위한 dsh-defend, 세션이 종료되어도 유지되는 팩트 저장을 위한 dsh-memory, 그리고 인증 방식을 결정한 후에만 설치해야 하는 dsh-web-lan-access입니다.

Harness는 모든 것이 플러그인으로 구성되도록 설계된 DeepSeek의 오픈 소스 에이전트 하네스인 dsh입니다. 자체 README에서는 이를 개발자 프리뷰라고 명시하며 THERE WILL BE COMPATIBILITY-BREAKING CHANGES에 대해 경고합니다. 이 사실 하나가 아래의 모든 선택 기준을 결정합니다. 설치하는 플러그인의 버전을 고정하고, 업데이트 시 문제가 발생할 수 있음을 인지하며, 전체 내용을 직접 파악할 수 있을 정도로 설치 개수를 최소화하십시오. Harness가 아직 실행 중이 아니라면 VPS에 DeepSeek Harness 설치하기부터 시작한 뒤 다시 돌아오십시오. 이 플러그인들이 연결되는 에이전트 루프, 도구, 메모리 등의 구성 요소가 아직 모호하다면 기초부터 먼저 학습하십시오. 각 계층이 수행하는 역할을 이해하면 아래의 선택들을 판단하기가 훨씬 수월해집니다.

dsh가 플러그인을 설치하는 방식과 설정 파일의 위치

dsh는 Cordis 플러그인들을 조합하여 구성되므로, 실행 중인 인스턴스는 단일 프로그램이 아닌 플러그인 트리 형태입니다. 프로필은 이러한 플러그인들을 명명하여 조합한 것입니다. 두 가지 템플릿은 web과 headless입니다. $DSH_HOME는 기본적으로 ~/.dsh을 사용하며, 프로필은 $DSH_HOME/profiles/<name>/에 위치하여 자체적인 package.json, dsh.profile 매니페스트, 그리고 cordis.patch.yml을 포함합니다.

dsh plugin --profile web list
dsh plugin --profile web add dsh-budget
dsh plugin --profile web remove dsh-budget

네 가지 소스 형식을 사용할 수 있습니다. 일반 npm 패키지 이름, @towzai/dsh-memory과 같은 스코프 이름, github:PerryLink/dsh-budget#main와 같은 GitHub 참조, 그리고 link:이나 ./을 사용한 로컬 경로입니다. GitHub 형식을 사용하는 것을 권장합니다. #main 부분을 커밋 해시로 대체하면 다음 달에도 동일한 코드를 가져올 수 있기 때문입니다.

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

계층은 고정된 순서로 적용됩니다. 프로필에 나열된 순서대로 각 번들이 적용된 후, 프로필의 cordis.patch.yml, 홈 디렉터리 수준의 cordis.patch.yml, 마지막으로 모든 --patch 오버레이가 적용됩니다. 나중에 적용된 계층이 이전 계층의 설정을 재구성하거나 삭제할 수 있으므로 순서가 중요합니다. 따라서 플러그인이 설치된 것처럼 보이지만 작동하지 않는다면, 프로필의 cordis.patch.yml을 열어 두 가지를 확인하십시오. 삽입 블록이 존재하는지, 그리고 이후 계층에서 해당 설정을 비활성화하지 않는지 확인해야 합니다.

2026년 8월 17일 기준으로 npm 패키지 @deepseek-ai/dsh은 0.1.0-rc.7 버전이었으며, 아래의 플러그인들은 0.1.0-rc 라인을 위해 빌드되었습니다. dsh-permission-rules과 dsh-defend은 0.1.0-rc.5에서 0.1.0-rc.6까지의 호환성을 선언하며, dsh-budget는 0.1.0-rc.6만 선언하고, dsh-memory은 ^0.1.0-rc.6부터 시작하는 피어 범위만 설정하며, dsh-web-lan-access은 dsh 버전을 전혀 선언하지 않습니다. 2026년 10월 10일 기준으로 npm의 latest 태그는 0.2.0-rc.2이므로, 이 버전들을 고정했을 때보다 현재는 그 격차가 더 벌어졌습니다. 이러한 격차는 이 생태계에서 일반적인 현상이며, 플러그인이 로드되지 않는 주된 이유이기도 합니다. 하네스(harness)를 의도적으로 업그레이드한 후, 플러그인을 하나씩 테스트하십시오.

플러그인을 신뢰하기 전에 코드를 확인하십시오

dsh 플러그인은 하네스(harness)로부터 샌드박스 처리되지 않습니다. 플러그인은 동일한 Cordis 트리, 동일한 프로세스, 동일한 운영체제 사용자 권한으로 로드되며, 동일한 모델 자격 증명과 작업 트리에 접근할 수 있습니다. 플러그인을 설치하는 것은 브라우저 확장 프로그램을 추가하는 것보다 sudo을 사용하여 타인의 스크립트를 실행하는 것에 더 가깝습니다. 이는 Claude Code 플러그인이 제기하는 문제와 동일한 신뢰의 문제이며, 답 또한 같습니다. 코드를 읽거나, 아니면 설치하지 마십시오.

다음 네 가지 사항을 순서대로 확인하십시오.

  • 어떤 확장 지점을 사용하는지 확인하십시오. tools/pre-execute은 모든 도구 호출을 확인하고 차단할 수 있음을 의미합니다. agent/pre-step는 사용자의 메시지를 볼 수 있음을 의미합니다. webServer.tapIndex은 브라우저에 제공되는 페이지를 재작성할 수 있음을 의미합니다. 이 중 아무것도 사용하지 않는 플러그인은 할 수 있는 작업이 거의 없지만, 이 모든 것을 사용하는 플러그인은 사실상 보안 경계 그 자체입니다.
  • 네트워크 통신 여부를 확인하십시오. 소스 코드에서 fetch, http 및 하드코딩된 호스트 이름을 검색하십시오. 외부로 데이터를 전송하는 비용 측정 도구는 사용자의 사용 패턴을 어딘가로 전송하고 있는 것입니다.
  • 자격 증명 읽기 여부를 확인하십시오. credentials.*이나 공급자 키에 접근하는 모든 코드는 README에 명확한 이유가 명시되어 있어야 합니다.
  • 라이선스와 마지막 커밋 날짜를 확인하십시오. 매주 변화하는 생태계에서 몇 달 동안 업데이트되지 않고 라이선스조차 없는 플러그인은 위험 요소입니다.

설치 시에는 브랜치 대신 커밋 해시를 사용하여 설치하고, 설치 프로그램이 cordis.patch.yml에 작성한 삽입 블록을 읽어보십시오. 해당 블록에는 플러그인 ID와 등록된 설정이 명시되어 있으며, 이는 방금 추가한 기능에 대한 가장 간결하고 정직한 설명입니다. 하네스에서 허용하는 경우, AI 에이전트로부터 비밀 정보를 분리하는 방법에 따라 공급자 키가 플러그인에 노출되지 않도록 관리하십시오.

dsh-budget: 에이전트가 밤새 비용을 소모하지 않게 하려면 어떻게 해야 합니까?

VPS에서 에이전트를 무인으로 실행하는 것은 이 기술의 핵심 목적이지만, 동시에 위험 요소이기도 합니다. dsh-budget은 모델별, 세션별, 일별 토큰 사용량과 예상 비용을 측정하며, 해당 총액에 대해 제한을 강제합니다.

dsh plugin --profile web add "github:PerryLink/dsh-budget#461d478"

기본값은 10 USD(세션당), 50 USD(일별), 500 USD(월별)로 넉넉하게 설정되어 있습니다. 이는 자금 지원을 받는 팀에게는 적합합니다. 개인 서버에서는 이 값이 너무 높아 무한 루프가 발생해도 제한에 도달하기 전에 비용이 모두 소진될 수 있으므로, 첫날부터 값을 낮추어야 합니다.

차트dsh-budget default caps and a lower starting point for one small VPS (USD)
이 차트의 데이터
[
  {
    "label": "Per session",
    "plugin_default_usd": 10,
    "suggested_start_usd": 2
  },
  {
    "label": "Per day",
    "plugin_default_usd": 50,
    "suggested_start_usd": 5
  },
  {
    "label": "Per month",
    "plugin_default_usd": 500,
    "suggested_start_usd": 40
  }
]

제안된 수치는 한 대의 서버에서 한 명의 운영자가 사용할 때의 시작점일 뿐, 확정된 기준은 아닙니다. 실제 한 달간의 사용량을 확인한 뒤에 값을 올리십시오. 월별 제한을 40 USD로, 세션 제한을 2 USD로 설정하면 도구의 사용 패턴을 파악하는 동안 빠르게 제한에 도달하여 경고를 받을 수 있습니다.

- id: budget
  config:
    budgets:
      session: 2
      daily: 5
      monthly: 40
    warnRatio: 0.8
    overLimit: block

기계의 동작 방식을 결정하는 설정은 overLimit입니다. 기본값은 alert이며, 이는 경고만 출력하고 비용 소모를 계속하므로 초기 상태에서는 대시보드 역할만 수행합니다. 이를 block로 설정하면 제한에 도달했을 때 하네스가 모델 호출을 거부하므로, 밤새 작업이 계속되어 아침까지 비용이 청구되는 상황을 방지할 수 있습니다. degrade는 세 번째 모드입니다. 이 모드는 호출을 차단하는 대신 degradation 맵에 정의된 더 저렴한 모델을 사용하도록 안내합니다. 작업은 완료해야 하지만 최고 성능의 모델이 필요하지 않을 때 적합합니다. warnRatio은 기본값이 0.8이므로, 제한의 80퍼센트에 도달했을 때 알림을 받을 수 있습니다.

두 가지 주의할 점이 있습니다. 비용은 내장된 가격표와 사용자가 제공한 가격을 합산하여 계산되는데, 유지보수 담당자는 내장 가격이 실제와 다를 수 있다고 경고합니다. prices는 기본적으로 비어 있습니다. 461d478 커밋 버전에서는 defaultPrice(두 표 모두에 없는 모델에 대한 대체값)이 입력 토큰 100만 개당 1.0 USD, 출력 토큰 100만 개당 3.0 USD로 설정됩니다. 2026년 10월 10일에 확인한 현재 main 버전에서는 기본값이 0이며, 가격이 책정되지 않은 모델로 표시됩니다. 대시보드가 추측이 아닌 정확한 측정을 하도록 모델의 실제 가격을 입력하십시오. 둘째, 461d478에서 플러그인은 세션 이벤트 스트림으로부터 실행 중인 프로세스의 데이터를 집계합니다. 따라서 하네스가 재시작되면 총액이 초기화되며, 크래시 루프나 dsh를 재시작하는 슈퍼바이저가 있으면 일일 제한이 초기화됩니다. 현재 main는 기본적으로 일별 및 월별 버킷을 유지하며(persistence.enabled: true, 10초마다 스냅샷 생성), 시작 시 이를 복원합니다. 따라서 하네스가 스토리지 도메인을 제공한다면 재시작 시 일일 또는 월별 제한이 초기화되지 않습니다. 스토리지 도메인이 없으면 집계는 프로세스 내부에서만 유지됩니다. main은 0.2 하네스 라인을 대상으로 하므로, 핀을 이동하면 하네스도 함께 이동해야 합니다. 어떤 경우든 dsh-budget는 본인의 작업에 대한 안전장치로 활용하고, 실제 비용 상한선은 제공자 계정에서 설정하십시오. 이에 대한 자세한 내용은 VPS에서 AI 에이전트 비용 제어하기를 참조하십시오.

일상적인 운영에서는 /budget으로 전체 개요를 확인하고, /budget models로 모델별 상세 내역을 보며, 차단을 해제하고 계속 진행하기로 결정했다면 /budget unblock <scope>를 사용하십시오.

dsh-permission-rules: 어떤 도구 호출을 절대 실행해서는 안 되는가?

dsh-permission-rules은 tools/pre-execute 워터폴에 선언적 규칙을 배치하므로, 도구가 실행되기 전에 규칙이 먼저 평가됩니다. 세 가지 동작이 존재합니다. allow는 호출을 통과시키고, deny은 호출을 차단하며 모델이 읽을 수 있는 이유를 반환하고, ask은 공식 승인 시임(seam)으로 라우팅합니다.

dsh plugin --profile web add "github:PerryLink/dsh-permission-rules#b30b4fb"

규칙은 세션 작업 디렉터리를 기준으로 .dsh/rules.yaml에 위치하며, 전역 fallbackPath와 파일 시스템 루트 방향으로 상위 디렉터리를 탐색하는 선택적 searchUp을 포함합니다. 매칭 범위에는 도구 이름 글로브(glob), 매개변수 키 및 값 글로브, 작업 공간 상대 경로 글로브, main 또는 subagent와 같은 에이전트 선택기, 그리고 네트워크 대상이 포함됩니다.

rules:
  - match: { tools: [bash], params: { command: "rm -rf*" } }
    action: deny
    reason: "No recursive deletes"
  - match: { tools: [edit, write], paths: ["**/.env*", "**/secrets/**"] }
    action: ask
    reason: "Secret files need confirmation"
  - match: { tools: ["mcp__*"] }
    action: ask
    reason: "MCP tools need confirmation"

평가는 첫 번째로 일치하는 규칙이 우선하므로, 상단 근처에 있는 광범위한 allow은 그 아래의 모든 좁은 범위의 규칙을 조용히 무효화합니다. 거부 규칙을 먼저 작성하고 허용 규칙을 마지막에 작성하십시오. 도구 이름 글로브는 mcp__*를 포함하며, 이는 하네스(harness) 자체가 아닌 모델 컨텍스트 프로토콜(MCP) 서버에서 제공된 도구를 제어하는 방법입니다. 이는 VPS에서 MCP 서버 실행을 시작하는 즉시 중요해집니다.

계획해야 할 한 가지 동작은 다음과 같습니다. ask는 응답자가 필요합니다. headless 프로필에서는 아무도 보고 있지 않을 수 있으며, 응답 없는 ask은 누군가 나타날 때까지 기다리지 않습니다. 응답자가 구성되지 않은 경우 하네스 승인 체인은 닫힌 상태로 실패하며 호출은 거부됩니다. 따라서 무인 서버에서 ask 규칙은 의도하지 않은 deny처럼 동작합니다. 절대 승인하지 않을 작업에는 deny을 사용하고, 직접 사용하는 프로필에는 ask을 유지하십시오. 무인 상태에서 승인이 작동하게 하려면 실제 응답 경로가 필요하며, 이는 승인을 통한 AI 에이전트 작업 제어의 주제입니다.

dsh-defend: 프롬프트 인젝션과 비밀 정보 유출은 어떻게 대응합니까?

dsh-defend은 agent/pre-step의 인바운드 메시지, 파괴적 삭제 방지 기능을 포함한 tools/pre-execute의 도구 인자, 그리고 tools/post-execute의 도구 결과라는 세 지점에서 검사를 수행합니다. 마지막 지점은 모델이 동작하기 전에 웹 페이지에서 가져온 콘텐츠를 미리 검토할 수 있어 특히 중요합니다.

dsh plugin --profile web add "github:PerryLink/dsh-defend#7ba3427"

기본 설정은 엄격하기보다는 신중하게 구성되어 있습니다. detection.injectionAction, detection.jailbreakAction, detection.secretAction은 모두 ask로 설정되어 있으며, detection.secretBlockCritical은 true로 설정되어 있어 다른 설정과 관계없이 중요한 비밀 정보는 차단됩니다. 관리자가 상주하지 않는 서버에서는 중요한 작업에 대한 설정을 block으로 변경하십시오. 관리자가 없는 상황에서 ask을 수행하는 것은 올바른 의사결정이 아니기 때문입니다.

감사 설계는 높게 평가할 만합니다. defend/detection 이벤트는 규칙 ID, 제품군, 범주, 심각도, 결정 사항 및 검사 사실을 기록하며, 일치하는 텍스트 자체는 절대 기록하지 않습니다. 비밀 정보는 유형별로만 기록됩니다. 따라서 감사 로그를 활성화해도 보호하려는 자격 증명의 복사본이 생성되지 않습니다.

이 도구가 제공하는 이점을 명확히 이해해야 합니다. 탐지는 규칙 기반으로 작동하며, README에도 명시되어 있듯이 새로운 문구의 공격이나 다단계 공격은 탐지를 우회할 수 있습니다. 이 도구는 명백한 공격의 발생률을 낮춰줄 뿐입니다. 에이전트를 신뢰할 수 없는 콘텐츠에 노출해도 안전하게 만들어주는 것은 아니므로, 하위 계층의 권한 규칙을 계속 유지하십시오.

dsh-memory: 에이전트는 내일 무엇을 기억하는가?

dsh-memory라는 이름을 가진 플러그인이 두 가지 있으므로 설치 명령을 입력하기 전에 이를 알아두어야 합니다. 읽어본 플러그인을 정확히 설치하려면 소스를 명시하여 설치하십시오.

소규모 서버에 권장하는 것은 SQLite 빌드입니다. 이 플러그인은 memory으로 등록되며, $DSH_HOME/memory/memory.db에 프로필 간 공유되는 단일 파일을 유지하고 memory_write, memory_search, memory_forget 명령을 제공합니다. 검색은 저장된 텍스트와 태그를 기반으로 하는 키워드 방식입니다. 임베딩 서비스, API 키, 추가 프로세스가 필요하지 않습니다.

dsh plugin --profile web add "github:ben7am1n/dsh-memory#def7c6a"

수정해야 할 설정은 간단합니다. 데이터베이스 파일 경로인 path, 고정되지 않은 메모리가 주입되는 개수를 결정하는 promptRecentCount(기본값 10), 렌더링 예산을 결정하는 promptMaxChars(기본값 2000)이 있습니다. 이 플러그인은 Node 22와 24에서도 여전히 실험적 기능으로 분류되는 node:sqlite에 의존하므로, Node 업그레이드는 무작정 진행하기보다 반드시 테스트를 거쳐야 합니다.

이 메모리 플러그인이 시스템에 미치는 실질적인 변화는 다음과 같습니다. 주입된 메모리는 매번 시스템 프롬프트에 포함되어 전달됩니다. promptMaxChars는 렌더링 섹션의 최대치이며 고정된 양은 아니지만, 저장된 메모리가 이 용량을 채우면 2000자 분량의 예산이 매 요청마다 수백 개의 추가 입력 토큰을 발생시킵니다. 이는 비용 청구서에 직접적인 영향을 미치므로, dsh-memory을 설치하기 전에 dsh-budget를 먼저 도입해야 하는 이유가 됩니다. promptMaxChars을 작게 유지하고 파일이 무한정 커지지 않도록 memory_forget을 사용하여 주기적으로 정리하십시오.

대안으로 제공되는 빌드는 메모리를 YAML 파일에 저장하고 자동 프롬프트 주입을 통한 임베딩 검색을 수행하며, dsh plugin --profile web add github:towzai/dsh-memory로 설치합니다. 이 임베딩 검색을 사용하려면 로컬 ollama 인스턴스와 임베딩 모델이 필요합니다. 기본값은 qwen3-embedding:0.6b이며 DSH_MEMORY_EMBED_MODEL로 재정의할 수 있습니다. ollama가 없으면 키워드 전용 검색으로 대체됩니다. 의미론적 회상(Semantic recall)은 키워드 회상보다 성능이 우수합니다. 하지만 이는 두 번째 서비스가 실행되어야 함을 의미하며, 서버에 모델 가중치가 상주해야 하므로 소규모 서버 플랜에서는 본래 목적을 위해 할당된 메모리 자원을 점유하게 됩니다. RAM에 여유가 있을 때 이 방식을 선택하십시오. 회상 품질과 상주 비용 사이의 일반적인 절충안은 에이전트를 위한 로컬 메모리에서 다룹니다.

dsh-web-lan-access: 웹 UI가 루프백 인터페이스 너머로 수신 대기해야 합니까?

npx @deepseek-ai/dsh web는 127.0.0.1:3080에서 인터페이스를 제공합니다. 브라우저는 보안 컨텍스트에서만 crypto.randomUUID()를 노출하므로, 다른 기기에서 일반 HTTP를 통해 동일한 페이지를 로드하면 실패합니다. dsh-web-lan-access는 webServer.tapIndex을 활용하여 작은 폴리필을 삽입하고 서버 바인딩을 0.0.0.0로 전환하여 이 문제를 해결합니다.

설치하기 전에 해당 경고를 읽어 보십시오. 여기에 인용된 커밋 e27e909 시점의 README에 따르면, 0.0.0.0로 바인딩하면 동일한 로컬 영역 네트워크(LAN)에 있는 누구나 인증 없이 에이전트에 접근할 수 있으며, 공인 IP 주소를 가진 서버의 경우 인터넷 전체에서 접근이 가능해집니다. 당시에는 민감한 메서드 목록(settings.*, credentials.*, llm.discoverModels)이 루프백으로 고정되어 원격지에서 요청 시 403을 반환했습니다. 현재는 상황이 바뀌었습니다. 2026년 10월 10일에 확인한 최신 하네스 빌드는 브라우저를 인증합니다. 출력된 URL의 시작 토큰은 서명된 세션 쿠키로 교환되며, 모든 Host API 경로와 스트림은 이 쿠키를 요구합니다. 플러그인의 현재 README는 trustedHosts을 신원 확인이 아닌 Origin/Host 펜스로 정의하며, 0.0.0.0로 바인딩하면 접근 가능한 모든 인터페이스에 인증 표면이 노출된다고 명시합니다. 또한 현재는 인증된 원격 페이지에서 Host 기반 설정을 활성화하므로, 최신 빌드에서는 로그인한 원격 브라우저도 Host 설정에 접근할 수 있습니다. 위험 요소가 사라진 것이 아니라 이동한 것입니다. 해당 포트에 접근할 수 있는 사람은 누구나 로그인을 시도할 수 있고, 출력된 URL 자체가 자격 증명이며, 일반 HTTP 환경에서는 해당 토큰이 네트워크를 통해 평문으로 전송됩니다.

대부분의 경우 이 플러그인은 전혀 필요하지 않습니다. 대신 SSH를 통해 포트를 포워딩하십시오.

ssh -N -L 3080:127.0.0.1:3080 you@your-server

그런 다음 로컬 브라우저에서 http://127.0.0.1:3080를 엽니다. 하네스는 루프백에서만 수신 대기하므로 아무것도 노출되지 않으며, 브라우저는 127.0.0.1을 보안 오리진으로 취급하므로 crypto.randomUUID()을 사용할 수 있고 별도의 폴리필도 필요하지 않습니다. 명령어 하나로 플러그인 없이 새로운 공격 표면을 만들지 않고 해결할 수 있습니다.

포워딩이 불가능한 경우(예: 동일 네트워크의 휴대폰에서 UI에 접근해야 할 때)에만 플러그인을 설치하십시오. 설치할 경우, 사설 네트워크 인터페이스 뒤에 바인딩하고 해당 인터페이스만 허용하는 방화벽 규칙을 유지하며, web-runtime 항목의 trustedHosts 아래에 사용할 이름을 나열하십시오. 진정한 다중 사용자 접근을 위해서는 dsh-passwords을 사용하십시오. 이는 하위 사용자 권한, 하위 사용자별 시간당 토큰 및 일일 시간 할당량, Let's Encrypt를 통한 자동 TLS(전송 계층 보안) 인증서, 암호화된 감사 로그를 추가합니다. 이를 플러그인이 아닌 플랫폼으로 간주하십시오. 이 플랫폼은 80번 및 443번 포트를 사용하며 자체 설치 프로그램을 제공합니다. 문서화된 빠른 설치 경로는 네트워크에서 셸 스크립트를 가져와 즉시 bash로 파이프합니다. npm install -g dsh-passwords를 실행한 뒤 dsh-passwords install을 수행하는 방식을 권장합니다. 이렇게 하면 코드가 디스크에 저장되므로 실행하기 전에 내용을 확인할 수 있습니다.

플러그인을 깔끔하게 제거하는 방법

제거 과정은 두 단계로 나뉘며, 많은 사용자가 두 번째 단계를 생략합니다.

dsh plugin --profile web remove dsh-budget
dsh plugin --profile web list

list에서 해당 플러그인이 더 이상 표시되지 않아야 합니다. 그 후 $DSH_HOME/profiles/web/cordis.patch.yml를 열어 해당 플러그인 이름이 포함된 삽입 블록(insert block)을 삭제하십시오. 해당 항목이 트리 구조로 플러그인을 로드하기 때문입니다. 트리를 다시 빌드하려면 하네스(harness)를 재시작하십시오. 이미 로드된 플러그인은 재시작 전까지 계속 유지됩니다. 마지막으로, 데이터는 코드보다 오래 남는다는 점을 기억하십시오. $DSH_HOME/memory/memory.db 및 .dsh/rules.yaml는 제거 후에도 남아 있습니다. 데이터 삭제가 목적이라면 직접 삭제하십시오.

참조 시점과 읽은 내용

이 문서의 모든 참조는 브랜치가 아닌 커밋을 가리킵니다. 독자가 이 글을 읽을 시점에는 main의 코드가 변경되어 있을 것이기 때문입니다. 본인은 2026년 8월 17일에 모든 내용을 검토했으며, 당시 npm의 하네스 버전은 0.1.0-rc.7였습니다. 2026년 10월 10일, npm의 latest 태그가 0.2.0-rc.2일 때 위에서 설명한 기본값과 동작 방식을 원본 소스를 통해 재확인했습니다.

이 요약 목록의 정확한 커밋 정보
  • 커뮤니티 플러그인 목록, 2026년 8월 17일 기준 f2918fb. 의도적으로 한 번만 링크했습니다. 이는 디렉터리일 뿐이며, 디렉터리 자체가 추천을 의미하지는 않습니다.
  • dsh-budget, 2026년 8월 17일 기준 461d478. Apache 2.0 라이선스. dsh 0.1.0-rc.6, Node 22.19 또는 24 이상을 명시합니다.
  • dsh-permission-rules, 2026년 8월 17일 기준 b30b4fb. Apache 2.0 라이선스. dsh 0.1.0-rc.5에서 0.1.0-rc.6까지를 명시합니다.
  • dsh-defend, 2026년 8월 17일 기준 7ba3427. Apache 2.0 라이선스. dsh 0.1.0-rc.5에서 0.1.0-rc.6까지를 명시합니다.
  • dsh-memory, 2026년 8월 13일 기준 def7c6a. MIT 라이선스. SQLite 빌드. dsh 호환성 필드는 없으며, ^0.1.0-rc.6부터의 피어 범위만 명시합니다.
  • dsh-web-lan-access, 2026년 8월 16일 기준 e27e909. MIT 라이선스. dsh 호환성 필드가 없습니다.

명령어를 복사하기 전에 해당 핀(pin) 정보를 다시 확인하십시오. 개발자 프리뷰 생태계에서는 날짜가 포함된 버전 번호만이 유일하게 의미를 갖습니다.

FAQ

VPS에 가장 먼저 설치해야 할 DeepSeek Harness 플러그인은 무엇입니까?

다른 무엇보다 먼저 dsh-budget과 dsh-permission-rules을 설치하십시오. overLimit: block가 포함된 예산 설정은 무인 실행 시 밤새 비용이 소진되는 것을 방지하며, .dsh/rules.yaml 파일은 승인하지 않았을 도구 호출을 차단합니다. 에이전트가 공개 웹에서 정보를 읽기 시작하면 dsh-defend를 추가하고, 매 세션마다 동일한 컨텍스트를 붙여넣고 있다면 dsh-memory를 추가하십시오. 테마나 상태 칩은 건너뛰어도 됩니다. 이는 기계의 동작을 변경하지 않으면서 에이전트의 권한으로 실행되는 코드만 추가할 뿐입니다.

dsh 플러그인은 하네스(harness)로부터 샌드박스 처리됩니까?

아니요. 플러그인은 하네스와 동일한 Cordis 트리, 동일한 프로세스, 동일한 운영체제 사용자 권한으로 로드되며, 동일한 모델 자격 증명과 작업 트리를 공유합니다. tools/pre-execute을 사용하는 플러그인은 모든 도구 호출을 확인하고 차단할 수 있으며, agent/pre-step을 사용하는 플러그인은 사용자의 메시지를 볼 수 있습니다. 따라서 소스 코드를 읽고, 라이선스와 마지막 커밋 날짜를 확인하십시오. 코드가 임의로 변경되지 않도록 브랜치가 아닌 커밋 단위로 설치하십시오.

dsh-budget은 에이전트를 실제로 중단시킵니까, 아니면 경고만 합니까?

이는 overLimit 설정에 따라 다릅니다. 기본값은 alert이며, 이는 warnRatio에서 경고를 보내고 비용 지출을 계속합니다. block은 한도에 도달하면 모델 호출을 거부하며, /budget unblock <scope>는 사용자가 계속하기를 선택할 때 한도를 해제합니다. degrade은 degradation 맵에 정의된 더 저렴한 모델을 안내하며 차단합니다. 한 가지 중요한 제한 사항이 있습니다. 고정된 커밋 461d478 기준, 총액은 실행 중인 프로세스 내에서 집계되므로 하네스를 재시작하면 초기화됩니다. 따라서 재시작 루프가 발생하면 일일 한도가 무력화될 수 있습니다. 현재 main은 기본적으로 재시작 후에도 일간 및 월간 버킷을 유지합니다. 어떤 경우든 공급자 계정 자체에 지출 한도를 설정하여 실질적인 상한선을 유지하십시오.

dsh 플러그인을 완전히 제거하려면 어떻게 해야 합니까?

dsh plugin --profile web remove <package-name>을 실행하고 dsh plugin --profile web list로 확인한 다음, $DSH_HOME/profiles/web/cordis.patch.yml를 열어 해당 플러그인에 대한 삽입 블록을 삭제하십시오. 해당 항목이 플러그인을 로드하는 주체이기 때문입니다. 하네스를 재시작하여 플러그인 트리를 다시 빌드하십시오. 플러그인이 디스크에 기록한 데이터는 그대로 남습니다. $DSH_HOME/memory/memory.db과 .dsh/rules.yaml은 사용자가 직접 삭제하기 전까지 제거 후에도 유지됩니다.

dsh 웹 UI를 네트워크에 노출해도 안전합니까?

단독으로는 안전하지 않습니다. dsh web는 127.0.0.1:3080에서 대기하며, dsh-web-lan-access는 해당 바인딩을 0.0.0.0로 변경합니다. 여기에 인용된 커밋 시점의 README에 따르면, 이 설정은 동일 네트워크상의 누구에게나 인증 없이 에이전트 접근을 허용하며, settings.*, credentials.*, llm.discoverModels만이 루프백에 고정되어 있었습니다. 2026년 10월 10일에 확인된 현재 하네스 빌드는 출력된 URL의 시작 토큰과 서명된 세션 쿠키로 브라우저 세션을 인증하지만, 로그인 화면은 모든 인터페이스에 노출됩니다. 또한 일반 HTTP URL은 해당 토큰을 평문으로 전송합니다. SSH 포트 포워딩, ssh -N -L 3080:127.0.0.1:3080 you@your-server를 사용하거나, 포트를 사설 네트워크 인터페이스와 방화벽 규칙 뒤에 배치하고, 외부에서 접근 가능한 모든 서비스 앞단에는 TLS를 적용하십시오.