vfrey@1.0.0-beta.3
CAUTION· install onlyPublisher claims: "Make short vertical videos for YouTube Shorts, TikTok and Reels by asking your coding agent: Claude Code, Codex, Cursor or Gemini CLI. Renders on your machine." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-10 and scored it 68/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Credential pass-through configuration; Hidden zero-width characters detected; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
// The bypass secret goes only to the console's own origin, never to another storage host.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.return { plan: JSON.parse(text.replace(/^/, "")) };Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.if (existsSync(path.join(dir, "vfrey.json"))) return existsSync(path.join(dir, ".env")) ? path.join(dir, ".env") : null;Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.…e, say so plainly and offer the person to switch the series to another engine (`npx vfrey desk series update --id <series> --engine vfrey-render`), or switch this run in…Fix: Pin versions and sources; vendor anything fetched at install time.if (status === 401) return new ApiFailure("You are not signed in, or this token was revoked.", "run `npx vfrey login`.", 401, "unauthorized");Fix: Pin versions and sources; vendor anything fetched at install time.return `npx vfrey attach ${runId} ${file}`;Fix: Pin versions and sources; vendor anything fetched at install time."Fedora: sudo dnf install espeak-ng",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.// The project's .env loads when it exists, so Node prints no "not found" notice. The project is the nearest folder at or aboveFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.throw new ApiFailure("The server sent a storage link that is not a web address.", "update vfrey with `npx vfrey update`, or try again.");Fix: Pin versions and sources; vendor anything fetched at install time.const here = path.resolve(process.cwd(), ".env");Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose." npx vfrey cloud push [--videos] [--dry-run] [--json]",Fix: Pin versions and sources; vendor anything fetched at install time.if (input.kit) await writeFile(path.join(input.dir, "kit.json"), `${JSON.stringify(input.kit, null, 2)}\n`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.await writeFile(path.join(input.dir, "timing.json"), `${JSON.stringify(input.timing, null, 2)}\n`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."Debian or Ubuntu: sudo apt install espeak-ng",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.if (status >= 200 && status < 300) throw new ApiFailure("The vfrey server sent an answer this version does not understand.", "update vfrey with `npx vfrey update`.", status);Fix: Pin versions and sources; vendor anything fetched at install time.return { command: "powershell", args: POWERSHELL_ARGS, stdin: SAPI_SCRIPT, env: { ...env, ...vars } as NodeJS.ProcessEnv };Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."usage: npx vfrey cloud link [--json]",Fix: Pin versions and sources; vendor anything fetched at install time.return new ApiFailure(message || `The vfrey server answered ${status}.`, status >= 500 ? "try again in a moment." : "run `npx vfrey doctor` and check the line above.", status, err?.code);Fix: Pin versions and sources; vendor anything fetched at install time.// the working directory that holds vfrey.json (the way git finds .git); outside a project, the working directory's own .env.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."Alpine: sudo apk add espeak-ng",Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.else if (answer.error === "access_denied") return refuse(io, "Sign-in was denied in the browser.", "run `npx vfrey login` again and choose Approve.");Fix: Pin versions and sources; vendor anything fetched at install time.const extra = { posts: differs(flags.csv, "posts.csv"), groups: differs(flags.groupsCsv, "groups.csv"), report: differs(flags.html, "report.html") };Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why." npx vfrey research report <run-dir...> [--out DIR] [--title T] [--top N] [--country VN] [--language vi] [--exclude-brands] [--rank reach|consistency|engagement] [--open]",Fix: Pin versions and sources; vendor anything fetched at install time." npx vfrey research schema [--recipe ID] [--json] [--file result|report]",Fix: Pin versions and sources; vendor anything fetched at install time.…re spent: read summary.md instead of running it again.\n`); if (!dir && !flags.csv && !flags.html && !flags.md && !flags.groupsCsv && !flags.json) io.stdout("Save everything: add --out DIR (writes summary.md, posts.csv, groups.csv, result.…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.const PROFILE_FIX = "check the platform and handle, like `npx vfrey creators show @name --platform tiktok`.";Fix: Pin versions and sources; vendor anything fetched at install time.const show = id ? `\`npx vfrey mail show --id ${clean(id)}\`` : "`npx vfrey mail drafts`";Fix: Pin versions and sources; vendor anything fetched at install time.const SEARCH_FIX = "list the niche ids with `npx vfrey topics niches`.";Fix: Pin versions and sources; vendor anything fetched at install time.if (!found) throw new ApiFailure("You are not signed in.", "run `npx vfrey login`.", undefined, "not_signed_in");Fix: Pin versions and sources; vendor anything fetched at install time.if (parsed.error) return refuse(io, parsed.error, "usage: npx vfrey login [--api URL] [--no-browser].");Fix: Pin versions and sources; vendor anything fetched at install time.const PERSON_ONLY = "an agent token can't approve or send; a person signs in with `npx vfrey login` and runs it.";Fix: Pin versions and sources; vendor anything fetched at install time." npx vfrey cloud status [--json]",Fix: Pin versions and sources; vendor anything fetched at install time.return refuse(io, "Signed in, but the token could not be saved on this machine.", "make the vfrey home folder writable (VFREY_HOME), then run `npx vfrey login` again.");Fix: Pin versions and sources; vendor anything fetched at install time.throw withInputFix(error, "list the niche ids with `npx vfrey topics niches`.");Fix: Pin versions and sources; vendor anything fetched at install time.return `${pack ? `Buy ${pack.credits} credits for $${pack.usd}` : "Buy credits"}: ${url} Then run \`npx vfrey whoami\` to see your balance.`;Fix: Pin versions and sources; vendor anything fetched at install time.if (now() >= deadline) return refuse(io, "The sign-in code expired.", "run `npx vfrey login` again.");Fix: Pin versions and sources; vendor anything fetched at install time." npx vfrey creators find --query \"muji sale\" --region VN [--must-mention muji] [--any-of sale,giảm]",Fix: Pin versions and sources; vendor anything fetched at install time." npx vfrey cloud pull [--json]",Fix: Pin versions and sources; vendor anything fetched at install time.return refuse(io, error instanceof Error ? clean(error.message) : "Something went wrong.", "run `npx vfrey doctor` and check the line above.");Fix: Pin versions and sources; vendor anything fetched at install time.if (/creator/i.test(text)) return mk(text, "look the creator up with `npx vfrey creators show @handle --platform tiktok`, or draft without --creator.");Fix: Pin versions and sources; vendor anything fetched at install time.throw withInputFix(error, "check the platform and handle, like `npx vfrey creators watch add @name --platform tiktok`.");Fix: Pin versions and sources; vendor anything fetched at install time./** What the Fix: line says for a `fix`. "npx vfrey" is rewritten when printed to the invocation that works from here (`npx @vfrey/vfrey` outside a project). */Fix: Pin versions and sources; vendor anything fetched at install time."usage: npx vfrey research run --plan plan.json [--quote] [--json] [--out DIR] [--md FILE] [--csv FILE] [--groups-csv FILE] [--html FILE] [--open] [--max-credits N] [--top N]",Fix: Pin versions and sources; vendor anything fetched at install time.const WATCH_FIX = "list your watchlists with `npx vfrey creators watch list`.";Fix: Pin versions and sources; vendor anything fetched at install time.const csvFile = flags.csv ?? inDir("posts.csv");Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.return `upgrade your plan${fix.packs?.length ? " or top up credits" : ""} at ${url}. Then run \`npx vfrey whoami\` to check your plan.`;Fix: Pin versions and sources; vendor anything fetched at install time." npx vfrey research trends --region VN [--platform tiktok] [--group hashtag|sound|creator|day]",Fix: Pin versions and sources; vendor anything fetched at install time.if (extra.posts) writeOut(inDir("posts.csv")!, postsCsv);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…hows the cost, spends nothing)", " npx vfrey research run --plan plan.json --max-credits 20 --out out/x (summary.md, posts.csv, groups.csv, result.json, report.html; comments.csv and transcripts.csv wh…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.return refuse(io, error instanceof Error ? clean(error.message) : "Something went wrong.", "run `npx vfrey doctor` and check the line above.");Fix: Pin versions and sources; vendor anything fetched at install time.if (value === null || value === undefined || !ok(value)) throw new ApiFailure("The vfrey server sent an answer this version does not understand.", "update vfrey with `npx vfrey update`.");Fix: Pin versions and sources; vendor anything fetched at install time.return mk(text || "No such draft.", "list your drafts with `npx vfrey mail drafts`.");Fix: Pin versions and sources; vendor anything fetched at install time.throw new ApiFailure("The vfrey server sent an answer this version does not understand.", "update vfrey with `npx vfrey update`.");Fix: Pin versions and sources; vendor anything fetched at install time./** A niche id from `npx vfrey topics niches`, such as ai-tools or my-niche-1a2b3c. */Fix: Pin versions and sources; vendor anything fetched at install time." npx vfrey videos # finished videos with paths",Fix: Pin versions and sources; vendor anything fetched at install time." npx vfrey desk snapshot --json # every run with its checks and errors",Fix: Pin versions and sources; vendor anything fetched at install time.if (!id) throw new UsageError("Missing the series id.", "Pass it as `npx vfrey desk series targets <id>`.");Fix: Pin versions and sources; vendor anything fetched at install time.…OVIDER=kokoro asks for the natural voice, and it is not installed", fix: `Run \`npx vfrey voice install\` (${kokoroSizeText("q8")}, once).` }; } if ((natural.install…Fix: Pin versions and sources; vendor anything fetched at install time.…ce(system) : "system"} voice (for a free natural voice in other languages run \`npx vfrey voice install --language <code>\`: ${SUPERTONIC_LANGUAGE_COUNT_TEXT}; ${superto…Fix: Pin versions and sources; vendor anything fetched at install time.export: "npx vfrey creators export ...",Fix: Pin versions and sources; vendor anything fetched at install time.throw new ApiFailure("The vfrey server sent an answer this version does not understand.", "update vfrey with `npx vfrey update`.");Fix: Pin versions and sources; vendor anything fetched at install time.…anceof Error ? error.message : String(error)}).`, fix: "fix the syntax, or run `npx vfrey brand init` for a starter." }] }; } const result = brandSchema.safeParse(js…Fix: Pin versions and sources; vendor anything fetched at install time.other ? `Choose ${other.label}: \`npx vfrey engine use ${other.id}\`.` : "Run `npx vfrey doctor` to see what is missing.",Fix: Pin versions and sources; vendor anything fetched at install time.…was not started from a project, so there is nowhere to leave a request.", "Run `npx vfrey open` in your project folder, or use Copy prompt for your agent."); const…Fix: Pin versions and sources; vendor anything fetched at install time.if (at !== -1 && (!value || value.startsWith("--"))) return { ok: false, reason: "--brand needs a file.", fix: "pass a brand file inside the project; `npx vfrey brand init` writes a starter." };Fix: Pin versions and sources; vendor anything fetched at install time.const row = store.db.prepare(`SELECT config_json FROM desk_platforms WHERE series_id = ? AND platform = ?`).get(input.id, target.platform) as { config_json: string } | undefined;Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.const balance = "See your balance with `npx vfrey whoami`.";Fix: Pin versions and sources; vendor anything fetched at install time.return no(`${input.engine} is not an engine.`, "Run `npx vfrey engine list` to see the engines.");Fix: Pin versions and sources; vendor anything fetched at install time.job: "npx vfrey desk job ...",Fix: Pin versions and sources; vendor anything fetched at install time.…pertonic asks for the multilingual voice, and it is not installed", fix: `Run \`npx vfrey voice install --language vi\` (${supertonicSizeText()}, once).` }; } if (pr…Fix: Pin versions and sources; vendor anything fetched at install time.… fix: "run it from inside the project folder (the one with vfrey.json), or run `npx vfrey init` first." }; const abs = canonicalPath(path.resolve(cwd, value)); if (!…Fix: Pin versions and sources; vendor anything fetched at install time.… ` npx vfrey desk job retry --id ${run.id}`, "or make a new video with `npx vfrey tick --now --about \"<subject>\" --script scripts/<idea>.json --scene scenes/<i…Fix: Pin versions and sources; vendor anything fetched at install time.watch: "npx vfrey creators watch ...",Fix: Pin versions and sources; vendor anything fetched at install time.…tip = ""; return; } if (!a.signedIn) { setHtml(el, html`Not signed in · <code>npx vfrey login</code>`); el.title = "Run npx vfrey login in a terminal"; row.dataset.tip…Fix: Pin versions and sources; vendor anything fetched at install time.… (\`${WINGET.chrome}\`)` : ""} first. (Pictures & clips does not need Chrome: \`npx vfrey render --engine pictures\` and \`tick --engine pictures\` use ffmpeg alone.)`, …Fix: Pin versions and sources; vendor anything fetched at install time.find: "npx vfrey creators find ...",Fix: Pin versions and sources; vendor anything fetched at install time.` npx vfrey open ${run.id} --no-browser # the run page link`,Fix: Pin versions and sources; vendor anything fetched at install time.return { path: where, reason: `${where ? `${where}: ` : ""}${message}`, fix: "see `npx vfrey brand init` for the shape of brand.json." };Fix: Pin versions and sources; vendor anything fetched at install time.const row = store.db.prepare(`SELECT kind FROM desk_sources WHERE id = ?`).get(input.id) as { kind: string } | undefined;Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…oice: ${system} (with ffmpeg). It sounds robotic. To get a natural voice: run \`npx vfrey voice install\` (${kokoroSizeText("q8")}, once) for English that works offline,…Fix: Pin versions and sources; vendor anything fetched at install time.throw new BrandError(`Cannot read the brand file ${file}.`, "check the path, or run `npx vfrey brand init` to write a starter.");Fix: Pin versions and sources; vendor anything fetched at install time.` npx vfrey desk job retry --id ${run.id}`,Fix: Pin versions and sources; vendor anything fetched at install time.if (!file || !existsSync(file)) return refuse(res, 404, "No cover for that run.", "Make one with `npx vfrey tick --thumbnail`, or put a thumbnail field in the script.");Fix: Pin versions and sources; vendor anything fetched at install time.? "Copy the id shown for the account on the series page (or `desk snapshot`), then run `npx vfrey desk series live --id " + input.id + " --confirm <channel id>` again."Fix: Pin versions and sources; vendor anything fetched at install time.if (!existsSync(abs)) return { ok: false, reason: `${value} does not exist.`, fix: "write it first (`npx vfrey brand init` writes a starter), then point the series at it." };Fix: Pin versions and sources; vendor anything fetched at install time.browse: "npx vfrey creators browse ...",Fix: Pin versions and sources; vendor anything fetched at install time.{ error: bad("brand.json must be a JSON object.", "run `npx vfrey brand init` for a starter.") },Fix: Pin versions and sources; vendor anything fetched at install time.…t assembles media files that stay on your machine. Fix: render it locally with `npx vfrey tick --now --script script.json --engine pictures`, or choose one of " + JOB_EN…Fix: Pin versions and sources; vendor anything fetched at install time.…-sheet")) warn(`characters/${name}`, `${name} has no sheet image.`, `add one: \`npx vfrey series kit add ${series} <image> --as character:${name} --source own\`.`); …Fix: Pin versions and sources; vendor anything fetched at install time.if (!stored) warn(KIT_MANIFEST, "kit.json is missing or unreadable.", `run \`npx vfrey series kit init ${series}\` or any \`series kit add\` to write it.`);Fix: Pin versions and sources; vendor anything fetched at install time.… 2:3 3:4 4:3 5:4 21:9, or WxH) and the frame rate (24, 30, 60); default is vfrey.json, else 9:16 at 30 fps"], ["--frame <seconds> out.png", "with --scene: write one still at that second. It goes to the path you give (default ./scene-frame.…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.return desk.setSecret(this.db, input);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.desk.createAccount(this.db, input);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.… (natural voice installed, or the system voice and how to get the natural one: `npx vfrey voice install`), and warns when only a system voice is left"], ["--render…Fix: Pin versions and sources; vendor anything fetched at install time.…s JSON"], ["--out DIR", "write everything in one folder: summary.md, posts.csv, groups.csv, result.json, report.html, and comments.csv and transcripts.csv when the plan reads comments or transcripts (read summary.md; never run again to see…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…nfigError("tts_kokoro_missing", `The natural voice is not installed. Fix: run \`npx vfrey voice install\` (${kokoroSizeText("q8")}, once), or use TTS_PROVIDER=local for …Fix: Pin versions and sources; vendor anything fetched at install time.usage: ["npx vfrey doctor [--render] [--json] [--rules]"],Fix: Pin versions and sources; vendor anything fetched at install time.if (!first) return { ok: false, message: "No free voice was found on this machine.", fix: "run `npx vfrey doctor`, or set TTS_PROVIDER=none for captions only." };Fix: Pin versions and sources; vendor anything fetched at install time."npx vfrey series list [--json]",Fix: Pin versions and sources; vendor anything fetched at install time.…obotic in ${languageName(code)}. For a free natural voice on this computer run: npx vfrey voice install --language ${code} (${supertonicSizeText()}, once), or add an Ele…Fix: Pin versions and sources; vendor anything fetched at install time.setup: kokoro.installed ? null : kokoro.supported ? `npx vfrey voice install (${kokoroSizeText("q8")}, once)` : "no prebuilt engine for this computer",Fix: Pin versions and sources; vendor anything fetched at install time.…JS.NodeJS.LTS`, `winget install Gyan.FFmpeg`, then open a new terminal and run `npx vfrey doctor --render`. The free voice is the built-in Windows voice (SAPI, through P…Fix: Pin versions and sources; vendor anything fetched at install time.return desk.setPlatform(this.db, input);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…ngth} files; the most is ${KIT_LIMITS.files}.`, "remove files you do not need: `npx vfrey series kit remove <series> <file>`."); const stored = readManifest(kitDir); …Fix: Pin versions and sources; vendor anything fetched at install time.return desk.clearSecret(this.db, input);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.io.stdout(`Usage stats are on. Turn them off any time with \`npx vfrey telemetry off\`.\n`);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…"], ["<file.mp4>", "the video. It must be the size and frame rate in frame.json and within half a second of its length, or attach refuses with a Fix line. The file is copied into the brief folder; nothing is uploaded"], ["--fit pad|trim|sp…Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.const key = item.keyMissing ? ` No ${item.platform} key is set either: add it first (npx vfrey doctor shows what is missing).` : "";Fix: Pin versions and sources; vendor anything fetched at install time.…); } if (!f.source) err(f.path, `${f.path} has no recorded source.`, `\`npx vfrey series kit add ${series} <file> --as reference --source own\` (or generated:<to…Fix: Pin versions and sources; vendor anything fetched at install time.return `For a natural voice run: npx vfrey voice install (${kokoroSizeText("q8")}, once).`;Fix: Pin versions and sources; vendor anything fetched at install time.* `npx vfrey series kit ...` (spec 037): the kit's verbs. `series kit <series>` prints the brief an agent reads at the start of aFix: Pin versions and sources; vendor anything fetched at install time.…several with `beat`; `skills/vfrey-product/media.md` shows the format) and run `npx vfrey tick --now --script script.json --engine pictures`, or pass --media FILE.", …Fix: Pin versions and sources; vendor anything fetched at install time.for (const note of paused) steps.push(`Resume it: npx vfrey desk series resume --id ${note.series}`);Fix: Pin versions and sources; vendor anything fetched at install time.usage: ["npx vfrey login [--api URL] [--no-browser]"],Fix: Pin versions and sources; vendor anything fetched at install time.? { approve: `npx vfrey desk job approve --id ${job.id}`, reject: `npx vfrey desk job reject --id ${job.id} --reason "<why>"` }Fix: Pin versions and sources; vendor anything fetched at install time./** `wrapLine` for every usage line of a block of text ("usage: ..." or "npx vfrey ..."). Sentences are left as they are. */Fix: Pin versions and sources; vendor anything fetched at install time.desk.createSeries(this.db, input);Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why."npx vfrey series kit <series> [--language CODE] [--json | --paths]",Fix: Pin versions and sources; vendor anything fetched at install time.…EST, "kit.json is out of date: the files changed since it was written.", `run \`npx vfrey series kit init ${series}\` to refresh it (it keeps your files).`); for (cons…Fix: Pin versions and sources; vendor anything fetched at install time."npx vfrey series kit init <series>",Fix: Pin versions and sources; vendor anything fetched at install time.… could not be read, so no music was mixed.", "render again; if it repeats, run `npx vfrey doctor`."); const D = facts.durationSec; if (input.music.start >= D - 0.5) …Fix: Pin versions and sources; vendor anything fetched at install time.if (!foreign) return { ok: false, message: "No free voice was found on this machine.", fix: "run `npx vfrey doctor`, or set TTS_PROVIDER=none for captions only." };Fix: Pin versions and sources; vendor anything fetched at install time.return text.split("\n").map((line) => (/^\s*(usage:|npx )/.test(line) ? wrapLine(line, width) : line)).join("\n");Fix: Pin versions and sources; vendor anything fetched at install time."npx vfrey series kit add <series> <file> --as reference|character:<name>|prompt --source own|generated:<tool>|licensed:<where> [--caption TEXT]",Fix: Pin versions and sources; vendor anything fetched at install time.throw new MediaPlanError(`media.json gives "beat" to ${given} of ${shots.length} shots.`, 'put "beat": N on every shot, or on none (then there is one shot for each beat, in order).');Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.…alled, setup: multilingual.installed ? null : multilingual.supported ? `npx vfrey voice install --language ${code === "en" ? "vi" : code} (${supertonicSizeText()…Fix: Pin versions and sources; vendor anything fetched at install time.…e yet, so vfrey only recorded a practice publication.${key} To upload for real: npx vfrey desk series live --id ${series} --confirm <channel id>`; } if (item.status …Fix: Pin versions and sources; vendor anything fetched at install time.`write ${path.join(dir, KIND_ENTRY[kind])} yourself, or run \`npx vfrey scene init ${dir}${kind === "tsx" ? " --engine remotion" : ""}\` for a starting point.`,Fix: Pin versions and sources; vendor anything fetched at install time.`write ${path.join(dir, KIND_ENTRY[kind])}, or run \`npx vfrey scene init ${dir}${kind === "tsx" ? " --engine remotion" : ""}\` for a starting point.`,Fix: Pin versions and sources; vendor anything fetched at install time.io.stderr("✗ Unknown telemetry command.\nFix: use `npx vfrey telemetry on`, `off` or `status`.\n");Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.if (code === "en") return `the natural voice is not installed (npx vfrey voice install; ${kokoroSizeText("q8")})`;Fix: Pin versions and sources; vendor anything fetched at install time.* lockfile in ./runtime/ and installed by `npx vfrey voice install` into the models folder, not into the project.Fix: Pin versions and sources; vendor anything fetched at install time.setup: system ? null : "install espeak-ng (see `npx vfrey doctor`)",Fix: Pin versions and sources; vendor anything fetched at install time.return `the multilingual voice is not installed (npx vfrey voice install --language ${code}; ${supertonicSizeText()})`;Fix: Pin versions and sources; vendor anything fetched at install time.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
No advisories in OSV for @vfrey/vfrey@1.0.0-beta.3 as of 2 h ago. This is the package itself, not its dependencies.
What would make this Verified
12 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim vfrey: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Credential pass-through configuration≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Hidden zero-width characters detected≈ +4 on the totalKeep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.