DeepSeek Harness Creator Mode 사용법: 설치, 서드파티 API 연결, 첫 플러그인 만들기 실측

11월 2일 DeepSeek Harness 공식 계정이 Creator Mode를 소개했습니다. 원하는 도구를 한 문장으로 설명하면 에이전트가 플러그인을 작성하고 Harness에 설치한 뒤 로드됐는지까지 확인합니다. 이 글은 Creator Mode가 무엇인지, npx로 Harness를 실행하는 방법, OpenAI 호환 서드파티 API(aicodewith Base URL + Key)를 연결해 Claude, GPT, DeepSeek 모델을 쓰는 방법, Creator Mode로 todo_scan 플러그인을 만드는 과정을 실제 출력, 자주 나는 오류, Claude Code / Codex의 대응 방법과 함께 정리합니다.

10 分钟阅读
DeepSeek Harness Creator Mode 사용법: 설치, 서드파티 API 연결, 첫 플러그인 만들기 실측

핵심 요약: Creator Mode는 DeepSeek Harness 자체를 확장하기 위한 모드입니다. 원하는 도구를 한 문장으로 설명하면 에이전트가 플러그인을 작성하고, 현재 profile에 설치하고, 로드됐는지 확인합니다.

  • @DeepSeekHarness 공식 게시물(11월 2일)에 따르면 Creator Mode는 아이디어를 쓸 수 있는 플러그인으로 바꿔 주며, 데모에서는 디자인 작업 공간, 샌드박스 게임, 3D LLM 시각화 도구를 보여 줍니다.
  • Harness는 npx @deepseek-ai/dsh web으로 실행됩니다. 11월 3일 오후(베이징 시간) Linux에서 0.2.1-rc.5를 실측했고, 의존성 설치에 약 37초가 걸렸습니다.
  • 「Custom model API」를 지원해서 Base URL, 프로토콜, Key만 넣으면 OpenAI 호환 서드파티 API에 연결됩니다. aicodewith를 연결하자 claude-sonnet-5-5, gpt-6.1-sol, deepseek-flash 모두 도구를 정상 호출했습니다.
  • Creator Mode로 todo_scan 플러그인을 만드는 데 1분 33초가 걸렸습니다. 파일 6개를 작성하고 설치까지 끝냈으며, 새 세션과 headless 모드에서 호출한 결과도 정확했습니다.

API Key를 만들고 DeepSeek Harness, Claude Code, Codex, Cursor에서 Claude와 GPT 쓰기 →

DeepSeek Harness와 Creator Mode란

DeepSeek Harness(명령어 dsh)는 DeepSeek이 공개한 오픈소스 에이전트 하네스로, GitHub에서 MIT 라이선스로 배포됩니다. 슬로건은 「Everything is a Plugin」입니다. 도구, 스킬, UI 패널, 심지어 모드까지 모두 플러그인이며 Cordis 플러그인 프레임워크 위에서 조합됩니다. 현재는 개발자 프리뷰이고, README에 호환되지 않는 변경이 있을 것이라고 적혀 있습니다.

Web UI에서 새 세션을 만들 때 4가지 모드를 고를 수 있습니다(실측 당시 UI 문구 그대로):

모드UI 설명
Standard mode코드, 파일, 정보를 다룸. 대부분의 작업에 적합
PTC modeStandard 기능 전부 포함. 도구를 일괄 호출한 뒤 결과를 정리하는 작업에 적합
Minimal mode터미널과 이미지 읽기만 사용. 기본 성능 테스트·비교용
Creator mode대화로 DSH를 맞춤 설정. 기능이나 UI를 추가하는 플러그인을 작성하게 하거나 도구와 프롬프트를 묶어 나만의 모드를 만듦

