Communitygithub.com

CoWork 워드프레스 전문가

우선순위별 플러그인 설정 및 콘텐츠 대체 안내가 포함된 SETUP.md를 생성하고, build.json에 NL 특화 메타데이터를 업데이트합니다.

CoWork 워드프레스 전문가란 무엇인가요?

이 스킬은 워드프레스 사이트 빌드 프로세스에서 `build-content` 이후, ZIP 패키징 전에 실행되어 사용자에게 사이트 가져오기 후 따라야 할 설정 가이드(`SETUP.md`)를 생성하고, 빌드 메타데이터(`build.json`)를 업데이트합니다. 주요 기능으로는 설치된 플러그인, 테마, 생성된 페이지/글 수를 기반으로 'Critical(필수)', 'Important(중요)', 'Optional(선택)' 우선순위로 정리된 작업 목록을 생성합니다. 각 플러그인에 대해 Claude가 자체 지식을 활용해 단계별 설정 지침을 생성하며, NL_PROMPT 문맥을 분석하여 사이트 유형(예: 사진 포트폴리오 vs 레스토랑)에 따라 최적의 우선순위를 결정합니다. 또한, 빌드 결과를 JSON 형식으로 기록하여 후속 작업(예: 배포 스크립트)에 활용할 수 있도록 합니다. 이 스킬은 Claude Code, Cursor, Codex와 같은 AI 에이전트 도구와 함께 사용하도록 설계되었으며, WordPress Expert 플러그인과 CoWork 빌드 시스템의 일부로 작동합니다.

지원 대상✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/dr-robert-li/cowork-wordpress-expert/tree/HEAD/skills/build-setup

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

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

문서

빌드 설정 스킬

SETUP.md — 사용자의 가져오기 후 설정 및 콘텐츠 대체 안내서 — 를 생성하고, build.json에 NL 특화 메타데이터를 업데이트합니다. 이 스킬은 build-content 이후, ZIP 패키징 전에 실행됩니다.

입력 변수 (build-theme 및 build-content에 의해 설정됨):

변수출처설명
BUILD_DIRbuild-scaffold빌드 작업 디렉토리의 절대 경로
NL_PROMPTCOMMAND.md 섹션 1원래 자연어 사이트 설명
THEME_SLUGbuild-theme설치된 테마 슬러그
THEME_NAMEbuild-theme사람이 읽을 수 있는 테마 이름
THEME_VERSIONbuild-theme설치된 테마 버전 문자열
THEME_INSTALLEDbuild-theme불리언 — 테마가 성공적으로 설치되었으면 true
INSTALLED_PLUGINSbuild-content성공적으로 설치된 플러그인의 slug:name:version 배열
FAILED_PLUGINSbuild-content설치 또는 활성화에 실패한 슬러그 배열
PAGES_CREATEDbuild-content생성된 페이지 수 (정수)
POSTS_CREATEDbuild-content생성된 글 수 (정수)
MENU_ASSIGNEDbuild-content불리언 — 내비게이션 메뉴가 테마 위치에 할당되었으면 true
MENU_LOCATIONbuild-content사용된 테마 위치 이름 (할당되지 않았으면 빈 문자열)

섹션 1: SETUP.md 생성

설치된 플러그인, 테마, 페이지 수, NL 프롬프트 등 전체 컨텍스트를 사용하여 $BUILD_DIR/SETUP.md를 작성합니다. 이렇게 하면 사용자가 사이트를 Local WP로 가져온 직후 바로 따라할 수 있는 우선순위별 설정 가이드가 생성됩니다.

echo "[Build] SETUP.md 생성 중..."

# ── 설치된 항목 섹션 빌드 ────────────────────────────────────────

SETUP_FILE="$BUILD_DIR/SETUP.md"

# SETUP.md 쓰기 시작
cat > "$SETUP_FILE" << 'SETUP_HEADER'
# 설정 가이드

이 가이드는 Local WP로 사이트를 가져온 후 새 WordPress 사이트를 구성하는 방법을 안내합니다.
항목은 우선순위에 따라 정렬되어 있습니다. 먼저 필수(Critical) 단계를 완료하고, 그런 다음
중요(Important) 및 선택(Optional) 단계를 자신의 속도에 맞춰 진행하세요.

