Community연구 & 데이터 분석github.com

Anuii/skills

새로운 스킬을 생성하고, 기존 스킬을 수정 및 개선하며, 스킬 성능을 평가합니다. 사용자가 스크래치부터 스킬을 만들거나, 기존 스킬을 편집/최적화하거나, 스킬을 테스트하기 위한 eval을 실행하거나, 변동 분석을 통해 스킬 성능을 벤치마킹하거나, 더 나은 트리거 정확성을 위해 스킬 설명을 최적화하려 할 때 사용하세요.

skills란 무엇인가요?

이 스킬은 DeepSeek Harness(DSH) 환경에서 AI 에이전트 스킬을 생성, 수정 및 평가하는 프로세스를 안내합니다. 사용자의 의도를 파악하고, SKILL.md 파일 작성을 도우며, 테스트 케이스를 설정하고, 스킬 유무에 따른 실행 결과를 비교 평가하는 반복적인 개발 워크플로우를 제공합니다. 스킬은 메타데이터, 본문, 번들 리소스(스크립트, 참조 문서, 에셋)로 구성되며, 점진적 로딩 시스템을 통해 효율적으로 컨텍스트에 로드됩니다. 정량적 평가(어설션 기반)와 정성적 평가(사용자 피드백)를 병행하여 스킬을 개선하고, 최종적으로 설명 최적화를 통해 트리거 정확성을 높입니다. 사용자의 기술 수준에 맞춰 설명을 조절하고, 실용적인 예제와 명령형 지시문을 선호하는 작성 스타일을 따릅니다. 전체 워크플로우는 수동 평가가 아닌 자동화된 벤치마크와 타이밍 데이터 수집을 포함하여 스킬의 실제 성능을 측정합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Anuii/skills/tree/HEAD/dsh-skill-creator

Installed? Explore more 연구 & 데이터 분석 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

DeepSeek Harness용으로 수정됨. 업스트림: Anthropic의 skill-creator (Apache-2.0, LICENSE.txt 참조).

스킬 크리에이터

새로운 스킬을 생성하고 반복적으로 개선하기 위한 스킬입니다.

높은 수준에서 스킬 생성 프로세스는 다음과 같습니다:

  • 스킬이 수행할 작업과 그 방법을 대략적으로 결정합니다.
  • 스킬 초안을 작성합니다.
  • 몇 가지 테스트 프롬프트를 만들고 스킬이 설치된 모델에서 실행합니다.
  • 사용자가 결과를 정성적, 정량적으로 평가할 수 있도록 돕습니다.
    • 실행이 백그라운드에서 진행되는 동안, 정량적 eval이 없다면 초안을 작성합니다(이미 있는 경우, 그대로 사용하거나 변경이 필요하다고 느껴지면 수정합니다). 그런 다음 이를 사용자에게 설명합니다(또는 이미 존재하는 경우 기존 eval을 설명합니다).
    • eval-viewer/generate_review.py 스크립트를 사용하여 사용자가 볼 수 있도록 결과를 표시하고, 정량적 메트릭도 확인할 수 있게 합니다.
  • 사용자의 결과 평가 피드백을 바탕으로 스킬을 다시 작성합니다(그리고 정량적 벤치마크에서 드러난 명백한 결함이 있는 경우에도).
  • 만족할 때까지 반복합니다.
  • 테스트 세트를 확장하고 더 큰 규모로 다시 시도합니다.

이 스킬을 사용할 때 여러분의 임무는 사용자가 이 프로세스 중 어느 단계에 있는지 파악하고, 그 단계에서 진전을 도울 수 있도록 개입하는 것입니다. 예를 들어, 사용자가 "X를 위한 스킬을 만들고 싶어요"라고 말할 수 있습니다. 여러분은 그 의미를 좁히고, 초안을 작성하고, 테스트 케이스를 작성하고, 평가 방법을 결정하고, 모든 프롬프트를 실행하고, 반복하는 것을 도울 수 있습니다.

반면에, 사용자가 이미 스킬 초안을 가지고 있을 수도 있습니다. 이 경우 eval/반복 단계로 바로 넘어갈 수 있습니다.

