Agent skill

Curl Head Vs Get Header Debugging

by divinevideo in divinevideo/divine-mobile

Fix misleading HTTP response header values when debugging with curl -I or curl -sI.

MPL-2.0Auto-check passedDevelopment

Install Curl Head Vs Get Header Debugging

skills CLI
$ npx skills add divinevideo/divine-mobile --skill curl-head-vs-get-header-debugging -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install divinevideo/divine-mobile curl-head-vs-get-header-debugging --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/divinevideo/divine-mobile.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/curl-head-vs-get-header-debugging .claude/skills/curl-head-vs-get-header-debugging && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
curl-head-vs-get-header-debugging
GitHub stars
266
Token cost
~837 tokens
SKILL.md length
248 words
Files
1
Skills in repo
103
Repo updated
First seen
Licence
MPL-2.0

At a glance

Fix misleading HTTP response header values when debugging with curl -I or curl -sI.

  • Response headers differ between curl testing and actual browser/client behavior
  • SKILL.md covers Problem, Context / Trigger Conditions, Solution and Verification, plus 2 more sections
  • Calls curl
  • Other headers show unexpected values despite correct middleware code

What it does

Curl Head Vs Get Header Debugging is an agent skill from divinevideo/divine-mobile. Fix misleading HTTP response header values when debugging with curl -I or curl -sI. Use when: (1) Response headers differ between curl testing and actual browser/client behavior, (2) Cache-Control or other headers show unexpected values despite correct middleware code, (3) Server-side middleware that only applies to GET requests appears to not work when testing with curl -I. The -I flag sends HEAD requests, and middleware that checks for GET method will skip processing, returning handler-level headers instead of…

Its SKILL.md is about 840 tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Development, covering Debugging and Backend development. The licence is MPL-2.0.

When your agent uses it

  • Response headers differ between curl testing and actual browser/client behavior
  • Other headers show unexpected values despite correct middleware code
  • Server-side middleware that only applies to GET requests appears to not work when testing with curl -I

Example prompts

  • “/curl-head-vs-get-header-debugging”

What it can do on your machine

Read from SKILL.md and the folder at commit 4c622be. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Curl Head Vs Get Header Debugging loads about 837 tokens when it runs. Until then it costs about 145 tokens; SKILL.md has 248 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~145
When it runs · the whole SKILL.md, loaded when a task matches
~837

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from divinevideo/divine-mobile at commit 4c622be, republished under its MPL-2.0 licence (© divinevideo). 248 words, ~837 tokens.

