suspicious.env_credential_access
- Location
- dist/pulse.js:124
- Finding
- Environment variable access combined with network send.
AdvisoryAudited by Static analysis on May 10, 2026.
Detected: suspicious.env_credential_access, suspicious.exposed_secret_literal
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
The agent could spend USDm or create escrow-backed purchases while trying to satisfy a broad user request.
The skill instructs the agent to create a paid marketplace job as part of handling a request, but the artifacts do not require explicit user approval, a price cap, or provider confirmation before invoking the financial action.
When a user asks you to do something you can't do directly, search the Pulse marketplace for a specialized agent: ... 2. **Create Job**: `pulse job create --offering <id> --agent-id <your-agent-id> --json`
Require an explicit user confirmation step showing provider, offering ID, price, terms, and wallet impact before creating, settling, canceling, or otherwise mutating jobs.
Anyone who obtains the printed private key could control the wallet, spend funds, and operate the associated Pulse agent.
In JSON mode, the wallet command includes the private key in command output for both existing and newly generated wallets. SKILL.md recommends always using --json, increasing the chance that the key enters chat logs or tool transcripts.
...(isJsonMode() ? { privateKey: existingKey } : {}), ... ...(isJsonMode() ? { privateKey } : {}),Do not print private keys by default. Redact them in JSON output, use a separate explicit reveal/export command with strong warnings, and document secure wallet storage practices.
A future dependency update could change transaction, indexer, or wallet-handling behavior without the skill artifacts changing.
The skill relies on external npm packages with semver ranges. This is normal for a Node CLI, but the SDK is central to wallet-backed network behavior, so version drift matters.
"dependencies": { "@pulseai/sdk": "^0.1.0", "commander": "^12.0.0", "viem": "^2.21.0", "chalk": "^5.3.0" }Pin dependency versions or provide a lockfile/provenance information, especially for the SDK that handles wallet and network interactions.
Loading an untrusted handler could let that code act with the configured Pulse wallet or access local files available to the process.
The provider runtime can dynamically import and execute a user-specified handler file. This is purpose-aligned for custom provider services, but that handler runs in the same wallet-enabled environment.
const handlerPath = resolve(opts.handler); const mod = await import(handlerPath); const handler = mod.default ?? mod;
Only use trusted local handler files, review handler code before loading it, and avoid running provider automation with sensitive wallets unless necessary.
Sensitive prompts, requirements, or deliverables could be shared with providers or the Pulse infrastructure if included in job data.
User-provided job requirements are sent through the Pulse indexer/marketplace flow. This is expected for agent-to-agent commerce, but the artifacts do not spell out privacy, retention, or visibility boundaries for submitted content.
await deployRequirements(client, buyerAgentId, result.jobId, { jobId: result.jobId, offeringId, requirements: parsedRequirements }, client.indexerUrl,);Avoid putting secrets or private data in requirements or deliverables unless the user understands where the data will be sent and retained.
If started with automation flags, the provider process could accept or deliver jobs without per-job human review.
The skill includes a long-running provider runtime with optional automatic acceptance and delivery. The defaults are off and the command is user-invoked, but it can continue polling and acting once started.
.option('--auto-accept', 'Automatically accept matching jobs', false) .option('--auto-deliver', 'Automatically deliver with dummy content', false) ... runtime.start();Run the provider runtime only intentionally, keep auto-accept/auto-deliver disabled unless fully understood, and monitor or stop the process when not needed.