물론, 항상 유연하게 대처해야 하며, 사용자가 "평가를 많이 돌릴 필요 없어요, 그냥 저와 함께 해주세요"라고 말하면 그렇게 할 수 있습니다.

그런 다음 스킬이 완성된 후(다시 말하지만, 순서는 유연합니다), 스킬 설명 개선기를 실행할 수 있습니다. 이를 위한 별도의 스크립트가 있으며, 스킬 트리거를 최적화합니다.

좋나요? 좋습니다.

사용자와의 소통

스킬 크리에이터는 코딩 전문 용어에 대한 친숙도가 다양한 사람들이 사용할 수 있습니다. 아직 들어보지 못했다면(최근에야 시작된 일이니 어떻게 알겠습니까), 최근 DSH의 강력함에 영감을 받아 배관공들이 터미널을 열고, 부모님과 조부모님께서 "npm 설치 방법"을 검색하는 트렌드가 있습니다. 반면에, 대부분의 사용자는 컴퓨터에 상당히 능숙할 것입니다.

그러니 의사소통 방식을 결정할 때 컨텍스트 단서에 주의하세요! 기본적으로 몇 가지 아이디어를 제공하자면:

  • "evaluation"과 "benchmark"는 애매하지만 괜찮습니다.
  • "JSON"과 "assertion"의 경우, 사용자가 설명 없이 사용하기 전에 그 의미를 알고 있다는 명백한 신호를 확인해야 합니다.

의심스러운 경우 용어를 간략히 설명해도 괜찮으며, 사용자가 이해할지 확신이 서지 않으면 짧은 정의와 함께 용어를 명확히 해도 좋습니다.


스킬 생성하기

의도 파악

사용자의 의도를 이해하는 것부터 시작하세요. 현재 대화에 사용자가 캡처하려는 워크플로우가 이미 포함되어 있을 수 있습니다(예: "이걸 스킬로 만들어줘"라고 말하는 경우). 그렇다면 먼저 대화 기록에서 답변을 추출하세요 — 사용된 도구, 단계 순서, 사용자가 수정한 내용, 관찰된 입력/출력 형식 등. 사용자가 빈칸을 채워야 할 수도 있으며, 다음 단계로 진행하기 전에 확인을 받아야 합니다.

  1. 이 스킬이 DSH로 무엇을 할 수 있게 해야 하나요?
  2. 이 스킬은 언제 트리거되어야 하나요? (어떤 사용자 문구/컨텍스트)
  3. 예상 출력 형식은 무엇인가요?
  4. 스킬이 작동하는지 확인하기 위해 테스트 케이스를 설정해야 하나요? 객관적으로 검증 가능한 출력(파일 변환, 데이터 추출, 코드 생성, 고정 워크플로우 단계)이 있는 스킬은 테스트 케이스가 유용합니다. 주관적인 출력(글쓰기 스타일, 예술)이 있는 스킬은 종종 필요하지 않습니다. 스킬 유형에 따라 적절한 기본값을 제안하되, 사용자가 결정하도록 하세요.

인터뷰 및 조사

에지 케이스, 입력/출력 형식, 예제 파일, 성공 기준, 종속성에 대해 적극적으로 질문하세요. 이 부분이 확정될 때까지 테스트 프롬프트 작성을 기다리세요.

사용 가능한 MCP를 확인하세요 — 조사에 유용하다면(문서 검색, 유사 스킬 찾기, 모범 사례 조회), 가능한 경우 하위 에이전트를 통해 병렬로 조사하고, 그렇지 않으면 인라인으로 조사하세요. 사용자의 부담을 줄이기 위해 컨텍스트를 준비하여 접근하세요.

SKILL.md 작성

