npx claudepluginhub unicorn-plugins/dmap --plugin dmapThis skill uses the workspace's default tool permissions.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Optimizes cloud costs on AWS, Azure, GCP via rightsizing, tagging strategies, reserved instances, spot usage, and spending analysis. Use for expense reduction and governance.
๊ฐ๋ฐ ์๋ฃ๋ DMAP ํ๋ฌ๊ทธ์ธ์ GitHub ์๊ฒฉ ์ ์ฅ์์ ๋ฐฐํฌํ๊ณ , ์ฌ์ฉ์๊ฐ ๋ง์ผํ๋ ์ด์ค๋ฅผ ํตํด ํ๋ฌ๊ทธ์ธ์ ๋ฐ๋ก ์ค์นํ ์ ์๋๋ก ์๋ดํจ.
์ฌ์ฉ์๊ฐ /dmap:publish ํธ์ถ ์ ๋๋ develop-plugin ์คํฌ์ Phase 4 ์๋ฃ ํ ์ฐ๊ฒฐ ์.
"๋ฐฐํฌ", "publish", "GitHub์ ์ฌ๋ ค์ค", "ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก" ํค์๋ ๊ฐ์ง ์.
CLAUDE.md์์ ์๋ ํ๊ฒฝ๋ณ์ ๋ก๋ํจ. ์์ผ๋ฉด '/dmap:team-panner'๋ฅผ ๋จผ์ ์ํํ๋๋ก ์๋ดํ๊ณ ์ข ๋ฃ.
| ๋ฌธ์ | ๊ฒฝ๋ก | ์ฉ๋ |
|---|---|---|
| GitHub ๊ณ์ ๊ฐ์ด๋ | {DMAP_PLUGIN_DIR}/resources/guides/github/github-account-setup.md | ๊ณ์ ์์ฑ ์๋ด |
| GitHub ํ ํฐ ๊ฐ์ด๋ | {DMAP_PLUGIN_DIR}/resources/guides/github/github-token-guide.md | PAT ์์ฑ ์๋ด |
| GitHub Organization ๊ฐ์ด๋ | {DMAP_PLUGIN_DIR}/resources/guides/github/github-organization-guide.md | Organization ์์ฑ ์๋ด |
| create_repo ๋๊ตฌ | {DMAP_PLUGIN_DIR}/resources/tools/customs/git/create_repo.py | GitHub ์ ์ฅ์ ์์ฑ ๋ฐ Push |
| ๋จ๊ณ | ๋ถ์คํ ์คํฌ | ์ฉ๋ |
|---|---|---|
| Step 1 (์ธ์ฆ ์ ๋ณด ์์ง) | /oh-my-claudecode:security-review | ํ ํฐ ์ ์ฅ ๋ฐ .gitignore ์ฒ๋ฆฌ ๋ณด์ ๊ฒ์ฆ |
| Step 2.5 (์๊ฒฉ URL ๊ฒ์ฆ) | /oh-my-claudecode:security-review | ์๊ฒฉ URL ํ ํฐ ๋ ธ์ถ ์๋ ๊ฐ์ง ๋ฐ ์์ |
| Step 2~3 (Push + ์๋ฃ) | /oh-my-claudecode:ultraqa | ๋ฐฐํฌ ๊ฒฐ๊ณผ ๊ฒ์ฆ (์ ์ฅ์ ์ ๊ทผ, README ํ์ธ) |
์ฌ์ฉ์์๊ฒ GitHub ์ธ์ฆ ์ ๋ณด๋ฅผ ์์งํจ.
AskUserQuestion ๋๊ตฌ๋ก ๋ค์ ์ ๋ณด๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ฌธ์:
GitHub ๊ณ์ ๋ณด์ ์ฌ๋ถ
{DMAP_PLUGIN_DIR}/resources/guides/github/github-account-setup.md ์ฐธ์กฐ ์๋ดGitHub Username ์ ๋ ฅ ์์ฒญ
Personal Access Token (PAT) ์ ๋ ฅ ์์ฒญ
{DMAP_PLUGIN_DIR}/resources/guides/github/github-token-guide.md ์ฐธ์กฐ ์๋ดrepo (์ ์ฒด)Organization ์ฌ์ฉ ์ฌ๋ถ
{DMAP_PLUGIN_DIR}/resources/guides/github/github-organization-guide.md ์ฐธ์กฐ ์๋ดํ ํฐ ์ ์ฅ
{PLUGIN_DIR}/.dmap/secrets/ ๋๋ ํ ๋ฆฌ ์์ฑ{PLUGIN_DIR}/.dmap/secrets/git-token-{plugin-name}.env ํ์ผ์ ์ ์ฅ:
GITHUB_USERNAME={username}
GITHUB_TOKEN={token}
GITHUB_OWNER={owner}
.gitignore์ .dmap/secrets/ ํจํด์ด ํฌํจ๋์ด ์๋์ง ํ์ธ, ์์ผ๋ฉด ์ถ๊ฐ{DMAP_PLUGIN_DIR}/resources/tools/customs/git/create_repo.py ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ GitHub ์ ์ฅ์ ์์ฑ + ๋ก์ปฌ Git ์ด๊ธฐํ + Push๋ฅผ ํ๋ฒ์ ์ํํจ.
gh CLI ์ค์น๊ฐ ๋ถ์ํ๋ฉฐ, Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ฌ์ฉ.
.gitignore ์กด์ฌ ํ์ธ (develop-plugin์์ ์ด๋ฏธ ์์ฑ๋จ)create_repo.py ์คํ:
python {DMAP_PLUGIN_DIR}/resources/tools/customs/git/create_repo.py \
--name {repo-name} \
--desc "{plugin description}" \
--token {PAT} \
--dir {plugin-directory}
--org {org} ์ต์
์ถ๊ฐgit add .
git commit -m "Update: {plugin-name} DMAP plugin"
git push
create_repo.py๊ฐ ์ํํ๋ ์์ : ์ ์ฅ์ ์กด์ฌ ์ฌ๋ถ ํ์ธ โ ์๊ฒฉ ์ ์ฅ์ ์์ฑ โgit initโgit remote add originโ ์ด๊ธฐ ์ปค๋ฐ โgit push -u origin main
{DMAP_PLUGIN_DIR}/resources/tools/customs/git/create_repo.py ๋๋ ์๋ Push ์๋ฃ ํ ์ฆ์ ์คํ:
git remote -v
ghp_, github_pat_, gho_, ghu_ ๋ฑ):
https://[^@]+@github\.com/git remote set-url origin https://github.com/{owner}/{repo}.git
โ ๏ธ ์๊ฒฉ URL์์ ํ ํฐ์ด ๋ฐ๊ฒฌ๋์ด ์ ๊ฑฐํ์ต๋๋ค. ํด๋น ํ ํฐ์ ์ฆ์ ํ๊ธฐํ์ธ์. GitHub โ Settings โ Developer settings โ Personal access tokens โ ํด๋น ํ ํฐ ์ญ์
Git Push ์๋ฃ ํ ๋ค์ ๋ด์ฉ์ ์ถ๋ ฅํจ.
์ถํ ๋ฉ์์ง (๊ฐ์ฑ์ ์ผ๋ก):
๐ ์ถํํฉ๋๋ค!
๋น์ ์ ํ๋ฌ๊ทธ์ธ '{plugin-name}'์ด ์ธ์์ ์ฒซ ๋ฐ์ ๋ด๋์์ต๋๋ค.
์์ด๋์ด์์ ์์ํด ์๊ตฌ์ฌํญ ์ ์, ์ค๊ณ, ๊ฐ๋ฐ, ๊ทธ๋ฆฌ๊ณ ๋ฐฐํฌ๊น์ง โ
๋ชจ๋ ์ฌ์ ์ ํจ๊ป ํด์ ๊ธฐ๋ปค์ต๋๋ค.
์ด์ ๋น์ ์ด ํ๋ฝํ๋ ๋๊ตฌ๋ ์ด ํ๋ฌ๊ทธ์ธ์ ์ค์นํ๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค.
ํ๋ฌ๊ทธ์ธ ๋ฑ๋ก ๋ฐฉ๋ฒ ์๋ด:
๐ฆ ํ๋ฌ๊ทธ์ธ ์ค์น ๋ฐฉ๋ฒ (์ฌ์ฉ์์๊ฒ ๊ณต์ ํ์ธ์)
# 1. GitHub ์ ์ฅ์๋ฅผ ๋ง์ผํ๋ ์ด์ค๋ก ๋ฑ๋ก
claude plugin marketplace add {owner}/{repo-name}
# 2. ํ๋ฌ๊ทธ์ธ ์ค์น
claude plugin install {plugin-name}@{marketplace-name}
- plugin-name์ .claude-plugin/plugin.json์ name ํ๋์ ๋์ผ
- marketplace-name์ .claude-plugin/marketplace.json์ name ํ๋์ ๋์ผ
# 3. ์ค์น ํ์ธ
claude plugin list
README ์ฐธ์กฐ ์๋ด:
๐ ์์ธํ ์ค์นยท์ฌ์ฉ๋ฒ์ README.md๋ฅผ ์ฐธ๊ณ ํ์ธ์:
https://github.com/{owner}/{repo-name}/blob/main/README.md
๋ชจ๋ ๋จ๊ณ์์ AskUserQuestion ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์ ์ ๋ ฅ์ ์์งํจ. ํนํ Step 1์ ์ธ์ฆ ์ ๋ณด๋ ๋ฏผ๊ฐ ์ ๋ณด์ด๋ฏ๋ก ์์ ํ ์ ์ฅ์ ๋ณด์ฅํจ.
| ๋ฌธ์ | ํด๊ฒฐ ๋ฐฉ๋ฒ |
|---|---|
| Python ๋ฏธ์ค์น | Python 3.7+ ์ค์น ์๋ด: https://python.org/ |
| Git ๋ฏธ์ค์น | Git ์ค์น ์๋ด: https://git-scm.com/ |
| ์ธ์ฆ ์คํจ | ํ ํฐ ๊ถํ(repo) ํ์ธ, ํ ํฐ ์ฌ์์ฑ ์๋ด |
| ์ ์ฅ์ ์ด๋ฏธ ์กด์ฌ | ๋ค๋ฅธ ์ด๋ฆ ์ฌ์ฉ ๋๋ ๊ธฐ์กด ์ ์ฅ์ ํ์ฉ (์ ๋ฐ์ดํธ ๋ฐฐํฌ) |
| ์ ์ฅ์ ์์ฑ ์คํจ | Organization ๊ถํ ํ์ธ, ์ด๋ฆ ์ค๋ณต ํ์ธ |
| Push ์คํจ | ์๊ฒฉ ์ ์ฅ์ URL ํ์ธ, ์ธ์ฆ ํ ํฐ ํ์ธ |
| # | ๊ท์น |
|---|---|
| 1 | GitHub ์ธ์ฆ ์ ๋ณด(username, PAT, owner)๋ฅผ ๋ฐ๋์ ์์ง ํ ์งํ |
| 2 | ํ ํฐ์ {PLUGIN_DIR}/.dmap/secrets/ ๋๋ ํ ๋ฆฌ์ ์ ์ฅํ๊ณ {PLUGIN_DIR}/.gitignore ๋ฑ๋ก ํ์ธ |
| 3 | ์ ์ฅ์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๋จผ์ ํ์ธํ์ฌ ๋ฉฑ๋ฑ์ฑ ๋ณด์ฅ |
| 4 | ์๋ฃ ๋ฉ์์ง์ ํ๋ฌ๊ทธ์ธ ์ค์น ๋ฐฉ๋ฒ(๋ง์ผํ๋ ์ด์ค ๋ฑ๋ก ๋ช ๋ น) ํฌํจ |
| # | ๊ธ์ง ์ฌํญ |
|---|---|
| 1 | ์ธ์ฆ ํ ํฐ์ ๋ก๊ทธ/์ถ๋ ฅ์ ๋ ธ์ถ ๊ธ์ง |
| 2 | ์ฌ์ฉ์ ํ์ธ ์์ด ๊ธฐ์กด ์ ์ฅ์๋ฅผ ๋ฎ์ด์ฐ์ง ์์ |
| 3 | {PLUGIN_DIR}/.dmap/secrets/ ๋๋ ํ ๋ฆฌ๋ฅผ Git์ ์ปค๋ฐํ์ง ์์ |
| 4 | ์๊ฒฉ URL์ ํ ํฐ์ ํฌํจํ ์ฑ๋ก ์ ์ฅํ์ง ์์ (Step 2.5 ์๋ ๊ฒ์ฆ ํ์) |
{PLUGIN_DIR}/.dmap/secrets/ ์ ์ฅ ๋ฐ {PLUGIN_DIR}/.gitignore ํ์ธ ๋ก์ง์ด ์๋๊ฐ{DMAP_PLUGIN_DIR}/resources/tools/customs/git/create_repo.py ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฅ์ ์์ฑ ๋ฐ Push๋ฅผ ์ํํ๋๊ฐ