공식 동적 플러그인 가이드와 Agent Preset README에 따르면 Creator Mode의 내부 id는 cordis입니다. Standard와 비교해 세 가지가 더해집니다:

  • 런타임 확인: 읽기 전용 도구 cordis_inspect_list, cordis_inspect_query로 실제 서비스, 도구 스키마, 설정 스키마를 확인합니다. 소스 코드를 보고 API를 추측할 필요가 없습니다.
  • 플러그인 관리: plugin_manager 도구(Standard에도 있음)로 Bundle을 설치, 활성화, 비활성화, 삭제합니다. 플러그인 설정은 현재 profile에 속하며 모든 세션에 적용되고 재시작 후에도 유지됩니다.
  • 작성용 스킬: cordis-plugin-development 같은 스킬이 자동으로 마운트되며, 플러그인·Bundle·모드 작성 절차와 템플릿이 들어 있습니다.

사용하는 모델은 모델 선택기에서 고른 모델입니다. 새 세션 선택기 외에도 Plugins 화면의 Add plugin 메뉴에 「Let the agent create a plugin」 항목이 있어 같은 Creator 흐름으로 들어갑니다.

서드파티 의견(참고):

  • @rohanpaul_ai에 따르면 이 기능은 8월부터 있었고, 11월 2일 공식이 데모 영상과 예시 7개에 쓴 프롬프트를 공개했습니다.
  • @testingcatalog에 따르면 Creator Mode로 게임부터 업무용까지 다양한 용도의 재사용 가능한 플러그인을 만들 수 있습니다.
  • 사용자 @superalesha에 따르면 그는 Kimi, GLM, MiniMax, DeepSeek 등 오픈 모델을 Harness에서 돌리고 있으며 「플러그인으로 GPT 모델도 추가했다」고 합니다.

DeepSeek이 Harness 기반으로 만든 또 다른 프로젝트 Super-agent는 이전 글 DeepSeek Super-agent와 dsh-superagent 프로토타입 실측 리뷰를 참고하세요. 여기서는 반복하지 않습니다.

DeepSeek Harness 설치

Node.js(실측은 22.23)를 준비하고 다음을 실행합니다:

bash
# Node.js 22 or newer
npx @deepseek-ai/dsh --version
# 0.2.1-rc.5

npx @deepseek-ai/dsh web
# dsh web: http://127.0.0.1:3080/?token=...

로컬에서 실행하면 브라우저가 자동으로 열립니다. 서버나 SSH에서는 --no-open을 붙이면 주소만 출력됩니다. 주소에 token이 들어 있으니 그 전체 링크로 여세요. http://127.0.0.1:3080/만 열면 401이 납니다.

Web UI 없이 터미널에서 작업 한 번만 돌리려면 headless 모드를 씁니다. 답은 stdout, 진단 정보는 stderr로 나와 스크립트와 CI에 적합합니다. 옵션은 공식 CLI 도움말을 보세요.

공식 안전 안내는 Harness가 모델이 생성한 코드와 명령을 실행하고, 서드파티 플러그인을 로드하며, 보안 감사를 받지 않았다고 경고합니다. 일회용 VM, 컨테이너, 전용 디렉터리에서 실행하고 중요한 프로젝트나 자격 증명 옆에서는 돌리지 마세요.

DeepSeek Harness에 서드파티 API(aicodewith) 연결

모델 설정은 Settings → Models에 있습니다. DeepSeek 카드와 내장 서드파티 제공자 외에, Custom model API를 고르면 중계 서비스, 회사 게이트웨이, 자체 호스팅 서버에 연결할 수 있습니다. 공식 모델 설정 가이드에 따르면 프로토콜은 OpenAI Chat Completions, OpenAI Responses, Anthropic Messages 세 가지입니다.

API Key를 만들고 DeepSeek Harness에 연결 →

방법 1: Models 화면에서 입력

text
Settings → Models → Add model provider → Custom model API
  Provider ID   aicodewith
  Base URL      https://api.aicodewith.ai/v1
  API protocol  OpenAI Chat Completions
  API key       (your aicodewith key)
  Models        claude-sonnet-5-5, gpt-6.1-sol, deepseek-flash