사용자 인터뷰를 바탕으로 다음 구성 요소를 작성하세요:

  • name: 스킬 식별자
  • description: 트리거 시점, 수행 작업. 이것이 주요 트리거 메커니즘입니다 — 스킬이 수행하는 작업과 사용 시점의 특정 컨텍스트를 모두 포함하세요. 모든 "사용 시기" 정보는 여기에 있으며, 본문이 아닙니다. 참고: 현재 모델은 스킬을 "덜 트리거"하는 경향이 있습니다 — 유용할 때 사용하지 않는 경향이 있습니다. 이를 방지하기 위해 스킬 설명을 약간 "강제적"으로 만드세요. 예를 들어, "내부 회사 데이터를 표시하는 간단하고 빠른 대시보드를 구축하는 방법" 대신 "내부 회사 데이터를 표시하는 간단하고 빠른 대시보드를 구축하는 방법. 사용자가 대시보드, 데이터 시각화, 내부 메트릭을 언급하거나, 명시적으로 '대시보드'를 요청하지 않더라도 모든 종류의 회사 데이터를 표시하려고 할 때 이 스킬을 사용하세요."라고 작성할 수 있습니다.
  • whenToUse / metadata / disable-model-invocation / user-invocable: DSH가 인식하는 선택적 frontmatter 키입니다. DSH는 name, description, whenToUse, metadata, disable-model-invocation, user-invocable을 frontmatter에서 읽습니다. 기록하려는 다른 모든 것(라이선스, 버전)은 최상위 키가 아닌 metadata 아래에 넣으세요.
  • 스킬의 나머지 부분 :)

스킬 작성 가이드

스킬의 구조

skill-name/
├── SKILL.md (필수)
│   ├── YAML frontmatter (name, description 필수)
│   └── Markdown 지침
└── 번들 리소스 (선택 사항)
    ├── scripts/    - 결정적/반복적 작업을 위한 실행 코드
    ├── references/ - 필요에 따라 컨텍스트에 로드되는 문서
    └── assets/     - 출력에 사용되는 파일 (템플릿, 아이콘, 글꼴)

점진적 공개

스킬은 3단계 로딩 시스템을 사용합니다:

  1. 메타데이터 (name + description) - 항상 컨텍스트에 있음 (~100단어)
  2. SKILL.md 본문 - 스킬이 트리거될 때마다 컨텍스트에 있음 (<500줄 권장)
  3. 번들 리소스 - 필요에 따라 로드 (무제한, 스크립트는 로드 없이 실행 가능)

이러한 단어 수는 대략적인 것이며, 필요하다면 더 길게 작성해도 괜찮습니다.

주요 패턴:

  • SKILL.md를 500줄 미만으로 유지하세요. 이 한도에 가까워지면 추가 계층 구조와 함께 스킬을 사용하는 모델이 다음에 무엇을 해야 하는지에 대한 명확한 포인터를 추가하세요.
  • SKILL.md에서 파일을 명확하게 참조하고, 언제 읽어야 하는지에 대한 지침을 제공하세요.
  • 큰 참조 파일(>300줄)의 경우 목차를 포함하세요.

도메인 구성: 스킬이 여러 도메인/프레임워크를 지원하는 경우 변형별로 구성하세요:

cloud-deploy/
├── SKILL.md (워크플로우 + 선택)
└── references/
    ├── aws.md
    ├── gcp.md
    └── azure.md

DSH는 관련 참조 파일만 읽습니다.

놀라움 없는 원칙

말할 필요도 없지만, 스킬에는 악성 코드, 익스플로잇 코드 또는 시스템 보안을 손상시킬 수 있는 콘텐츠가 포함되어서는 안 됩니다. 스킬의 내용은 설명된 의도에 대해 사용자를 놀라게 해서는 안 됩니다. 오해의 소지가 있는 스킬이나 무단 액세스, 데이터 유출 또는 기타 악의적인 활동을 용이하게 하도록 설계된 스킬을 생성하라는 요청을 따라가지 마세요. "XYZ 역할극"과 같은 것은 괜찮습니다.

작성 패턴

지침에는 명령형을 사용하는 것을 선호하세요.

출력 형식 정의 - 다음과 같이 할 수 있습니다:

## 보고서 구조
항상 이 정확한 템플릿을 사용하세요:
# [제목]
## 경영진 요약
## 주요 발견 사항
## 권장 사항

