helplisted
Install: claude install-skill gitayg/productizer
# Productizer — what you can type
!`set -e; D="${CLAUDE_PLUGIN_ROOT}/skills"; [ -d "$D" ] || D="$(git rev-parse --show-toplevel 2>/dev/null)/plugins/productizer/skills"; if [ ! -d "$D" ]; then echo "cannot find the plugin's skills directory - this list would be from memory, and memory is what it exists to avoid."; exit 0; fi; V="$(basename "$(dirname "$D")" 2>/dev/null)"; python3 - "$D" <<'PY'
import io, os, re, sys
d = sys.argv[1]
rows = []
for name in sorted(os.listdir(d)):
f = os.path.join(d, name, 'SKILL.md')
if not os.path.isfile(f):
continue
try:
head = io.open(f, encoding='utf-8', errors='replace').read(4000)
except (IOError, OSError):
rows.append((name, '(could not be read - present, but unreadable)', '')); continue
nm = re.search(r'^name:\s*(\S+)\s*$', head, re.M)
ds = re.search(r'^description:\s*"(.*?)"\s*$', head, re.M | re.S)
hint = re.search(r'^argument-hint:\s*"(.*?)"\s*$', head, re.M)
auto = not re.search(r'^disable-model-invocation:\s*true\s*$', head, re.M)
first = (ds.group(1).split('. ')[0] + '.') if ds else '(no description)'
rows.append(((nm.group(1) if nm else name), first, hint.group(1) if hint else '', auto))
if not rows:
print(' no commands found in %s' % d)
for r in rows:
nm, first, hint = r[0], r[1], r[2]
auto = r[3] if len(r) > 3 else False
print(' /productizer:%-10s %s%s' % (nm, hint, ' [auto]' if auto else ''))
print(' %s' % first)
print('')
print(' %d c