curl · curl project

curl for AI Agents

Call HTTP APIs with explicit methods, headers, authentication, retries, and failure handling.

Official toolOperational risk: R0R3verified
Agent readiness
84/100
Evidence confidence
verified
Documentation checked
2026-07-10
Independently tested version
8.7.1

Install for an Agent

Choose an official installation path that matches the runtime. Pin a version for team or CI use, then record the version before the first task.

HomebrewRecommended
macos · linux
$ shell
brew install curl
winget
windows
$ shell
winget install cURL.cURL
Authentication and Minimum Permissions
Grant only the permissions the task needs. Pass credentials through environment variables or a platform secret store, never through prompts, repositories, or logs.
Authentication requiredHeadless authentication supported

Pass scoped tokens through environment-backed headers and never print request secrets.

Methods
none, basic, bearer token, client certificate, netrc
Secret environment variables
HTTP_TOKEN
Credential storage
For headless runs, inject HTTP_TOKEN from the CI or platform secret manager at process start. For local interactive use, prefer the CLI or operating-system credential store when the official client supports one. Never save values in repository files.
Agent and Environment Compatibility
Confirm shell access first, then check the platform, network boundary, and credential path.
claude-codecodexgemini-clicopilot-cli
Environments
local, ci, container, headless, remote
Platforms
macos, linux, windows

Structured Output for Reliable Automation

Prefer a machine-readable format. Treat stdout as the result channel and stderr as diagnostics so the agent can parse failures separately.

response body · headers · JSON when returned by server
Use --fail-with-body or --silent or --show-error where supported and keep diagnostic logs on stderr.
--fail-with-body--silent--show-error

Independently captured output sample

8.7.1 · macOS 26.5.1 (arm64), local non-interactive shell

Executed command
curl --fail --silent --show-error --max-time 5 file://$PWD/package.json | jq -c '{name,private}'
Captured stdout · json
{"name":"clifinder-net","private":true}
Sample JSON Schema
{
  "type": "object",
  "additionalProperties": false,
  "required": [
    "name",
    "private"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "private": {
      "type": "boolean"
    }
  }
}

R0–R3 Command Risk Guide

Risk is assigned per command. R0 is local or remote read-only, R1 is reversible local write, R2 changes remote state, and R3 can be irreversible or production-impacting.

Read-only does not mean public

R0 only means the command does not change local or remote state. A read-only command may still return secrets, identity data, configuration, or production data. Expose only the minimum needed for the task, and never place it in logs, prompts, or commits.

R0Read a JSON endpoint
Performs a failing-fast GET request and preserves the response body.
$ shell
curl --fail-with-body --silent --show-error --header "Accept: application/json" https://api.example.com/items
IdempotentSensitive output
R2Create a remote resource
Sends a state-changing POST request.
$ shell
curl --fail-with-body --request POST --header "Content-Type: application/json" --data @payload.json https://api.example.com/items
Confirmation requiredMay repeat a change
R3Delete a remote resource
Sends a potentially destructive DELETE request.
$ shell
curl --fail-with-body --request DELETE https://api.example.com/items/ID
Confirmation requiredMay repeat a change

How the Agent Readiness Score Is Built

Readiness describes how reliably an agent can operate the tool. It does not make every command safe and it does not replace an independent execution test.

Documentation indicates an agent-readiness score of 84/100. A bounded local smoke test is recorded for 8.7.1; review its limitations before relying on untested commands.

Structured output
Use --fail-with-body or --silent or --show-error where supported and keep diagnostic logs on stderr.
18/20
x
Headless operation
Official documentation describes a non-interactive authentication or execution path.
14/15
x
Safety controls
CLI Finder separates read commands from commands that require confirmation.
11/15
x
Determinism
Commands use explicit arguments and documented output controls where available.
8/10
x
Authentication
Pass scoped tokens through environment-backed headers and never print request secrets.
8/10
x
Documentation
This entry cites official documentation checked on 2026-07-10.
9/10
x
Installation
Official installation paths cover macOS, Linux, and Windows.
8/8
x
Maintenance
An official source repository is linked for release and maintenance review.
6/7
x
Agent artifacts
CLI Finder can generate registry-derived skills and policies; the tool itself was not credited with shipping them.
2/5
x

Generate a Skill or Agent Policy

Choose an agent and safety mode to generate a copyable artifact with installation, allowed commands, approval boundaries, and the evidence limitation.

Generated artifact preview
SKILL.md
---
name: curl-agent-workflow
description: Use curl for HTTP APIs, file transfers, health checks with explicit command risk and evidence boundaries.
---

# curl agent workflow

Use this skill when the task needs HTTP APIs, file transfers, health checks, webhook calls.

## Evidence boundary

- Registry confidence: `verified`
- Documentation checked: `2026-07-10`
- Locally tested version: `8.7.1`
- Treat only the recorded executed checks as independently verified; every unlisted command remains documentation-only.