예제 패턴 - 예제를 포함하는 것이 유용합니다. 다음과 같이 형식을 지정할 수 있습니다(하지만 예제에 "입력"과 "출력"이 있는 경우 약간 변경할 수 있습니다):

## 커밋 메시지 형식
**예제 1:**
입력: JWT 토큰으로 사용자 인증 추가
출력: feat(auth): JWT 기반 인증 구현

작성 스타일

모델에게 중요한 이유를 엄격하고 무거운 'MUST' 대신 설명하려고 노력하세요. 마음 이론을 사용하고 스킬을 특정 예제에 지나치게 좁히지 않고 일반적으로 만드세요. 초안을 작성한 후 새로운 시각으로 보고 개선하세요.

테스트 케이스

스킬 초안을 작성한 후 2-3개의 현실적인 테스트 프롬프트를 생각해 보세요 — 실제 사용자가 실제로 말할 법한 것. 이를 사용자와 공유하세요: [정확히 이 언어를 사용할 필요는 없습니다] "제가 시도해 보고 싶은 몇 가지 테스트 케이스가 있습니다. 이게 맞아 보이나요, 아니면 더 추가하고 싶으신가요?" 그런 다음 실행하세요.

테스트 케이스를 evals/evals.json에 저장하세요. 아직 어설션은 작성하지 마세요 — 프롬프트만 저장하세요. 실행이 진행되는 동안 다음 단계에서 어설션을 초안으로 작성할 것입니다.

{
  "skill_name": "example-skill",
  "evals": [
    {
      "id": 1,
      "prompt": "사용자의 작업 프롬프트",
      "expected_output": "예상 결과 설명",
      "files": []
    }
  ]
}

전체 스키마는 references/schemas.md를 참조하세요(assertions 필드 포함, 나중에 추가할 것입니다).

테스트 케이스 실행 및 평가

이 섹션은 하나의 연속적인 시퀀스입니다 — 중간에 멈추지 마세요. /skill-test나 다른 테스트 스킬을 사용하지 마세요.

결과를 스킬 디렉토리의 형제 디렉토리인 <skill-name>-workspace/에 넣으세요. 작업 공간 내에서 결과를 반복별로 정리하고(iteration-1/, iteration-2/ 등), 그 안에 각 테스트 케이스에 대한 디렉토리를 만드세요(eval-0/, eval-1/ 등). 모든 것을 미리 생성하지 말고 — 진행하면서 디렉토리를 만드세요.

1단계: 모든 실행을 동시에 시작 (스킬 포함 AND 기준)

각 테스트 케이스에 대해 동시에 두 개의 하위 에이전트를 시작하세요 — 하나는 스킬을 포함하고, 다른 하나는 포함하지 않습니다. 중요합니다: 스킬 포함 실행을 먼저 시작하고 나중에 기준선을 시작하지 마세요. 모든 것을 한 번에 시작하여 거의 동시에 완료되도록 하세요.

스킬 포함 실행:

다음 작업을 실행하세요:
- 스킬 경로: <path-to-skill>
- 작업: <eval prompt>
- 입력 파일: <eval files if any, 또는 "none">
- 출력 저장 위치: <workspace>/iteration-<N>/eval-<ID>/with_skill/outputs/
- 저장할 출력: <사용자가 중요하게 생각하는 것 — 예: ".docx 파일", "최종 CSV">

기준 실행 (동일한 프롬프트이지만, 기준선은 컨텍스트에 따라 다름):

  • 새 스킬 생성: 스킬 없음. 동일한 프롬프트, 스킬 경로 없음, without_skill/outputs/에 저장.
  • 기존 스킬 개선: 이전 버전. 편집하기 전에 shutil.copytree를 사용하여 스킬 디렉토리를 복사하여 스냅샷을 만듭니다(예: <workspace>/skill-snapshot/을 <skill-path>에서), 그런 다음 기준 하위 에이전트가 스냅샷을 가리키도록 합니다. old_skill/outputs/에 저장.

