Refuted findings 8
Candidates the review stage examined and rejected, kept for transparency.
Persistence
criticalRefutedlow confidenceinstallClient writes an MCP server entry into the coding agent's config files (mcpServers/vscode/opencode/codex TOML), modifying agent control-plane configuration; this matches the installer's apparent purpose but registers a rolling npx-launched server persistently.
writeMcpServers(file, opts.apiUrl)
Why it was refuted
installClient is the installer's explicitly documented core function of writing the MCP server config for the chosen agent. It is not hidden, and it is not an MCP tool, so the read-only tool claims are not contradicted.
Persistence
criticalRefutedmedium confidenceThe `install` CLI command writes MCP server entries (npx -y identityforge@latest mcp) into agent config files (.mcp.json, .cursor/mcp.json, .gemini/settings.json, ~/.codex/config.toml, etc.); this is the command's openly described purpose and not exposed as an MCP tool, so the 'read-only' tool claims are not actually contradicted, but the agent control-plane write with an unpinned @latest spec is a real supply-chain/persistence capability.
path: (cwd) => join(cwd, ".mcp.json"),
Why it was refuted
The config path table belongs to the openly documented `install` command, the declared core capability. It is not an MCP tool, so the detector's contradiction with the tools' read-only claims is a false positive.
Data exfiltration
highRefutedmedium confidenceThe API client contains a best-effort analytics/telemetry call reporting the outcome of local commands to the API, which is not mentioned in the declared package description or tool descriptions; the comment says paths, filenames, contents and exception text are excluded.
Analytics remains best-effort and cannot
Why it was refuted
The call reports a bounded outcome (enums and counts) to the plugin's own first-party API, honors an IDENTITYFORGE_TELEMETRY=0 opt-out, and is documented in code comments as excluding paths, filenames, contents and exception text. The ImplementationOutcome type holds no sensitive data, so no exfiltration chain exists. The D43 contradiction is spurious: it concerns graceful degradation, not telemetry.
Credential access
highRefutedlow confidenceThe shared HTTP client attaches the user's Identity Forge API key as a Bearer token to every request sent to a base URL that the artifact's own comments say is overridable by env var or config file, so a redirected base would receive the key.
if (key) headers.Authorization = `Bearer ${key}`Why it was refuted
Sending the user's own Identity Forge API key as a Bearer token to the Identity Forge API is the wrapped-service API-key carve-out. The base URL can only be redirected by the user's own env or config, so there is no attacker-controlled source-to-sink chain.
Supply chain
highRefutedlow confidenceThe server instructions tell the agent to run the vendor's own package via unpinned `npx --yes identityforge@latest login`, fetching mutable remote code at runtime without a version pin.
run npx --yes identityforge@latest login
Why it was refuted
The instruction tells the user to run the vendor's own CLI login to authenticate the wrapped service. This is a vendor installer/CLI carve-out and is declared, not concealed.
Supply chain
highRefutedlow confidenceServer instructions shown to the agent tell it to run an unpinned `npx --yes identityforge@latest login`, which fetches and runs whatever package version is latest on the registry at that moment.
run npx --yes identityforge@latest login
Why it was refuted
This duplicates the same server-instructions line: the vendor's own CLI login for authentication, openly stated as part of the product.
Supply chain
highRefutedlow confidenceThe skill tells the agent to have the user run an unpinned `npx --yes identityforge@latest login`, which fetches and runs whatever the latest registry package is without a prompt.
npx --yes identityforge@latest login
Why it was refuted
The skill tells the agent to have the user run the vendor's own CLI login in a fenced install block, to authenticate the wrapped service. This is the vendor installer carve-out, and the human runs it rather than the agent.
Reconnaissance
lowRefutedlow confidencecheck_applied_theme's description claims it 'touches no file', yet it reads identityforge.json and hashes recorded artifacts in a caller-chosen directory, so the safety wording understates its filesystem reads (the apply_theme description also calls itself the only tool touching the filesystem).
Read-only: it writes nothing and touches no file, so it is safe to call at the start of any session.
Why it was refuted
The same description openly says the tool reads the identityforge.json stamp and hashes the recorded artifacts. 'Touches no file' in context means no modification, so the read behaviour is declared and the wording is not concealment.