Skip to main content

Squillify development is paused indefinitely. Read why, and discover what this experiment achieved. Read the story

MicroSkills Reference

cURL Command Parser

network.parse_curl

ProductionBounded custom (Class B)Deterministicstrictfastv1.0.0
No network

Overview

Give us the cURL command someone pasted into a ticket and we return what it actually requests: the method, the URL, every header in order, the body, and whether it follows redirects or asks for compression. Credentials are replaced with a placeholder by default, and we tell you where each one was without keeping it. We read a published subset of cURL — one command, quoted arguments, and the common request options — and refuse everything else with a named error rather than guessing: shell operators, variables, command substitution, file reads such as -d @body.json, and options like --proxy. We never run the command and never send the request: no shell starts, no socket opens, no host is looked up, and -L is recorded rather than followed.

A cURL command is how people actually share a request, and reading one by eye is where mistakes happen: a quote in the wrong place, a header that is really two, a token nobody noticed was in the URL. Parsing it into fields makes the request reviewable, and refusing the parts a shell would interpret means a pasted string cannot do anything on the way through.

Reliability

Fully deterministic: the same command always parses the same way, and argument splitting follows POSIX quoting rules rather than a regular expression. Two known differences from a terminal, both stated in the output: repeated data options are joined with '&' as cURL does, and -G appends the data to the query string. An unquoted '?' is read literally with a warning, because a real shell would treat it as a filename pattern. Failures, none of which are worth retrying unchanged: CURL_SYNTAX_INVALID means the string is not one well-formed command — an unterminated quote, a missing option value, a second URL, or a grouped short option — so fix the command text. CURL_MULTIPLE_COMMANDS_FORBIDDEN means it chains requests with ';', '|', '&', a bare line break or --next, so send one request per call. CURL_SHELL_OPERATOR_FORBIDDEN means it relies on the shell: a variable, command substitution, redirect, subshell or filename pattern, so substitute the value yourself and quote the argument. CURL_FILE_REFERENCE_FORBIDDEN means it reads or writes a file, such as -d @body.json, -K, --cert or -o, so inline the data instead. CURL_OPTION_UNSUPPORTED means the option is outside the subset, such as --proxy, --resolve or an -X method we do not accept. CURL_HEADER_INVALID means a header has no colon, an illegal name, or a value carrying a line break that would split it into extra headers. CURL_REQUEST_INVALID and CURL_URL_UNSUPPORTED mean the URL is malformed or not http/https. CURL_TOKEN_LIMIT_EXCEEDED, CURL_BODY_TOO_LARGE and CURL_OUTPUT_TOO_LARGE mean the command passed a published limit: 256 arguments, a 1000000-byte body, or a 1048576-byte result.

Context footprint

The parsed request is about the size of the command itself; headers and body are returned once, never duplicated. A successful call costs 1 execution credit.

When to use it

When you have a cURL command as text and want the request it describes, or want to know that it uses something this subset refuses.

When you need the request performed, when the command is really a shell pipeline, or when it depends on files, proxies or client certificates.

Scope

Note
Parse one cURL command from a published subset into a structured request, with credentials redacted by default.

Non-goals

  • Never executes the command, opens a socket, or resolves a host
  • Never runs a shell, expands a variable, or substitutes a command
  • Never reads a file, cookie jar, netrc, certificate, or standard input
  • Does not follow redirects; -L is recorded as followRedirects
  • Does not claim full cURL or full Bash compatibility

Properties

IdempotentRetry safeStreaming supportedFile input supportedRequires external service

Capabilities

analysisdata-transformation

Cost & billing

Flat rate per invocation

MetercallsBillable onsuccessCost per call1 credit

File handling

Accepts file_refProduces file_refMax input1 MB

How we handle your data

Sensitive output possible
What this means

This skill may receive sensitive content and may return submitted, transformed, extracted, or reformatted content.

Squillify guarantees
  • Runs inside Squillify
  • This skill runs inside Squillify.
  • Payloads are not sent to an external service by this skill.
  • Squillify does not permanently store submitted payloads.
  • Telemetry records metadata only, not submitted content.
  • Submitted payloads are not used for training.
  • Submitted payloads are not reviewed by humans.
  • This skill does not target sensitive data.
  • The response may contain submitted or transformed content.
Your responsibility

Squillify does not determine whether submitted content is sensitive. Your application is responsible for deciding what data it is allowed to submit. Your application is responsible for securing the response.

Read the Microskill Data Handling Policy

Input schema

FieldTypeRequiredDescription
curlstringYesOne cURL command of 1 to 65536 characters starting with the word curl.
redactSecretsbooleanNoWhether credentials are replaced with <redacted>; omit it for true.

Output schema

FieldTypeRequiredDescription
requestobjectYesClosed structured request the command describes: method, url, ordered headers, optional body, followRedirects and compressed.
warningsarrayYesStrings describing anything read differently from how it looks; empty when the command mapped cleanly.
redactionsarrayYesOne string per replaced credential naming the location, never the value, from 0 through 128 strings.
_metaobjectNoAlways present on success, with tokenCount, restrictedGrammar, headerCount and redacted.

API contract

POST /v1/execute
curl
curl -sS -X POST "$BASE/v1/execute" -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d '{"skillKey":"network.parse_curl","input":{"curl":"curl -H \"Accept: application/json\" https://example.com/v1/ping"}}'
Integrations
TypeScript SDK
import { Squillify } from "@squillify/sdk";