## Executed smoke checks

- `curl --version` — passed; exit 0. The recorded smoke check completed successfully.
- `curl --fail --silent --show-error --max-time 5 file://$PWD/package.json` — passed; exit 0. The recorded smoke check completed successfully.
- `curl --fail --silent --show-error --max-time 5 file://$PWD/package.json | jq -e '.name == "clifinder-net"'` — passed; exit 0. The bounded local file response passed the recorded jq assertion.
- `curl --fail --silent --show-error --max-time 5 file://$PWD/not-a-real-qa-file` — expected-failure; exit 37. curl returned its documented local-file open error and kept the diagnostic on stderr.

## Installation

- Homebrew (macos, linux): `brew install curl`
- winget (windows): `winget install cURL.cURL`

## Authentication

- Methods: none, basic, bearer token, client certificate, netrc
- Secret environment variables: `HTTP_TOKEN`
- Minimum permissions: Pass scoped tokens through environment-backed headers and never print request secrets.
- Credential storage: For headless runs, inject HTTP_TOKEN from the CI or platform secret manager at process start. For local interactive use, prefer the CLI or operating-system credential store when the official client supports one. Never save values in repository files.
- Never print, persist, or commit credential values.

## Allowed commands (read-only)

- `curl --fail-with-body --silent --show-error --header "Accept: application/json" https://api.example.com/items` — R0: Performs a failing-fast GET request and preserves the response body.

## Commands requiring explicit approval (read-only)

- None recorded.

## Forbidden commands (read-only)

- R2 `curl --fail-with-body --request POST --header "Content-Type: application/json" --data @payload.json https://api.example.com/items` — Sends a state-changing POST request.
- R3 `curl --fail-with-body --request DELETE https://api.example.com/items/ID` — Sends a potentially destructive DELETE request.

## Execution rules

1. Mode boundary: R0 exact commands may be used; R1, R2, and R3 commands are forbidden.
2. Confirm the selected account, project, context, database, namespace, or environment before any command.
3. Prefer structured output using `--fail-with-body`, `--silent`, `--show-error`.
4. Capture the exact command, exit code, stdout, and stderr separately.
5. A generated prefix policy must prompt unless that exact prefix is explicitly marked suffix-safe; do not infer safety from the executable name.
6. Never broaden credentials or disable safety controls to make a command succeed.

## Official sources

- [curl manual](https://curl.se/docs/manpage.html)
- [curl manual source repository](https://github.com/curl/curl)

CLI vs MCP vs API for This Task

CLI
Use the CLI on a developer machine, in CI, or in a container when the task should reuse existing shell state, credentials, and scripts and remain directly observable.
MCP
Consider MCP when the agent benefits from controlled tool definitions, delegated identity, or centrally governed server-side access.
API
Use the direct API for persistent application integrations, high-volume requests, or event-driven work where starting a process adds unnecessary overhead.
Read the full CLI vs MCP guide

Verification History and Official Evidence

CLI Finder records documentation review separately from real execution. Installation, help, exit codes, and output cannot be called Verified until they were run.

Current evidence boundary
Version output, a bounded local file response, a JSON assertion, and the missing-file failure path were executed with fail, silent, error, and timeout flags. No network, TLS, authentication, redirect, HTTP response failure, upload, or state-changing request was tested.
Evidence confidence
verified
Independently tested version
8.7.1 · 2026-07-10
Test environment
macOS 26.5.1 (arm64), local non-interactive shell

Executed checks

  • PassedExit code: 0
    curl --version

    The recorded smoke check completed successfully.

    stdout excerpt

    curl 8.7.1 (x86_64-apple-darwin25.0) libcurl/8.7.1
  • PassedExit code: 0
    curl --fail --silent --show-error --max-time 5 file://$PWD/package.json

    The recorded smoke check completed successfully.

  • PassedExit code: 0
    curl --fail --silent --show-error --max-time 5 file://$PWD/package.json | jq -e '.name == "clifinder-net"'

    The bounded local file response passed the recorded jq assertion.

    stdout excerpt

    true
  • Expected failure pathExit code: 37
    curl --fail --silent --show-error --max-time 5 file://$PWD/not-a-real-qa-file

    curl returned its documented local-file open error and kept the diagnostic on stderr.

    stderr excerpt

    curl: (37) Couldn't open file <workspace>/not-a-real-qa-file
Official sources
Open the official material to confirm the current version and command behavior.

Alternatives and Related Paths

Call APIs, inspect protocols, and test webhooks or tunnels.
Send readable HTTP requests with JSON-aware input and output for local or CI workflows.
Reproduce one request with explicit method, headers, body, timeout, and saved response before changing the server or client.
Build a local inspection stack around search and structured data, then add HTTP and GitHub access with explicit scopes.
Choose curl for portability and precise scripting; choose HTTPie for readable interactive requests and convenient sessions.

Questions About curl for AI Agents