Claude Code, Plugin
Claude Plugin
Your AI on rails, on your terms — an open-source Claude Code plugin that enforces every process as it happens, so your AI can't fake the work.
Compatibility: Not stated.
Grade C
One Medium finding. Read the findings before installing.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit af559d1d70a4, unchanged since the check below.
NETWORK_HOST_FROM_INPUT
Why this grade
- NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
plugin/hooks/issue_provider_base.py, line 243
response = requests.get(url, headers=self.headers, timeout=timeout_seconds)
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.
If you think this grade is wrong, email [email protected] with the entry link and your evidence. We aim to acknowledge within two working days and decide within seven. If we confirm an error, we aim to correct it within 24 hours of confirming it. These are aims, not guarantees.
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
plugin/hooks/_shim.py, line 72
sys.exit(subprocess.run(target).returncode)
plugin/hooks/ai_providers.py, line 615
proc = subprocess.run(
plugin/hooks/git_operations.py, line 53
result = subprocess.run(
Show more
plugin/hooks/git_operations.py, line 114
symref = subprocess.run(
plugin/hooks/git_operations.py, line 131
check = subprocess.run(
plugin/hooks/git_operations.py, line 163
result = subprocess.run(
plugin/hooks/git_operations.py, line 175
subprocess.run(
plugin/hooks/git_operations.py, line 184
subprocess.run(
plugin/hooks/post-tool-use.py, line 81
shutil.rmtree(source_dir, ignore_errors=True)
plugin/hooks/task_state_manager.py, line 105
shutil.rmtree(task_dir)
plugin/mcp/bootstrap_mcp.py, line 106
shutil.rmtree(venv)
Install and update
Pass
No install-time script found, and dependencies are pinned or absent.
Network
Serious
accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT
plugin/hooks/issue_provider_base.py, line 243
response = requests.get(url, headers=self.headers, timeout=timeout_seconds)
plugin/hooks/issue_provider_base.py, line 245
response = requests.post(url, headers=self.headers, json=data, timeout=timeout_seconds)
plugin/hooks/issue_provider_base.py, line 247
response = requests.put(url, headers=self.headers, json=data, timeout=timeout_seconds)
Show more
plugin/hooks/issue_provider_base.py, line 249
response = requests.patch(url, headers=self.headers, json=data, timeout=timeout_seconds)
plugin/hooks/issue_provider_base.py, line 251
response = requests.delete(url, headers=self.headers, json=data, timeout=timeout_seconds)
plugin/hooks/notification_utils.py, line 108
_ETC_SSL_CERT_FILE = "/etc/ssl/cert.pem" # macOS/BSD system bundle (what curl uses)
plugin/hooks/notification_utils.py, line 238
with urllib.request.urlopen(req, timeout=self.API_TIMEOUT,
plugin/hooks/notification_utils.py, line 444
with urllib.request.urlopen(req, timeout=_TELEGRAM_API_TIMEOUT,
plugin/hooks/gitlab/releases.py, line 82
response = requests.post(url, headers={'PRIVATE-TOKEN': self.api_token}, files=files, timeout=60)
plugin/hooks/gitlab/releases.py, line 100
# Redact the token - this raw requests.post bypasses the base
Secrets
Concern
reads a credential or environment file.
SECRETS_PATH_DOTENV
plugin/agents/service-documentation.md, line 126
- Environment variables: See `.env.example`
plugin/hooks/ai_providers.py, line 225
("dotenv", re.compile(r"\.env\b", re.IGNORECASE)),
plugin/hooks/optimize_completion.py, line 1926
f".env.local, editor caches, etc.). PRESERVED (excluded from "
Show more
plugin/hooks/optimize_completion.py, line 2681
# only -fd, build artifacts, .env.local, editor caches, etc. would
CLAUDE.wiki.md, line 14
- Session cookies, webhook secrets, `.env` file contents
docs/USAGE_GUIDE.md, line 276
- `{changed_files}` - the working tree's changed paths with their git porcelain status codes, capped at 200 with an explicit dropped-count line past the cap. Populated for `code_re
plugin/hooks/protocol_engine.py, line 3847
suspicious_exact = [".env", ".key", ".pem", ".p12"]
plugin/hooks/protocol_engine.py, line 3859
# Skip template files (.env.example, .env.sample, credentials.template, etc.)
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.
OBFUSCATION_FILE_OVER_READ_CAP
plugin/hooks/protocol_engine.py, line 1
#!/usr/bin/env python3
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 af559d1d70a4. can delete files. accepts a host from input, with no fixed list in this file. reads a credential or environment file. a file was over the read cap and was not fully read.
Date and source
Date checked:
github.com
Commit graded: af559d1d70a45350331fca282404e9c06fb87253
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.