context-pack
Context Pack
Pack any codebase, folder, or ZIP archive into a single, well-formatted text block perfect for LLM context windows. Smart filtering, interactive selection, and clean markdown output.
When to use me
Use this skill when you need to:
- Send an entire codebase to an LLM for analysis or modification
- Share a project with another AI agent for collaboration
- Create context for code review or debugging
- Package documentation and code together for AI consumption
- Convert legacy projects into LLM-ready format
What I do
1. Smart File Discovery
- Automatically finds all files in a directory or ZIP
- Respects
.gitignorepatterns - Filters out common noise (node_modules, .git, build artifacts)
- Handles nested directory structures
2. File Type Detection
- Text files: Included as-is (code, docs, config)
- Binary files: Optional Base64 encoding (images, executables, binaries)
- Unknown files: Smart detection with fallback to binary
3. Interactive Selection
- Preview file tree before packing
- Select/deselect specific files or directories
- Filter by file type, size, or pattern
- See statistics (total size, file count, token estimate)
4. Smart Formatting
Output format:
# Context Pack: project-name
## Summary
- Source: /path/to/project
- Files: 42
- Size: 156 KB
- Token estimate: ~50,000
## File Tree
src/ ├── index.ts ├── utils/ │ └── helpers.ts └── components/ └── Button.tsx
## Files
### src/index.ts
```typescript
// File content here...
src/utils/helpers.ts
// File content here...
src/components/Button.tsx
// File content here...
### 5. Binary Handling
```markdown
## Binary Files (Base64 Encoded)
### assets/logo.png
```base64
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1I
g1AcxV/TaqVVHuwQxCFDdwURXQQXU8QII0M9k9q0QhGzBjOjog7WFpaCujgEC/pBj6Bg56KOqI4K7gN+
...
## Examples
### Pack a folder
```bash
# Pack current directory
bash scripts/pack.sh .
# Pack specific directory
bash scripts/pack.sh /path/to/myproject
# Pack with binary files included
bash scripts/pack.sh . --include-binary
# Pack with specific file limit
bash scripts/pack.sh . --max-files 50 --max-size 1MB
Pack a ZIP archive
bash scripts/pack.sh project.zip
# Extract and pack
bash scripts/pack.sh archive.zip --extract-to ./temp
Filter files
# Only include TypeScript files
bash scripts/pack.sh . --include "*.ts" --include "*.tsx"
# Exclude tests
bash scripts/pack.sh . --exclude "*test*" --exclude "*spec*"
# Include only src directory
bash scripts/pack.sh . --include-dir "src"
Interactive selection
# Preview and select interactively
bash scripts/pack.sh . --interactive
# This shows a file tree where you can:
# - [x] Select files/folders with checkboxes
# - See file sizes and types
# - Toggle binary inclusion
# - Preview before generating
Output options
# Output to file
bash scripts/pack.sh . --output project-context.md
# Copy to clipboard (if available)
bash scripts/pack.sh . --clipboard
# JSON output for programmatic use
bash scripts/pack.sh . --format json
File Type Support
Text Files (Included by default)
- Code:
.js,.ts,.jsx,.tsx,.py,.java,.c,.cpp,.go,.rs,.php,.rb - Web:
.html,.htm,.css,.scss,.sass,.less - Config:
.json,.xml,.yml,.yaml,.toml,.ini,.conf,.env - Docs:
.md,.txt,.csv,.tsv,.log - Scripts:
.sh,.bash,.zsh,.ps1,.bat
Binary Files (Optional Base64)
- Images:
.png,.jpg,.jpeg,.gif,.svg,.ico,.webp,.bmp - Executables:
.exe,.bin,.app,.dll,.so,.dylib - Archives:
.zip,.tar,.gz,.rar,.7z - Documents:
.pdf,.doc,.docx,.xls,.xlsx,.ppt,.pptx - Other:
.mp3,.mp4,.wav,.avi,.mov,.ttf,.otf,.woff
Scripts
scripts/pack.sh
Main packing script with options for filtering and output.
bash scripts/pack.sh [OPTIONS] <path>
Options:
-i, --include PATTERN Include files matching pattern
-e, --exclude PATTERN Exclude files matching pattern
-d, --include-dir DIR Include only this directory
--include-binary Include binary files as Base64
--max-files N Maximum number of files
--max-size SIZE Maximum total size (e.g., 10MB, 1GB)
--max-tokens N Maximum token estimate
-o, --output FILE Output file (default: stdout)
--format FORMAT Output format: markdown, json, plain
--clipboard Copy output to clipboard
--interactive Interactive file selection
-v, --verbose Verbose output
-h, --help Show help
scripts/pack-web.sh
Launch web-based interactive interface for file selection.
# Launch web UI
bash scripts/pack-web.sh [path]
# Opens browser with:
# - File tree browser with checkboxes
# - Size statistics
# - Token count estimates
# - Preview before packing
scripts/unpack.sh
Extract a context pack back into files.
bash scripts/unpack.sh <context-file> [output-dir]
# Extracts files from markdown format
# Reconstructs directory structure
# Decodes Base64 binary files
Output Format
Markdown (Default)
# Context Pack: my-project
## Summary
- **Source**: /path/to/my-project
- **Packed**: 2024-03-08T10:30:15Z
- **Files**: 42 (38 text, 4 binary)
- **Size**: 156 KB
- **Token Estimate**: ~52,000 tokens
## File Tree
my-project/ ├── src/ │ ├── index.ts │ ├── utils/ │ │ └── helpers.ts │ └── components/ │ └── Button.tsx ├── package.json └── README.md
## Files
### package.json
```json
{
"name": "my-project",
"version": "1.0.0",
"type": "module"
}
src/index.ts
import { Button } from './components/Button';
export function init() {
const button = new Button('Click me');
button.render();
}
src/utils/helpers.ts
export function formatDate(date: Date): string {
return date.toISOString().split('T')[0];
}
Binary Files (Base64 Encoded)
assets/logo.png
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAA...
Packed with Context Pack skill
### JSON Format
```json
{
"pack": {
"name": "my-project",
"source": "/path/to/my-project",
"packed_at": "2024-03-08T10:30:15Z",
"stats": {
"files": 42,
"text_files": 38,
"binary_files": 4,
"size_bytes": 156432,
"estimated_tokens": 52000
},
"file_tree": {
"name": "my-project",
"type": "directory",
"children": [...]
}
},
"files": [
{
"path": "package.json",
"type": "text",
"size": 234,
"content": "{...}"
},
{
"path": "src/index.ts",
"type": "text",
"size": 567,
"content": "import..."
},
{
"path": "assets/logo.png",
"type": "binary",
"size": 12345,
"encoding": "base64",
"content": "iVBORw0KGgo..."
}
]
}
Token Estimation
Rough token counts for LLM context windows:
| File Type | Approximate Tokens |
|---|---|
| English text | ~4 chars per token |
| Code | ~3 chars per token |
| JSON | ~2 chars per token |
| Base64 binary | ~1 char per token |
Quick estimates:
- 1 KB of code ≈ 300 tokens
- 1 KB of text ≈ 250 tokens
- 1 KB Base64 ≈ 1000 tokens (avoid large binaries)
Context window limits:
- GPT-4: ~8K-32K tokens
- Claude: ~100K-200K tokens
- Gemini: ~1M tokens
Interactive Mode
When using --interactive, you get a TUI (Text User Interface) for file selection:
Context Pack - Interactive Mode
================================
File Tree (use arrows to navigate, space to select)
[✓] my-project/
[✓] src/
[✓] index.ts 567 B
[✓] utils/
[✓] helpers.ts 1.2 KB
[✓] components/
[✓] Button.tsx 890 B
[✓] package.json 234 B
[ ] node_modules/ [skip]
[ ] .git/ [skip]
Statistics:
Selected: 5 files, 2.9 KB
Skipped: 847 files (node_modules, .git)
Est. tokens: ~9,500
Commands:
[SPACE] Toggle selection [A] Select all [N] None
[E] Exclude pattern [I] Include pattern
[B] Toggle binary files [P] Preview
[ENTER] Generate pack [Q] Quit
Notes
- Privacy: All processing is local - no files are uploaded
- Large codebases: Use
--max-filesand--max-tokensto stay within limits - Binary files: Large binaries bloat context - consider excluding them
- Token counts: Estimates are approximate - actual counts vary by model
- Markdown preferred: LLMs parse markdown structure well
- File order: Files are sorted by path for consistent output
- Deduplication: Identical files are only included once
- Circular references: Symlinks are resolved and handled
More from wojons/skills
adversarial-thinking
Apply systematic adversarial thinking patterns including devil's advocate, assumption busting, red teaming, and white hat security approaches
45devils-advocate
Challenge ideas, assumptions, and decisions by playing devil's advocate to identify weaknesses and prevent groupthink
41redteam
Think and act like an attacker to identify security vulnerabilities, weaknesses, and penetration vectors through adversarial security testing
37observability-logging
Use logs as part of comprehensive observability strategy including metrics, traces, alerts, and dashboards for system understanding and operational excellence
34gap-analysis
Identify discrepancies between documented requirements and actual implementation through systematic comparison and analysis
34white-hat
Build defensive security capabilities, implement security by design, and practice ethical hacking to protect systems proactively
33