저장하면 모델 선택기에 세 모델이 나타납니다. 화면에서 저장한 Key는 ~/.dsh/.credentials.yaml에 기록되고 설정에는 참조만 남습니다.

방법 2: 설정 파일 직접 편집

화면이 쓰는 파일은 profile의 cordis.patch.yml입니다. dsh web으로 실행하면 profile 이름은 web, headless는 headless입니다. 실측에 쓴 파일이 바로 이것입니다(Key는 환경 변수로 넘기고 파일에는 쓰지 않음):

yaml
# ~/.dsh/profiles/web/cordis.patch.yml
- id: llm-pi-ai
  config:
    providers:
      aicodewith:
        displayName: aicodewith
        apiKeyEnv: AICODEWITH_API_KEY
        api: openai-completions
        baseURL: https://api.aicodewith.ai/v1
        models:
          - id: claude-sonnet-5-5
          - id: gpt-6.1-sol
          - id: deepseek-flash
- id: agent-default-model
  config:
    provider: aicodewith
    model: claude-sonnet-5-5

실행 전에 Key를 export합니다:

bash
export AICODEWITH_API_KEY="YOUR_API_KEY"
npx @deepseek-ai/dsh web

Windows PowerShell:

powershell
$env:AICODEWITH_API_KEY = "YOUR_API_KEY"
npx @deepseek-ai/dsh web

설정을 바꾸면 재시작 없이 다음 요청부터 적용됩니다. 먼저 한마디 보내 확인합니다:

bash
npx @deepseek-ai/dsh headless "Reply with exactly: harness ok"
# harness ok

실측 결과(11월 3일, 베이징 시간):

테스트모델결과소요 시간
한 줄 답변claude-sonnet-5-5harness ok 반환4.5초
한 줄 답변gpt-6.1-solharness ok 반환3.7초
hello.py 작성 후 실행(write + bash 도구 호출)claude-sonnet-5-55050 출력8.2초
같은 작업, Anthropic Messages 프로토콜과 Base URL https://api.aicodewith.aiclaude-sonnet-5-5harness ok 반환3.0초

DeepSeek 자체 모델을 쓰려면 모델 목록에 deepseek-flash를 추가하면 됩니다. 자세한 내용은 DeepSeek V4.1 Flash 1017 변경 사항과 Claude Code / Codex 연결 방법을 보세요.

Creator Mode로 첫 플러그인 만들기: todo_scan

목표: TODO나 FIXME가 있는 줄을 찾아 파일:줄 번호: 내용을 돌려주는 todo_scan 도구, 최대 50개.

Web UI에서 모드 선택기를 열고 Creator mode를 고른 뒤 다음 요청을 보냅니다(모델은 claude-sonnet-5-5, 권한은 기본값 Workspace Write):

text
Write a DSH plugin that adds a tool named todo_scan. It takes an optional path
(default: the working directory), recursively scans text files for lines
containing TODO or FIXME (skip node_modules and .git), and returns a list of
file:line: text entries, at most 50. Install it into this profile and verify
it loaded.

플러그인 설치는 신뢰도가 높아야 하는 작업이라 중간에 확인 창이 한 번 떴고, Allow once를 눌렀습니다. 완료 후 답변(발췌):

text
Completed in 1m 33s

The todo_scan plugin is installed and loaded, and a test call returned correct results.
Install: @local/todo-scan installed with application: applied and no warnings.
Tool registration: todo_scan appears in the live tool list with the schema from my plugin.
...
It skips symlinks, binary files and files over 1 MiB.
If more than 50 matches exist, it returns 50 and marks the result as truncated.

Edited 6 files  +147 -0

작업 디렉터리에 생성된 플러그인 구조:

text
todo-scan/
├── package.json        # "dsh": { "bundle": { "patch": "./cordis.patch.yml" } }
├── cordis.patch.yml    # inserts the plugin into the profile
├── index.js            # 127 lines: registers the todo_scan tool
├── icon.svg
└── locale/
    ├── en.json
    └── zh.json