각 테스트 케이스에 대해 eval_metadata.json을 작성하세요(어설션은 지금 비워 둘 수 있습니다). 각 eval에 테스트 대상에 기반한 설명적인 이름을 지정하세요 — 단순히 "eval-0"이 아닙니다. 디렉토리 이름에도 이 이름을 사용하세요. 이 반복에서 새롭거나 수정된 eval 프롬프트를 사용하는 경우, 각 새 eval 디렉토리에 대해 이러한 파일을 생성하세요 — 이전 반복에서 가져온다고 가정하지 마세요.

{
  "eval_id": 0,
  "eval_name": "descriptive-name-here",
  "prompt": "사용자의 작업 프롬프트",
  "assertions": []
}

2단계: 실행이 진행되는 동안 어설션 초안 작성

실행이 완료될 때까지 기다리지 마세요 — 이 시간을 생산적으로 사용할 수 있습니다. 각 테스트 케이스에 대한 정량적 어설션을 초안으로 작성하고 사용자에게 설명하세요. 어설션이 이미 evals/evals.json에 존재하는 경우 검토하고 무엇을 확인하는지 설명하세요.

좋은 어설션은 객관적으로 검증 가능하고 설명적인 이름을 가지고 있어야 합니다 — 벤치마크 뷰어에서 명확하게 읽히므로 결과를 훑어보는 사람이 각각 무엇을 확인하는지 즉시 이해할 수 있습니다. 주관적인 스킬(글쓰기 스타일, 디자인 품질)은 정성적으로 평가하는 것이 더 좋습니다 — 인간의 판단이 필요한 것에 어설션을 강제로 적용하지 마세요.

초안이 작성되면 eval_metadata.json 파일과 evals/evals.json을 어설션으로 업데이트하세요. 또한 사용자에게 뷰어에서 무엇을 볼 수 있는지 설명하세요 — 정성적 출력과 정량적 벤치마크 모두.

3단계: 실행이 완료됨에 따라 타이밍 데이터 수집

각 하위 에이전트 작업이 완료되면 알림을 받지만, 토큰 수나 경과 시간은 포함되지 않습니다. 벽시계에서 직접 소요 시간을 측정하고, 하위 세션의 레코드 ~/.dsh/storages/session_projcache/sessions/<childId>.json에서 토큰 합계를 읽으세요(tokenUsage.val.totals — uncachedInputTokens, outputTokens, cacheReadTokens, cacheWriteTokens). 이 데이터를 실행 디렉토리의 timing.json에 즉시 저장하세요:

{
  "total_tokens": 84852,
  "duration_ms": 23332,
  "total_duration_seconds": 23.3
}

해당 세션 레코드가 없거나 토큰 사용량이 없는 경우, 숫자를 임의로 생성하지 말고 토큰 필드를 생략하세요. 일괄 처리하려고 하지 말고 각 알림이 도착할 때 처리하세요.

4단계: 평가, 집계 및 뷰어 실행

모든 실행이 완료되면:

  1. 각 실행 평가 — agents/grader.md를 읽고 각 어설션을 출력에 대해 평가하는 채점 하위 에이전트(또는 인라인 채점)를 시작하세요. 결과를 각 실행 디렉토리의 grading.json에 저장하세요. grading.json의 expectations 배열은 text, passed, evidence 필드를 사용해야 합니다(name/met/details 또는 다른 변형이 아님) — 뷰어는 이 정확한 필드 이름에 의존합니다. 프로그래밍 방식으로 확인할 수 있는 어설션의 경우, 눈으로 확인하는 대신 스크립트를 작성하고 실행하세요 — 스크립트가 더 빠르고, 더 안정적이며, 반복 간에 재사용할 수 있습니다.

  2. 벤치마크로 집계 — dsh-skill-creator 디렉토리에서 집계 스크립트를 실행하세요:

    python -m scripts.aggregate_benchmark <workspace>/iteration-N --skill-name <name>
    

    이 명령은 통과율, 시간, 토큰 정보가 포함된 benchmark.json과 benchmark.md를 생성합니다.

관련 스킬