Download SKILL.mdSave it as .claude/skills/curl-head-vs-get-header-debugging/SKILL.md (or your agent's skills folder).
name
curl-head-vs-get-header-debugging
description
Fix misleading HTTP response header values when debugging with curl -I or curl -sI. Use when: (1) Response headers differ between curl testing and actual browser/client behavior, (2) Cache-Control or other headers show unexpected values despite correct middleware code, (3) Server-side middleware that only applies to GET requests appears to not work when testing with curl -I. The -I flag sends HEAD requests, and middleware that checks for GET method will skip processing, returning handler-level headers instead of middleware-overridden ones.
author
Claude Code
version
1.0.0
date
2026-03-31

curl -I Sends HEAD, Not GET — Header Debugging Trap

Problem

When debugging HTTP response headers with curl -I or curl -sI, the response may show different header values than what actual GET requests receive. This is because -I sends a HEAD request, and server middleware that only processes GET requests will be skipped.

Context / Trigger Conditions

  • Testing cache headers with curl -sI and seeing unexpected values
  • Middleware that checks method == GET before setting headers (common in cache middleware)
  • Headers appear correct in automated tests but wrong in manual curl testing
  • Cache-Control, Surrogate-Control, or Surrogate-Key values don't match expectations
  • Axum/Express/any framework middleware with method guards

Solution

Use curl -s -D - -o /dev/null instead of curl -I to get response headers from a GET request:

bash
# WRONG — sends HEAD request, middleware may skip processing
curl -sI https://example.com/api/endpoint

# CORRECT — sends GET request, dumps headers, discards body
curl -s -D - -o /dev/null https://example.com/api/endpoint

If you need just specific headers:

bash
curl -s -D - -o /dev/null https://example.com/api/endpoint | grep -iE 'cache-control|surrogate'

Verification

Compare output from both methods:

bash
echo "=== HEAD (curl -I) ==="
curl -sI https://example.com/api/endpoint | grep cache-control

echo "=== GET (curl -D) ==="
curl -s -D - -o /dev/null https://example.com/api/endpoint | grep cache-control

If the values differ, your middleware has a GET-only guard (which is correct behavior).

Example

Axum middleware that only sets cache headers for GET requests:

rust
async fn cache_middleware(request: Request, next: Next) -> Response {
    let method = request.method().clone();
    let mut response = next.run(request).await;

    // HEAD requests skip this — curl -I won't see these headers!
    if method != Method::GET {
        return response;
    }

    response.headers_mut().insert("cache-control", ...);
    response.headers_mut().insert("surrogate-control", ...);
    response
}

Notes

  • This is NOT a bug — it's correct behavior. Cache headers should only apply to cacheable GET responses.
  • HTTP spec says HEAD responses SHOULD include the same headers as GET, but middleware implementations often don't replicate this because HEAD is rarely used by CDNs or browsers for caching decisions.
  • Fastly, Cloudflare, and other CDNs send GET requests to origins, so the cache behavior is correct even if curl -I shows different headers.
  • This trap is especially insidious because curl -I is the most common way to check headers.

© divinevideo, MPL-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/curl-head-vs-get-header-debugging of divinevideo/divine-mobile.

Open the folder on GitHubat commit 4c622be

Compare with similar skills

Curl Head Vs Get Header Debugging next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Curl Head Vs Get Header Debugging compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Curl Head Vs Get Header Debugging this skilldivinevideo/divine-mobile266—~837Automated safety check: PassMPL-2.0
Gumroad Prod Consoleantiwork/gumroad9.8k—~2.9kAutomated safety check: NotesMIT
Renderdoc GPU Debugrudybear/renderdoc-skill211—~4kAutomated safety check: PassMIT
Flowfile Debugging PlaybookEdwardvaneechoud/Flowfile373—~6.3kAutomated safety check: PassMIT
Octane Frankenphp GotchasAratKruglik/claude-laravel155—~732Automated safety check: PassNone
Config Loader Helperpilinux/gorest506—~441Automated safety check: PassMIT

Similar skills

  • Gumroad Prod Console

    antiwork/gumroad

    Execute read-only Ruby/Rails commands against Gumroad's production database for debugging and investigation.

    9.8k GitHub stars~2.9k tokensUpdated today
    DevelopmentAuto-check: notes
  • Renderdoc GPU Debug

    rudybear/renderdoc-skill

    GPU frame debugging with RenderDoc via rdc-cli. An agent skill from rudybear/renderdoc-skill.

    211 GitHub stars~4k tokensUpdated 7 mo ago
    DevelopmentAuto-check passed
  • Flowfile Debugging Playbook

    Edwardvaneechoud/Flowfile

    Symptom-to-cause triage playbook for Flowfile (core/worker/kernel/frontend/AI) — covers "no such table" DB cascades (two distinct causes), import-time Alembic migration corruption, silent…

    373 GitHub stars~6.3k tokensUpdated today
    DevelopmentAuto-check passed
  • Octane Frankenphp Gotchas

    AratKruglik/claude-laravel

    A skill your agent uses when debugging unexpected behavior in Laravel Octane with FrankenPHP - stale data between requests, memory leaks, singleton contamination, static property state, or anything…

    155 GitHub stars~732 tokensUpdated 5 mo ago
    Backend & APIsAuto-check passed
  • Config Loader Helper

    pilinux/gorest

    Diagnoses configuration failures in the gorest project by listing the required environment variables grouped by feature and giving minimal commands for a safe local test setup.

    506 GitHub stars~441 tokensUpdated 12 days ago
    Backend & APIsAuto-check passed
  • Warpnet Debug Backend

    Warp-net/warpnet

    A skill your agent uses when a Warpnet bug lives in the Go node/backend — the fat/member/remote node, its handlers, storage, or libp2p layer.

    157 GitHub stars~2.9k tokensUpdated today
    Backend & APIsAuto-check passed

More from divinevideo/divine-mobile

All 103 skills in this repo
  • Fix ArgoCD ExternalSecret deployment failing with "namespace X is not permitted in project Y".

    266 GitHub stars~931 tokensUpdated today
    Auto-check passed
  • Art Direct

    divinevideo/divine-mobile

    Art direction for any content — reads text, PDF, Word, HTML, PPT, then proposes 2-3 creative directions with photography style, mood, and visual language.

    266 GitHub stars~4.8k tokensUpdated today
    Auto-check passed
  • Async Await Null Race Condition

    divinevideo/divine-mobile

    Fix "Null check operator used on a null value" errors when an object is set to null during an async await.

    266 GitHub stars~881 tokensUpdated today
    Auto-check passed
  • AWS V4 Signing Custom Headers Gcs

    divinevideo/divine-mobile

    Add custom metadata headers (x-amz-meta-) to AWS v4 signed requests for GCS S3-compatible API.

    266 GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Bash Herestring Newline Secrets

    divinevideo/divine-mobile

    Fix password/secret authentication failures caused by trailing newlines when creating Google Cloud secrets (or similar) with bash here-strings.

    266 GitHub stars~791 tokensUpdated today
    Auto-check passed
  • Fix silent video/media processing failures caused by URL extraction code that filters on file extensions (.mp4, .webm, .webp).

    266 GitHub stars~1.1k tokensUpdated today
    Auto-check passed

Categories

Questions about Curl Head Vs Get Header Debugging

What does Curl Head Vs Get Header Debugging do?

Fix misleading HTTP response header values when debugging with curl -I or curl -sI. Curl Head Vs Get Header Debugging is an agent skill from divinevideo/divine-mobile. Fix misleading HTTP response header values when debugging with curl -I or curl -sI.

When should I use Curl Head Vs Get Header Debugging?

Curl Head Vs Get Header Debugging fits situations like: response headers differ between curl testing and actual browser/client behavior; other headers show unexpected values despite correct middleware code; server-side middleware that only applies to GET requests appears to not work when testing with curl -I.

How do I install Curl Head Vs Get Header Debugging in Claude Code?

Run `npx skills add divinevideo/divine-mobile --skill curl-head-vs-get-header-debugging -a claude-code`. Or copy the skill folder (.agents/skills/curl-head-vs-get-header-debugging in divinevideo/divine-mobile) into .claude/skills/curl-head-vs-get-header-debugging in your project. Claude Code loads it when a task matches its description.

How do I install Curl Head Vs Get Header Debugging in Codex?

Run `npx skills add divinevideo/divine-mobile --skill curl-head-vs-get-header-debugging -a codex`. Or copy the skill folder (.agents/skills/curl-head-vs-get-header-debugging in divinevideo/divine-mobile) into .agents/skills/curl-head-vs-get-header-debugging in your project. Codex loads it when a task matches its description.

Can I use Curl Head Vs Get Header Debugging in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add divinevideo/divine-mobile --skill curl-head-vs-get-header-debugging -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/curl-head-vs-get-header-debugging, .gemini/skills/curl-head-vs-get-header-debugging, .github/skills/curl-head-vs-get-header-debugging and .opencode/skills/curl-head-vs-get-header-debugging in your project.

What does Curl Head Vs Get Header Debugging need to run?

Going by SKILL.md and its folder, Curl Head Vs Get Header Debugging needs the command-line tools its instructions call (curl).

Does Curl Head Vs Get Header Debugging access the network?

SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Curl Head Vs Get Header Debugging safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Curl Head Vs Get Header Debugging use?

Curl Head Vs Get Header Debugging is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Curl Head Vs Get Header Debugging use?

About 837 tokens (SKILL.md is roughly 3.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Curl Head Vs Get Header Debugging?

Skills that share tags, products or a category with Curl Head Vs Get Header Debugging: Gumroad Prod Console (antiwork/gumroad, 9.8k stars), Renderdoc GPU Debug (rudybear/renderdoc-skill, 211 stars), Flowfile Debugging Playbook (Edwardvaneechoud/Flowfile, 373 stars) and Octane Frankenphp Gotchas (AratKruglik/claude-laravel, 155 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Curl Head Vs Get Header Debugging?

divinevideo (a GitHub organization) maintains it in divinevideo/divine-mobile, which has 266 GitHub stars. The repository holds 103 skills in this directory. The repository was last updated on October 8, 2026.

Source: divinevideo/divine-mobile on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.