핵심은 cordis.patch.yml과 index.js입니다. 앞의 파일은 Harness에 이 플러그인을 profile에 넣으라고 알려 줍니다:

yaml
# todo-scan/cordis.patch.yml
- insert:
    - id: todo-scan
      name: '@local/todo-scan'
      config: {}

뒤의 파일이 도구를 등록합니다. 공식 첫 플러그인 튜토리얼과 같은 방식으로 name, inject, apply를 export하고 apply 안에서 ctx.tools.register를 호출합니다:

js
// todo-scan/index.js (abridged)
export const name = 'todo-scan'
export const inject = ['tools', 'workingDirectory']

export function apply(ctx) {
  return ctx.effect(() =>
    ctx.tools.register({
      name: 'todo_scan',
      description: 'Recursively scan text files for lines containing TODO or FIXME ...',
      parameters: {
        type: 'object',
        properties: { path: { type: 'string', description: 'File or directory to scan ...' } },
        additionalProperties: false,
      },
      output: { schema: { /* entries: string[], truncated: boolean */ }, render: (_a, v) => [/* text */] },
      async execute(args, exec) {
        const cwd = await ctx.workingDirectory.ensure(exec.agent, exec.signal)
        return scan(args.path ? resolve(cwd, args.path) : cwd, exec.signal)
      },
    }),
  )
}

설치 후 profile의 package.json에 link: 의존성이, bundles에 @local/todo-scan이 추가되어 재시작 후에도 유지됩니다.

플러그인 확인

새 Standard 세션에서 todo_scan을 호출하게 하니 7초 걸렸습니다. 일부러 TODO가 60줄인 파일을 넣어 두었는데 결과가 정확히 50개에서 잘렸습니다:

text
many.txt:1: TODO item 0 many.txt:2: TODO item 1 ... many.txt:50: TODO item 49 (truncated at 50 entries)

이어서 node_modules와 .git을 건너뛰는지 확인했습니다. demo/node_modules와 demo/.git에도 TODO를 넣고, 플러그인을 headless profile에 설치한 뒤 명령줄에서 호출했습니다:

bash
npx @deepseek-ai/dsh plugin --profile headless add link:/absolute/path/to/todo-scan
# dependencies:
# + @local/todo-scan <- .../todo-scan
# Done in 23ms using pnpm v12.15.0

npx @deepseek-ai/dsh headless --json "Call the todo_scan tool once with path demo and paste its raw output verbatim, nothing else."
text
{"type":"tool_call","tool":"todo_scan","input":{"path":"demo"}}
{"type":"tool_result","status":"completed","result":"src/app.py:2: # TODO: handle empty input\nsrc/app.py:4: # FIXME: off by one"}
{"type":"final","text":"src/app.py:2: # TODO: handle empty input\nsrc/app.py:4: # FIXME: off by one"}

src/app.py의 두 줄만 돌아왔고 node_modules와 .git 안의 줄은 건너뛰었습니다. 같은 플러그인을 세 모델로 호출한 결과:

모델todo_scan 호출 여부출력소요 시간
claude-sonnet-5-5예두 줄, 정확5.5초
gpt-6.1-sol예두 줄, 정확6.9초
deepseek-flash예두 줄, 정확7.6초

자주 나는 오류

Key가 틀림:

{ERR401}

AICODEWITH_API_KEY에 Key 전체가 들어 있는지, 앞뒤에 공백이 없는지 확인하세요.

환경 변수를 export하지 않음:

text
dsh: MISSING_CREDENTIAL: llm-pi-ai: no credential for provider route "aicodewith"; its profile
resolves AICODEWITH_API_KEY, which is not set — store AICODEWITH_API_KEY through the credentials
service (the web Models page writes it) or export it ...

apiKeyEnv에 적은 변수는 dsh를 실행하는 터미널에서 export하거나, Models 화면에서 Key를 한 번 저장해야 합니다.

기본 모델이 목록에 없음:

text
dsh: UNKNOWN_MODEL: pi-ai provider "aicodewith" has no configured model "claude-sonnet-9"

