A skill is portable workflow guidance
A Markdown skill can describe a method, decision rules, output expectations, and supporting references. Hosting the file publicly makes a workflow easy to share and update without redeploying the interface.
Its authority must remain limited. A remote skill is user-selected content, not platform policy. It can recommend how to perform the current task, but it cannot grant itself tools, reveal secrets, override higher-priority instructions, or expand the user's requested scope.
This separation also improves portability. A skill can express a review checklist, documentation method, or deployment sequence without assuming that every host exposes the same tools. The runtime maps applicable guidance onto the capabilities that actually exist.
Remote instructions are an injection surface
OWASP defines prompt injection as crafted input that changes a model's intended behavior. Indirect injection can arrive through websites, files, and other external sources. A public skill URL is therefore both a customization feature and an untrusted content channel.
The loader should treat the fetched text as data inside a clearly delimited skill block. The system prompt should state which instructions outrank it. The runtime should independently enforce permissions, because a language model cannot be the only security boundary around its own tools.
Content may also change after review. A URL that was safe yesterday can return different text today because the owner updated it, the domain changed hands, or an upstream dependency was compromised. Fetch time and content identity are therefore part of the security record.
Source figure
Prompt injection can change model behavior without changing system truth

Figure 4 from the OWASP AI Testing Guide illustrates a direct prompt injection that changes the assistant's text while the underlying transaction remains unchanged. It shows why model output cannot be the only authority for tool state.
OWASP AI Testing Guide, Figure 4How an internet skill enters the agent safely
The loader validates transport and records content identity. The prompt boundary limits instructional authority. The runtime separately controls every capability.
User choice
Public skill URL
The user selects a Markdown workflow and expects it to guide the current or future task.
Network boundary
Validate and fetch
Require public HTTPS, recheck redirects, block private networks, and enforce content limits.
Identity record
Hash and label content
Record the final URL, fetch time, size, media type, and content hash used for the run.
Instruction boundary
Load as scoped guidance
Place the skill below platform policy and the user's current request, with clear delimiters.
Runtime control
Apply permitted capabilities
Tool schemas, credentials, approvals, and network rules remain enforced outside the skill text.
Defense-in-depth workflow based on OWASP guidance for indirect prompt injection, SSRF, and excessive agency.
Secure the loader before reading the content
Fetching an arbitrary URL can expose internal services through server-side request forgery. Limit skills to public HTTPS, resolve and validate DNS results, block private and loopback addresses, revalidate redirects, cap bytes and time, and accept only plain text or Markdown content types.
- Do not accept credentials embedded in the URL.
- Do not forward user cookies or internal authorization headers.
- Store the final URL, content hash, fetch time, and size for review.
- Fail closed on network ambiguity and continue without the optional skill.
| Layer | Required control | Evidence to retain |
|---|---|---|
| Transport | Public HTTPS, DNS and redirect checks, byte and time limits | Final URL, status, media type, size |
| Content | Plain text or Markdown, clear delimiters, no authority escalation | Content hash and fetched text |
| Prompt | Priority order and scope tied to the current user request | Active skill name and version |
| Runtime | Typed tools, least privilege, approval for high-impact actions | Tool decision, permission, result |
| Lifecycle | Reload, pin, disable, inspect, and remove | Who changed the skill and when |
Make customization visible and reversible
Show the active skill name and source before the request runs. Let users inspect the text, reload it deliberately, disable it for one message, and remove it without losing the conversation. Visibility helps users understand why the agent followed a particular workflow.
For repeatability, record the content hash used for each run. A mutable URL can return different instructions tomorrow. Versioning or pinning the fetched content makes failures easier to reproduce while still allowing an explicit update path.
A preview should show meaningful metadata without forcing the user to trust a title declared inside the remote file. Display the host, final URL, fetch time, and whether the content changed since the last approved version. A diff is more useful than a generic updated badge.
Evaluate the skill with normal and hostile cases
Test whether the skill improves the target workflow on representative tasks. Measure adherence to required steps, output usefulness, unnecessary tool calls, verification quality, and the amount of correction a user needs.
Then test the boundary. Place conflicting instructions in referenced pages, request tools that are not granted, redirect the skill URL toward a private target, return an oversized file, and change the remote content after approval. The expected result is safe degradation, not creative compliance.
Version the skill and its evaluation set together. When the procedure changes, rerun the cases that protect authority, network access, and destructive actions. A readable Markdown file is easy to change; that convenience should be paired with change review.
Permissions belong to the platform
A skill may say that a test should be run or a page should be researched. The platform decides whether the corresponding tool exists, whether the current user can call it, and whether approval is required. This separation keeps customization useful without confusing guidance with authority.
If the skill cannot be loaded or conflicts with a higher-priority rule, the product should explain that limitation and continue with its built-in behavior when safe. Remote customization should enhance the service, not become a single point of failure for ordinary work.
Sources and further reading
Claims and figures in this article were checked against these original papers and official project resources.
- 1AITG-APP-01: Testing for Prompt Injection
OWASP AI Testing Guide, 2025
- 2LLM Prompt Injection Prevention Cheat Sheet
OWASP Cheat Sheet Series, 2025
- 3LLM06:2025 Excessive Agency
OWASP GenAI Security Project, 2025
- 4Server Side Request Forgery Prevention Cheat Sheet
OWASP Cheat Sheet Series, 2025