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

OWASP prompt injection example in which a malicious user instruction changes an assistant's response without changing the backend transaction

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 4

How 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.

  1. User choice

    Public skill URL

    The user selects a Markdown workflow and expects it to guide the current or future task.

  2. Network boundary

    Validate and fetch

    Require public HTTPS, recheck redirects, block private networks, and enforce content limits.

  3. Identity record

    Hash and label content

    Record the final URL, fetch time, size, media type, and content hash used for the run.

  4. Instruction boundary

    Load as scoped guidance

    Place the skill below platform policy and the user's current request, with clear delimiters.

  5. 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.
Controls belong at different layers of the skill pipeline
LayerRequired controlEvidence to retain
TransportPublic HTTPS, DNS and redirect checks, byte and time limitsFinal URL, status, media type, size
ContentPlain text or Markdown, clear delimiters, no authority escalationContent hash and fetched text
PromptPriority order and scope tied to the current user requestActive skill name and version
RuntimeTyped tools, least privilege, approval for high-impact actionsTool decision, permission, result
LifecycleReload, pin, disable, inspect, and removeWho changed the skill and when

Write skills as testable procedures

A useful skill names its intended tasks, prerequisites, decision points, expected outputs, verification steps, and conditions for stopping. Instructions such as make it better or use best practices are difficult to test because they do not define observable behavior.

Keep tool references capability-based where possible. Ask to verify the build rather than assuming one package manager command; ask to consult primary documentation rather than hard-coding an unrelated search provider. Host-specific adapters can translate the procedure into available tools.

Include negative boundaries. A deployment skill should say which environments are in scope, whether destructive operations are excluded, and what requires user approval. These limits complement runtime enforcement and help the model form a safer plan before it reaches a permission gate.

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.

  1. 1
    AITG-APP-01: Testing for Prompt Injection

    OWASP AI Testing Guide, 2025

  2. 2
    LLM Prompt Injection Prevention Cheat Sheet

    OWASP Cheat Sheet Series, 2025

  3. 3
    LLM06:2025 Excessive Agency

    OWASP GenAI Security Project, 2025

  4. 4