A minimal tool that maps project structure and intent
Project description
Scryr
A minimal CLI tool that maps project structure and intent across all programming languages. Think of it as tree, but smarter and calmer.
Features
- Multi-language support: Python, JavaScript/TypeScript, Go, Rust, Java, C/C++, Ruby, PHP, and more
- Clean ASCII tree visualization with Unicode box characters
- Intelligent file analysis based on imports, comments, and folder context
- Beautiful terminal output using Rich
- Automatic filtering of noise folders (venv, node_modules, .git, etc.)
- Fast and lightweight - no ML, no AST parsing
- Easy to install and use
Installation
pip install scryr
Or install from source:
git clone https://github.com/Prajwal-Pujari/scryr.git
cd scryr
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e .
Usage
Map the current directory:
scryr
Map a specific directory:
scryr /path/to/project
Limit depth:
scryr . --depth 3
Hide descriptions:
scryr . --no-description
Add custom ignore patterns:
scryr . --ignore logs --ignore temp
Help
scryr --help
Example Output
Python Project
myproject/
├── agents/
│ ├── planner.py # Agent module: task planning logic
│ └── executor.py # Agent module: action execution
├── vector_store/
│ └── chroma.py # Memory module: ChromaDB vector storage
├── api/
│ ├── routes.py # API route definitions
│ └── dependencies.py # Dependency injection
├── main.py # Application entry point
└── requirements.txt # Python dependencies
JavaScript/React Project
webapp/
├── src/
│ ├── components/
│ │ ├── Header.tsx # React component
│ │ └── Footer.tsx # React component
│ ├── pages/
│ │ └── Home.tsx # Page component
│ ├── hooks/
│ │ └── useAuth.ts # React hooks
│ └── index.tsx # React entry point
├── package.json # NPM package manifest
└── tsconfig.json # TypeScript configuration
Go Project
goapp/
├── cmd/
│ └── server/
│ └── main.go # Main entry point
├── internal/
│ ├── handlers/
│ │ └── user.go # HTTP handler
│ ├── services/
│ │ └── auth.go # Service layer
│ └── models/
│ └── user.go # Data model
├── go.mod # Go module definition
└── Dockerfile # Docker container definition
Rust Project
rustapp/
├── src/
│ ├── main.rs # Main entry point
│ ├── lib.rs # Library root
│ └── handlers/
│ └── api.rs # HTTP handler
├── Cargo.toml # Rust package manifest
└── Cargo.lock # Lock file
Supported Languages
| Language | File Types | Detection |
|---|---|---|
| Python | .py |
Docstrings, imports (FastAPI, Django, Flask, etc.) |
| JavaScript | .js, .mjs, .cjs |
JSDoc, imports (Express, React, etc.) |
| TypeScript | .ts, .tsx |
JSDoc, imports |
| Go | .go |
Package comments, imports (Gin, Fiber, etc.) |
| Rust | .rs |
Doc comments, use statements (Actix, Tokio, etc.) |
| Java | .java |
Imports (Spring, Hibernate, etc.) |
| C/C++ | .c, .cpp, .h, .hpp |
Includes |
| Ruby | .rb |
Requires (Rails, Sinatra, etc.) |
| PHP | .php |
Use statements (Laravel, Symfony, etc.) |
Intelligence Rules
Scryr uses multiple signals to infer file purpose:
- Special filenames:
main.py,index.js,Dockerfile, etc. - Import/require statements: Detects frameworks and libraries
- Folder context: Files in
api/,models/,components/, etc. - Documentation: Docstrings, JSDoc, package comments
- Naming conventions:
*Controller.java,*_test.go, etc.
Folder Intelligence
Scryr recognizes common project structures:
- API/Backend:
api/,routes/,controllers/,handlers/,middleware/ - Services:
services/,business/,logic/,domain/ - Data Layer:
models/,entities/,schemas/,repositories/,db/ - Frontend:
components/,views/,pages/,hooks/,store/ - AI/ML:
agents/,vector_store/,embeddings/,llm/ - Utilities:
utils/,helpers/,lib/,common/ - Configuration:
config/,settings/,env/ - Testing:
tests/,__tests__/,spec/
Philosophy
- No machine learning
- No AST parsing
- No over-engineering
- If something is printed, it must help
- Works across all major programming languages
Requirements
- Python 3.9+
- rich >= 13.0.0
Testing
Try Scryr on different types of projects:
# Python project
scryr ~/my-python-app
# JavaScript/React project
scryr ~/my-react-app
# Go project
scryr ~/my-go-api
# Rust project
scryr ~/my-rust-service
# Mixed polyglot project
scryr ~/my-microservices
The tool will intelligently detect the language, parse imports/requires/uses, extract documentation, and provide meaningful descriptions for every file type!
License
MIT License - see LICENSE file for details
Contributing
Contributions welcome! Please feel free to submit a Pull Request.
Author
Prajwal (imprajwal793@gmail.com)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file scryr-0.1.2.tar.gz.
File metadata
- Download URL: scryr-0.1.2.tar.gz
- Upload date:
- Size: 15.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac568d9ef4309e9430b94eb0ceacd5ae5028b25bc1f1eb762fa6367e330102cb
|
|
| MD5 |
94d45ec1d98a6055a5a13fa13ae83fcc
|
|
| BLAKE2b-256 |
ceec867c6e472a24952647f54f692aef1eaad098afa624ad0124290f98475899
|
File details
Details for the file scryr-0.1.2-py3-none-any.whl.
File metadata
- Download URL: scryr-0.1.2-py3-none-any.whl
- Upload date:
- Size: 17.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b5d320759a268ee926195c2af6f7db7dd75dd22ef600f93d81a26dd798e080ed
|
|
| MD5 |
fdc8986d66a4a044cba85a4c1918c8e9
|
|
| BLAKE2b-256 |
4540d70da367260973507ed2e5baa98263516b98818ebf6f82507d86fce5d106
|