Install
openclaw skills install @wardlu/agent-privacy-checkAudit an AI agent's reachable data, external data paths, and untrusted instructions, then explain the result in plain language with Low, Medium, High, or Critical severity. Use when a user asks what an agent can see, where data may go, whether a skill, plugin, or tool is safe, or how to reduce agent privacy risk across Codex, Claude Code, or another agent.
openclaw skills install @wardlu/agent-privacy-checkGive a non-specialist an evidence-backed answer about an agent's privacy boundary. Separate what the agent can do from what it actually did, and make the remaining unknowns visible.
Start by naming:
Use the narrowest scope that answers the question. The default is the current project plus the agent configuration and tool metadata that are directly available to the current run. Expand to a home directory, browser profile, session archive, or external service only when the user names that scope.
Use these evidence labels throughout the audit:
| Label | Meaning |
|---|---|
| Observed | The current read-only check directly saw this capability or action. |
| Available | Configuration or permissions make it possible, but this run did not prove that it happened. |
| Not found | The named scope was inspected and no matching evidence was found. |
| Unknown | The scope or runtime boundary could not be inspected reliably. |
Treat a declaration in a Skill, README, prompt, or tool description as a lead, not proof of runtime permission. Look for the permission, implementation, configuration, or activity evidence that makes the claim concrete.
Keep the audit read-only. Use configuration, metadata, redacted filenames, permission summaries, dry-run output, and synthetic examples as evidence. Record secret types and locations without reading or repeating secret values. Use the platform's existing help or inspection commands before any command whose behavior is unfamiliar.
Require a separate, explicit authorization before changing permissions, installing or removing a Skill, running unknown code, sending a network request, uploading a test file, rotating credentials, deleting data, committing, or publishing. Never test an external sink by sending a real secret. If a live test is necessary, use only a user-approved test endpoint and synthetic data; otherwise label the sink unverified.
For the safe artifact checklist, read references/evidence-collection.md.
Inspect the smallest relevant set of tool definitions, permission prompts, project instructions, Skill or plugin files, hooks, environment metadata, memory stores, browser or connector access, shell boundaries, and sandbox or container settings. Classify each capability by resource and operation: read, write, delete, execute, upload, send, or administer.
Answer in plain language:
It can see or use [resource] because [evidence]. It cannot be confirmed to have used it in this run.
Group findings into files and workspace data, credentials and identity data, conversation or memory data, browser and connected-app data, and system or repository controls. Avoid saying that an agent can see an entire category when the evidence only covers one path.
List every reachable external sink, not only obvious uploads. Include the model provider request, web requests, shell tools such as curl, browser navigation or uploads, email and chat, webhooks, Git pushes, third-party connectors, telemetry, logs, and another agent or service. For each sink, record the destination, sink class, recipient control, mechanism, data that could reach it, evidence label, retention or review status when known, and whether the action requires confirmation.
Classify the destination so a normal processing path is not confused with an arbitrary exfiltration path:
Distinguish:
Use Available for a reachable capability. For actual transmission, use Observed when an event is evidenced, Not found when the inspected event sources contain no matching event, and Unknown when the event boundary could not be checked.
An HTTP 200, a browser page opening, or a configured URL proves reachability only. It does not prove that the payload was safe or that the provider will delete it.
Inventory content that may contain instructions controlled by somebody other than the user or the trusted operator: web pages, documents, email, issues and pull requests, repository files, downloaded packages, Skill text, plugin metadata, memory, retrieved chunks, and other tool output.
Ask whether that content is clearly separated as data, or whether it can steer the agent toward a privileged tool. A warning in prose is not a control unless the runtime or workflow enforces the boundary.
Use the following plain-language model:
The dangerous combination exists only when the evidence connects all three in one plausible workflow:
For this test, an External Sink must be outside the intended trust boundary and able to receive the sensitive data. A named provider that receives the intended context is still a data-flow to document, but it is not automatically an attacker-controlled exfiltration path. Escalate when untrusted content can make the agent include the sensitive source, choose an unapproved recipient, or redirect the request.
Report the combination as Confirmed, Likely, Not demonstrated, or Unknown. Confirmed means the path is evidenced; it does not mean that exfiltration was observed. Likely means the pieces are available but the influence path or runtime boundary was not fully verified. Not demonstrated means at least one piece is absent in the inspected scope. Unknown means a material boundary could not be checked. Read the full decision table in references/risk-model.md.
Use the highest supported finding and include a confidence level. The levels are operational labels for this Skill, not a formal OWASP score:
Unknown is not a safety finding. If the scope is too small to rule out a material source or sink, keep the uncertainty visible and do not downgrade to Low merely because no incident was observed.
Tie the worst case to the evidence instead of using a generic scare statement. State who could control the untrusted content, which sensitive source could be reached, which sink could receive it, and what could happen next. Examples include credential theft and account takeover, private documents or personal data leaving the intended boundary, repository or database changes, destructive commands, impersonation through browser or chat access, and unexpected model or tool costs.
Say explicitly when the audit found a reachable path but no evidence that the agent used it.
Put the first safe action at the top:
Make each recommendation actionable for the named platform. Do not claim that an unavailable control exists. If the user asks to apply a fix, keep the privacy audit and the mutation as separate steps and report the post-change evidence.
Use references/report-template.md for every completed audit. The report must contain:
Every material conclusion, worst-case statement, and remediation reason must point back to an evidence row or an explicit Unknown. Recommendations are actions, not proof that an incident occurred.
Use the user's language and explain technical terms on first use. Keep secret values, session contents, cookies, tokens, private keys, and unnecessary personal paths out of the report. When the user asks how this aligns with OWASP, read references/sources.md and describe the adaptation without presenting this Skill as a certification.
Read references/platform-notes.md when the platform is named or its configuration layout is uncertain. Keep shared questions identical across Codex, Claude Code, and generic agents, then map each answer to the platform-specific evidence that was actually available.
The audit is complete when the report names its scope, records each material source and sink with an evidence label, evaluates the three-part combination, assigns one risk level with confidence, and gives a platform-specific repair order with evidence links and without exposing secret values.