Claude Code, Plugin
posthog
Access PostHog analytics, feature flags, experiments, error tracking, and insights directly from Claude Code.
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.
Rescanned at commit 77a7f6987f78.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST SECRETS_PATH_DOTENV PERMISSION_SHELL_DECLARED SECRETS_ENV_READ OBFUSCATION_FILE_CAP_REACHED
Why this grade
- NETWORK_NO_FIXED_HOST Low
Makes a network call whose host is not written as a fixed address.
skills/building-react-quill-canvases/references/checklist-example.md, line 53
cmd: 'curl -s https://api.example.com/healthz', - NETWORK_UNNAMED_HOST Low
Calls a fixed host that the description does not name.
skills/building-react-quill-canvases/references/checklist-example.md, line 53
cmd: 'curl -s https://api.example.com/healthz', - SECRETS_PATH_DOTENV Low
Mentions a .env file.
skills/exploring-mcp-tool-original-user-motive/SKILL.md, line 258
export OPENAI_API_KEY=$(op read "$(grep -E '^OPENAI_API_KEY=' .env.local | cut -d= -f2- | tr -d '"')") - PERMISSION_SHELL_DECLARED Note
Runs shell commands, and the manifest or description says so.
scripts/dev_test_session.py, line 39
return subprocess.check_output( - SECRETS_ENV_READ Note
Reads an environment variable whose name contains KEY, SECRET, TOKEN, PASSWORD or CREDENTIAL.
skills/exploring-mcp-tool-original-user-motive/scripts/audit_intentions.py, line 60
if not os.environ.get("OPENAI_API_KEY"): - OBFUSCATION_FILE_CAP_REACHED Note
The 400 file cap was reached before every file was read.
skills/instrument-product-analytics/references/COMMANDMENTS.md, line 1
# Framework rules
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
Note
requests shell access. The manifest names this permission.
PERMISSION_SHELL_DECLARED
scripts/dev_test_session.py, line 39
return subprocess.check_output(
scripts/dev_test_session.py, line 124
result = subprocess.run(
scripts/dev_test_session.py, line 143
rc = subprocess.run(cmd, cwd=str(target_cwd)).returncode
Show more
scripts/dev_test_session.py, line 147
subprocess.run(
telemetry/hooks/session-end-llma.py, line 69
result = subprocess.run(
telemetry/posthog_llma/event_builder.py, line 58
result = subprocess.run(
telemetry/scripts/llma_cc_ingest.py, line 149
result = subprocess.run(
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.example.com. The description does not name that host.
NETWORK_NO_FIXED_HOST NETWORK_UNNAMED_HOST
skills/building-react-quill-canvases/references/checklist-example.md, line 53
cmd: 'curl -s https://api.example.com/healthz',
skills/exploring-scouts/SKILL.md, line 332
# fetch (note --json), saving each to a file:
skills/instrument-feature-flags/references/adding-feature-flag-code.md, line 2827
curl -v -L --header "Content-Type: application/json" -d ' {
Show more
skills/instrument-feature-flags/references/adding-feature-flag-code.md, line 2836
curl -v -L --header "Content-Type: application/json" -d ' {
skills/instrument-feature-flags/references/adding-feature-flag-code.md, line 2863
response = requests.post(url, headers=headers, data=json.dumps(payload))
skills/instrument-feature-flags/references/adding-feature-flag-code.md, line 2868
response_with_config = requests.post(url_with_config, headers=headers, data=json.dumps(payload))
skills/instrument-feature-flags/references/adding-feature-flag-code.md, line 2891
const response = await fetch(url, {
skills/instrument-feature-flags/references/adding-feature-flag-code.md, line 2901
const responseWithConfig = await fetch(urlWithConfig, {
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
skills/exploring-mcp-tool-original-user-motive/scripts/audit_intentions.py, line 60
if not os.environ.get("OPENAI_API_KEY"):
skills/exploring-mcp-tool-original-user-motive/scripts/canonicalize_intentions.py, line 81
if not os.environ.get("OPENAI_API_KEY"):
skills/exploring-mcp-tool-original-user-motive/SKILL.md, line 258
export OPENAI_API_KEY=$(op read "$(grep -E '^OPENAI_API_KEY=' .env.local | cut -d= -f2- | tr -d '"')")
Show more
skills/exploring-mcp-tool-original-user-motive/scripts/extract_facets.py, line 141
if not os.environ.get("OPENAI_API_KEY"):
skills/instrument-error-tracking/references/hono.md, line 93
const posthog = new PostHog(process.env.POSTHOG_TOKEN, { host: 'https://us.i.posthog.com' })
skills/instrument-error-tracking/references/nextjs.md, line 69
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN!, {
skills/instrument-error-tracking/references/nextjs.md, line 92
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN as string, {
skills/instrument-error-tracking/references/nextjs.md, line 143
posthog.init(process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN as string, {
skills/instrument-error-tracking/references/nextjs.md, line 366
process.env.NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN,
skills/exploring-mcp-tool-original-user-motive/scripts/audit_intentions.py, line 20
export OPENAI_API_KEY=$(op read "$(grep -E '^OPENAI_API_KEY=' .env.local | cut -d= -f2- | tr -d '\"')")
skills/exploring-mcp-tool-original-user-motive/scripts/audit_intentions.py, line 61
sys.exit("OPENAI_API_KEY is unset. Resolve it from .env.local with `op read` first — see the module docstring.")
skills/exploring-mcp-tool-original-user-motive/scripts/canonicalize_intentions.py, line 20
export OPENAI_API_KEY=$(op read "$(grep -E '^OPENAI_API_KEY=' .env.local | cut -d= -f2- | tr -d '\"')")
skills/exploring-mcp-tool-original-user-motive/scripts/canonicalize_intentions.py, line 82
sys.exit("OPENAI_API_KEY is unset. Resolve it from .env.local with `op read` first — see the module docstring.")
skills/exploring-mcp-tool-original-user-motive/scripts/extract_facets.py, line 10
PostHog employees only: the key comes from the repo's .env.local, which holds
skills/exploring-mcp-tool-original-user-motive/scripts/extract_facets.py, line 19
export OPENAI_API_KEY=$(op read "$(grep -E '^OPENAI_API_KEY=' .env.local | cut -d= -f2- | tr -d '\"')")
skills/exploring-mcp-tool-original-user-motive/scripts/extract_facets.py, line 142
sys.exit("OPENAI_API_KEY is unset. Resolve it from .env.local with `op read` first — see the module docstring.")
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
skills/instrument-product-analytics/references/COMMANDMENTS.md, line 1
# Framework rules
Licence
Note
no licence file found.
LICENCE_MISSING
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 77a7f6987f78. requests shell access. The manifest names this permission. can reach a host that is not written as a fixed address. can reach api.example.com. The description does not name that host. reads a credential or environment file. the file cap was reached before every file was read. no licence file found.
Date and source
Date checked:
github.com
Commit graded: 77a7f6987f7883f96fbdff9d3d54b3f1042aa439
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.