새 콘텐츠 기여
Agent Harness Store에 새 Rule, Skill, Preset을 기여하는 방법.
파일 경로, 프론트매터 형식, 테스트, PR 제출까지.
파일 경로, 프론트매터 형식, 테스트, PR 제출까지.
언제 기여하는가
다음 상황에서 새 콘텐츠 기여를 고려하세요:
- 팀에서 반복적으로 같은 방식으로 작업하는 패턴이 생겼을 때 → Rule
- 여러 프로젝트에서 반복 실행하는 절차가 있을 때 → Skill
- 새 프로젝트 타입마다 같은 조합을 설치할 때 → Preset
새 Rule 추가
Rule
rules/<category>/<rule-id>.md
예: rules/security/sanitize-input.md, rules/naming-conventions/component-casing.md
Rule 파일 형식
---
id: my-new-rule
name: 새 규칙 이름
category: security # 기존 카테고리 중 하나
severity: must # must | should | consider
tags: [frontend, security]
description: 한 줄 설명 (TUI 목록에 표시)
---
# 새 규칙 이름
## 규칙
[규칙 본문 — Claude에게 자동 주입되는 제약]
## 이유
[왜 이 규칙이 필요한가]
## 예시
### ❌ 하지 말 것
\`\`\`typescript
// 잘못된 예
\`\`\`
### ✅ 할 것
\`\`\`typescript
// 올바른 예
\`\`\`
기존 카테고리
| 카테고리 | 설명 |
|---|---|
tech-stack | 기술 스택, 패키지 매니저, 명령어 |
architecture | FSD 경계, 계층 구조 |
workflow | TDD, cleanup, plan-first |
security | 비밀, PII, 인증, 접근제어 |
type-modeling | TypeScript/Python 타입 |
ui-styling-a11y | 디자인 토큰, 접근성 |
state-error-handling | 상태 소유권, 에러 경계 |
naming-conventions | 케이싱, 네이밍 |
version-control-language | 커밋, 언어 정책 |
guardrails | 보호 설정 파일, 생성 트리 |
dependencies | 패키지 재사용 정책 |
flask-architecture | Flask 앱 구조 |
persistence | DynamoDB, 데이터 접근 |
critic-loop | 자율 수정 루프 |
nextjs-boundaries-hydration | Next.js 서버/클라이언트 경계 |
새 카테고리가 필요하다면 PR description에 이유를 명확히 적어주세요. 가능하면 기존 카테고리를 사용하는 것을 권장합니다.
새 Skill 추가
Skill
skills/<category>/<skill-id>/SKILL.md
예: skills/qa-devops-collab/generate-audit-report/SKILL.md
SKILL.md 형식
---
id: my-new-skill
name: 새 스킬 이름
category: qa-devops-collab
slash_command: my-skill # Claude Code에서 /my-skill 로 호출
description: 한 줄 설명 (TUI 목록에 표시)
disable-model-invocation: false # true면 Claude 없이 실행
---
## When to invoke this skill
[이 스킬을 호출하는 상황 설명]
## Input
- param1: 설명
- param2: 설명 (optional)
## Steps
1. 첫 번째 단계
2. 두 번째 단계
- 세부 내용
3. 세 번째 단계
## Output
[기대되는 출력 설명]
Scaffolder (-init) 패턴
프로젝트별 커스터마이징이 필요한 스킬은 -init 패턴을 사용합니다:
my-skill-init/SKILL.md— 프로젝트 스캔 후 커스터마이징 정보 수집, 프로젝트별my-skill/SKILL.md생성my-skill/SKILL.md— -init이 생성한 프로젝트 전용 스킬 (프로젝트 레포에 체크인)
새 Preset 추가
Preset
presets/<preset-id>.yaml
예: presets/data-eng-harness.yaml
# presets/data-eng-harness.yaml
id: data-eng-harness
name: Data Engineering Harness
description: 데이터 엔지니어링 팀을 위한 규칙/스킬 번들
version: "1.0.0"
tags: [data, python, pipeline]
rule_refs:
- tech-stack/be-stack-and-commands # 기존 규칙 재사용
- security/no-hardcoded-secrets
- type-modeling/python-type-hints
# 추가 규칙들...
skill_refs:
- qa-devops-collab/generate-pytest-tests
- persistence/setup-local-datastore
# 추가 스킬들...
마켓플레이스 재빌드
새 콘텐츠를 추가한 후 마켓플레이스 빌드를 실행해야 Claude Code 플러그인에 반영됩니다:
cd agent-harness-store
python -m harness.cli build-marketplace
# 결과 확인
cat dist/marketplace.json | jq '.plugins | length'
cat dist/marketplace.json | jq '.plugins[].name'
기여 체크리스트
- 새 파일 생성 (rule/skill/preset) — 프론트매터 필수 필드 확인
- 기존 카테고리 적합성 확인 — 불필요한 카테고리 추가 피하기
- 예시 코드 포함 (Rule) 또는 Steps 구체화 (Skill)
- TUI에서 새 항목이 목록에 뜨는지 확인:
harness list - 설치 테스트:
harness install→ 새 항목 선택 →.agents/생성 확인 - 마켓플레이스 재빌드:
python -m harness.cli build-marketplace - Conventional Commit 형식으로 커밋:
feat(rules): 새 규칙 추가 - PR description에 변경 이유와 사용 예시 포함 (한국어)
주의: 기존 콘텐츠를 수정할 때 ID를 변경하면 이미 설치된 프로젝트의 manifest.json이 깨집니다. ID는 한 번 결정되면 유지하세요.
PR 리뷰 기준
| 항목 | 기준 |
|---|---|
| 규칙 명확성 | Claude가 모호성 없이 따를 수 있는 구체적 지침 |
| 예시 포함 | ❌/✅ 예시로 의도 명확화 |
| 중복 없음 | 기존 규칙/스킬과 겹치지 않는가 |
| 카테고리 적합 | 올바른 카테고리에 배치 |
| ID 명명 | kebab-case, 동사-명사 패턴 (예: sanitize-input) |
| 프론트매터 | 필수 필드 모두 존재 |