핵심 요약: 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 mode | Standard 기능 전부 포함. 도구를 일괄 호출한 뒤 결과를 정리하는 작업에 적합 |
| 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)를 준비하고 다음을 실행합니다:
# 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 화면에서 입력
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는 환경 변수로 넘기고 파일에는 쓰지 않음):
# ~/.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합니다:
export AICODEWITH_API_KEY="YOUR_API_KEY"
npx @deepseek-ai/dsh web
Windows PowerShell:
$env:AICODEWITH_API_KEY = "YOUR_API_KEY"
npx @deepseek-ai/dsh web
설정을 바꾸면 재시작 없이 다음 요청부터 적용됩니다. 먼저 한마디 보내 확인합니다:
npx @deepseek-ai/dsh headless "Reply with exactly: harness ok"
# harness ok
실측 결과(11월 3일, 베이징 시간):
| 테스트 | 모델 | 결과 | 소요 시간 |
|---|---|---|---|
| 한 줄 답변 | claude-sonnet-5-5 | harness ok 반환 | 4.5초 |
| 한 줄 답변 | gpt-6.1-sol | harness ok 반환 | 3.7초 |
| hello.py 작성 후 실행(write + bash 도구 호출) | claude-sonnet-5-5 | 5050 출력 | 8.2초 |
| 같은 작업, Anthropic Messages 프로토콜과 Base URL https://api.aicodewith.ai | claude-sonnet-5-5 | harness 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):
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를 눌렀습니다. 완료 후 답변(발췌):
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
작업 디렉터리에 생성된 플러그인 구조:
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에 넣으라고 알려 줍니다:
# todo-scan/cordis.patch.yml
- insert:
- id: todo-scan
name: '@local/todo-scan'
config: {}
뒤의 파일이 도구를 등록합니다. 공식 첫 플러그인 튜토리얼과 같은 방식으로 name, inject, apply를 export하고 apply 안에서 ctx.tools.register를 호출합니다:
// 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개에서 잘렸습니다:
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에 설치한 뒤 명령줄에서 호출했습니다:
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."
{"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하지 않음:
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를 한 번 저장해야 합니다.
기본 모델이 목록에 없음:
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: 401 | Key가 틀렸거나 삭제됨 | 올바른 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:
export ANTHROPIC_BASE_URL="https://api.aicodewith.ai"
export ANTHROPIC_AUTH_TOKEN="YOUR_API_KEY"
claude
Codex(~/.codex/config.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을 비활성화·삭제하거나, 명령줄에서:
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 Super-agent란? 아키텍처, 공식 실험 데이터, dsh-superagent 프로토타입 실측 리뷰
- DeepSeek V4.1 Flash 1017 변경 사항과 Claude Code / Codex 연결 방법
- Claude Code를 서드파티 API에 연결하는 방법: Base URL, API Key, 모델 설정
- Agent Skills 사용법: Claude Code / Codex 설치 위치와 호출 방법
출처: DeepSeek Harness GitHub · 모델 설정 가이드 · 첫 플러그인 튜토리얼 · CLI 도움말 · 안전 안내 · DeepSeek Harness 공식 사이트 · @DeepSeekHarness 게시물 (2026-11-03 확인)



