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

websearch

skill:primeintellect-ai/prime-agent#websearch

Search Google via the Serper API. Configure access via /mcp, then Serper (web search). Takes one query and returns titles, URLs, snippets, and knowledge-graph data.

Verdict
Suspicious

Risky behavior the analysis could not rule out.

Analyzed Oct 27, 2026, 23:46 UTC at c13415b

Dispute security verdict

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

1
findings
high
highest severity
1
threat classes
1,605
files scanned
45/48
checks satisfied
0
package advisories

Why this verdict

  • suspicious: finding skill:skills/websearch:skills/websearch/pyproject.toml:6:SUPPLY

Security findings 1

Supply chain

highContextual risklow confidence

The skill's packaging manifest lists the dependency `prime-agent-runtime` with no version constraint, an undeclared moving remote supply-chain reference that the declared Serper web-search purpose does not pin.

prime-agent-runtime
conceal:remotevector:metadata
Counter-argument considered

The manifest factually lists `prime-agent-runtime` with no version constraint and nothing shown pins or declares it; the carve-out covers only pinned official-registry installs, so the unpinned moving reference survives at contextual risk.

Execution chain 12

What it calls, runs, installs, reads and writes, with the line that does it.

Refuted findings 2

Candidates the review stage examined and rejected, kept for transparency.

Credential access

criticalRefutedlow confidence

The skill implementation reads the Prime Agent auth.json credential store on every search call to obtain the Serper API key, extending credential access beyond the documented environment-variable channel to the agent's stored key file whose other contents are not constrained by the shown evidence.

Read auth.json on each call (not just the injected env var) so a key added
Why it was refuted

The claim is contradicted by the shown code: access is scoped to the stored Serper credential only and the key is used solely as the X-API-KEY header to the hardcoded google.serper.dev endpoint, and the auth.json read implements the configuration channel the artifact itself documents (paste key via /mcp, then 'the key is saved, web search works automatically'), i.e. the declared-core-capability credential flow rather than an unconstrained extension beyond an env-var channel.

Credential access

criticalRefutedlow confidence

The skill resolves the 'serper' credential value from the agent's auth.json as an environment-variable name when it is not a literal or command reference, so any environment variable named there is read and transmitted to google.serper.dev in the X-API-KEY header on each search.

return (os.environ.get(value) or value).strip()
Why it was refuted

The env-name indirection is the wrapped-service API-key resolution applied to the agent's own stored 'serper' credential, openly documented in the code as the stored-key convention, and the resolved value flows only into the X-API-KEY header of the hardcoded google.serper.dev endpoint — the env-API-key-for-wrapped-service carve-out, with no attacker-controlled sink or broader env harvesting.

Coverage gaps 9

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

context:unanalyzable_binary binary content is only byte-scanned
crates/pa-core/src/auth/manager.rs
context:unanalyzable_binary binary content is only byte-scanned
scripts/release/native-compat/photon_rs_bg.wasm
skill_frontmatter_invalid missing name/description frontmatter
skills/factory/SKILL.md
context:frontmatter_unparseable mapping values are not allowed here
skills/factory/SKILL.md
ledger_finding_without_valid_finding run 1: instruction-surface.0 SRC:639d979c76939a3f
ledger_finding_without_valid_finding run 1: instruction-surface.0 SRC:0df16fcb99c65e76
ledger_finding_without_valid_finding run 1: behavior-chains.0 SRC:639d979c76939a3f
invalid_judge_finding instruction-surface.0
invalid_judge_finding behavior-chains.0