Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
},
"metadata": {
"description": "Personal Claude Code plugin collection with 24 specialized plugins. Codex 0.135 + Hermes Agent native — generated `.agents/plugins/marketplace.json` + per-plugin `.codex-plugin/plugin.json` (`scripts/sync-codex-manifests.mjs`) and Hermes `plugin.yaml` + `__init__.py` adapters (`scripts/sync-hermes-manifests.mjs`).",
"version": "2.7.2"
"version": "2.7.3"
},
"plugins": [
{
Expand Down Expand Up @@ -61,7 +61,7 @@
"name": "ml-toolkit",
"source": "./plugins/ml-toolkit",
"description": "ML/multimodal development principles, GPU parallel processing, Gradio CV apps, CV notebook generation, interactive CV data exploration",
"version": "1.4.3",
"version": "1.4.4",
"category": "development"
},
{
Expand Down Expand Up @@ -124,7 +124,7 @@
"name": "project-init",
"source": "./plugins/project-init",
"description": "Agent-harness project lifecycle. `new` — one-shot first-day bootstrap (interview, .claude/ scaffold, minimal CLAUDE.md, AGENTS.md with Codex GitHub cloud reviewer guidelines in general/ml/web variants, README/CHANGELOG seed, gh repo create + initial push) behind a hardened preflight guard that refuses a non-empty cwd. `wiring` — its inverse for existing repos: a read-only 14-axis setup diagnostic (FAIL / WARN / ASK / INFO / SKIP / OK) covering guidance files, .claude/rules paths: scoping defeated by @import, llm-wiki layout + staging backlog, Serena onboarding, memory posture, MCP duplicate registration, Codex CLI posture + AGENTS.md byte budget, spec homes, gws-sync, .tmp, core.hooksPath, .gitignore coverage. ASK answers persist to .claude/state/wiring.json. Shared read-only detector: scripts/project_state.sh.",
"version": "0.6.1",
"version": "0.6.2",
"category": "planning"
},
{
Expand Down Expand Up @@ -152,7 +152,7 @@
"name": "ppt-yeong-style",
"source": "./plugins/ppt-yeong-style",
"description": "yeong 스타일 강의·제안 덱 작성 규약 — ppt-master 빌드 엔진 위에 얹는 작성 레이어(엔진 자체가 아님). 스킬 3종: 메인 ppt-yeong-style(미감 시그니처 §0 'Editorial restraint, one committed accent'·md 소스 규약·작성 원칙 16종·밀도 리듬·역할 기반 색·codex-image vs SVG 경계·앱 UI 실물 강제·레버 조합 차별화·윤문·렌더 QA + references/ 6종 + 주입 페이로드) + lecture-deck(강의 덱 운영 — 실습 handouts 생성 규약·프롬프트 카드·placeholder→실캡처 스크린샷 슬롯·리넘버링 4중 동기화·전사 회고 루프·강사 노트 태그 + cc-common 47장 레퍼런스) + deck-review(관점별 리뷰 서브에이전트 4종 audience-fit·story-flow·fact-check·design-qa 병렬 오케스트레이션 + codex:rescue 교차 리뷰, 페르소나는 파라미터). 의존 스킬은 있으면 사용, 없으면 생략 + 설치 제안 문구(ppt-master만 prerequisite-stop). ppt-master로 그냥 'PPT 만들기'와 달리 yeong 규약이 필요할 때.",
"version": "0.9.3",
"version": "0.9.4",
"category": "design"
},
{
Expand Down
2 changes: 1 addition & 1 deletion plugins/ml-toolkit/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "ml-toolkit",
"version": "1.4.3",
"version": "1.4.4",
"description": "ML/multimodal development principles, GPU parallel processing, Gradio CV apps, CV notebook generation, interactive CV data exploration"
}
2 changes: 1 addition & 1 deletion plugins/ml-toolkit/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ml-toolkit",
"version": "1.4.3",
"version": "1.4.4",
"description": "ML/multimodal development principles, GPU parallel processing, Gradio CV apps, CV notebook generation, interactive CV data exploration",
"author": {
"name": "YoungjaeDev"
Expand Down
2 changes: 1 addition & 1 deletion plugins/ml-toolkit/plugin.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: ml-toolkit
version: "1.4.3"
version: "1.4.4"
description: "ML/multimodal development principles, GPU parallel processing, Gradio CV apps, CV notebook generation, interactive CV data exploration"
author: "YoungjaeDev"
kind: standalone
Original file line number Diff line number Diff line change
Expand Up @@ -314,8 +314,11 @@ HF_HOME=/path/to/huggingface/cache

#### Using venv
```bash
# Create virtual environment
python -m venv .venv
# Create virtual environment (runs before activation, so it resolves against the
# system PATH: macOS 12.3+ has no `python`, and a python.org Windows install has
# no `python3` -- only `python` and the `py` launcher)
python3 -m venv .venv # Linux/Mac
# py -3 -m venv .venv # Windows

# Activate
source .venv/bin/activate # Linux/Mac
Expand Down
2 changes: 1 addition & 1 deletion plugins/ml-toolkit/skills/gpu-parallel-pipeline/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ else
SKILL_DIR="$HOME/.hermes/plugins/ml-toolkit/skills/gpu-parallel-pipeline" # Hermes default install
fi
[ -d "$SKILL_DIR" ] || { echo "gpu-parallel-pipeline: skill dir not resolved" >&2; exit 1; }
python "$SKILL_DIR/scripts/check_gpu_memory.py"
python3 "$SKILL_DIR/scripts/check_gpu_memory.py"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Windows에서도 사용 가능한 Python 인터프리터를 선택하세요

Windows CUDA 환경에서 python.org 설치본처럼 python/py만 제공하고 python3.exe는 없는 경우, 메모리 계획 단계가 스크립트 실행 전에 command not found로 중단됩니다. 기존 venv 문서 위치와 별개로 이 실행 경로도 이번 커밋에서 python에서 python3로 바뀌었으므로, python3·python·py -3를 순서대로 탐지하거나 현재 런타임의 인터프리터를 사용하도록 분기하세요.

AGENTS.md reference: AGENTS.md:L285-L287

Useful? React with 👍 / 👎.

```

**Rule of thumb:**
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
#!/usr/bin/env python
#!/usr/bin/env python3
"""GPU memory check utility for parallel pipeline planning.

Reports available GPU memory and recommends workers per GPU based on model size.

Usage:
python check_gpu_memory.py
python check_gpu_memory.py --model-memory 5.0 # Specify model memory in GB
python3 check_gpu_memory.py
python3 check_gpu_memory.py --model-memory 5.0 # Specify model memory in GB
"""

from __future__ import annotations
Expand Down
2 changes: 1 addition & 1 deletion plugins/ppt-yeong-style/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ppt-yeong-style",
"version": "0.9.3",
"version": "0.9.4",
"description": "yeong 스타일 강의·제안 덱 작성 규약 — ppt-master 빌드 엔진 위에 얹는 작성 레이어(엔진 자체가 아님). 스킬 3종: 메인 ppt-yeong-style(미감 시그니처 §0 'Editorial restraint, one committed accent'·md 소스 규약·작성 원칙 16종·밀도 리듬·역할 기반 색·codex-image vs SVG 경계·앱 UI 실물 강제·레버 조합 차별화·윤문·렌더 QA + references/ 6종 + 주입 페이로드) + lecture-deck(강의 덱 운영 — 실습 handouts 생성 규약·프롬프트 카드·placeholder→실캡처 스크린샷 슬롯·리넘버링 4중 동기화·전사 회고 루프·강사 노트 태그 + cc-common 47장 레퍼런스) + deck-review(관점별 리뷰 서브에이전트 4종 audience-fit·story-flow·fact-check·design-qa 병렬 오케스트레이션 + codex:rescue 교차 리뷰, 페르소나는 파라미터). 의존 스킬은 있으면 사용, 없으면 생략 + 설치 제안 문구(ppt-master만 prerequisite-stop). ppt-master로 그냥 'PPT 만들기'와 달리 yeong 규약이 필요할 때.",
"skills": [
"./skills/ppt-yeong-style",
Expand Down
2 changes: 1 addition & 1 deletion plugins/ppt-yeong-style/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "ppt-yeong-style",
"version": "0.9.3",
"version": "0.9.4",
"description": "yeong 스타일 강의·제안 덱 작성 규약 — ppt-master 빌드 엔진 위에 얹는 작성 레이어(엔진 자체가 아님). 스킬 3종: 메인 ppt-yeong-style(미감 시그니처 §0 'Editorial restraint, one committed accent'·md 소스 규약·작성 원칙 16종·밀도 리듬·역할 기반 색·codex-image vs SVG 경계·앱 UI 실물 강제·레버 조합 차별화·윤문·렌더 QA + references/ 6종 + 주입 페이로드) + lecture-deck(강의 덱 운영 — 실습 handouts 생성 규약·프롬프트 카드·placeholder→실캡처 스크린샷 슬롯·리넘버링 4중 동기화·전사 회고 루프·강사 노트 태그 + cc-common 47장 레퍼런스) + deck-review(관점별 리뷰 서브에이전트 4종 audience-fit·story-flow·fact-check·design-qa 병렬 오케스트레이션 + codex:rescue 교차 리뷰, 페르소나는 파라미터). 의존 스킬은 있으면 사용, 없으면 생략 + 설치 제안 문구(ppt-master만 prerequisite-stop). ppt-master로 그냥 'PPT 만들기'와 달리 yeong 규약이 필요할 때.",
"author": {
"name": "YoungjaeDev"
Expand Down
2 changes: 1 addition & 1 deletion plugins/ppt-yeong-style/plugin.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: ppt-yeong-style
version: "0.9.3"
version: "0.9.4"
description: "yeong 스타일 강의·제안 덱 작성 규약 — ppt-master 빌드 엔진 위에 얹는 작성 레이어(엔진 자체가 아님). 스킬 3종: 메인 ppt-yeong-style(미감 시그니처 §0 'Editorial restraint, one committed accent'·md 소스 규약·작성 원칙 16종·밀도 리듬·역할 기반 색·codex-image vs SVG 경계·앱 UI 실물 강제·레버 조합 차별화·윤문·렌더 QA + references/ 6종 + 주입 페이로드) + lecture-deck(강의 덱 운영 — 실습 handouts 생성 규약·프롬프트 카드·placeholder→실캡처 스크린샷 슬롯·리넘버링 4중 동기화·전사 회고 루프·강사 노트 태그 + cc-common 47장 레퍼런스) + deck-review(관점별 리뷰 서브에이전트 4종 audience-fit·story-flow·fact-check·design-qa 병렬 오케스트레이션 + codex:rescue 교차 리뷰, 페르소나는 파라미터). 의존 스킬은 있으면 사용, 없으면 생략 + 설치 제안 문구(ppt-master만 prerequisite-stop). ppt-master로 그냥 'PPT 만들기'와 달리 yeong 규약이 필요할 때."
author: "YoungjaeDev"
kind: standalone
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,14 @@ b_hits=$(grep -REl '>[^<]*\[[^]]*\][^<]*<' "$SVG_DIR" 2>/dev/null || true)
if [ -n "$b_hits" ]; then
fail=1
echo " FAIL — bracket placeholder(s) leaked into rendered text:"
for f in $b_hits; do
# Iterate on newline boundaries: `for f in $b_hits` word-splits on IFS and
# glob-expands, so an absolute DECK_ROOT containing a space arrives here as two
# fragments, the grep below fails on both, and its stderr is discarded -- the
# FAIL detail degrades to half-paths with (0) counts. The gate itself is
# unaffected (fail=1 is already set above); this is the report, which is what
# the user reads to find the leak.
printf '%s\n' "$b_hits" | while IFS= read -r f; do
[ -n "$f" ] || continue
c=$(grep -Eo '>[^<]*\[[^]]*\][^<]*<' "$f" 2>/dev/null | wc -l | tr -d ' ')
echo " $f ($c)"
done
Expand Down
2 changes: 1 addition & 1 deletion plugins/project-init/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "project-init",
"version": "0.6.1",
"version": "0.6.2",
"description": "Agent-harness project lifecycle. `new` — one-shot first-day bootstrap (interview, .claude/ scaffold, minimal CLAUDE.md, AGENTS.md with Codex GitHub cloud reviewer guidelines in general/ml/web variants, README/CHANGELOG seed, gh repo create + initial push) behind a hardened preflight guard that refuses a non-empty cwd. `wiring` — its inverse for existing repos: a read-only 14-axis setup diagnostic (FAIL / WARN / ASK / INFO / SKIP / OK) covering guidance files, .claude/rules paths: scoping defeated by @import, llm-wiki layout + staging backlog, Serena onboarding, memory posture, MCP duplicate registration, Codex CLI posture + AGENTS.md byte budget, spec homes, gws-sync, .tmp, core.hooksPath, .gitignore coverage. ASK answers persist to .claude/state/wiring.json. Shared read-only detector: scripts/project_state.sh.",
"author": {
"name": "YoungjaeDev"
Expand Down
2 changes: 1 addition & 1 deletion plugins/project-init/.codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "project-init",
"version": "0.6.1",
"version": "0.6.2",
"description": "Agent-harness project lifecycle. `new` — one-shot first-day bootstrap (interview, .claude/ scaffold, minimal CLAUDE.md, AGENTS.md with Codex GitHub cloud reviewer guidelines in general/ml/web variants, README/CHANGELOG seed, gh repo create + initial push) behind a hardened preflight guard that refuses a non-empty cwd. `wiring` — its inverse for existing repos: a read-only 14-axis setup diagnostic (FAIL / WARN / ASK / INFO / SKIP / OK) covering guidance files, .claude/rules paths: scoping defeated by @import, llm-wiki layout + staging backlog, Serena onboarding, memory posture, MCP duplicate registration, Codex CLI posture + AGENTS.md byte budget, spec homes, gws-sync, .tmp, core.hooksPath, .gitignore coverage. ASK answers persist to .claude/state/wiring.json. Shared read-only detector: scripts/project_state.sh.",
"author": {
"name": "YoungjaeDev"
Expand Down
28 changes: 26 additions & 2 deletions plugins/project-init/references/gh-repo-create-flow.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,8 +66,20 @@ The `--license <name>` flag of `gh repo create` can auto-generate a LICENSE file

```bash
# Auto-seed the license
# ${VISIBILITY,,} is a Bash 4 expansion; macOS /bin/bash is 3.2 and fails with
# "bad substitution". Normalize with the POSIX tr helper the executable
# procedure already uses (new-procedure.md Phase 4/6), and match on a token
# rather than passing the raw answer straight into a CLI flag.
to_lower() { printf '%s' "$1" | tr '[:upper:]' '[:lower:]'; }
case "$(to_lower "$VISIBILITY")" in
*private*) VIS_FLAG="private" ;;
*public*) VIS_FLAG="public" ;;
*internal*) VIS_FLAG="internal" ;;
*) echo "unknown visibility: $VISIBILITY" >&2; exit 1 ;;
esac

gh repo create "${OWNER}/${PROJECT_NAME}" \
--${VISIBILITY,,} \
--${VIS_FLAG} \
--description "${ONE_LINER}" \
--license "${LICENSE}" \
--source=. --remote=origin --push
Expand All @@ -88,8 +100,20 @@ git add .claude/ CLAUDE.md AGENTS.md README.md CHANGELOG.md
git commit -m "chore: bootstrap project skeleton via project-init"

# 3. gh repo create + auto push
# ${VISIBILITY,,} is a Bash 4 expansion; macOS /bin/bash is 3.2 and fails with
# "bad substitution". Normalize with the POSIX tr helper the executable
# procedure already uses (new-procedure.md Phase 4/6), and match on a token
# rather than passing the raw answer straight into a CLI flag.
to_lower() { printf '%s' "$1" | tr '[:upper:]' '[:lower:]'; }
case "$(to_lower "$VISIBILITY")" in
*private*) VIS_FLAG="private" ;;
*public*) VIS_FLAG="public" ;;
*internal*) VIS_FLAG="internal" ;;
*) echo "unknown visibility: $VISIBILITY" >&2; exit 1 ;;
esac

gh repo create "${OWNER}/${PROJECT_NAME}" \
--${VISIBILITY,,} \
--${VIS_FLAG} \
--description "${ONE_LINER}" \
--source=. --remote=origin --push
```
Expand Down
23 changes: 16 additions & 7 deletions plugins/project-init/references/new-procedure.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,19 @@ if [ -z "$PLUGIN_ROOT" ]; then
# Best-effort Codex cache lookup. Order: latest version directory under the
# configured marketplace name; user override via $CODEX_PLUGIN_CACHE.
cache_root="${CODEX_PLUGIN_CACHE:-$HOME/.codex/plugins/cache}"
# Prefer `sort -V` (GNU) for proper semver ordering; macOS / BSD sort lacks
# -V and would fail silently, so fall back to plain lexicographic sort.
# Picks fine for typical X.Y.Z under 10 — covers the realistic version range
# the plugin cache will ever hold for a single plugin.
# Sort on the version basename, not the full path: with two marketplace dirs a
# name like zeta/project-init/0.4.0 would otherwise outrank alpha/project-init/0.6.0.
# `sort -V` orders X.Y.Z properly and is present on GNU and on Apple's FreeBSD
# sort (10.13+), but the probe stays for userlands that predate it; the fallback
# is a numeric dotted-field sort, because plain lexicographic ranks 0.6.0 above
# 0.10.0 and would resolve to an older cached version. Same form as
# plugins/github-dev/skills/cr-fix/SKILL.md, whose regression test guards it.
if sort -V </dev/null >/dev/null 2>&1; then
candidate=$(ls -1d "$cache_root"/*/project-init/* 2>/dev/null | sort -V | tail -1)
candidate=$(ls -1d "$cache_root"/*/project-init/* 2>/dev/null \
| awk -F/ '{print $NF "\t" $0}' | sort -V | tail -1 | cut -f2-)
else
candidate=$(ls -1d "$cache_root"/*/project-init/* 2>/dev/null | sort | tail -1)
candidate=$(ls -1d "$cache_root"/*/project-init/* 2>/dev/null \
| awk -F/ '{print $NF "\t" $0}' | sort -t. -k1,1n -k2,2n -k3,3n | tail -1 | cut -f2-)
fi
[ -n "$candidate" ] && [ -d "$candidate" ] && PLUGIN_ROOT="$candidate"
fi
Expand All @@ -61,7 +66,11 @@ CWD=$(pwd)
DIR_NAME=$(basename "$CWD")
HAS_GIT=$([ -d .git ] && echo "yes" || echo "no")
HAS_CLAUDE=$([ -d .claude ] && echo "yes" || echo "no")
HAS_CODE=$(find . -maxdepth 2 -type f \( -name "*.py" -o -name "*.ts" -o -name "*.js" -o -name "*.go" -o -name "*.rs" -o -name "*.java" \) 2>/dev/null | head -1 | wc -l)
# yes/no like its neighbours, not a count: BSD `wc -l` right-pads its output, so
# the old `| head -1 | wc -l` form yielded " 1" here while HAS_GIT and
# HAS_CLAUDE were clean tokens. `-print -quit` also stops at the first match
# instead of walking the whole tree.
HAS_CODE=$([ -n "$(find . -maxdepth 2 -type f \( -name "*.py" -o -name "*.ts" -o -name "*.js" -o -name "*.go" -o -name "*.rs" -o -name "*.java" \) -print -quit 2>/dev/null)" ] && echo "yes" || echo "no")

# Collect GitHub owner candidates
bash "$PLUGIN_ROOT/scripts/infer-github-context.sh"
Expand Down
Loading