Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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
11 changes: 10 additions & 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,16 @@ 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"

# No single interpreter name works everywhere: macOS 12.3+ dropped `python`, and
# a python.org Windows install ships `python` plus the `py` launcher but no
# `python3`. Windows matters here because CUDA is actually available there.
# Indexed array (Bash 2+, so 3.2-safe) so `py -3` stays two words under quoting.
if command -v python3 >/dev/null 2>&1; then PY=(python3)
elif command -v python >/dev/null 2>&1; then PY=(python)
elif command -v py >/dev/null 2>&1; then PY=(py -3)
Comment on lines +135 to +137

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 호환성을 검증한 Python 인터프리터를 선택하세요

python3가 3.8이고 python이 PyTorch를 설치한 3.10+ 환경을 가리키는 시스템에서는 첫 분기가 무조건 선택되어, check_gpu_memory.pyfloat | None 문법을 파싱하지 못하고 메모리 계획이 중단됩니다. help command가 설명하듯 command -v는 명령의 설명/위치만 확인하므로 버전이나 실행 가능성은 보장하지 않습니다. 기존 코멘트 이후 추가된 우선순위 선택기가 이 검증 없이 후보를 확정한다는 것이 새 근거이므로, 각 후보에 3.10+ 및 import torch probe를 실행해 통과한 인터프리터를 선택하거나 스크립트를 지원 최저 버전 문법으로 낮추세요.

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

Useful? React with 👍 / 👎.

else echo "gpu-parallel-pipeline: no Python interpreter on PATH" >&2; exit 1; fi
"${PY[@]}" "$SKILL_DIR/scripts/check_gpu_memory.py"
```

**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