Claude Code, Skill
skillhook
Turn this machine into a permanent, secure webhook endpoint that runs Agent Skills with Claude Code or Codex, and run your whole Skillhook Cloud organisation from the agent.
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).
src/accounts.test.ts, line 157
writeFileSync(path.join(claudeShared, ".credentials.json"), "{}");
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
src/runtime-safety.test.ts, line 22
if(e.clean) fs.rmSync(e.cleanPath||'draft.txt',{force:true});
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Concern
can reach public-api.granola.ai. The description does not name that host. can reach a host that is not written as a fixed address.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
examples/skills/granola-meeting-actions/references/granola-api.md, line 39
curl -sS "https://public-api.granola.ai/v1/notes/$NOTE_ID" \
examples/skills/granola-meeting-actions/references/granola-api.md, line 59
curl -sS https://public-api.granola.ai/v1/webhook-endpoints \
examples/skills/remote-prompt/SKILL.md, line 52
curl -sS "$(skillhook url remote-prompt)?wait=120" \
Show more
src/client.ts, line 31
const response = await fetch(`${baseUrl}/health`, { signal: AbortSignal.timeout(timeoutMs) });
src/client.ts, line 125
const response = await fetch(`${baseUrl}${path}`, { headers, signal });
src/client.ts, line 149
const response = await fetch(`${baseUrl}${path}`, { method: init.meth
src/ops.ts, line 377
response = await fetch(url, {
src/server.test.ts, line 169
const local = await json(await fetch(`${base}/health`));
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_CREDENTIAL SECRETS_PATH_DOTENV
skills/skillhook-cloud/SKILL.md, line 24
skillhook cloud login # opens the browser; the person approves the code, the key is kept in ~/.skillhook/.env
skills/skillhook-setup/SKILL.md, line 113
skillhook secret set GITHUB_WEBHOOK_SECRET # the file names secrets; values stay in .env
src/accounts.test.ts, line 157
writeFileSync(path.join(claudeShared, ".credentials.json"), "{}");
Show more
src/accounts.test.ts, line 161
expect(existsSync(path.join(claude.dir, ".credentials.json"))).toBe(false);
src/accounts.ts, line 3
// settings), or a long-lived token / API key kept in `.env`. A skill picks one or a pool with `account:`; the queue
src/accounts.ts, line 37
/** The `.env` name of a `token` / `api_key` account's credential. */
src/accounts.ts, line 74
const CODEX_PRIVATE = new Set(["auth.json", "models_cache.json", "log", "logs", "memories", "tmp", ".DS_Store", ".credentials.json"]);
src/accounts.ts, line 77
/** What Claude Code reads as settings; its login (`.credentials.json`, the keychain), `.claude.json` and sessions stay the account's own. */
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Pass
No encoded or minified payload found.
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 52fb8bf0b1d0. can delete files. can reach public-api.granola.ai. The description does not name that host. can reach a host that is not written as a fixed address. reads a credential or environment file.
Date and source
Date checked:
github.com
Commit graded: 52fb8bf0b1d01ed9043d0551ed9c27a71f39500f
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.