agent-default-model의 model은 해당 제공자의 models 목록에 있어야 합니다.

게이트웨이가 모르는 모델 id:

{ERR400}

모델 id는 aicodewith 모델 목록에 맞추거나 Models 화면에서 Fetch available models로 가져오세요.

증상원인해결
http://127.0.0.1:3080/에서 401실행 시 출력된 token이 없음터미널에 출력된 전체 링크로 열기
AUTH: 401Key가 틀렸거나 삭제됨올바른 Key 사용
MISSING_CREDENTIAL환경 변수 미설정export하거나 Models 화면에서 Key 저장
UNKNOWN_MODEL기본 모델이 models 목록에 없음목록에 모델 추가
INVALID_REQUEST: 400 모델 없음게이트웨이가 id를 모름모델 목록에 맞게 id 수정
플러그인은 설치했는데 도구가 없음로드되지 않았거나 로드 실패Creator Mode에서 설치된 Bundle과 경고를 확인하게 하기

Claude Code / Codex / Cursor에서 같은 일 하기

Harness 플러그인은 에이전트에 새 도구를 더하는 것입니다. 다른 클라이언트에서 가장 비슷한 방법은 Skill(절차와 스크립트를 폴더에 묶은 것)을 작성하거나 MCP 서버를 연결하는 것입니다:

클라이언트Skill 위치
Claude Code~/.claude/skills/<이름>/SKILL.md
Codex~/.agents/skills/<이름>/SKILL.md
Cursor~/.cursor/skills/ 또는 ~/.agents/skills/

작성법과 호출 방법은 Agent Skills 사용법: Claude Code / Codex 설치 위치와 호출 방법을 보세요.

이 클라이언트들도 aicodewith에 연결할 수 있습니다. Claude Code:

bash
export ANTHROPIC_BASE_URL="https://api.aicodewith.ai"
export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY"
claude

Codex(~/.codex/config.toml):

toml
# ~/.codex/config.toml
model_provider = "aicodewith"
model = "gpt-6.1-sol"

[model_providers.aicodewith]
name = "aicodewith"
base_url = "https://api.aicodewith.ai/chatgpt/v1"
wire_api = "responses"
experimental_bearer_token = "YOUR_API_KEY"

자세한 내용은 Claude Code를 서드파티 API에 연결하는 방법을 보세요.

자주 묻는 질문

Creator Mode는 새 모델인가요?

아닙니다. 모드이며, 모델 선택기에서 고른 모델을 그대로 씁니다. 여기에 런타임 확인, 플러그인 관리, 플러그인 작성용 도구와 스킬이 더해집니다. 이번에는 claude-sonnet-5-5를 썼습니다.

DeepSeek API가 꼭 필요한가요?

아닙니다. Harness는 내장 서드파티 제공자와 사용자 지정 OpenAI 호환 엔드포인트를 지원합니다. aicodewith를 연결해 Claude, GPT, DeepSeek 모델을 모두 썼고, Creator Mode에서 플러그인 작성도 됐습니다.

Creator Mode로 설치한 플러그인은 안전한가요?

공식 Plugin Manager README에 따르면 설치된 플러그인 코드는 Harness 호스트 프로세스 안에서, 워크스페이스 샌드박스 밖에서 실행됩니다. 그래서 plugin_manager의 모든 작업에는 전체 접근 권한이나 건별 승인이 필요하며, 실측 중에도 확인 창이 한 번 떴습니다. 먼저 일회용 profile이나 디렉터리에서 시험하고, 코드를 읽은 뒤 평소 환경에 설치하세요.

브라우저 없이 Creator Mode를 쓸 수 있나요?

이번에는 Web UI에서 Creator mode를 골랐습니다. headless 모드는 작업 실행과 설치된 플러그인 호출에 썼고, 플러그인 설치는 dsh plugin --profile <이름> add로 명령줄에서도 할 수 있습니다.

플러그인은 어떻게 제거하나요?

