https://github.com/asanchezyali/gideon
Gideon is a powerful tool for managing files and directories in your terminal. With Gideon, you can easily eliminate duplicate files, rename files, and organize them by topic. Make file organization a breeze with Gideon.
Science Score: 26.0%
This score indicates how likely this project is to be science-related based on various indicators:
-
○CITATION.cff file
-
✓codemeta.json file
Found codemeta.json file -
✓.zenodo.json file
Found .zenodo.json file -
○DOI references
-
○Academic publication links
-
○Academic email domains
-
○Institutional organization owner
-
○JOSS paper metadata
-
○Scientific vocabulary similarity
Low similarity (13.5%) to scientific vocabulary
Keywords
Repository
Gideon is a powerful tool for managing files and directories in your terminal. With Gideon, you can easily eliminate duplicate files, rename files, and organize them by topic. Make file organization a breeze with Gideon.
Basic Info
Statistics
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
- Releases: 1
Topics
Metadata Files
README.md
Gideon
Gideon is an AI-powered CLI tool for intelligent file organization, focused on renaming academic documents (PDFs) using LLMs (Large Language Models) such as Ollama, and removing duplicate files.
It is designed for local, privacy-friendly use, and is easily extensible for future LLM integrations.
Features
- AI-powered PDF renaming: Extracts metadata (authors, year, title, topic) and generates clean, consistent filenames.
- Duplicate file removal: Quickly find and remove duplicate PDF files in a directory.
- File organization: Organize files into topic-based folders based on file naming conventions.
- Modular architecture: Easily add new LLM providers or agents.
- Rich CLI interface: Beautiful output and flexible options.
- Local-first: No cloud required; works with local LLMs like Ollama.
Installation
Requirements: - Python 3.11+ - Ollama (for local LLMs, optional but recommended)
Install in development mode:
bash
git clone https://github.com/yourusername/gideon.git
cd gideon
pip install -e .
Configure Gideon:
Gideon can be configured by creating a .env file in the project root:
```bash
cp .env.example .env
Edit .env with your preferred settings
```
Usage
Rename Files with AI
bash
gideon rename auto ./documents/
With custom LLM options
bash
gideon rename auto ./documents/ --llm-type ollama --model codellama --temperature 0.2
--llm-type: The LLM backend to use (default:ollama)--model: The model name (default:llama2)--temperature: Sampling temperature for the LLM (default:0.1)
Remove Duplicate Files
Remove duplicates in a directory:
bash
gideon remove-duplicates ./documents/
- This will scan for duplicate PDF files and remove them, keeping only one copy of each unique file.
Organize Files
Organize files into topic-based folders:
bash
gideon organize ./documents/
Options:
- --dry-run or -d: Preview changes without actually moving files
- --ignore or -i: Comma-separated list of directory patterns to ignore (e.g. '.git,.vscode')
CLI Commands
gideon rename auto <directory> [--llm-type TYPE] [--model MODEL] [--temperature FLOAT]
Rename PDF files in a directory using AI analysis.gideon remove-duplicates <directory>
Remove duplicate PDF files in a directory (default mode).gideon organize <directory> [--dry-run] [--ignore PATTERNS]
Organize files into topic-based folders based on file naming conventions.
Project Structure
gideon/
│
├── src/gideon/
│ ├── cli/ # CLI commands and entry point
│ ├── core/ # Global configuration
│ ├── llm/ # LLM integrations (Ollama, etc.)
│ ├── agents/ # Specialized agents (RenameWizard, etc.)
│ ├── services/ # File and directory services
│ └── utils/ # Utilities and parsers
│
├── pyproject.toml # Project metadata and dependencies
└── README.md
Configuration
Gideon can be configured using environment variables or a .env file in the project root. The available configuration options are:
| Variable | Description | Default |
|----------|-------------|---------|
| DEFAULT_LLM_TYPE | The default LLM backend to use | ollama |
| DEFAULT_LLM_MODEL | The default model name | deepseek-r1:latest |
| DEFAULT_LLM_TEMPERATURE | The default sampling temperature | 0.1 |
| MAX_CONTENT_LENGTH | Maximum content length for processing | 5000 |
| SUPPORTED_EXTENSIONS | File extensions that Gideon can process | [".pdf"] |
An example configuration file is provided at .env.example.
Extending
- Add a new LLM: Implement a new service in
src/gideon/llm/, register it in the factory. - Add a new agent: Create a new agent in
src/gideon/agents/and wire it into the CLI.
Development
- Install dev dependencies:
pip install -e .[dev] - Run linter:
ruff check src/ - Run tests:
pytest
Test Coverage
- Tests for duplicate removal are located in
src/gideon/services/test_file_service.pyand usepytestfor isolated, reliable testing. - Async tests for AI renaming are supported with
pytest-asyncio.
License
MIT License
Author
Alejandro Sánchez Yalí
asanchezyali@gmail.com
Note:
Gideon is under active development. Contributions and feedback are welcome!
https://www.docker.com/blog/run-llms-locally/ docker desktop enable model-runner docker desktop enable model-runner --tcp 12434
Owner
- Name: Alejandro Sánchez Yalí
- Login: asanchezyali
- Kind: user
- Company: Monadical
- Website: www.asanchezyali.com
- Twitter: asanchezyali
- Repositories: 16
- Profile: https://github.com/asanchezyali
Mathematician with experience in Software Development, Data Science and Blockchain
GitHub Events
Total
- Public event: 1
- Push event: 5
- Pull request event: 3
Last Year
- Public event: 1
- Push event: 5
- Pull request event: 3
Dependencies
- langchain *
- langchain-community *
- langchain-core *
- pydantic *
- pydantic-settings *
- pytest-asyncio >=0.26.0
- rich *
- typer *
- aiohappyeyeballs 2.6.1
- aiohttp 3.11.18
- aiosignal 1.3.2
- annotated-types 0.7.0
- anyio 4.9.0
- attrs 25.3.0
- certifi 2025.4.26
- cffi 1.17.1
- charset-normalizer 3.4.2
- click 8.1.8
- colorama 0.4.6
- coverage 7.8.0
- dataclasses-json 0.6.7
- frozenlist 1.6.0
- gideon 0.1.0
- greenlet 3.2.2
- h11 0.16.0
- httpcore 1.0.9
- httpx 0.28.1
- httpx-sse 0.4.0
- idna 3.10
- iniconfig 2.1.0
- jsonpatch 1.33
- jsonpointer 3.0.0
- langchain 0.3.25
- langchain-community 0.3.24
- langchain-core 0.3.60
- langchain-text-splitters 0.3.8
- langsmith 0.3.42
- markdown-it-py 3.0.0
- marshmallow 3.26.1
- mdurl 0.1.2
- multidict 6.4.3
- mypy-extensions 1.1.0
- numpy 2.2.5
- orjson 3.10.18
- packaging 24.2
- pluggy 1.6.0
- propcache 0.3.1
- pycparser 2.22
- pydantic 2.11.4
- pydantic-core 2.33.2
- pydantic-settings 2.9.1
- pygments 2.19.1
- pytest 8.3.5
- pytest-asyncio 0.26.0
- pytest-cov 6.1.1
- python-dotenv 1.1.0
- pyyaml 6.0.2
- requests 2.32.3
- requests-toolbelt 1.0.0
- rich 14.0.0
- ruff 0.11.10
- shellingham 1.5.4
- sniffio 1.3.1
- sqlalchemy 2.0.41
- tenacity 9.1.2
- tomli 2.2.1
- typer 0.15.4
- typing-extensions 4.13.2
- typing-inspect 0.9.0
- typing-inspection 0.4.0
- urllib3 2.4.0
- yarl 1.20.0
- zstandard 0.23.0