# Cloc

> Count lines of code, analyze codebase size and composition, compare code between versions. Use when the user asks about lines of code, codebase size, language breakdown, or code statistics.

- Skill: `onfire7777/cloc` (Agent Skill)
- Install (CLI): `npx skillmds@latest add onfire7777/cloc`
- Raw SKILL.md: https://api.skillmd.com/api/skills/onfire7777/cloc/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Unspecified
- Author: onfire7777 (https://skillmd.com/u/onfire7777)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/onfire7777/cloc

---

## Prerequisites

Before running cloc, check if it is installed:

```
which cloc
```

If not found, install it:
- macOS: `brew install cloc`
- npm: `npm install -g cloc`
- Debian/Ubuntu: `sudo apt install cloc`
- Red Hat/Fedora: `sudo yum install cloc`

## About cloc

cloc counts blank lines, comment lines, and physical lines of source code in 200+ programming languages. It can analyze files, directories, archives (tar, zip, .whl, .ipynb), and git commits/branches.

## Common Usage

**Count a directory (default: current project):**
```
cloc .
```

**Count using git file list (respects .gitignore):**
```
cloc --vcs=git
```

**Count a specific path:**
```
cloc $ARGUMENTS
```

**Count by file (detailed breakdown):**
```
cloc --by-file --vcs=git
```

**Diff between two git refs:**
```
cloc --git --diff <ref1> <ref2>
```

**Exclude directories:**
```
cloc --exclude-dir=node_modules,vendor,.git .
```

## Output Formats

Use these flags for machine-readable output:
- `--json` — JSON
- `--yaml` — YAML
- `--csv` — CSV
- `--md` — Markdown table
- `--xml` — XML

## Useful Flags

| Flag | Purpose |
|------|---------|
| `--by-file` | Per-file breakdown instead of per-language |
| `--vcs=git` | Use git to get file list (respects .gitignore) |
| `--git` | Treat arguments as git targets (commits, branches) |
| `--diff <a> <b>` | Show added/removed/modified lines between two sources |
| `--exclude-dir=<d1,d2>` | Skip directories |
| `--exclude-lang=<l1,l2>` | Skip languages |
| `--include-lang=<l1,l2>` | Only count these languages |
| `--force-lang=<lang>,<ext>` | Map file extension to a language |
| `--processes=N` | Parallel processing (N cores) |
| `--quiet` | Suppress progress output |

## Guidelines

- Prefer `--vcs=git` over bare `.` to avoid counting generated/vendored files
- Use `--json` when the user needs to process the output programmatically
- When comparing versions, use `--git --diff <ref1> <ref2>`
- For large repos, consider `--processes=N` to speed things up

