Use ONE Bash script instead of N sequential Read calls when analyzing multiple files, auditing codebase, finding all matches, scanning dependencies, counting lines, or listing files matching a pattern. Replaces wasteful multi-Read loops with compact shell pipelines.
Scanned 5/28/2026
npx -y skills add fusengine/agents --skill think-in-code --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Think In Code?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/fusengine-think-in-code)More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.
---
name: think-in-code
description: Use ONE Bash script instead of N sequential Read calls when analyzing multiple files, auditing codebase, finding all matches, scanning dependencies, counting lines, or listing files matching a pattern. Replaces wasteful multi-Read loops with compact shell pipelines.
argument-hint: "[pattern] [scope]"
keywords:
- analyse multiple fichiers
- audit codebase
- find all
- scan dependencies
- count lines
- list files matching
- bulk read
user-invocable: false
---
# Think-in-Code Skill
## Principle
**1 Bash script = N Read calls avoided.**
When you'd read 10 files sequentially to extract a summary, you waste tokens loading full contents into context. Instead: 1 shell pipeline returns the compact aggregated result.
Heuristic: if your task is "for each file in set, compute/extract X, then aggregate" → write the script. Reserve Read for *targeted inspection* of a specific file you already know matters.
## 5 Runnable Patterns
### 1. File size audit (> 100 lines violations)
```bash
find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.py" -o -name "*.php" \) \
-not -path "*/node_modules/*" -not -path "*/vendor/*" \
| xargs wc -l 2>/dev/null \
| awk '$1 > 100 && $2 != "total" {print $1, $2}' \
| sort -rn | head -20
```
### 2. Multi-grep symbols (compact JSON)
```bash
rg --json -g '*.ts' -g '*.tsx' 'export (function|class|const) (\w+)' src/ \
| jq -r 'select(.type=="match") | "\(.data.path.text):\(.data.line_number) \(.data.lines.text)"' \
| head -50
```
### 3. Dependencies with versions
```bash
# Node
jq -r '.dependencies, .devDependencies | to_entries[] | "\(.key)@\(.value)"' package.json 2>/dev/null
# PHP
jq -r '.require, ."require-dev" | to_entries[] | "\(.key)@\(.value)"' composer.json 2>/dev/null
```
### 4. Error log scan
```bash
grep -rEn 'ERROR|FATAL|Exception|panic:|stack trace' \
--include="*.log" logs/ 2>/dev/null \
| tail -30
```
### 5. Lines of code by extension
```bash
find . -type f \( -name "*.ts" -o -name "*.tsx" -o -name "*.js" -o -name "*.py" -o -name "*.php" \) \
-not -path "*/node_modules/*" -not -path "*/vendor/*" -not -path "*/.git/*" \
-exec wc -l {} + \
| awk '{ext=$2; sub(/.*\./,"",ext); sum[ext]+=$1} END {for (e in sum) print sum[e], e}' \
| sort -rn
```
## Anti-Pattern
**Do NOT** Read 10 files sequentially to count their lines, list their exports, or check their size. That is ~6KB context per file = ~60KB wasted for a result that fits in 1KB.
```
WRONG: Read(f1.ts) → Read(f2.ts) → ... → Read(f10.ts) → manual tally
RIGHT: Bash(find ... | xargs wc -l | awk ...) → 1 compact table
```
## Before / After
**Task:** "Find files > 100 lines in `src/`."
- Before: 10 × Read full file → ~60KB tokens consumed, then mental wc.
- After: 1 × `find src -name '*.ts' | xargs wc -l | awk '$1>100'` → ~1KB result.
**~60× reduction. Use the script.**
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!