Generate a professional ASCII directory structure in Markdown. Use this before modifying a project to understand its layout, identify key files, visualize or document the file structure of a directory, project or codebase.
Installs into .claude/skills of the current project.
Are you the author of Tree Gen?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/mdnaimul22-tree-gen)
---
name: "tree_gen"
description: "Generate a professional ASCII directory structure in Markdown. Use this before modifying a project to understand its layout, identify key files, visualize or document the file structure of a directory, project or codebase."
version: "1.0.0"
author: "Human Skill Team"
tags: ["documentation", "structure", "visualization", "tree", "file-system"]
trigger_patterns:
- "directory structure"
- "file tree"
- "show structure"
- "visualize folder"
- "project structure"
- "codebase tree"
- "list files"
- "dir structure"
---
# Directory Structure Generator
## When to Use
Activate this skill when the user asks to:
- Understand the directory structure of a project
- Show the directory structure of a project
- Visualize the file tree of a codebase
- Document the folder organization
- List files in a structured format
- Generate a markdown representation of a directory
## The **tree_gen** Tool
This skill uses the `tree_gen` tool to create Markdown-formatted directory trees.
### π PARAMETERS:
- `input_path`: **REQUIRED** - Absolute path of the directory to scan.
- `output_path`: *OPTIONAL* - Where to write the output file. Defaults to `input_path`.
- `file_name`: *OPTIONAL* - Output filename. Defaults to `{dir_name}_structure.md`.
- `layout`: *OPTIONAL* - `"vertical"` (default, classic top-down) or `"horizontal"` (top-level dirs side-by-side).
- `max_depth`: *OPTIONAL* - How many levels deep to recurse. Default: `4`. Set `0` for unlimited.
- `use_gitignore`: *OPTIONAL* - Read and apply `.gitignore` rules. Default: `true`.
- `ignored_path`: *OPTIONAL* - Comma-separated absolute paths to exclude.
- `ignored_extensions`: *OPTIONAL* - Comma-separated extensions to exclude (e.g. `.log,.tmp`).
## Decision Tree: How to Use This Tool
### 1οΈβ£ Identify the Scope
**Ask yourself:**
- Is this a small project (<100 files)?
- Is this a large codebase (>1000 files)?
- Does the user want the full project or a specific folder?
- Do they want all files or just source code?
### 2οΈβ£ Choose the Right Strategy
| Scenario | Strategy |
|----------|----------|
| **Small project** | Scan everything, minimal ignores |
| **Medium web app** | Ignore node_modules, build outputs |
| **Large monorepo** | Target specific directories, aggressive ignores |
| **Root-level scan** | Always ignore knowledge, chats, workdir |
| **Source code only** | Ignore all non-code files |
---
### π HOW TO CALL THIS TOOL:
The agent executes `execute.py` with the JSON payload passed directly as a string argument:
```bash
human-skills '{"tool_name": "tree_gen", "tool_args": {"input_path": "home/user_name/workdir/my-project", "output_path": "home/user_name/workdir/my-project", "file_name": "PROJECT_MAP", "layout": "vertical", "max_depth": "3", "use_gitignore": "true", "ignored_path": "home/user_name/workdir/my-project/tests, home/user_name/workdir/my-project/docs", "ignored_extensions": ".csv,.json"}}'
```
Which maps to this JSON payload:
```json
{
"tool_name": "tree_gen",
"tool_args": {
"input_path": "home/user_name/workdir/my-project",
"output_path": "home/user_name/workdir/my-project",
"file_name": "PROJECT_MAP",
"layout": "vertical",
"max_depth": "3",
"use_gitignore": "true",
"ignored_path": "home/user_name/workdir/my-project/tests, home/user_name/workdir/my-project/docs",
"ignored_extensions": ".csv,.json"
}
}
```
Expected output:
```
β Directory Structure Generated.
Path : home/user_name/workdir/my-project/PROJECT_MAP.md
Layout : vertical
Depth : 3 levels
Lines : 33
Size : 986.0 B
Dirs : 15
Files : 26
Scanned : 282.2 KB
```
### β οΈ IMPORTANT NOTES:
- **All values in `tool_args` must be strings** (e.g. `"max_depth": "3"`, not `3`).
- Common patterns (`.git`, `node_modules`, `__pycache__`, binaries, media) are auto-ignored.
- If output exceeds 500 lines, a tip is shown to reduce `max_depth` or add `ignored_path`.
- Default filename: `{dir_name}_structure.md` (e.g. `my-project_structure.md`).
## Scenario-Based Instructions
### π Scenario 1: Small Project (< 100 files)
**When:** Scanning a small Python project, simple script, or personal library where we want to show almost everything, ignoring only cache and git files, using the default depth of 4.
**What to ignore:** Minimal - only critical clutter
- `__pycache__`, `.git`, `.venv`, `node_modules`
**Example:**
```bash
human-skills '{
"tool_name": "tree_gen",
"tool_args": {
"input_path": "home/user_name/workdir/my-folder",
"ignored_path": "__pycache__, .git, .venv, .env, .gitkeep, .DS_Store, .log, .tmp"
}
}'
```
---
### π¦ Scenario 2: Medium Web Application (100β1000 files)
**When:** Scanning a typical React, Vue, or Node.js web app where we need to ignore dependencies and build outputs for a cleaner overview.
**What to ignore:** Dependencies and build artifacts
- `node_modules`, `dist`, `build`, `coverage`
- `.next`, `.nuxt`, `.cache`
- `__pycache__`, `.pytest_cache`
**Example:**
```bash
human-skills '{
"tool_name": "tree_gen",
"tool_args": {
"input_path": "home/user_name/workdir/my-webapp",
"ignored_path": "node_modules, dist, .next, coverage, __pycache__, .git, .venv, .env, .gitkeep, .DS_Store, .log, .tmp"
}
}'
```
---
### π’ Scenario 3: Large Codebase/Monorepo (> 1000 files)
**When:** Scanning an enterprise application, complex system, or a specific package within a large monorepo. We must ignore tests and dependencies to keep the output manageable.
**Strategy:**
1. **Never scan the entire root** - it will be too large
2. **Target specific packages/modules** one at a time
3. **Use aggressive ignores**
**What to ignore:** Everything non-essential
- All dependencies: `node_modules`, `vendor`, `.venv`
- All build outputs: `dist`, `build`, `out`, `target`
- All test files and coverage
- All media and assets
**Example - Scan specific package:**
```bash
human-skills '{
"tool_name": "tree_gen",
"tool_args": {
"input_path": "home/user_name/workdir/monorepo/packages/backend",
"ignored_path": "node_modules, dist, coverage, tests, __tests__, .git"
}
}'
```
**Example - Multiple targeted scans:**
```bash
# First: Backend
human-skills '{
"tool_name": "tree_gen",
"tool_args": {
"input_path": "home/user_name/workdir/monorepo/packages/backend",
"output_path": "home/user_name/workdir/docs",
"ignored_path": "node_modules, dist, tests"
}
}'
# Then: Frontend (separate call)
human-skills '{
"tool_name": "tree_gen",
"tool_args": {
"input_path": "home/user_name/workdir/monorepo/packages/frontend",
"output_path": "home/user_name/workdir/docs",
"ignored_path": "node_modules, .next, public/assets"
}
}'
```
---
### π Scenario 4: Root-Level Scan (home/user_name/ or system root)
**When:** Generating a system-wide or root workspace overview. We must aggressively ignore huge directories like workdir, chats, and knowledge to prevent overflowing the token limit.
**β οΈ CRITICAL RULES:**
1. **ALWAYS ignore these paths for home/user_name/:**
- `home/user_name/workdir` (user projects - scan separately)
- `home/user_name/chats` (conversation history)
- `home/user_name/knowledge/main` (large knowledge base)
- `home/user_name/memory/default` (vector database)
2. **What to show:**
- Agent configurations
- Skills
- System configuration files
- Project metadata
**Example:**
```bash
human-skills '{
"tool_name": "tree_gen",
"tool_args": {
"input_path": "home/user_name/",
"ignored_path": "home/user_name/workdir, home/user_name/chats, home/user_name/knowledge/main, home/user_name/memory/default"
}
}'
```
---
### π― Scenario 5: Specific Folder Deep Dive
**When:** The user requests a deep dive into ONE specific directory (e.g., "show me the src folder structure"). We need to show all source files with minimal filtering.
**Strategy:**
- Target ONLY that folder
- Show everything inside (minimal ignores)
- Good for code review, onboarding, documentation
**What to ignore:** Only cache and temporary files
- `__pycache__`, `.pytest_cache`
- `*.pyc`, `.DS_Store`
**Example:**
```bash
human-skills '{
"tool_name": "tree_gen",
"tool_args": {
"input_path": "home/user_name/workdir/my-app/src",
"ignored_path": "__pycache__, .pytest_cache"
}
}'
```
---
### π Scenario 6: Documentation Purpose
**When:** Preparing structure output for a README, documentation, or architectural diagram. We should only show source code and configuration, strictly hiding test suites and build outputs.
**Strategy:**
- Focus on source code and configuration
- Ignore everything that's not essential to understanding
- Keep output clean and professional
**What to ignore:**
- All dependencies and node_modules
- All build outputs and artifacts
- All test files (unless specifically asked)
- All media and binary files
- All local development files (.env, .vscode)
**Example:**
```bash
human-skills '{
"tool_name": "tree_gen",
"tool_args": {
"input_path": "home/user_name/workdir/my-project",
"output_path": "home/user_name/workdir/my-project/docs",
"ignored_path": "node_modules, dist, build, tests, __tests__, coverage, .git, .vscode, public/images"
}
}'
```
---
## Quick Reference: Common Ignore Patterns
### By Language/Framework
**Python Projects:**
```
__pycache__, .pytest_cache, .venv, .mypy_cache, *.pyc, dist, build
```
**Node.js Projects:**
```
node_modules, dist, build, .next, .nuxt, coverage, .cache
```
**Full-Stack Projects:**
```
node_modules, __pycache__, dist, build, .venv, coverage, .git
```
### By Purpose
**Code Review (show source only):**
```
node_modules, dist, build, tests, __tests__, coverage, docs, public
```
**Documentation (clean view):**
```
node_modules, dist, .git, .vscode, tests, coverage, *.min.js, assets
```
**Deployment Check (show build outputs):**
```
node_modules, .git, src, tests (only ignore source and development files)
```
---
## Best Practices
### β DO:
1. **Always check project size first** - use `list_dir` to estimate
2. **For large projects, scan specific directories** - never scan massive roots
3. **For home/user_name/, ALWAYS ignore workdir and chats**
4. **Match ignores to user's intent** - code review vs documentation needs different ignores
5. **Present the output** - read structure.md and show it to user after generation
### β DON'T:
1. **Don't scan home/user_name/workdir directly** - ask which project inside it
2. **Don't forget node_modules** - it can have 100k+ files
3. **Don't ignore too little** - output will be overwhelming
4. **Don't use relative paths in ignored_path** - always use absolute paths
5. **Don't generate without understanding user's goal** - ask if unclear
---
## Common Issues & Solutions
| Issue | Solution |
|-------|----------|
| "Output is 10,000+ lines" | Add more aggressive ignores or target smaller directory |
| "Empty structure.md" | Path doesn't exist or all files were ignored |
| "Still showing node_modules" | Use absolute path: `/full/path/to/node_modules` |
| "Missing important files" | Review ignored_path - may have over-filtered |
## Troubleshooting
### Issue: Empty Output
**Cause:** Directory doesn't exist or is empty.
**Solution:** Verify the path exists with `list_dir` first.
### Issue: Too Much Output
**Cause:** Not enough ignore patterns.
**Solution:** Add more paths/extensions to ignore, or generate subdirectories separately.
### Issue: File Not Found
**Cause:** Output directory doesn't exist.
**Solution:** Create output directory first or use existing path.
## Output Format
The generated `structure.md` file contains:
- Markdown-formatted tree structure
- File and folder counts
- List of ignored paths/patterns
- Generation timestamp
Example output:
```markdown
## file tree
/my-project/
βββ src/
β βββ main.py
β βββ utils/
β βββ helpers.py
βββ tests/
β βββ test_main.py
βββ README.md
```