---

## 설치된 항목

SETUP_HEADER

# 테마 항목
echo "- **테마:** ${THEME_NAME} (v${THEME_VERSION})" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"

# 플러그인 목록
if [ ${#INSTALLED_PLUGINS[@]} -gt 0 ]; then
  echo "- **플러그인:**" >> "$SETUP_FILE"
  for plugin_entry in "${INSTALLED_PLUGINS[@]}"; do
    # 형식: slug:name:version
    PLUGIN_SLUG=$(echo "$plugin_entry" | cut -d: -f1)
    PLUGIN_NAME=$(echo "$plugin_entry" | cut -d: -f2)
    PLUGIN_VER=$(echo "$plugin_entry" | cut -d: -f3)
    # Claude가 플러그인 슬러그와 이름을 기반으로 각 플러그인의 목적을 한 줄로 설명
    PLUGIN_PURPOSE="<${PLUGIN_NAME}의 기능에 대한 한 줄 설명 — Claude의 플러그인 지식을 바탕으로 생성됨>"
    echo "  - **${PLUGIN_NAME}** (v${PLUGIN_VER}) — ${PLUGIN_PURPOSE}" >> "$SETUP_FILE"
  done
  echo "" >> "$SETUP_FILE"
fi

# 실패한 플러그인 (있는 경우)
if [ ${#FAILED_PLUGINS[@]} -gt 0 ]; then
  echo "- **설치에 실패한 플러그인:**" >> "$SETUP_FILE"
  for slug in "${FAILED_PLUGINS[@]}"; do
    echo "  - ${slug} — 빌드 중 설치가 시도되었지만 실패했습니다" >> "$SETUP_FILE"
  done
  echo "" >> "$SETUP_FILE"
fi

다음으로, 우선순위별 작업 목록을 작성합니다. 이는 AI 판단 작업입니다. Claude는 각 플러그인의 설정 워크플로우에 대한 지식을 바탕으로 실제 단계별 지침을 생성하며, NL 프롬프트 컨텍스트를 사용하여 이 특정 사이트에 가장 중요한 것이 무엇인지 결정합니다.

# ── 다음에 할 일 섹션 빌드 ────────────────────────────────────────

cat >> "$SETUP_FILE" << 'SETUP_NEXT'
---

## 다음에 할 일 (우선순위 순서)

SETUP_NEXT

# ── 필수(Critical) 항목 ────────────────────────────────────────────
echo "### 필수" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"

STEP_NUM=1

# 설정이 필요한 각 설치된 플러그인에 대해 Claude가 전체 WordPress 관리자 탐색 경로를 포함한
# 단계별 지침을 생성합니다.
# WPForms Lite 예시 패턴:
#
#   echo "${STEP_NUM}. **WPForms 설정 — 연락처 양식 만들기**" >> "$SETUP_FILE"
#   cat >> "$SETUP_FILE" << 'EOF'
#      이동: **WPForms > 새로 추가**
#      단계:
#      1. "템플릿 선택"을 클릭하고 **간단한 문의 양식** 선택
#      2. "템플릿 사용" 클릭 — 양식 빌더가 열립니다
#      3. (선택 사항) 왼쪽 패널에서 필드를 드래그하여 추가하거나 제거
#      4. 오른쪽 상단에서 **저장** 클릭
#      5. **페이지 > 문의 > 편집**으로 이동
#      6. 새 블록 추가, "WPForms" 검색 후 WPForms 블록 선택
#      7. 드롭다운에서 방금 만든 양식 선택
#      8. **업데이트**를 클릭하여 페이지 저장
#   EOF
#   STEP_NUM=$((STEP_NUM + 1))

# Claude는 INSTALLED_PLUGINS의 모든 플러그인에 대해 동등한 블록을 생성합니다.
# 사용자 설정이 필요한 플러그인만 해당됩니다. 설정 없이 작동하는 플러그인(예:
# 자동으로 활성화되는 캐싱 플러그인)은 중요(Important) 아래에 문서화하거나
# 작업이 필요하지 않은 경우 생략할 수 있습니다.

# ── 연락처 페이지 플레이스홀더 교체 (항상 필수) ────────────────────
echo "${STEP_NUM}. **연락처 페이지 플레이스홀더 정보 교체**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'CONTACT_STEP'
   이동: **페이지 > 연락처 > 편집**
   다음 플레이스홀더 콘텐츠를 실제 세부 정보로 교체:
   - 페이지 제목의 가상 비즈니스 이름
   - 가상 주소 (예: "서울특별시 강남구 테헤란로 123")
   - 가상 전화번호
   - 가상 이메일 주소
   - 가상 영업 시간 또는 위치 세부 정보

CONTACT_STEP
STEP_NUM=$((STEP_NUM + 1))

# ── 중요(Important) 항목 ───────────────────────────────────────────
echo "" >> "$SETUP_FILE"
echo "### 중요" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"

# 소개 페이지 콘텐츠 교체
echo "${STEP_NUM}. **소개 페이지 콘텐츠 업데이트**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'ABOUT_STEP'
   이동: **페이지 > 소개 > 편집**
   다음 플레이스홀더 콘텐츠 교체:
   - 가상 비즈니스/개인 이름 및 약력
   - 가상 팀원 설명
   - 플레이스홀더 헤드샷 또는 프로필 이미지 (미디어 블록을 통해 직접 업로드)
   - 가상 자격 증명, 이력 또는 창업 스토리

ABOUT_STEP
STEP_NUM=$((STEP_NUM + 1))

# 홈페이지 콘텐츠 교체
echo "${STEP_NUM}. **홈페이지 히어로 및 소개 콘텐츠 업데이트**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'HOME_STEP'
   이동: **페이지 > 홈 > 편집**
   다음 플레이스홀더 콘텐츠 교체:
   - 히어로 제목 및 태그라인 (비즈니스 또는 제안에 맞게 구체적으로 작성)
   - 히어로 배경 또는 추천 이미지 (커버/이미지 블록을 통해 업로드)
   - 본인이 하는 일을 설명하는 소개 단락
   - 모든 클릭 유도 버튼 레이블 및 링크

HOME_STEP
STEP_NUM=$((STEP_NUM + 1))

# 사이트 유형에 따른 추가 페이지 — Claude가 PAGES_CREATED에 있는 각 페이지에 대해
# 홈, 소개, 연락처 외의 페이지별 가이드를 생성합니다. 예:
#
# 포트폴리오 페이지:
#   echo "${STEP_NUM}. **포트폴리오 페이지에 실제 작업물 추가**" >> "$SETUP_FILE"
#   ...
#   STEP_NUM=$((STEP_NUM + 1))
#
# 서비스 페이지:
#   echo "${STEP_NUM}. **서비스 페이지를 실제 제공 서비스로 업데이트**" >> "$SETUP_FILE"
#   ...
#   STEP_NUM=$((STEP_NUM + 1))
#
# Claude는 NL_PROMPT 컨텍스트를 사용하여 추가 페이지가 무엇인지와
# 해당 페이지에 포함된 플레이스홀더 콘텐츠를 파악한 후, 대상 가이드를 작성합니다.

# 중요(Important)에 해당하는 추가 플러그인 설정 (필수는 아님)
# Claude는 설정이 필요하지만 설정하지 않아도 사이트가 중단되지는 않는 플러그인에 대한
# 단계를 여기에 추가합니다 (예: SEO 플러그인 설정, 갤러리 설정)

# ── 선택(Optional) 항목 ────────────────────────────────────────────
echo "" >> "$SETUP_FILE"
echo "### 선택" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"

# 샘플 게시물 교체
echo "${STEP_NUM}. **샘플 콘텐츠를 대체할 자체 블로그 게시물 추가**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'POSTS_STEP'
   샘플 게시물은 테마가 블로그 콘텐츠를 렌더링하는 방법을 보여줍니다. 이들은
   귀하의 사이트 주제와 관련된 현실적이지만 가상의 주제를 사용합니다.
   이동: **게시물 > 모든 게시물**에서 기존 샘플을 편집하거나 새 게시물을 추가합니다.
   자체 콘텐츠를 게시한 후에는 샘플 게시물을 삭제할 수 있습니다.

POSTS_STEP
STEP_NUM=$((STEP_NUM + 1))

# 플레이스홀더 이미지 교체
echo "${STEP_NUM}. **플레이스홀더 이미지를 직접 찍은 사진으로 교체**" >> "$SETUP_FILE"
cat >> "$SETUP_FILE" << 'IMAGES_STEP'
   단색 플레이스홀더 이미지는 빌드 중에 레이아웃 의도를 보여주기 위해 생성되었습니다.
   이를 직접 이미지로 교체하세요:
   이동: **미디어 > 새로 추가**에서 사진 업로드
   그런 다음 각 페이지/게시물을 편집하고 플레이스홀더 이미지 블록을 업로드한 파일로 바꿉니다.

IMAGES_STEP
STEP_NUM=$((STEP_NUM + 1))

# 메뉴 할당 (자동 할당되지 않은 경우 - FSE 블록 테마 엣지 케이스)
if [ "$MENU_ASSIGNED" = "false" ] || [ "$MENU_ASSIGNED" = "" ]; then
  echo "${STEP_NUM}. **사이트 편집기에서 내비게이션 메뉴 할당**" >> "$SETUP_FILE"
  cat >> "$SETUP_FILE" << 'MENU_STEP'
   내비게이션 메뉴는 빌드 중에 생성되었지만 테마 위치에 자동으로 할당되지는
   않았습니다 (블록 테마의 경우 예상되는 동작입니다).
   이동: **디자인 > 편집기 > 내비게이션**
   "기본 메뉴"를 선택하고 헤더 내비게이션 영역에 배치하세요.

MENU_STEP
  STEP_NUM=$((STEP_NUM + 1))
fi

# SETUP.md 마무리
echo "---" >> "$SETUP_FILE"
echo "" >> "$SETUP_FILE"
echo "*WordPress Expert 플러그인 — CoWork 빌드 시스템에서 생성됨*" >> "$SETUP_FILE"

SETUP_ITEM_COUNT=$((STEP_NUM - 1))
echo "[Build] SETUP.md 생성됨 (${SETUP_ITEM_COUNT}개 설정 항목)"

Claude 구현 참고 사항:

  • 플러그인 지침은 AI 판단 작업입니다. INSTALLED_PLUGINS의 각 플러그인에 대해 Claude는 해당 플러그인의 설정 워크플로우에 대한 지식을 사용하여 자세한 단계별 지침을 생성합니다. 지침에는 전체 WP 관리자 탐색 경로가 포함되어야 합니다 (예: "WPForms > 새로 추가 > 문의 양식 템플릿 선택 > 저장 > 숏코드 복사 > 문의 페이지 편집 > 숏코드 블록 추가").
  • 컨텍스트가 우선순위를 결정합니다. Claude는 NL_PROMPT를 읽어 어떤 설정 항목이 필수(Critical)인지 중요(Important)인지 판단합니다. 사진 포트폴리오 사이트의 경우 포트폴리오 이미지를 교체하는 것이 필수입니다. 레스토랑의 경우 예약 플러그인을 설정하는 것이 필수입니다.
  • 페이지별 적용 범위. build-content에서 생성된 모든 페이지는 해당 페이지에 포함된 플레이스홀더 콘텐츠에 대한 구체적인 안내와 함께 전용 항목을 갖습니다.
  • 일반적인 지침 없음. 모든 안내는 플러그인과 사이트 유형에 따라 구체적이어야 합니다. "플러그인을 설정하세요"와 같은 일반적인 조언이 아닙니다.

섹션 2: build.json NL 메타데이터 업데이트

기존 build.json (build-scaffold 섹션 6에서 생성)을 읽고 NL 관련 필드를 추가합니다. build-mcp 섹션 4에서 설정된 것과 동일한 Python3 JSON 구문 분석 패턴을 사용합니다.

echo "[Build] build.json을 NL 메타데이터로 업데이트 중..."

BUILD_JSON="$BUILD_DIR/build.json"

# JSON 직렬화를 위한 배열 빌드
INSTALLED_JSON=""
for plugin_entry in "${INSTALLED_PLUGINS[@]}"; do
  PLUGIN_SLUG=$(echo "$plugin_entry" | cut -d: -f1)
  PLUGIN_NAME=$(echo "$plugin_entry" | cut -d: -f2)
  PLUGIN_VER=$(echo "$plugin_entry" | cut -d: -f3)
  if [ -n "$INSTALLED_JSON" ]; then
    INSTALLED_JSON="${INSTALLED_JSON},"
  fi
  INSTALLED_JSON="${INSTALLED_JSON}{\"slug\":\"${PLUGIN_SLUG}\",\"name\":\"${PLUGIN_NAME}\",\"version\":\"${PLUGIN_VER}\",\"installed\":true}"
done

FAILED_JSON=""
for slug in "${FAILED_PLUGINS[@]}"; do
  if [ -n "$FAILED_JSON" ]; then
    FAILED_JSON="${FAILED_JSON},"
  fi
  FAILED_JSON="${FAILED_JSON}\"${slug}\""
done

# 임시 파일에 Python 스크립트 쓰기 (build-content 이미지 생성기와 동일한 패턴)
NL_META_SCRIPT="/tmp/update_build_json_$$.py"

cat > "$NL_META_SCRIPT" << PYEOF
import json, sys

build_file = sys.argv[1]
nl_prompt = sys.argv[2]
theme_slug = sys.argv[3]
theme_name = sys.argv[4]
theme_version = sys.argv[5]
theme_installed = sys.argv[6] == 'true'
pages_created = int(sys.argv[7])
posts_created = int(sys.argv[8])
menu_assigned = sys.argv[9] == 'true'
installed_json = sys.argv[10]
failed_json = sys.argv[11]

with open(build_file) as f:
    data = json.load(f)

data['mode'] = 'nl'
data['nl_prompt'] = nl_prompt
data['theme'] = {
    'slug': theme_slug,
    'name': theme_name,
    'version': theme_version,
    'installed': theme_installed
}
data['plugins'] = json.loads('[' + installed_json + ']') if installed_json else []
data['content'] = {
    'pages_created': pages_created,
    'posts_created': posts_created,
    'menu_assigned': menu_assigned
}
if failed_json:
    data['failed_plugins'] = json.loads('[' + failed_json + ']')

with open(build_file, 'w') as f:
    json.dump(data, f, indent=2)

print('[Build] build.json에 NL 메타데이터 업데이트됨')
PYEOF

python3 "$NL_META_SCRIPT" \
  "$BUILD_JSON" \
  "$NL_PROMPT" \
  "$THEME_SLUG" \
  "$THEME_NAME" \
  "$THEME_VERSION" \
  "${THEME_INSTALLED:-true}" \
  "$PAGES_CREATED" \
  "$POSTS_CREATED" \
  "${MENU_ASSIGNED:-false}" \
  "$INSTALLED_JSON" \
  "$FAILED_JSON"

# 임시 스크립트 정리
rm -f "$NL_META_SCRIPT"

NL 메타데이터 업데이트 후 build.json:

{
  "build_id": "nl-photography-portfolio-20260220-143022",
  "mode": "nl",
  "nl_prompt": "a portfolio site for a freelance photographer",
  "wp_version": "6.7",
  "php_version": "8.2",
  "site_url": "http://localhost",
  "site_title": "a portfolio site for a freelance photographer",
  "created_at": "2026-02-20T14:30:22Z",
  "theme": {
    "slug": "blocksy",
    "name": "Blocksy",
    "version": "2.0.50",
    "installed": true
  },
  "plugins": [
    { "slug": "envira-gallery-lite", "name": "Envira Gallery Lite", "version": "1.9.0", "installed": true },
    { "slug": "wpforms-lite", "name": "WPForms Lite", "version": "1.9.0", "installed": true }
  ],
  "content": {
    "pages_created": 4,
    "posts_created": 3,
    "menu_assigned": false
  },
  "failed_plugins": [],
  "mcp_adapter": {
    "included": true,
    "activated": true,
    "version": "0.4.1"
  }
}

섹션 3: 빌드 요약 확장

추가

…

[번역을 위해 잘림]

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

관련 스킬