Back to skill

Security audit

Helius x DFlow

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for Solana trading development, but it asks users to install mutable external tooling and provides under-scoped guidance for real payments, key storage, KYC, and transaction signing.

Review before installing. Use a pinned, trusted Helius MCP version, restrict where it can read/write, avoid storing wallet keys or JWTs on shared machines, require explicit human approval before any signup, renewal, upgrade, or transaction signing, validate DFlow transaction instructions before signing, and prefer HTTPS plus backend-secret handling for API keys and KYC flows.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • 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 (6)

T09 · Insecure Skill Coding Practices

Error
Location
references/integration-patterns.md:15
Finding
Externally Supplied Transactions Are Signed Without Documented Instruction Validation<![CDATA[ ## Vulnerability Details **File Location**: `references/integration-patterns.md`, lines 15-20 and 54-76 **Vulnerability Type**: Blind signing of untrusted serialized transactions **Risk Level**: High The integration pattern directs applications to retrieve a base64-encoded transaction from DFlow, deserialize it, sign it with the user's keypair, and submit it to Helius Sender. ```typescript const quoteRes = await fetch(`${DFLOW_API}/order?${params}`); const txBuffer = Buffer.from(quote.transaction, 'base64'); const sendRes = await fetch(SENDER_URL, { // ... params: [ Buffer.from(transaction.serialize()).toString('base64'), { encoding: 'base64', skipPreflight: true, maxRetries: 0 } ] }); ``` The documented flow at lines 15-20 explicitly describes the intervening steps as deserializing and signing the returned transaction. The same requirement is repeated in `references/dflow-spot-trading.md` around lines 57-58: ```text 2. Deserialize and sign the returned base64 transaction ``` ### Technical Analysis A serialized Solana transaction returned by a remote API is an untrusted authorization request. Signing it gives cryptographic authority to every instruction contained in the transaction. The guidance does not require the client to inspect or constrain: - Program IDs invoked by the transaction. - Source and destination token accounts. - SOL or token transfer recipients. - Transfer amounts and quoted minimum output. - Fee payer and required signers. - Address lookup tables and resolved account keys. - Compute-budget instructions or Jito tip recipients. - Whether the transaction corresponds to the quote displayed to the user. - Whether unexpected account-closing, delegate, approval, or authority-change instructions are present. TLS reduces ordinary network tampering but does not protect against a compromised DFlow service, compromised backend proxy, malicious application configuration, or a logic error that associates one user's quote w ...[truncated 1717 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Treat every transaction returned by DFlow as untrusted until validated. - Deserialize the transaction and resolve all static and address-lookup-table account keys before signing. - Allowlist expected program IDs, including the System Program, SPL Token programs, approved DFlow programs, Compute Budget Program, and any explicitly required associated-token programs. - Reject unexpected transfer, delegate, authority-change, account-close, or arbitrary program instructions. - Verify the fee payer, required signers, input mint, output mint, source owner, destination owner, transfer amount, minimum output, slippage, platform-fee account, and Jito tip account against independently constructed expectations. - Bind the returned transaction to the exact quote and user request shown for approval. - Display a human-readable transaction summary and obtain explicit user confirmation immediately before signing. - Prefer wallet-adapter signing over loading private key material into application code. - Simulate the validated transaction and reject simulation errors or unexpected balance changes. - Keep submission and signing separate: the backend may obtain a quote, but signing should remain under direct user control. - Do not rely on TLS, Sender, or simulation as substitutes for semantic instruction validation. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
references/helius-wallet-api.md:130
Finding
API Keys Are Embedded in Request URLs<![CDATA[ ## Vulnerability Details **File Location**: `references/helius-wallet-api.md`, lines 130-132 **Vulnerability Type**: Credential exposure through URL query parameters **Risk Level**: Medium The Wallet API examples place the Helius API key directly in URL query strings: ```typescript const identity = await fetch(`${BASE}/v1/wallet/${address}/identity?api-key=${KEY}`).then(r => r.ok ? r.json() : null); const funding = await fetch(`${BASE}/v1/wallet/${address}/funded-by?api-key=${KEY}`).then(r => r.ok ? r.json() : null); const { data: history } = await fetch(`${BASE}/v1/wallet/${address}/history?api-key=${KEY}&limit=20`).then(r => r.json()); ``` The same pattern appears in: - `references/integration-patterns.md`, line 237: ```typescript const response = await fetch(`https://mainnet.helius-rpc.com/?api-key=${HELIUS_API_KEY}`, { ``` - `references/helius-priority-fees.md`, lines 30 and 53: ```typescript const response = await fetch(`https://mainnet.helius-rpc.com/?api-key=${API_KEY}`, { ``` ### Technical Analysis Query-string credentials commonly propagate beyond the component that constructs the request. Depending on deployment and logging configuration, the complete URL may be recorded in: - Browser history and developer tooling. - Reverse-proxy and load-balancer access logs. - CDN, WAF, observability, and APM systems. - Exception reports and application diagnostics. - Network monitoring products. - Screenshots, copied URLs, or support bundles. The integration reference explicitly states that Helius RPC and DAS may be called directly from a browser. A browser application cannot safely retain a long-lived service API key: users, browser extensions, injected scripts, and anyone with developer-tool access can extract it. This exceeds least privilege because a client receives a reusable project credential when it only needs access to a narrow operation. Sending the key to the intended Helius endpoint is necessary for authenticated API access, but ex ...[truncated 1022 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Do not embed long-lived Helius keys in browser-delivered JavaScript. - Route authenticated Helius requests through a controlled backend. - Use an authorization header instead of a query parameter if the relevant Helius API supports header-based authentication. - If query-string authentication is required by the provider, ensure URL query strings are redacted from proxy, CDN, APM, WAF, and application logs. - Create restricted, environment-specific API keys and apply provider-side origin, IP, endpoint, quota, and rate restrictions where available. - Keep keys in a server-side secret manager rather than source files or public environment variables. - Add per-user authentication, authorization, rate limits, and operation allowlists to the backend facade. - Rotate any key that has been included in frontend builds, logs, screenshots, or diagnostics. - Update examples to clearly distinguish server-only variables from public frontend configuration. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
references/helius-sender.md:80
Finding
Backend Sender Guidance Uses Unencrypted HTTP for Signed Transaction Submission<![CDATA[ ## Vulnerability Details **File Location**: `references/helius-sender.md`, lines 80-90 **Vulnerability Type**: Plaintext transport of signed transactions and RPC responses **Risk Level**: Medium The Sender reference recommends regional HTTP endpoints for backend systems: ```text http://slc-sender.helius-rpc.com/fast # Salt Lake City http://ewr-sender.helius-rpc.com/fast # Newark http://lon-sender.helius-rpc.com/fast # London http://fra-sender.helius-rpc.com/fast # Frankfurt http://ams-sender.helius-rpc.com/fast # Amsterdam http://sg-sender.helius-rpc.com/fast # Singapore http://tyo-sender.helius-rpc.com/fast # Tokyo ``` The file later repeats plaintext regional health-check URLs around lines 400-413. ### Technical Analysis HTTP provides neither confidentiality nor server authentication nor transport integrity. A signed Solana transaction cannot normally be modified without invalidating its signature, but a network-positioned attacker can still: - Observe transaction contents before normal public propagation. - Correlate source infrastructure with wallet and trading activity. - Front-run or copy time-sensitive transaction information. - Drop, delay, replay, or selectively block submissions. - Replace or manipulate JSON-RPC responses. - Return false signatures, errors, or status data to application logic. - Observe Sender API keys if a key-bearing query string is ever used with a plaintext endpoint. For latency-sensitive trading, early disclosure of transaction intent is itself security-relevant. Recommending plaintext transport is not necessary for the declared transaction-submission functionality when an HTTPS endpoint is already documented. ### Attack Path 1. A backend follows the regional endpoint guidance and submits signed transactions over HTTP. 2. An attacker controls or monitors a network segment between the backend and endpoint, such as compromised routing, a hostile hosting network, or an intercepti ...[truncated 793 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Require HTTPS for all transaction-submission and health-check traffic. - Remove plaintext regional endpoints from recommended production examples unless they are used only through a documented authenticated private network. - Prefer `https://sender.helius-rpc.com/fast` when regional HTTPS endpoints are unavailable. - If latency requires direct regional connectivity, use TLS-capable regional endpoints, a VPN, private peering, or an authenticated encrypted tunnel. - Validate TLS certificates and do not disable certificate verification. - Treat JSON-RPC responses as untrusted and verify that returned transaction signatures match the submitted transaction. - Never append an API key to a plaintext URL. - Document the confidentiality and front-running consequences of transmitting signed trading transactions without encryption. ]]>

T08 · Insecure Dependencies

Error
Location
SKILL.md:34
Finding
Recommended MCP Installation Executes an Unpinned Package Through npx<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, line 34 **Vulnerability Type**: Unpinned third-party package execution **Risk Level**: High The Skill instructs users to install and execute the latest available MCP package: ```bash claude mcp add helius npx helius-mcp@latest ``` The same command is repeated in `SKILL.md` line 283, `install.sh` line 71, and `references/helius-onboarding.md` line 190. The installer itself does not execute this command; it prints it as a required next step. The risk is activated when a user follows the printed or Skill-provided instruction. ### Technical Analysis `npx helius-mcp@latest` resolves a mutable package version at execution time. Consequently, the component executed on a user's machine is not fixed to the version reviewed with this Skill. A future compromised release, malicious maintainer update, registry-account takeover, or package-resolution incident could run arbitrary package lifecycle or runtime code. An MCP server is especially sensitive because it may receive API keys, persist shared configuration, generate or load Solana keypairs, process payments, and expose tools to the agent. The onboarding reference states that the associated MCP can persist credentials and key material under user-controlled home-directory paths. Executing a mutable dependency therefore grants a changing third party substantial access beyond static documentation rendering. ### Attack Path 1. An attacker compromises the `helius-mcp` publishing account, package repository, build pipeline, or a future release. 2. The attacker publishes a malicious version under the `latest` tag. 3. A user follows the Skill's required installation instruction. 4. `npx` downloads and executes the attacker-controlled package. 5. The package runs with the user's local privileges and may access environment variables, project files, Claude configuration, Helius credentials, or wallet keypair files. 6. The malicious MCP may continue receiving ...[truncated 497 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Pin the MCP package to an audited immutable version rather than `@latest`. - Prefer an exact version together with a verified package integrity hash or lockfile. - Publish and verify package signatures or provenance attestations where supported. - Review package lifecycle scripts and dependency changes before upgrading. - Run the MCP with restricted filesystem and network access in a container or sandbox. - Provide the MCP only the specific credentials and directories required for its task. - Separate payment-capable or keypair-capable operations from read-only blockchain-query operations. - Require explicit user review before upgrading the pinned package. - Update all repeated installation instructions so they use the same reviewed version. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
references/integration-patterns.md:151
Finding
DFlow Proxy Example Exposes Unauthenticated Pass-Through Endpoints Without Validation or Rate Limits<![CDATA[ ## Vulnerability Details **File Location**: `references/integration-patterns.md`, lines 151-194 **Vulnerability Type**: Unauthenticated API proxy and insufficient input validation **Risk Level**: Medium The Express example exposes DFlow operations directly and forwards arbitrary query parameters or request bodies: ```typescript import express from 'express'; const app = express(); app.use(express.json()); const DFLOW_API = process.env.DFLOW_API_URL || 'https://dev-quote-api.dflow.net'; app.get('/api/dflow/order', async (req, res) => { const params = new URLSearchParams(req.query as Record<string, string>); const response = await fetch(`${DFLOW_API}/order?${params}`); const data = await response.json(); res.json(data); }); app.get('/api/dflow/intent', async (req, res) => { const params = new URLSearchParams(req.query as Record<string, string>); const response = await fetch(`${DFLOW_API}/intent?${params}`); const data = await response.json(); res.json(data); }); app.post('/api/dflow/submit-intent', async (req, res) => { const response = await fetch(`${DFLOW_API}/submit-intent`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(req.body), }); const data = await response.json(); res.json(data); }); app.get('/api/dflow/order-status', async (req, res) => { const params = new URLSearchParams(req.query as Record<string, string>); const response = await fetch(`${DFLOW_API}/order-status?${params}`); const data = await response.json(); res.json(data); }); app.listen(3001); ``` ### Technical Analysis The proxy has no authentication, authorization, request schema, parameter allowlist, body-size restriction beyond framework defaults, rate limiting, timeout, upstream status handling, or abuse controls. If deployed on a public interface, any remote party can use the application as a DFlow relay. Because the upstream origin is fixed by `DFLOW_API`, this is not a general-purpos ...[truncated 1500 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Require application authentication for every proxy operation. - Authorize requests against the connected wallet and authenticated user session. - Define strict schemas and allowlists for all query parameters and JSON fields. - Reject unknown fields, invalid public keys, unsupported mints, excessive amounts, and slippage outside application policy. - Add per-user and per-IP rate limits, request-body limits, concurrency limits, and upstream timeouts. - Apply CSRF protection to state-changing browser requests. - Restrict CORS to trusted application origins. - Propagate safe upstream status codes while returning generic errors that do not disclose credentials or internal details. - Add audit logging with secrets and wallet-sensitive data redacted. - Bind submitted intents to a server-side quote or nonce so clients cannot submit arbitrary unrelated payloads. - Do not expose production DFlow credentials to clients; keep them only in the authenticated backend. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
references/dflow-proof-kyc.md:69
Finding
KYC Wallet Signatures Are Placed in Browser Query Strings Without Replay-Binding Guidance<![CDATA[ ## Vulnerability Details **File Location**: `references/dflow-proof-kyc.md`, lines 69-102 **Vulnerability Type**: Sensitive authentication artifact in URL and weak signature context binding **Risk Level**: Medium The KYC integration places the wallet address and wallet signature in a deep-link query string: ```text https://dflow.net/proof?wallet={wallet}&signature={signature}&timestamp={timestamp}&redirect_uri={redirect_uri} ``` The implementation constructs and opens that URL directly: ```typescript const params = new URLSearchParams({ wallet: wallet.toBase58(), signature: signatureBase58, timestamp: timestamp.toString(), redirect_uri: window.location.href, }); window.open(`https://dflow.net/proof?${params.toString()}`, '_blank'); ``` The signed message is only: ```typescript const message = `Proof KYC verification: ${timestamp}`; ``` ### Technical Analysis URL query strings can be retained in browser history, copied by users, captured in screenshots, recorded by client-side monitoring, and logged by reverse proxies or the destination service. The signature is not a private key, but it is a wallet-authentication artifact linked to an identity-verification flow. The signed message contains a timestamp but no application origin, DFlow domain, wallet address, project identifier, redirect URI, random server nonce, chain identifier, or explicit expiry. This weak contextual binding makes the signature easier to reuse in another context if the receiving service accepts the same timestamp/signature pair. The actual replay window depends on DFlow's server-side validation and cannot be established from the reviewed files. Using `window.location.href` as the redirect URI can also include the application's existing query parameters or fragments. That may unnecessarily disclose session-related or tracking data to DFlow and may create an unsafe redirect if the application permits attacker-controlled return URLs. ### Attack Path 1. A user initia ...[truncated 922 chars]
Remediation
<![CDATA[ ## Remediation Suggestions - Prefer a one-time server-generated challenge and opaque session identifier over placing the raw wallet signature in the URL. - Include the intended domain, application origin, wallet address, project identifier, random nonce, issued-at time, and short expiry in the signed message. - Enforce single use and expiration server-side. - Use a documented structured signing format such as Sign-In with Solana when compatible with the provider. - Avoid using the full `window.location.href`; construct a fixed allowlisted return URL without existing query parameters or fragments. - Validate redirect URIs against an exact allowlist. - Configure logs, telemetry, analytics, and error reporting to redact `signature`, `wallet`, and KYC parameters. - Set an appropriate referrer policy, such as `no-referrer`, on pages involved in the flow. - Clearly inform the user what message is being signed, which service receives it, and that it is for identity verification rather than an on-chain transaction. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (18)

Missing User Warnings

Medium
Confidence
85% confidence
Finding
The skill covers wallet intelligence, holdings, history, and Proof KYC flows but does not prominently warn that these are privacy-sensitive operations or instruct the agent to minimize collection, retention, and display of personal data. In a trading and identity context, exposing wallet history or KYC state without explicit consent can create privacy harm, profiling risk, or improper handling of regulated identity information.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
The skill instructs users to install an MCP server via `npx helius-mcp@latest`, which is an unpinned dependency and can change over time without review. If the upstream package is compromised or a breaking/malicious release is published, users could install and execute unintended code in a privileged local environment.

Vague Triggers

Medium
Confidence
92% confidence
Finding
The quick-disambiguation section lists very short everyday phrases such as "trade", "swap", "setup", and "submit" as intents that route into this skill. While domain-relevant, these phrases are broad and the file does not provide negative examples or explicit boundaries to prevent accidental activation in adjacent contexts.

Rp1

Medium
Category
MCP Rug Pull
Confidence
95% confidence
Finding
This is the same supply-chain risk repeated in the resources section: users are directed to run `npx helius-mcp@latest`, which fetches and executes the newest package version at install time. In an agent/tooling context, that creates a real avenue for malicious package updates or accidental insecure changes to be introduced downstream.

Skill Enumeration

Medium
Category
Agent Snooping
Content
SKILL_NAME="helius-dflow"
SKILL_DIR="$(cd "$(dirname "$0")" && pwd)"

# Default: install to personal skills
TARGET_BASE="$HOME/.claude/skills"
MODE="personal"
Confidence
85% confidence
Finding
Skill enumerates or reads other installed skills. Access to other skills' SKILL.md files or the skills directory reveals prompt instructions, capabilities, and secrets that should be invisible to peer skills.

Rp1

Medium
Category
MCP Rug Pull
Confidence
94% confidence
Finding
The installer instructs users to add an MCP server via `npx helius-mcp@latest`, which pulls and executes the newest published package version at install/use time rather than a reviewed, fixed version. This creates a supply-chain risk: if the package is compromised, typosquatted, or a bad release is published, users may execute untrusted code in their local environment.

Missing User Warnings

Medium
Confidence
84% confidence
Finding
The skill describes `previewUpgrade`, `upgradePlan`, and `payRenewal` as routine actions without an explicit caution that they trigger real USDC payments and may have immediate billing effects. In an agentic workflow, that omission is dangerous because users or downstream agents may treat these calls as informational rather than state-changing, leading to unintended charges or unauthorized plan changes.

Missing User Warnings

Medium
Confidence
89% confidence
Finding
The document states that API keys, JWTs, and keypairs are persisted to shared config and local files, but it does not prominently warn users about the security implications of local credential storage. In this context, the stored materials can grant ongoing access to Helius services, billing visibility, authenticated sessions, and wallet-based signup flows, so silent persistence increases the risk of credential theft, accidental sharing, or reuse on multi-user systems.

Rp1

Medium
Category
MCP Rug Pull
Confidence
96% confidence
Finding
The install command uses `npx helius-mcp@latest`, which fetches and executes whatever package version is current at runtime. This creates a supply-chain risk: a compromised upstream package, malicious update, or unexpected breaking change could be executed immediately on the user's machine, and in this skill context the package would likely handle API keys, JWTs, and payment-capable workflows.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The guidance mandates `skipPreflight: true` and adds a required Jito tip transfer, but it does not clearly warn users that this bypasses client-side safety checks and can submit irreversible on-chain transactions that also transfer extra funds. In a trading skill, that omission is risky because integrators may copy the pattern directly and unknowingly expose users to failed or unintended transactions with real monetary loss.

External Transmission

Medium
Category
Data Exfiltration
Content
transaction.sign([keypair]);

  // 5. Submit to Sender
  const response = await fetch('https://sender.helius-rpc.com/fast', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
transaction.sign([keypair]);

  // 5. Submit to Sender
  const response = await fetch('https://sender.helius-rpc.com/fast', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
const signedTx = await signTransactionMessageWithSigners(tx);
  const base64Tx = getBase64EncodedWireTransaction(signedTx);

  const res = await fetch("https://sender.helius-rpc.com/fast", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Behavior Manipulation

Medium
Category
Prompt Injection
Content
## MCP Tools

All Wallet API endpoints have direct MCP tools. ALWAYS use these instead of generating raw API calls:

| MCP Tool | Endpoint | What It Does |
|---|---|---|
Confidence
70% confidence
Finding
Subtle instructions detected that may alter agent decision-making or introduce hidden biases.

Missing User Warnings

Medium
Confidence
81% confidence
Finding
This markdown file instructs the agent to investigate wallets using identity, balance, history, transfer, and funding-source tools, which can affect user privacy and attribution. The document does not include any warning or caution to users that these actions may reveal sensitive intelligence about individuals or entities.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The section provides concrete instructions for building an automated trading bot that reacts to live price signals and submits real transactions, but it does not include a clear warning that these actions can spend user funds and execute irreversible trades on mainnet. In a trading-focused skill, omission of this warning increases the chance that users deploy or adapt the example against live wallets without adequate safeguards, leading to unintended financial loss.

Missing User Warnings

Low
Confidence
89% confidence
Finding
This markdown file documents calls like `getAssetsByOwner` with `ownerAddress` and display options that reveal SOL balance, fungible holdings, and collection metadata, but it does not warn users that these requests disclose wallet-associated portfolio data to an external service. For markdown files, SQP-2 applies when the skill description omits warnings about behaviors that could affect user privacy.

Missing User Warnings

Low
Confidence
84% confidence
Finding
The document recommends a background `setInterval` ping loop but does not warn that it creates ongoing network traffic during idle periods. This can surprise users, increase observability/privacy exposure, and cause unnecessary resource consumption in client or server environments.

Static analysis

Detected: suspicious.exposed_secret_literal

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/dflow-spot-trading.md:208

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
references/helius-onboarding.md:95

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
SKILL.md:292