const sq = new Squillify({ apiKey: process.env.SQUILLIFY_API_KEY });

const { output } = await sq.execute("network.parse_curl", {"curl":"curl -X POST 'https://api.example.com/v1/orders' -H 'Authorization: Bearer sk-live-not-a-real-key' -H 'Content-Type: application/json' -d '{\"sku\":\"A-1\",\"qty\":2}'"});

Errors

CodeHTTPRetryableDescription
VALIDATION_ERROR400NoThe request payload failed schema validation.
UNAUTHORIZED401NoMissing or invalid API key.
SKILL_NOT_ACCESSIBLE403NoThe API key is not granted access to this skill.
SKILL_NOT_AVAILABLE_FOR_PLAN403NoThis skill is not included in your current plan.
PLAN_ELIGIBILITY_UNAVAILABLE503YesPlan eligibility could not be decided. Retry after backoff.
SKILL_NOT_FOUND404NoThe requested skill or version does not exist.
TENANT_RATE_LIMITED429YesRequest rate limit exceeded. Retry after backoff.
QUOTA_EXCEEDED429YesPlan quota exhausted. Retryable once the quota period resets.
EXECUTION_TIMEOUT504YesExecution exceeded the allowed time budget.
CURL_SYNTAX_INVALID400NoThe request payload failed this skill's input validation.
CURL_MULTIPLE_COMMANDS_FORBIDDEN400NoThe request payload failed this skill's input validation.
CURL_OPTION_UNSUPPORTED400NoThe skill does not support the requested variant.
CURL_FILE_REFERENCE_FORBIDDEN400NoThe request payload failed this skill's input validation.
CURL_SHELL_OPERATOR_FORBIDDEN400NoThe request payload failed this skill's input validation.
CURL_TOKEN_LIMIT_EXCEEDED429NoA size, quota, rate, or time limit was exceeded.
CURL_HEADER_INVALID400NoThe request payload failed this skill's input validation.
CURL_REQUEST_INVALID400NoThe request payload failed this skill's input validation.
CURL_URL_UNSUPPORTED400NoThe skill does not support the requested variant.
CURL_BODY_TOO_LARGE429NoA size, quota, rate, or time limit was exceeded.
CURL_OUTPUT_TOO_LARGE429NoA size, quota, rate, or time limit was exceeded.

Other limits

LimitValue
Recommended inline bytes32 KiB

Limitations

  • Never executes the command, opens a socket, or resolves a host
  • Never runs a shell, expands a variable, or substitutes a command
  • Never reads a file, cookie jar, netrc, certificate, or standard input
  • Does not follow redirects; -L is recorded as followRedirects
  • Does not claim full cURL or full Bash compatibility
  • Running the request — this skill has no network access at all
  • Parsing arbitrary shell scripts or pipelines
  • Recovering options outside the published subset, such as --proxy or --cert

How to call

POST /v1/execute (requires authentication)

Request bodyjson
{
  "skillKey": "network.parse_curl",
  "input": {
    "curl": "curl -X POST 'https://api.example.com/v1/orders' -H 'Authorization: Bearer sk-live-not-a-real-key' -H 'Content-Type: application/json' -d '{\"sku\":\"A-1\",\"qty\":2}'"
  }
}

Examples

A POST with a bearer token, which is redacted by default

Inputjson
{
  "curl": "curl -X POST 'https://api.example.com/v1/orders' -H 'Authorization: Bearer sk-live-not-a-real-key' -H 'Content-Type: application/json' -d '{\"sku\":\"A-1\",\"qty\":2}'"
}
Expected outputjson
{
  "redactions": [
    "headers[0] Authorization"
  ],
  "_meta": {
    "restrictedGrammar": "curl-subset-v1",
    "tokenCount": 10,
    "redacted": true,
    "headerCount": 2
  },
  "request": {
    "method": "POST",
    "url": "https://api.example.com/v1/orders",
    "headers": [
      {
        "name": "Authorization",
        "value": "<redacted>"
      },
      {
        "name": "Content-Type",
        "value": "application/json"
      }
    ],
    "body": "{\"sku\":\"A-1\",\"qty\":2}",
    "followRedirects": false,
    "compressed": false
  },
  "warnings": []
}

A plain GET with a redirect flag and compression

Inputjson
{
  "curl": "curl -L --compressed 'https://example.com/feed?page=2'"
}
Expected outputjson
{
  "redactions": [],
  "_meta": {
    "restrictedGrammar": "curl-subset-v1",
    "tokenCount": 4,
    "redacted": false,
    "headerCount": 0
  },
  "request": {
    "method": "GET",
    "url": "https://example.com/feed?page=2",
    "headers": [],
    "followRedirects": true,
    "compressed": true
  },
  "warnings": []
}
  • Turn a cURL command from a bug report into a request an agent can reason about
  • Review what a pasted command would send before anyone runs it
  • Move a request between tools by parsing it here and rendering it elsewhere

Avoid for

  • Running the request — this skill has no network access at all
  • Parsing arbitrary shell scripts or pipelines
  • Recovering options outside the published subset, such as --proxy or --cert

Composable with

Safety & privacy

  • Runs without calling any external service.
  • Your payloads are never stored permanently.
  • Telemetry captures metadata only — never your payload contents.
  • We never train models on your payloads.
  • No human reviews your payloads.

Tags

curlnormalizationnetworkhttp