Codex, Plugin
Strideos Harness
Open-source AI endurance-coaching plugin for ChatGPT and Codex — with real humans in the review loop.
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 0abc8a96876c, unchanged since the check below.
PERMISSION_DELETE_FILES NETWORK_NO_FIXED_HOST SECRETS_PATH_DOTENV SECRETS_ENV_READ OBFUSCATION_FILE_OVER_READ_CAP
Why this grade
- PERMISSION_DELETE_FILES Low
Contains a call that can delete files.
src/store.mjs, line 389
fs.rmSync(decisionClaimDirectory(), { recursive: true, force: true }); - NETWORK_NO_FIXED_HOST Low
Makes a network call whose host is not written as a fixed address.
public/app.js, line 15
const response = await fetch(url, { ...options, headers }); - SECRETS_PATH_DOTENV Low
Mentions a .env file.
src/doctor.mjs, line 60
const localEnv = envKeys(path.join(normalizedRoot, ".env")); - SECRETS_ENV_READ Note
Reads an environment variable whose name contains KEY, SECRET, TOKEN, PASSWORD or CREDENTIAL.
src/openai.mjs, line 4
const apiKey = process.env.OPENAI_API_KEY; - OBFUSCATION_FILE_OVER_READ_CAP Note
A file was over the read cap and was not fully read.
sites/athlete-coach-demo/package-lock.json, line 1
{
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/store.mjs, line 389
fs.rmSync(decisionClaimDirectory(), { recursive: true, 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.
NETWORK_NO_FIXED_HOST
public/app.js, line 15
const response = await fetch(url, { ...options, headers });
public/service-worker.js, line 8
event.respondWith(fetch(event.request).then((response) => {
sites/athlete-coach-demo/worker/index.ts, line 29
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
Show more
sites/athlete-coach-demo/worker/index.ts, line 35
fetchAsset: (path) => env.ASSETS.fetch(new Request(new URL(path, request.url))),
sites/athlete-coach-demo/worker/index.ts, line 43
return handler.fetch(request, env, ctx);
sites/strideos-landing/worker/index.ts, line 29
async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> {
sites/strideos-landing/worker/index.ts, line 35
fetchAsset: (path) => env.ASSETS.fetch(new Request(new URL(path, request.url))),
sites/strideos-landing/worker/index.ts, line 43
return handler.fetch(request, env, ctx);
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
sites/athlete-coach-demo/vite.config.ts, line 38
// settings; application environment belongs in ignored `.env*` files.
src/doctor.mjs, line 60
const localEnv = envKeys(path.join(normalizedRoot, ".env"));
src/openai.mjs, line 4
const apiKey = process.env.OPENAI_API_KEY;
Show more
sites/strideos-landing/vite.config.ts, line 38
// settings; application environment belongs in ignored `.env*` files.
src/doctor.mjs, line 61
ss" : "info", localEnv.invalid.length ? `.env has invalid lines: ${localEnv.invalid.j
src/doctor.mjs, line 85
const requiredIgnores = [".env", "node_modules/", "data/private/", "uploads/", "*.log", "output/"];
src/env.mjs, line 7
for (const filename of [".env.local", ".env"]) {
src/server.mjs, line 45
return Boolean(process.env.STRIDEOS_ACCESS_TOKEN);
src/server.mjs, line 49
const expected = process.env.STRIDEOS_ACCESS_TOKEN;
src/server.mjs, line 182
mode: process.env.OPENAI_API_KEY ? "live" : "demo",
src/server.mjs, line 410
if (!deterministicSafetyStop && process.env.OPENAI_API_KEY && !personal) throw new HttpError(409, "Complete athlete onboarding before live coaching.");
src/server.mjs, line 411
if (!deterministicSafetyStop && process.env.OPENAI_API_KEY && onboarding.profile.delivery?.cloudPr
src/server.mjs, line 463
if (process.env.OPENAI_API_KEY && onboarding.profile.delivery?.cloudPr
src/server.mjs, line 797
validateRuntimeAccess(host, process.env.STRIDEOS_ACCESS_TOKEN || "");
.dockerignore, line 1
.git
.dockerignore, line 2
.env
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
sites/athlete-coach-demo/package-lock.json, line 1
{
sites/strideos-landing/package-lock.json, line 1
{
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 0abc8a96876c. can delete files. can reach a host that is not written as a fixed address. 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: 0abc8a96876cef3d3039afcd9be0e3fc04f7d349
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.