Creator Mode나 Plugins 화면에서 Bundle을 비활성화·삭제하거나, 명령줄에서:

bash
npx @deepseek-ai/dsh plugin --profile headless remove @local/todo-scan
# dependencies:
# - @local/todo-scan link:.../todo-scan

실측에서는 제거 후 profile의 bundles 목록에서 @local/todo-scan이 사라졌고, todo_scan을 호출해 달라고 하자 모델이 그런 도구가 없다고 답했습니다.

더 읽어 보기

출처: DeepSeek Harness GitHub · 모델 설정 가이드 · 첫 플러그인 튜토리얼 · CLI 도움말 · 안전 안내 · DeepSeek Harness 공식 사이트 · @DeepSeekHarness 게시물 (2026-11-03 확인)

相关文章

Claude Code auto mode가 중계 서버를 거치면 매 턴 실패? 2.1.317에서 게이트웨이 403/422 수정 (업데이트와 테스트)

Claude Code auto mode가 중계 서버를 거치면 매 턴 실패? 2.1.317에서 게이트웨이 403/422 수정 (업데이트와 테스트)

Claude Code 2.1.317(11월 3일 출시)은 ANTHROPIC_BASE_URL이 LLM 게이트웨이를 가리키고, 그 게이트웨이가 서버 측 안전 검사에 403이나 422를 반환할 때 auto mode가 매 턴 실패하던 문제를 고쳤습니다. 무엇이 바뀌었는지, 어떤 서드파티 게이트웨이·중계 사용자가 영향을 받는지, 업데이트와 버전 확인, Base URL과 키 설정, auto mode 켜는 법, 2.1.316과 2.1.317 비교 테스트, 오류 대조표와 FAQ를 정리했습니다.

Claude Message Threads 사용법: Messages API 메시지 스레드 공개 베타, 새 메시지만 보내고 첫 토큰 약 35% 빨라짐 (Claude Code / API 실측)

Claude Message Threads 사용법: Messages API 메시지 스레드 공개 베타, 새 메시지만 보내고 첫 토큰 약 35% 빨라짐 (Claude Code / API 실측)

Anthropic이 11월 2일 Messages API의 Message Threads(메시지 스레드)를 공개 베타로 내놓았습니다. 첫 요청에서 전체 대화를 보내 스레드를 만들고, 이후에는 새 메시지와 직전 응답의 id만 보냅니다. 긴 대화에서 첫 토큰이 더 빨리 오지만 토큰 사용량과 과금은 그대로입니다. 이 글은 공식 문서를 기준으로 thread 파라미터, 베타 헤더, 5분 만료와 404 재전송을 설명하고 curl, Python, TypeScript 예시를 보여 줍니다. 또 aicodewith Key로 실측한 결과, aicodewith를 거치면 현재 thread 필드가 무시되어 이어서 보낸 턴이 앞 맥락을 잃는다는 점, Claude Code는 영향이 없다는 점, 대안과 자주 보는 오류를 정리합니다.

Karpathy의 HackerTube 만드는 법:Claude Code / Codex로 Hacker News 댓글에서 영상을 찾아 알고리즘 없는 영상 사이트 만들기(실측)

Karpathy의 HackerTube 만드는 법:Claude Code / Codex로 Hacker News 댓글에서 영상을 찾아 알고리즘 없는 영상 사이트 만들기(실측)

Karpathy는 Claude Code와 Opus 5.5로 약 2시간 만에 HackerTube를 만들었습니다. Hacker News에서 20년 동안 반복해서 추천된 YouTube 영상 6,454개를 골라낸 사이트입니다. 이 글에서는 저희 API Key로 Claude Code와 Codex에 각각 축소판을 만들게 했습니다. HN 공식 Algolia API로 두 달 치 댓글을 가져와 YouTube 링크를 추출하고, 중복을 제거해 집계한 뒤 정적 페이지를 생성합니다. 전체 프롬프트, 소요 시간, 두 클라이언트 비교, HackerTube까지 남은 단계를 정리했습니다.