Announcing Beacon: Self-improving memory for coding agents
← All skills
Skill

bootstrap

skill:openai/plugins#bootstrap

Project bootstrapping orchestrator for repos that depend on Vercel-linked resources (databases, auth, and managed integrations). Use when setting up or repairing a repository so linking, environment provisioning, env pulls, and first-run db/dev commands happen in the correct safe order.

Verdict
Suspicious

Risky behavior the analysis could not rule out.

Analyzed Oct 27, 2026, 23:15 UTC at 0722921

Dispute security verdict

If you believe this verdict is incorrect, submit a dispute and we'll review it.

3
findings
medium
highest severity
1
threat classes
5,479
files scanned
46/46
checks satisfied
0
package advisories

Why this verdict

  • suspicious: finding skill:plugins/vercel/skills/bootstrap:plugins/vercel/skills/bootstrap/SKILL.md:152:SUPPLY
  • suspicious: finding skill:plugins/vercel/skills/bootstrap:plugins/vercel/skills/bootstrap/SKILL.md:153:SUPPLY
  • suspicious: finding skill:plugins/vercel/skills/bootstrap:plugins/vercel/skills/bootstrap/SKILL.md:202:SUPPLY

Security findings 3

Supply chain

mediumContextual riskmedium confidence

The skill instructs the agent to run `npx shadcn@latest add ...` during bootstrap, fetching and executing the latest unpinned version of the shadcn CLI from the npm registry, so the executed code is whatever the mutable @latest tag resolves to at runtime.

npx shadcn@latest add button card input label textarea select switch tabs dialog alert-dialog sheet dropdown-menu badge separator skeleton table
vector:instruction
Counter-argument considered

The instruction's sink is executing whatever the mutable @latest tag of the shadcn CLI resolves to at runtime, which is not a pinned official-registry install, and no declared claim covers external CLI execution (D8 even confines runs to scripts that exist in package.json), so no carve-out, declaration, or mitigation kills the finding. The locator says line 152 while the quote sits at line 153 of the cited unit; a one-line offset does not falsify the claim.

Supply chain

mediumContextual risklow confidence

The bootstrap skill instructs the agent to run `npx shadcn@latest add ...`, which downloads and executes the unpinned latest version of the shadcn CLI from the npm registry during bootstrapping, so the executed code is not fixed to any reviewed version.

npx shadcn@latest add button card input label textarea select switch tabs dialog alert-dialog sheet dropdown-menu badge separator skeleton table
vector:instruction
Counter-argument considered

Same instruction and evidence as the line-152 finding, with the locator correctly matching line 153 where the npx shadcn@latest command actually appears; unpinned @latest execution falls outside the pinned official-registry-install carve-out and outside every declared claim (D8-D12), so the finding survives.

Supply chain

mediumContextual risklow confidence

The bootstrap skill ends with a directive ('=> skill: next-forge') that sends the agent to load the next-forge skill, which code established is NOT CONSUMED (outside every discovered agent skill, plugin, or MCP server), so the instructions ingested by following the pointer at runtime were never reviewed.

=> skill: next-forge — Full next-forge monorepo guide
vector:instruction
Counter-argument considered

The strongest case against the finding is that the pointer is openly visible and targets a sibling in-repo guide, but that fails: the NOT CONSUMED result confirms the pointer's target sits outside every discovered skill/plugin/MCP surface, so an agent following it ingests runtime content that was never reviewed; no carve-out, declared claim (D9-D12 or the description), or mitigation neutralizes the directive.

Open questions 3

What the analysis could not settle from the code alone.

[file request plugins/vercel/skills/next-forge/SKILL.md] The bootstrap skill ends with the pointer '=> skill: next-forge — Full next-forge monorepo guide'; does that referenced skill contain instructions beyond project bootstrapping (instruction overrides, secrecy, data egress, or auto-run steps)?
Agent hijacking
[file request plugins/vercel/skills/bootstrap/agents/openai.yaml] The interface.short_description value is truncated mid-word ('databases, auth, and m...') in both the raw and decoded views; what is the full untruncated description text?
Agent hijacking
[file request plugins/vercel/skills/next-forge/SKILL.md] The bootstrap skill ends with the directive '=> skill: next-forge — Full next-forge monorepo guide'; does the referenced next-forge skill exist in the repository, and does its content stay within the declared bootstrapping scope (linking, env provisioning, db/dev first-run) without undeclared installs, remote fetches, or data access?
Supply chain

Coverage gaps 14

Parts of the artifact the static analysis could not fully examine.

context:unanalyzable_binary binary content is only byte-scanned
plugins/codex-security/mcp/helpers.mjs.br.part-000
context:unanalyzable_binary macho content is only byte-scanned
plugins/codex-security/mcp/native/darwin-arm64/unix.node
context:unanalyzable_binary macho content is only byte-scanned
plugins/codex-security/mcp/native/darwin-x64/unix.node
context:unanalyzable_binary elf content is only byte-scanned
plugins/codex-security/mcp/native/linux-arm64-gnu/unix.node
context:unanalyzable_binary elf content is only byte-scanned
plugins/codex-security/mcp/native/linux-arm64-musl/unix.node
context:unanalyzable_binary elf content is only byte-scanned
plugins/codex-security/mcp/native/linux-x64-gnu/unix.node
context:unanalyzable_binary elf content is only byte-scanned
plugins/codex-security/mcp/native/linux-x64-musl/unix.node
context:unanalyzable_binary pe content is only byte-scanned
plugins/codex-security/mcp/native/win32-arm64/windows.node
context:unanalyzable_binary pe content is only byte-scanned
plugins/codex-security/mcp/native/win32-x64/windows.node
context:unanalyzable_binary binary content is only byte-scanned
plugins/codex-security/mcp/server.mjs.br.part-000
context:unanalyzable_binary binary content is only byte-scanned
plugins/codex-security/mcp/server.mjs.br.part-001
context:oversize archive member exceeds 8388608 bytes; truncated, no text
plugins/shopify/skills/shopify-admin/assets/admin_2026-04.json.gz!/admin_2026-04.json
context:decoded_views_exceeded 452 derived view(s) beyond the per-file view cap: decoded:charcode, decoded:rot13, decoded:unicode-escape
plugins/creative-production/mcp/server.bundle.mjs
context:bytes_unavailable yara-x: no bytes to scan
plugins/shopify/skills/shopify-admin/assets/admin_2026-04.json.gz!/admin_2026-04.json