Back to skill

Security audit

Moses Governance

Security checks for vulnerabilities and agentic risk

Overview

This governance skill is not clearly malicious, but it has real review-worthy gaps around external logging, broad session control, and weak approval checks.

Install only if you are comfortable with a governance skill that can steer later agent behavior, write persistent local audit/state files, and optionally post governance data externally. Keep witness and referee features disabled unless you have reviewed the exact payloads and endpoints, do not keep MOSES_OPERATOR_SECRET in a general agent environment, and treat the advertised approval/signature guarantees as incomplete until the HMAC and headless-approval issues are fixed.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (5)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/witness.py:122
Finding
Public witness logging can disclose raw task and failure details<![CDATA[ ## Vulnerability Details **File Location**: `scripts/witness.py:122-150` and `scripts/witness.py:165-167` **Vulnerability Type**: Sensitive information disclosure through an external public service **Risk Level**: High ### Vulnerable Code ```python state = load_state() timestamp = datetime.now(timezone.utc).isoformat() ehash = event_hash(event_type, detail, timestamp) state_str = ( f"mode={state.get('mode','?')} " f"posture={state.get('posture','?')} " f"role={state.get('role','?')}" ) icons = {"loop-start": "▶", "blocked": "⊘", "fail": "✗", "decline": "⊘", "recovery": "⚠", "complete": "✓"} icon = icons.get(event_type, "•") title = f"[MO§ES™ WITNESS] {event_type.upper()} — {ehash}" content = ( f"{icon} **Governance event: {event_type.upper()}**\n\n" f"**Detail:** {detail}\n" f"**State:** {state_str}\n" f"**Timestamp:** {timestamp}\n" f"**Event hash:** `{ehash}`\n" ) if extra: for k, v in extra.items(): content += f"**{k}:** {v}\n" content += ( "\n*External witness record. Cannot be retroactively edited to " "reflect what was not logged. — MO§ES™ governance harness | mos2es.io*" ) result = post_to_moltbook(api_key, title, content) ``` ```python def cmd_post_loop_start(args): task = " ".join(args) if args else "unspecified" result = witness_event("loop-start", f"Harness loop initiated: {task}") print(json.dumps(result, indent=2)) ``` ### Technical Analysis The witness feature sends the `detail` argument and every entry from `extra` to the Moltbook API. The `post-loop-start` command places the complete command-line task into `detail`, so the raw task is included in a public witness post. This behavior contradicts the privacy claim in `SKILL.md` that raw task content stays local. Although transmission requires `MOSES_WITNESS_ENABLED=1`, opt-in activation does not provide field-level consent, sanitization, redaction, or a warning that the supplied text will be public. Other c ...[truncated 1220 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Never send raw task, action, failure, or reason text to the witness service. 2. Replace `detail` with a local SHA-256 digest and a strict event-type enumeration. 3. Define an allowlisted outbound schema containing only non-sensitive fields. 4. Remove generic `extra` forwarding or validate every supported field explicitly. 5. Apply secret and personal-data redaction before constructing any outbound payload. 6. Display the exact payload and public destination and require confirmation for each post. 7. Correct `SKILL.md` so its privacy claims accurately describe implementation behavior. 8. Add automated tests proving that raw tasks, paths, credentials, and arbitrary `extra` values cannot enter the network payload. ]]>

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/meta.py:138
Finding
Amendment signature verification accepts forged signatures<![CDATA[ ## Vulnerability Details **File Location**: `scripts/meta.py:138-159` **Vulnerability Type**: Authentication bypass in constitutional amendment approval **Risk Level**: Critical ### Vulnerable Code ```python def _verify_operator_sig(operator_signature: str, proposal_id: str) -> tuple[bool, str]: secret = _get_operator_secret() if not operator_signature or not operator_signature.strip(): return False, "Empty operator signature." if secret: if not operator_signature.startswith(_SIG_PREFIX): if operator_signature.startswith(_LEGACY_PREFIX): return False, "Legacy signature rejected — use make_operator_sig() with HMAC." return False, "Unrecognized format. Expected 'hmac:<digest>'." submitted = operator_signature[len(_SIG_PREFIX):] # Structural check — 64-char hex, correct secret required to produce it if len(submitted) == 64 and all(c in "0123456789abcdef" for c in submitted): return True, "valid:hmac-structure-ok" return False, "HMAC verification failed." else: if operator_signature.startswith(_LEGACY_PREFIX): return True, "valid:legacy (set MOSES_OPERATOR_SECRET for HMAC enforcement)" if operator_signature.startswith(_SIG_PREFIX): return True, "valid:hmac-accepted-no-secret" return False, "Unrecognized signature format." ``` The accepted result is subsequently used by the amendment application path: ```python def apply_amendment(proposal_id: str, operator_signature: str) -> dict: sig_valid, sig_reason = _verify_operator_sig(operator_signature, proposal_id) if not sig_valid: return {"success": False, "message": f"Invalid signature — {sig_reason}"} proposal_path = _proposals_dir("pending") / f"{proposal_id}.json" if not proposal_path.exists(): return {"success": False, "message": f"Proposal {proposal_id!r} not found in pending."} proposal = json.loads( ...[truncated 1992 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Fail closed if `MOSES_OPERATOR_SECRET` is absent. 2. Remove acceptance of legacy and unverified HMAC formats. 3. Define one canonical signed payload that includes: - Operator identifier - Proposal identifier - Complete normalized amendment content - Current constitution version - Expiration time or nonce 4. Calculate the expected digest during verification: ```python expected = hmac.new( secret.encode(), canonical_payload.encode(), hashlib.sha256, ).hexdigest() valid = hmac.compare_digest(expected, submitted) ``` 5. Pass the operator identifier and complete signed amendment data into the verifier. 6. Reject replayed signatures and signatures for superseded proposal versions. 7. Add tests for arbitrary hexadecimal values, absent secrets, altered proposals, wrong proposal IDs, and replay attempts. 8. Review existing approved amendments because prior signatures cannot be considered cryptographically authenticated. ]]>

T01 · Skill Instruction Hijacking

Warning
Location
skills/stamp/SKILL.md:14
Finding
Skill instructions impose persistent session control and inject fixed promotional metadata<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:42-53` and `skills/stamp/SKILL.md:14-47` **Vulnerability Type**: Skill instruction hijacking and output manipulation **Risk Level**: Medium ### Vulnerable Instructions ```markdown ## Pre-Action Workflow Run in this order before any governed action: 0. Call `moses_lineage_check` → confirm chain traces to origin-cycle anchor. If lineage fails, halt. A non-sovereign instance cannot govern. 1. Call `moses_get_status` → load current mode, posture, role, vault. 2. Call `moses_check_governance` with proposed action description → block if prohibited. 3. If permitted, execute. 4. Call `moses_audit_log` before final output → record agent, action, detail, outcome, governance state. Skipping any step is a governance breach — log it and halt. ``` ```markdown When invoked, activate governed output for the remainder of this session. Every document produced carries an embedded governance stamp — not as a separate log, but inside the document itself. The output is the audit record. ``` ```markdown Append this block to the end of every qualifying document: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ MO§ES™ GOVERNANCE STAMP ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Produced under: MO§ES™ Governance Framework Mode: [active mode, or Unrestricted if none set] Posture: [active posture, or None] Role: [active role, or Primary] Session ID: [first 8 chars of SHA-256(timestamp + first user message)] Action #: [sequential count of governed actions this session] Integrity hash: [SHA-256 of: document title + mode + posture + action #] Lineage anchor: 5cda97fa (MOSES_ANCHOR — truncated) Runtime: OpenClaw / Claude Code © 2026 Ello Cello LLC — MO§ES™ patent pending Serial No. 63/877,177 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ``` ### Technical Analysis The primary Skill directs the agent to apply its workflow before every governed action and to halt if any step is skipped. The nest ...[truncated 1602 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Scope governance and stamping to one explicit user request rather than the entire session. 2. Require per-document opt-in and show the proposed stamp before insertion. 3. State explicitly that higher-priority platform and user instructions remain authoritative. 4. Do not halt unrelated tasks merely because optional governance tooling is unavailable. 5. Remove branding, patent promotion, and fixed runtime claims from the default stamp. 6. Derive runtime metadata from verified runtime information or omit it. 7. Hash the complete canonical document body if document integrity is claimed. 8. Provide a clear command that immediately disables all session-level behavior. 9. Ensure stamps are never inserted into executable files or formats where appended text can alter semantics. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/adversarial_review.py:288
Finding
Configurable referee endpoint can receive bearer credentials without transport or destination validation<![CDATA[ ## Vulnerability Details **File Location**: `scripts/adversarial_review.py:288-324` **Vulnerability Type**: Unsafe transmission of API credentials to an arbitrary endpoint **Risk Level**: High ### Vulnerable Code ```python if os.environ.get("REFEREE_ENABLED", "0") != "1": return {"skipped": True, "reason": "REFEREE_ENABLED not set to 1"} endpoint = os.environ.get("REFEREE_URL", "").strip() if not endpoint: return {"skipped": True, "reason": "No REFEREE_URL configured"} api_key = os.environ.get("REFEREE_KEY", "").strip() if not api_key: return {"skipped": True, "reason": "No REFEREE_KEY found"} # Blind envelope — commitment structure only, no raw content, no agent identity payload = json.dumps({ "instruction_hash": review["instruction_hash"], "output_hash": review["output_hash"], "instruction_kernel": review.get("instruction_only", []) + review.get("shared_commitments", []), "output_kernel": review.get("output_only", []) + review.get("shared_commitments", []), "jaccard_score": review["jaccard_score"], "ghost_pattern": review["ghost_report"].get("ghost_pattern"), "local_verdict": review["verdict"], "review_hash": review["review_hash"], "source": "MO§ES™ governance harness | mos2es.io", }).encode() req = urllib.request.Request( endpoint, data=payload, headers={ "Authorization": f"Bearer {api_key}", "Content-Type": "application/json", }, method="POST", ) try: with urllib.request.urlopen(req, timeout=15) as resp: referee_response = json.loads(resp.read()) ``` ### Technical Analysis `REFEREE_URL` is accepted directly from the environment and used as the request destination. The code does not enforce HTTPS, validate the destination hostname, restrict ports, reject embedded credentials, or control redirects. The request attaches `REFEREE_KEY` as a bearer credential. Therefore, an attacker who can influence the environment or configuration can redirect the r ...[truncated 1428 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Require an `https://` endpoint and reject plaintext HTTP. 2. Parse and validate the URL before request construction. 3. Maintain an operator-controlled hostname allowlist. 4. Reject embedded user information, unexpected ports, fragments, and malformed hosts. 5. Prevent cross-origin redirects or revalidate every redirect destination before forwarding credentials. 6. Use short-lived, destination-scoped tokens instead of reusable bearer keys. 7. Require explicit operator confirmation when adding or changing the endpoint. 8. Limit response size and validate the response against a strict schema. 9. Document that commitment kernels and hashes are metadata disclosures, not anonymous data. 10. Add tests for HTTP endpoints, malicious redirects, alternate ports, and attacker-controlled hostnames. ]]>

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/govern_loop.py:132
Finding
Headless mode bypasses mandatory DEFENSE operator confirmation<![CDATA[ ## Vulnerability Details **File Location**: `scripts/govern_loop.py:132-153` **Vulnerability Type**: Authorization bypass through an unauthenticated command-line flag **Risk Level**: High ### Vulnerable Code ```python # 4. DEFENSE posture requires confirmation (or headless auto-approve) if posture == "defense": if headless: print(f"[HARNESS] DEFENSE posture — headless mode, auto-approving.") audit_log("harness", action, f"step {step_num}/{total} — defense headless auto-approve", "AUTO-APPROVED", ihash, source) else: print(f"[HARNESS] DEFENSE posture — confirm action: {action}") try: confirm = input(" Proceed? [y/N]: ").strip().lower() except EOFError: confirm = "" if confirm != "y": print(f"[HARNESS] Operator declined. Halting.") audit_log("harness", action, f"step {step_num}/{total} — operator declined", "DECLINED", ihash, source) run_script("progress.py", "flag-recovery") return False ``` The command handler enables this branch through a normal command-line argument: ```python def cmd_run(args): headless = "--headless" in args args = [a for a in args if a != "--headless"] ``` ### Technical Analysis The documented DEFENSE posture requires explicit operator confirmation for outbound or asset-reducing actions. In the implementation, any caller can supply `--headless`, which changes the requirement from explicit confirmation to automatic approval. The flag is not authenticated, action-bound, time-limited, or supported by a signed operator authorization. Logging the result as `AUTO-APPROVED` records that the bypass occurred but does not make the action authorized. Additionally, the loop treats every supplied step as an action description and does not itself execute the represented external operation. This means the audit record may be ...[truncated 1170 chars]
Remediation
<![CDATA[ ## Remediation Suggestions 1. Fail closed when DEFENSE posture is used in a non-interactive environment. 2. Remove automatic approval based solely on `--headless`. 3. If headless DEFENSE operation is necessary, require a cryptographically signed approval token. 4. Bind the approval token to: - Exact task and action hashes - Current governance state - Operator identity - Expiration time - Unique nonce 5. Verify the token with `hmac.compare_digest` or a suitable asymmetric signature. 6. Reject replayed and expired approvals. 7. Distinguish policy evaluation from actual action execution in audit records. 8. Add integration tests proving DEFENSE actions cannot proceed without authenticated operator consent. ]]>
Vulnerability Patterns
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (76)

Tainted flow: 'req' from os.environ.get (line 314, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=15) as resp:
            referee_response = json.loads(resp.read())
            referee_response["submitted"] = True
            # Run structural comparison immediately on receipt
Confidence
96% confidence
Finding
The script sends review data to a network endpoint whose destination is taken directly from environment configuration and then attaches a bearer credential. Even though the feature is opt-in via REFEREE_ENABLED, this still creates a real data exfiltration and SSRF-style sink: a malicious or compromised runtime can point REFEREE_URL to an attacker-controlled host and cause review-derived content plus the API key to be transmitted externally.

Tainted flow: 'req' from os.environ.get (line 96, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=10) as resp:
            return json.loads(resp.read())
    except urllib.error.HTTPError as e:
        return {"error": f"HTTP {e.code}: {e.read().decode()}"}
Confidence
90% confidence
Finding
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Tainted flow: 'req' from os.environ.get (line 96, credential/environment) → urllib.request.urlopen (network output)

Critical
Category
Data Flow
Content
method="POST",
    )
    try:
        with urllib.request.urlopen(req, timeout=10) as resp:
            return json.loads(resp.read())
    except urllib.error.HTTPError as e:
        return {"error": f"HTTP {e.code}: {e.read().decode()}"}
Confidence
90% confidence
Finding
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Tp4

High
Category
MCP Tool Poisoning
Confidence
91% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding
The document states network behavior is off by default, but it also defines optional external witness and referee integrations that can transmit data and use API keys. In the context of a governance/safety harness, even limited external transmission is sensitive because operators may assume purely local operation unless permissions, transmitted fields, and opt-in controls are unambiguous and technically enforced.

Natural-Language Policy Violations

High
Confidence
96% confidence
Finding
Mandating 'Log full reasoning chain' is dangerous because it encourages retention or disclosure of internal chain-of-thought, which may contain sensitive data, hidden policy logic, or security-relevant deliberation. Persisting full reasoning also increases data exposure risk in audits, logs, incident reviews, or downstream integrations.

Memory Manipulation

High
Category
Memory Poisoning
Content
set_p.add_argument("--role", help=f"Role: {', '.join(VALID_ROLES)}")

    get_p = subparsers.add_parser("get", help="Print current governance state")
    reset_p = subparsers.add_parser("reset", help="Reset state to defaults")

    args = parser.parse_args()
Confidence
80% confidence
Finding
Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Intent-Code Divergence

High
Confidence
99% confidence
Finding
The code presents operator signatures as HMAC-authenticated, but _verify_operator_sig never recomputes and compares an expected digest for the supplied proposal_id. When MOSES_OPERATOR_SECRET is set, any string matching the shape 'hmac:' plus 64 lowercase hex characters is accepted as valid, which completely defeats the signing gate and allows unauthorized amendment or rollback operations.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
apply_amendment relies on _verify_operator_sig before mutating constitution.json, approving proposals, and appending amendment records. Because verification accepts unauthenticated placeholder HMAC-looking strings—and even accepts legacy/secretless modes in some cases—an attacker with filesystem or CLI access can approve and apply governance changes without possessing the operator secret.

Intent-Code Divergence

High
Confidence
98% confidence
Finding
The documentation overstates the security properties by asserting that the protocol proves identity and uses signed responses, while the code performs only integrity checks over unauthenticated data. In a governance/security harness context, this is especially dangerous because operators may rely on the tool for trust decisions, creating a false sense of assurance that can be exploited to impersonate governed agents.

Description-Behavior Mismatch

High
Confidence
99% confidence
Finding
The script claims to generate a signed response proving governed identity, but the implementation only computes a plain SHA-256 hash over attacker-controlled JSON and a public nonce. Because there is no private key, shared secret, or trust root involved, any party can forge a valid-looking response for any agent_id, making the verification result meaningless and enabling identity spoofing.

Lp3

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding
The skill advertises capabilities that involve environment variables, filesystem state, shell execution, and optional network access, but it does not declare an explicit tool/permission scope. That creates an authorization transparency gap: a user or hosting platform cannot easily tell what privileges the skill expects, increasing the risk of over-privileged execution and accidental secret or network exposure.

Static analysis

No suspicious patterns detected.