Claude Code, Skill
skills
44 skills: a clean-prose engine with an offline linter, wrappers for viral posts, essays, cold email and landing copy, and orchestrators that carry a job from research question to published carousel or reel.
Compatibility: Not stated.
Grade B
Minor issues only, no Medium or High. Worth a quick look at the findings below before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
PERMISSION_DELETE_FILES NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST SECRETS_PATH_DOTENV INSTALL_DOCUMENTED_INSTALLER SECRETS_ENV_READ OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
Why this grade
- PERMISSION_DELETE_FILES Low
Contains a call that can delete files.
common/runners/cctv_overlay.py, line 74
probe = subprocess.run(["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries", - NETWORK_NO_FIXED_HOST Low
Makes a network call whose host is not written as a fixed address.
install.sh, line 118
require_cmd curl tar - NETWORK_UNNAMED_HOST Low
Calls a fixed host that the description does not name.
install.sh, line 118
require_cmd curl tar - SECRETS_PATH_DOTENV Low
Mentions a .env file.
common/runners/errors.py, line 19
f"Set them in your shell (.zshrc/.bashrc) or source a .env file." - INSTALL_DOCUMENTED_INSTALLER Note
Documentation shows an installer that pipes a download into a shell.
README.md, line 116
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash - SECRETS_ENV_READ Note
Reads an environment variable whose name contains KEY, SECRET, TOKEN, PASSWORD or CREDENTIAL.
common/runners/keysfile.py, line 23
KEYS_FILE = Path(os.environ.get("SKILLS_KEYS_FILE", str(Path.home() / ".skills.env"))) - OBFUSCATION_FILE_OVER_READ_CAP Note
A file was over the read cap and was not fully read.
CHANGELOG.md, line 1
# Changelog - OBFUSCATION_FILE_CAP_REACHED Note
The 400 file cap was reached before every file was read.
CHANGELOG.md, line 1
# Changelog
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
common/runners/cctv_overlay.py, line 74
probe = subprocess.run(["ffprobe", "-v", "error", "-select_streams", "v:0", "-show_entries",
common/runners/cctv_overlay.py, line 81
reader = subprocess.Popen([ffmpeg_bin, "-loglevel", "error", "-i", str(video), "-f", "rawvideo",
common/runners/cctv_overlay.py, line 83
writer = subprocess.Popen([ffmpeg_bin, "-y", "-loglevel", "error", "-f", "rawvideo", "-pix_fmt", "rgb24",
Show more
common/runners/ffmpeg.py, line 106
out = subprocess.run(
common/runners/ffmpeg.py, line 143
subprocess.run(cmd, check=True, capture_output=True, text=True)
common/runners/ffmpeg.py, line 229
subprocess.run(cmd, check=True, capture_output=True, text=True)
common/runners/ffmpeg.py, line 270
subprocess.run(cmd, check=True, capture_output=True, text=True)
common/runners/ffmpeg.py, line 281
subprocess.run(cmd, check=True, capture_output=True, text=True)
common/runners/cli/reel_previs.py, line 86
shutil.rmtree(frames)
Install and update
Note
README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell.
INSTALL_DOCUMENTED_INSTALLER
README.md, line 116
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
install.sh, line 5
# curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
install.sh, line 6
# curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash -s -- --skills writer,viral-text
Show more
docs/FAQ.md, line 20
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash -s -- --skills writer,viral-text
docs/INSTALL.md, line 8
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
docs/INSTALL.md, line 25
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash -s -- --prefix /opt/skills
docs/INSTALL.md, line 31
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash -s -- --skills writer,viral-text,landing-copy
docs/INSTALL.md, line 112
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash -s -- --update
docs/QUICKSTART.md, line 10
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
docs/QUICKSTART.md, line 125
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
docs/USER-GUIDE.md, line 8
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
docs/launch-posts/linkedin.md, line 27
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
docs/launch-posts/reddit.md, line 32
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
docs/launch-posts/substack.md, line 99
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
docs/launch-posts/x-thread.md, line 105
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
docs/walkthroughs/research-to-carousel-reel.md, line 31
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
.github/workflows-template/skills-lint.yml.template, line 120
echo "curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash" >> "$GITHUB_STEP_SUMMARY"
skills/skills-update/SKILL.md, line 90
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash -s -- --update
skills/skills-update/SKILL.md, line 112
curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash
skills/skills-update/examples/before-after.md, line 120
Running: curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash -s -- --update
skills/skills-update/examples/before-after.md, line 183
bash -c 'curl -fsSL https://raw.githubusercontent.com/Mikefluff/skills/main/install.sh | bash -s -- --update'
Network
Concern
can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
install.sh, line 118
require_cmd curl tar
install.sh, line 123
TARGET_VERSION="$(curl -fsSL "https://api.github.com/repos/${REPO_SLUG}/releases/latest" | jq -r '.tag_name')"
install.sh, line 125
TARGET_VERSION="$(curl -fsSL "https://api.github.com/repos/${REPO_SLUG}/releases/latest" | grep -m1 '"tag_name"' | sed -E 's/.*"tag_name": *"([^"]+)".*/\1/')"
Show more
install.sh, line 140
if ! curl -fsSL "$TARBALL_URL" -o "$TMPDIR/skills.tar.gz"; then
install.sh, line 451
tag="$(curl -fsSL "https://api.github.com/repos/${REPO_SLUG}/releases/latest" | jq -r '.tag_name' 2>/dev/null || true)"
install.sh, line 453
tag="$(curl -fsSL "https://api.github.com/repos/${REPO_SLUG}/releases/latest" | grep -m1 '"tag_name"' | sed -E 's/.*"tag_name": *"([^"]+)".*/\1/' || true)"
common/runners/oauth.py, line 229
resp = requests.post(
common/runners/verify.py, line 31
with urllib.request.urlopen(req, timeout=timeout) as resp:
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
common/runners/errors.py, line 19
f"Set them in your shell (.zshrc/.bashrc) or source a .env file."
common/runners/keysfile.py, line 23
KEYS_FILE = Path(os.environ.get("SKILLS_KEYS_FILE", str(Path.home() / ".skills.env")))
common/runners/tokens.py, line 34
TOKENS_FILE = Path(os.environ.get("SKILLS_TOKENS_FILE", str(Path.home() / ".skills-tokens.json")))
Show more
common/runners/publishers/linkedin.py, line 227
"client_secret": os.environ.get("LINKEDIN_CLIENT_SECRET", ""),
common/runners/publishers/telegraph.py, line 136
existing = os.environ.get("TELEGRAPH_ACCESS_TOKEN")
common/runners/publishers/telegraph.py, line 170
minted = not os.environ.get("TELEGRAPH_ACCESS_TOKEN")
common/runners/publishers/tiktok.py, line 361
"client_key": os.environ.get("TIKTOK_CLIENT_KEY", ""),
common/runners/publishers/tiktok.py, line 362
"client_secret": os.environ.get("TIKTOK_CLIENT_SECRET", ""),
common/runners/publishers/x.py, line 254
auth=(os.environ.get("X_CLIENT_ID", ""), os.environ.get("X_CLIENT_SECRET", "")),
CHANGELOG.md, line 1939
- `.env.example` mentions auto-install.
CHANGELOG.md, line 1993
- **`.env.example`** at repo root - full env-var matrix with per-provider
README.md, line 127
**API keys** (for `--execute` mode - entirely optional): manage via `/skills-keys add OPENAI_API_KEY ...` inside Claude Code, or copy `.env.example` to `~/.skills.env`. See [Managi
README.md, line 366
├── .env.example # template for ~/.skills.env (manage via /skills-keys)
common/runners/README.md, line 22
Copy `.env.example` from the repo root, fill in the keys you actually have, and source it:
common/runners/README.md, line 25
cp .env.example ~/.skills.env
docs/README.md, line 64
- [`.env.example`](../.env.example) - template for `~/.skills.env` (manage via `/skills-keys`)
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
a file was over the read cap and was not fully read. the file cap was reached before every file was read.
OBFUSCATION_FILE_OVER_READ_CAP OBFUSCATION_FILE_CAP_REACHED
CHANGELOG.md, line 1
# Changelog
skills/essay-write/references/plain-russian.md, line 1
# PLAIN-RUSSIAN COMPLEX CONTENT
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit bbab3d82df33. can delete files. README documents an installer that pipes a download into a shell. The docs document an installer that pipes a download into a shell. can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host. reads a credential or environment file. a file was over the read cap and was not fully read. the file cap was reached before every file was read.
Date and source
Date checked:
github.com
Commit graded: bbab3d82df330d964c932386158db1a25c24a149
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.