Skip to content
Back to skills

Skill Creator

ASecurity

Markdown 스킬을 생성하는 메타 스킬. SKILL.md의 frontmatter와 본문, Progressive Disclosure와 create_skill의 절차를 다룬다. Use when: 새 스킬 추가, read_memory_file용 기술 규칙 확인, references나 templates가 포함된 스킬 생성이 필요할 때.

  • 264 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 3, 2026
ai-agentspythonrustgo

Security analysis

A100/100

Pro scans all 4 files and shows the line behind each finding

Scanned October 2, 2026

npx -y skills add xuiltul/animaworks --skill skill-creator --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Skill Creator?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Skill Creator
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/xuiltul-skill-creator-f11ebd6f/badge)](https://www.skillsdirectory.com/skills/xuiltul-skill-creator-f11ebd6f)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: skill-creator
description: >-
  Markdown 스킬을 생성하는 메타 스킬. SKILL.md의 frontmatter와 본문, Progressive Disclosure와 create_skill의 절차를 다룬다.
  Use when: 새 스킬 추가, read_memory_file용 기술 규칙 확인, references나 templates가 포함된 스킬 생성이 필요할 때.
---


# skill-creator

## 구현과의 대응

| 역할 | 모듈 |
|------|------------|
| `read_memory_file` 도구(스킬/절차의 상대 경로를 지정하여 본문을 읽음) | `ToolHandler` 경유(기억 트리 내 파일) |
| 시스템 프롬프트 내 스킬 카탈로그(경로 목록·예산 포함) | 프롬프트 구축(예: `skills/foo/SKILL.md`, `common_skills/bar/SKILL.md`, `procedures/baz.md`) |
| `create_skill` 도구(디렉터리 생성) | `core/tooling/skill_creator.py` |
| 스키마(파라미터 정의) | `core/tooling/schemas/skill.py` |
| 프론트매터 분석(행 기반·본문 쪽의 `---`에서 잘못 분할하지 않음) | `core/memory/frontmatter.py`의 `parse_frontmatter()` |
| 메타데이터 유형·추출(`SkillMeta`, 절차 경로 추정) | `core/schemas.py`, `core/memory/skill_metadata.py`의 `SkillMetadataService.extract_skill_meta()` |
| 설명문 기반 스킬 메타 추출(카탈로그·검색 보조) | `core/memory/skill_metadata.py`의 `SkillMetadataService` 등 |
| `*-tool` 본문의 게이트 행 제거 | `core/tooling/guide.py`의 `filter_gated_from_guide()` |
| 허용 도구 집합(permissions) | `core/config/models.load_permissions()` + `core/tooling/permissions.get_permitted_tools()` |

## 스킬의 종류와 경로

스킬과 절차는 **별도 레이아웃**으로 관리된다.

| 종류 | 경로 | 비고 |
|------|------|------|
| 개인 스킬 | `skills/{name}/SKILL.md` | 디렉터리 + `SKILL.md` |
| 공통 스킬 | `common_skills/{name}/SKILL.md` | 런타임에서는 `~/.animaworks/common_skills/` 등 |
| 절차(procedure) | `procedures/{name}.md` | **플랫 1개 파일**. 디렉터리가 아님 |

`create_skill`가 생성하는 것은 위 표의 **스킬**(개인 또는 공통)뿐. 절차는 `write_memory_file` 등에서 `procedures/*.md`로 별도 작성한다.

### symlink를 두지 않음(2026-09-04 규칙화)

`common_skills/`이나 `skills/`의 하위에, 외부(`~/.claude/skills` 등)를 향한 **symlink로 "재게시"하지 않는다**. `read_memory_file`은 실체의 위치에서 경계를 검사하므로, symlink 대상이 외부라면 "Path traversal detected"로 읽을 수 없다. 게다가 카탈로그는 그 symlink를 native 스킬로 올리고, 동명의 external 후보를 숨기므로 Anima에는 읽을 수 없는 경로만 제시된다.

- 호스트 측 스킬(`~/.claude/skills`, `~/.codex/skills` 등)은 설정 `skills.external_roots`에서 자동으로 주입되고, `external/<engine>/<name>/SKILL.md`로 읽을 수 있다. 공통 스킬에 재게시할 필요는 없다.
- 굳이 공통 스킬로 두고 싶다면 실체 파일을 복사하고, 정본을 어느 한쪽으로 정한다.

## read_memory_file에서의 스킬 로드

스킬·절차의 본문은 **`read_memory_file(path="...")`**으로 기억 트리 상대 경로를 지정하여 읽는다. 시스템 프롬프트의 스킬 카탈로그에 이용 가능한 경로(예: `skills/foo/SKILL.md`, `common_skills/bar/SKILL.md`, `procedures/baz.md`)가 표시된다.

- **개인 스킬**: `skills/{name}/SKILL.md`
- **공통 스킬**: `common_skills/{name}/SKILL.md`
- **절차**: `procedures/{name}.md`

`path`은 Anima 디렉터리 기준의 상대 경로(공유 트리는 `common_skills/` 등의 프리픽스)로 전달한다.

### 프론트매터와 본문

SKILL.md 선두의 YAML은 `core/memory/frontmatter.parse_frontmatter()`으로 제거하고 읽는다. **구분선 `---`은 행 단위로만** 인식되므로, YAML 값이나 본문 중에 `---`가 포함되어도 잘못 분할되기 어렵다.

### 본문의 플레이스홀더(`*-tool` 가이드)

스킬 본문에서는 `{{now_local}}`, `{{anima_name}}`, `{{anima_dir}}` 등의 플레이스홀더가 사용되는 경우가 있다. 외부 도구용 스킬(이름이 `*-tool`로 끝남)은 허용 설정에 따라 `animaworks-tool` 행의 게이트 처리가 이루어진다(`core/tooling/guide.py`의 `filter_gated_from_guide()` 등).

### 카탈로그와 description

스킬 카탈로그의 **Level 1**에서는 `name` + `description`이 예산 내에 실린다. 스킬 수가 많을수록 생략되기 쉬우므로, **`description`는 짧고 구체적으로** 유지한다. 전문이 필요할 때는 카탈로그의 경로를 `read_memory_file`으로 연다.

**레거시 호환**: `description`가 비어 있을 때, `extract_skill_meta()`는 본문의 **`## 概要` 섹션의 첫 번째 비어 있지 않은 행**을 폴백으로 사용한다. 새 스킬에서는 프론트매터를 정본으로 한다.

### 레이아웃상의 주의

개인 `skills/` 바로 아래의 **`*.md`(플랫 단일 파일)**은 카탈로그나 메타 추출의 대상이 될 수 있지만, **권장 경로는 `skills/{name}/SKILL.md`**. 운영상으로는 `create_skill`에 의한 디렉터리 형식을 정본으로 한다.

## 스킬 파일의 구조

SKILL.md는 YAML 프론트매터와 Markdown 본문으로 구성된다.
프론트매터에는 `name`와 `description`를 **필수**로 한다.

`create_skill`는 `allowed_tools`뿐만 아니라 신뢰·출처·분류·라우팅 보조의 메타데이터도 작성할 수 있다. 필수는 `name` / `description` / `body`이고, 임의 키는 용도가 명확할 때만 사용한다.

```yaml
---
name: skill-name
description: >-
  スキルが行うことの簡潔な説明(三人称)。
  Use when: このスキルを使う具体的な場面をカンマ区切りで列挙する。
allowed_tools:
  - read_memory_file
  - web_search
trust_level: trusted
source:
  type: anima
  origin: manual
category: communication
use_when:
  - drafting partner emails
trigger_phrases:
  - draft a partner email
negative_phrases:
  - personal diary
domains:
  - gmail
routing_examples:
  - Prepare a reply draft for the bank thread
---
```

주요 임의 필드: `allowed_tools`, `trust_level`, `source_type`, `source_origin`, `category`, `promotion_status`, `skill_policy`, `use_when`, `trigger_phrases`, `negative_phrases`, `domains`, `routing_examples`. `create_skill`의 인자 이름에서는 `source.type`는 `source_type`, `source.origin`는 `source_origin`로 전달한다.

### `description`의 역할

**새 스킬의 기술**은 Agent Skills 표준에 따르고, **`Use when:`**으로 이용 시나리오를 쓴다(상세는 `references/description_guide.md`). 작성 후에는 **`python scripts/lint_skill.py`**으로 형식을 검증할 수 있다.

- **`read_memory_file`로 경로를 지정하여 읽은 경우**: 파일이 존재하면 **description의 매치와 관계없이** 본문을 얻을 수 있다(프론트매터 처리·`*-tool` 관련 취급은 로드 경로에 의존).
- **시스템 프롬프트의 스킬 카탈로그**: Level 1로 `name` + `description`이 예산과 함께 실린다. 전문은 실리지 않으므로, 절차가 필요하면 **`read_memory_file(path="skills/.../SKILL.md")` 등**으로 연다.

**레거시 호환**: `description`가 비어 있을 때, `extract_skill_meta()`는 본문 선두 부근의 **`## 概要` 섹션의 첫 번째 비어 있지 않은 행**을 description의 폴백으로 사용한다. 새 스킬에서는 프론트매터를 정본으로 하고, `## 概要` 의존은 피한다.

**description 작성법**(**Use when:** 패턴·lint)은 `references/description_guide.md`을 참조.

## Progressive Disclosure(단계적 공개)

스킬의 정보는 대체로 다음 단계로 공개된다.

| Level | 내용 | 표시 시점 |
|-------|------|----------------|
| Level 1 | `name` + `description` | 시스템 프롬프트의 스킬 카탈로그(예산 내)의 재료 |
| Level 2 | body(본문) | 에이전트가 `read_memory_file(path="skills/.../SKILL.md")` 등으로 로드했을 때 |
| Level 3 | 외부 리소스 | 본문의 지침에 따라, 필요 시 `read_memory_file` 등으로 `references/`나 `templates/`를 읽음 |

Level 1은 카탈로그에서 컨텍스트를 소비하기 쉬우므로 **description은 간결하게**. Level 2는 절차의 핵심. Level 3에서 장대한 참조를 분리한다.

※ Priming의 스킬 본문 주입 경로는 폐지됨. 본문이 필요하면 **`read_memory_file`**으로 스킬 경로를 연다.

## 작성 절차

### Step 1: 히어링

사용자의 요구를 이해한다. 다음을 확인한다:

- 무엇을 자동화·절차화하고 싶은가
- 대상은 개인 스킬인가 공통 스킬인가(절차라면 `procedures/`로의 별도 설계)
- **Use when:**에 쓸 이용 시나리오(언제 이 스킬을 선택하는가)

### Step 2: 설계

다음을 결정한다:

- **name**: 스킬명(케밥 케이스, 예: `my-skill`). 외부 도구 가이드라면 `*-tool` 규약을 검토
- **description**: 3인칭 요약 + **`Use when:`** 행(`references/description_guide.md`을 참조)
- **body**: 절차의 구성(섹션 분할). 필요하면 `{{now_local}}` 등의 플레이스홀더를 이용
- **references** / **templates**: 필요하면 외부 파일의 설계
- **allowed_tools**: 권장 도구를 한정하고 싶을 때만
- **trust/source/category/policy/routing**: 신뢰 수준, 출처, 분류, prompt policy, `use_when` / `trigger_phrases` / `negative_phrases` / `domains` / `routing_examples`를 필요에 따라 설계

### Step 3: 작성

`create_skill` 도구로 스킬을 디렉터리 구조로 작성한다.

**기본(개인 스킬)**:

```
create_skill(skill_name="{name}", description="{description}", body="{body}")
```

**공통 스킬**:

```
create_skill(skill_name="{name}", description="{description}", body="{body}", location="common")
```

**references와 templates를 포함하는 경우**:

```
create_skill(
  skill_name="{name}",
  description="{description}",
  body="{body}",
  location="personal",
  references=[
    {"filename": "description_guide.md", "content": "..."},
  ],
  templates=[
    {"filename": "skill_template.md", "content": "..."},
  ],
  allowed_tools=["read_memory_file", "write_memory_file"]
)
```

| 파라미터 | 필수 | 설명 |
|-----------|------|------|
| skill_name | ✓ | 스킬명(케밥 케이스). `/`, `\`, `..` 불가 |
| description | ✓ | frontmatter description(**Use when:** 권장. `references/description_guide.md`) |
| body | ✓ | SKILL.md본문(Markdown). 빌트인 치환 대상 |
| location | | `personal`(기본값) 또는 `common` |
| references | | `references/`에 배치하는 파일군. `[{filename, content}, ...]` |
| templates | | `templates/`에 배치하는 파일군. `[{filename, content}, ...]` |
| allowed_tools | | frontmatter의 `allowed_tools`(임의) |
| trust_level | | `trusted` / `community` 등의 신뢰 수준 |
| source_type / source_origin | | 출처(예: `anima`, `manual`, `auto_created`) |
| category | | 분류 태그 |
| promotion_status | | `probation` / `trusted` 등의 승격 상태 |
| skill_policy | | prompt 주입 방침(`use_mode`, injection계 설정) |
| use_when / trigger_phrases / negative_phrases / domains / routing_examples | | 스킬 라우터의 후보 선택을 돕는 보조 메타데이터 |

`references` / `templates`의 `filename`에 경로 성분은 포함하지 않는다. `_validate_filename()`으로 부모 디렉터리 밖으로 해석되지 않는지 확인하고, 부정이면 **조용히 스킵**(그 파일은 만들어지지 않음).

※ 새 스킬에는 반드시 `create_skill`을 사용할 것. `write_memory_file`으로 `skills/foo.md` 같은 **바로 아래의 단일 파일**만 만드는 방법은 **비권장**. 이 형식은 **`read_memory_file(path="skills/foo/SKILL.md")`에서는 열 수 없으므로**, 권장은 `skills/foo/SKILL.md`의 디렉터리 형식.

※ 절차는 `procedures/{name}.md`(플랫 1개 파일). 프론트매터는 스킬과 동일하게 `name` / `description`(+임의 `allowed_tools`)를 권장.

### Step 4: 확인

- **개인 스킬**: `read_memory_file(path="skills/{name}/SKILL.md")`으로 내용 확인
- **공통 스킬**: `read_memory_file(path="common_skills/{name}/SKILL.md")` 등, 카탈로그에 표시된 경로로 확인
- **절차**: `read_memory_file(path="procedures/{name}.md")`로 해결할 수 있는지 확인
- **`python scripts/lint_skill.py`**으로 `SKILL.md`의 frontmatter / description을 검증(임의지만 권장)

## 체크리스트

저장 전에 다음을 확인하세요:

- [ ] `---`로 시작하고 `---`로 닫히는 YAML 프론트매터가 있다
- [ ] `name` 필드가 있다
- [ ] `description` 필드가 있다
- [ ] description에 **`Use when:`**가 있고, 도메인 고유의 구체적인 표현을 포함한다 (기존 `「」` 열거는 사용하지 않음)
- [ ] **description이 도메인 고유하고 구체적**이다 ("관리를 수행한다" "확인한다" 같은 일반적인 표현을 피하고, 도구 이름·작업 이름·대상을 명시)
- [ ] body에 구체적인 절차가 기재되어 있다
- [ ] 신규에서는 프론트매터에 `description`을 두고, **`## 概要`에만 설명을 의존하지 않는다** (`## 発動条件` 등의 기존 템플릿 형식도 피함)
- [ ] 임의 메타데이터(`trust_level`, `source`, `category`, `skill_policy`, `use_when`, `trigger_phrases`, `negative_phrases`, `domains`, `routing_examples`)는 실제 용도와 일치한다
- [ ] 스킬은 `create_skill`에서 `{name}/SKILL.md`를 생성한다 (절차는 `procedures/*.md`에서 의도대로인지)

## 템플릿

본 스킬에 포함된 `templates/skill_template.md`을 참조하세요. 또는 다음을 복사하여 사용:

```markdown
---
name: {スキル名}
description: >-
  {具体的な対象}の{具体的な操作}スキル(三人称の短い要約)。
  Use when: {利用シーンをカンマ区切り}
---

# {スキル名}

## 手順

1. ...
2. ...

## 注意事項

- ...
```

## 주의사항

- 스킬은 Markdown 절차서이며, Python 코드(도구)와는 다르다
- 프론트매터의 필수 필드는 `name`와 `description`
- `create_skill`는 신뢰·출처·분류·policy·routing 보조 메타데이터도 설정할 수 있다. 불필요한 키는 늘리지 말고, 설명문만으로 충분한 경우에는 단순하게 유지한다
- body가 너무 길어지면 컨텍스트를 압박하므로 150줄 이내를 기준으로 한다
- 외부 리소스 참조(Level 3)는 `references/`을 활용하여 본문을 간결하게 유지한다

Files in this skill

  • SKILL.md5.5 KB
  • references/description_guide.md2.1 KB
  • scripts/lint_skill.py5 KB
  • templates/skill_template.md195 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.