agentleFS
yanggujunyanggujun/open-axle/skills/curl/SKILL.md

curl

Skill0 starsChanged 2 months agoMITView on GitHub

This skill enables the LLM to perform HTTP requests (GET, POST, PUT, DELETE, etc.) by understanding the user's intent and producing a strictly-formatted JSON output that describes the request. The JSON output is then parsed by the curl_execute skill to actually make the HTTP request and return the response. Invoke this skill whenever the user's request implies making an HTTP request. Look for phrases such as: Do NOT use this skill when the user wants to: - Read a local…

1 other project uses a version of this.

Adopted by

Most recently taken up by

  • Other versions1 project uses a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 1

    1. kubehan/PromAI★ 129same name

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repository14 other files it gives its agents.

The file

We split this skill into the rules it gives an agent

9 rules. About 0 are common, 5 are distinctive, and 4 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈5

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 4

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Do NOT use this skill when the user wants to:

    line 26
  2. Very specific:

    Read a local file → use file-reader.

    line 27
  3. Very specific:

    Create a file → use file-creator.

    line 29
  4. Distinctive:

    When the skill is triggered, the LLM must:

    line 33
  5. Very specific:

    All string values must properly escape special characters (", \, newline as \n, tab as \t).

    line 93
  6. Very specific:

    Do NOT emit multiple curl payloads in a single response.

    line 95
  7. Distinctive:

    Never make requests to internal/private IP ranges (10.x.x.x, 172.16-31.x.x, 192.168.x.x, 127.0.0.1) unless explicitly allowed.

    line 228
  8. Distinctive:

    Do not send sensitive credentials (passwords, tokens) unless user explicitly authorizes.

    line 231
  9. Distinctive:

    Always echo the JSON payload so the user can review before execution.

    line 232

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

🌐 Curl Skill

Overview

This skill enables the LLM to perform HTTP requests (GET, POST, PUT, DELETE, etc.) by understanding the user's intent and producing a strictly-formatted JSON output that describes the request. The JSON output is then parsed by the curl_execute skill to actually make the HTTP request and return the response.

Skill Name

curl

When to Use This Skill

Invoke this skill whenever the user's request implies making an HTTP request. Look for phrases such as:

  • "fetch URL ..."
  • "make a GET request to ..."
  • "POST to ..."
  • "GET <some url>"
  • "call the API at ..."
  • "send a request to ..."
  • "download from ..."
  • "check the status of ..."
  • "curl ..." (explicit)
  • "HTTP GET/POST/PUT/DELETE ..."

Do NOT use this skill when the user wants to:

  • Read a local file → use file-reader.
  • Modify a local file → use file-changer.
  • Create a file → use file-creator.

What the LLM Must Do

When the skill is triggered, the LLM must:

  1. Extract the following from the user's request (asking clarifying questions only if truly ambiguous):
    • method (required): HTTP method (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS). Defaults to GET if not specified.
    • url (required): The target URL. Must be a valid HTTP/HTTPS URL.
    • headers (optional): Dictionary of HTTP headers as key-value pairs.
    • data (optional): Body data for POST/PUT/PATCH requests. Can be a string, JSON object, or form-encoded data.
    • dataType (optional): Format of data (json, form, text). Defaults to text.
    • timeout (optional): Request timeout in seconds. Defaults to 30.
    • followRedirects (optional): Whether to follow redirects. Defaults to true.
    • auth (optional): Authentication (basic, bearer token, etc.).
    • description (optional): One-line summary of the request.
    • sequential (optional): If the response is needed as input for a follow-up AI task.
    • prompt (optional): Follow-up prompt for all of the following tasks when sequential is set.
  2. Produce a response containing pure JSON that STRICTLY follows the schema below. No other JSON blocks in the reply.

Required JSON Output Schema

{
  "action": "curl",
  "thinking": "<ai-thinking-trace>",
  "sequential": {
    "prompt": "<the prompt for all of follow-up tasks>"
  },
  "properties": [
    { "name": "method", "value": "GET" },
    { "name": "url", "value": "https://example.com" },
    { "name": "headers", "value": "{}" },
    { "name": "data", "value": "" },
    { "name": "dataType", "value": "text" },
    { "name": "timeout", "value": "30" },
    { "name": "followRedirects", "value": "true" },
    { "name": "auth", "value": "" },
    { "name": "description", "value": "" }
  ]
}

Field Rules

FieldTypeRequiredNotes
actionstringYesMust be exactly "curl".
methodstringYesOne of GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS. Default GET.
urlstringYesValid HTTP/HTTPS URL. Must be non-empty.
headersstringNoJSON-encoded dictionary of headers. Default "{}".
datastringNoRequest body content.
dataTypestringNotext, json, or form. Default text.
timeoutstringNoTimeout in seconds as string. Default "30".
followRedirectsstringNo"true" or "false". Default "true".
authstringNoAuthentication string (e.g., "Bearer token123").
descriptionstringNoHuman-readable purpose.
sequentialobjectNoWhether the response should feed a follow-up AI task.
promptstringNoFollow-up prompt when sequential is present.

Formatting Requirements

  • The JSON output must be valid JSON (parseable by json.loads).
  • All string values must properly escape special characters (", \, newline as \n, tab as \t).
  • headers must be a valid JSON object string (e.g., {"Content-Type": "application/json"}).
  • Do NOT emit multiple curl payloads in a single response.

Response Pattern for the LLM

A typical assistant reply should look like the following, with no other output. The response should be in pure JSON format.

{ "action": "curl", "thinking": "User wants to GET example.com.", "properties": [ { "name": "method", "value": "GET" }, { "name": "url", "value": "https://example.com" }, { "name": "headers", "value": "{}" }, { "name": "data", "value": "" }, { "name": "dataType", "value": "text" }, { "name": "timeout", "value": "30" }, { "name": "followRedirects", "value": "true" }, { "name": "auth", "value": "" }, { "name": "description", "value": "Fetch example.com homepage" } ] }

Decision Logic

User Prompt
    |
    +-- Does the request imply making an HTTP request?
    |     |
    |     +-- YES --> Extract method/url/headers/data/flags --> Emit ONE `curl` JSON payload
    |     |
    |     +-- NO  --> Do not use this skill

Authentication Configuration

The authentication configuration is defined in the local .axle configuration file.

{
    "skill_configs": [
        {
            "skill": "curl",
            "config_items": [
                {
                    "name": "abc",
                    "value": {
                            "domain": "www.abc.com",
                            "auth_string": "bearer xxxx"
                    }
                },
                {
                    "name": "bcd",
                    "value": {
                        "domain": "www.bcd.com",
                        "auth_string": "bearer xxxxxxx"
                    }
                }
            ]
        }
    ]
}

Examples

Example 1: Simple GET request

User: "Fetch https://api.github.com/users/octocat"

LLM emits:

{
  "action": "curl",
  "thinking": "User wants to make a GET request to the GitHub API.",
  "properties": [
    { "name": "method", "value": "GET" },
    { "name": "url", "value": "https://api.github.com/users/octocat" },
    { "name": "headers", "value": "{}" },
    { "name": "data", "value": "" },
    { "name": "dataType", "value": "text" },
    { "name": "timeout", "value": "30" },
    { "name": "followRedirects", "value": "true" },
    { "name": "auth", "value": "" },
    { "name": "description", "value": "Fetch GitHub user info" }
  ]
}

Example 2: POST with JSON data

User: "POST to https://httpbin.org/post with JSON data: {"key": "value"}"

LLM emits:

{
  "action": "curl",
  "thinking": "User wants to POST JSON data to httpbin.",
  "properties": [
    { "name": "method", "value": "POST" },
    { "name": "url", "value": "https://httpbin.org/post" },
    { "name": "headers", "value": "{\"Content-Type\": \"application/json\"}" },
    { "name": "data", "value": "{\"key\": \"value\"}" },
    { "name": "dataType", "value": "json" },
    { "name": "timeout", "value": "30" },
    { "name": "followRedirects", "value": "true" },
    { "name": "auth", "value": "" },
    { "name": "description", "value": "POST JSON payload" }
  ]
}

Example 3: Request with custom headers

User: "Send a GET request to https://api.example.com with an Authorization header: Bearer mytoken"

LLM emits:

{
  "action": "curl",
  "thinking": "User wants a GET request with a Bearer token.",
  "properties": [
    { "name": "method", "value": "GET" },
    { "name": "url", "value": "https://api.example.com" },
    { "name": "headers", "value": "{\"Authorization\": \"Bearer mytoken\"}" },
    { "name": "data", "value": "" },
    { "name": "dataType", "value": "text" },
    { "name": "timeout", "value": "30" },
    { "name": "followRedirects", "value": "true" },
    { "name": "auth", "value": "" },
    { "name": "description", "value": "Authenticated API request" }
  ]
}

Safety Guidelines

  1. Never make requests to internal/private IP ranges (10.x.x.x, 172.16-31.x.x, 192.168.x.x, 127.0.0.1) unless explicitly allowed.
  2. Refuse suspicious URLs (e.g., localhost, file://, etc.).
  3. Enforce a reasonable timeout (default 30s, max 120s).
  4. Do not send sensitive credentials (passwords, tokens) unless user explicitly authorizes.
  5. Always echo the JSON payload so the user can review before execution.
  6. Cap response body size to prevent excessive output (e.g., 1MB max).

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.