Skip to content
Back to skills

Claude Headless Mode

ASecurity

Guide for using claude CLI in headless mode with --print, output formats, and JSON schema

  • 666 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added September 2, 2026
ai-agentsrustgobashci/cdsecurity

Works with

  • cli

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add majiayu000/claude-skill-registry --skill claude-headless-mode --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Claude Headless Mode?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Claude Headless Mode
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-claude-headless-mode-claude-skill-registry/badge)](https://www.skillsdirectory.com/skills/majiayu000-claude-headless-mode-claude-skill-registry)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: claude-headless-mode
description: Guide for using claude CLI in headless mode with --print, output formats, and JSON schema
triggers:
  - claude --print
  - claude -p
  - headless mode
  - automation
  - scripting
---

# Claude Headless Mode

Use `claude -p` (or `--print`) for non-interactive execution in scripts, CI, and automation.

## Basic Usage

```bash
# Simple prompt
claude -p "Summarize this repo"

# With file input
claude -p "Review this code" < file.py

# Pipe output
claude -p "List all functions" | grep "def "
```

## Output Formats

| Format | Flag | Use Case |
|--------|------|----------|
| Text | `--output-format text` | Human-readable (default) |
| JSON | `--output-format json` | Single JSON result |
| Stream JSON | `--output-format stream-json --verbose` | Real-time streaming |

### Text Output (Default)

```bash
claude -p "What is 2+2?"
# Output: 4
```

### JSON Output

```bash
claude -p "What is 2+2?" --output-format json
```

Returns wrapper with metadata:
```json
{
  "type": "result",
  "subtype": "success",
  "result": "4",
  "duration_ms": 1234,
  "total_cost_usd": 0.01,
  "session_id": "...",
  "structured_output": null
}
```

Extract just the result:
```bash
claude -p "What is 2+2?" --output-format json | jq -r '.result'
```

### Stream JSON Output

```bash
claude -p "Long analysis" --output-format stream-json --verbose
```

- Streams newline-delimited JSON as execution progresses
- Shows tool calls, messages, progress in real-time
- Final line contains the result
- **Requires `--verbose` flag**

Extract final result:
```bash
claude -p "Analyze code" --output-format stream-json --verbose \
  | tee /dev/stderr \
  | tail -1 \
  | jq -r '.result'
```

## Structured Output with JSON Schema

Force Claude to return data matching a specific schema:

```bash
claude -p "Extract function names from auth.py" \
  --output-format json \
  --json-schema '{
    "type": "object",
    "properties": {
      "functions": { "type": "array", "items": { "type": "string" } }
    },
    "required": ["functions"]
  }'
```

Result appears in `structured_output` field:
```json
{
  "result": "...",
  "structured_output": {
    "functions": ["login", "logout", "verify_token"]
  }
}
```

### Schema Examples

**Simple object:**
```json
{
  "type": "object",
  "properties": {
    "answer": { "type": "integer" }
  },
  "required": ["answer"]
}
```

**Task result (success/failure):**
```json
{
  "type": "object",
  "properties": {
    "status": { "type": "string", "enum": ["success", "failure"] },
    "summary": { "type": "string" },
    "files_changed": { "type": "array", "items": { "type": "string" } },
    "error_category": { "type": "string" },
    "suggestion": { "type": "string" }
  },
  "required": ["status", "summary"]
}
```

**Extract from schema result:**
```bash
OUTPUT=$(claude -p "$PROMPT" --output-format json --json-schema "$SCHEMA")
STATUS=$(echo "$OUTPUT" | jq -r '.structured_output.status')
SUMMARY=$(echo "$OUTPUT" | jq -r '.structured_output.summary')
```

## Common Options

| Option | Description |
|--------|-------------|
| `-p, --print` | Headless mode (required) |
| `--output-format` | text, json, stream-json |
| `--json-schema` | Enforce output schema |
| `--verbose` | Required for stream-json |
| `--model` | Select model (sonnet, opus, haiku) |
| `--max-turns` | Limit agentic turns |
| `--permission-mode` | bypassPermissions, plan, etc. |
| `--allowedTools` | Restrict available tools |

## Permission Modes

```bash
# Skip all permission prompts (trusted environments only)
claude -p "Fix all linting errors" --permission-mode bypassPermissions

# Plan mode (read-only exploration)
claude -p "Analyze architecture" --permission-mode plan
```

## Examples

### CI/CD Integration

```bash
# Run tests and get structured result
RESULT=$(claude -p "Run tests and report results" \
  --output-format json \
  --json-schema '{"type":"object","properties":{"passed":{"type":"boolean"},"failures":{"type":"array","items":{"type":"string"}}},"required":["passed"]}')

if [ "$(echo $RESULT | jq '.structured_output.passed')" = "true" ]; then
  echo "Tests passed"
else
  echo "Tests failed"
  exit 1
fi
```

### Batch Processing

```bash
for file in src/*.py; do
  claude -p "Review $file for security issues" \
    --output-format json \
    --json-schema '{"type":"object","properties":{"issues":{"type":"array"}},"required":["issues"]}' \
    | jq ".structured_output.issues"
done
```

### Fresh Context Task Execution

```bash
# Each invocation is independent (no conversation history)
claude -p "Task 1: Create migration" --output-format json
claude -p "Task 2: Add model" --output-format json
claude -p "Task 3: Write tests" --output-format json
```

## Notes

- Each `-p` invocation starts fresh (no context from previous runs)
- Use `--output-format json` for programmatic parsing
- `structured_output` field contains schema-validated data
- `result` field contains raw text response
- Stream JSON requires `--verbose` flag
- Cost info available in JSON output: `total_cost_usd`

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.