Claude Code, Skill
Threadify Workflows
Start with one guided setup.
Compatibility: Not stated.
Grade C
One Medium finding. Read the report before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
SECRETS_PATH_CREDENTIAL
Why this grade
- SECRETS_PATH_CREDENTIAL Medium
Mentions a credential store path (~/.ssh, id_rsa, .npmrc, .aws/credentials, credentials.json, .netrc).
lib/onboarding/discovery.mjs, line 5
const forbidden = /(?:^|[._ -])(secret|credential|password|token|keychain|private.key|id_rsa|id_ed25519)(?:[._ -]|$)/i;
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
lib/installer.mjs, line 170
fs.rmSync(lock, { recursive: true });
lib/installer.mjs, line 177
return () => fs.rmSync(lock, { recursive: true, force: true });
lib/installer.mjs, line 186
fs.rmSync(staging, { recursive: true, force: true });
Show more
lib/installer.mjs, line 207
fs.rmSync(next, { recursive: true, force: true });
lib/installer.mjs, line 216
fs.rmSync(previous, { recursive: true, force: true });
lib/installer.mjs, line 434
fs.rmSync(target, { recursive: true, force: true });
lib/installer.mjs, line 514
for (const file of Object.values(files)) fs.rmSync(file, { force: true });
lib/installer.mjs, line 515
fs.rmSync(path.join(stateRoot(env), 'scheduler', 'windows-task.json'), { force: true });
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
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. can reach attacker.example. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
lib/installer.mjs, line 105
const response = await fetch(url, {
lib/installer.mjs, line 129
const releaseResponse = await fetch(`https://api.github.com/repos/${REPOSITORY}/releases/latest`, {
lib/lead-desk-review.js, line 11
const response = await fetch(path, { method, headers: { 'X-Review-Ses
Show more
lib/creator/browser/review.js, line 34
const response = await fetch(`/api/${route}`, {
plugins/claude/skills/threadify-30-day-viral-vault/scripts/engine/browser/review.js, line 34
const response = await fetch(`/api/${route}`, {
plugins/claude/skills/threadify-create-my-day/scripts/engine/browser/review.js, line 34
const response = await fetch(`/api/${route}`, {
plugins/claude/skills/threadify-create-my-month/scripts/engine/browser/review.js, line 34
const response = await fetch(`/api/${route}`, {
plugins/claude/skills/threadify-create-my-week/scripts/engine/browser/review.js, line 34
const response = await fetch(`/api/${route}`, {
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
lib/installer.mjs, line 279
env: { ...env, HOME: home, CODEX_HOME: codexHome(home, env) },
lib/onboarding/discovery.mjs, line 5
const forbidden = /(?:^|[._ -])(secret|credential|password|token|keychain|private.key|id_rsa|id_ed25519)(?:[._ -]|$)/i;
.gitignore, line 2
.DS_Store
Show more
.gitignore, line 3
.env
.gitignore, line 5
!.env.example
scripts/build-claude-plugin.mjs, line 42
const ENV_ACCESS = /process\.env(?:\.([A-Za-z_][A-Za-z0-9_]*)|\[|\b)/g;
validation/creator-tests/full-install.test.mjs, line 58
env: { ...env, THREADIFY_WORKFLOWS_TEST_MODE: '1', THREADIFY_TEST_PLATFORM: 'darwin' } };
validation/creator-tests/release-files.test.mjs, line 26
'.env', '.codex/goals/private.md', 'dist/old.json', 'tmp/private.md', 'notes/private.md', 'skills/example/.env']) {
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Note
the file cap was reached before every file was read.
OBFUSCATION_FILE_CAP_REACHED
plugins/claude/skills/threadify-monetize-my-week/references/workflow-readme.md, line 1
# Monetize My Week
Licence
Pass
A licence file is present (LICENSE.md).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit d3d403263e51. can delete files. can reach a host that is not written as a fixed address. can reach api.github.com. The description does not name that host. can reach attacker.example. The description does not name that host. reads a credential or environment file. the file cap was reached before every file was read.
Date and source
Date checked:
github.com
Commit graded: d3d403263e5196b65d0fab66fda6f6127d808eca
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.