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.

https://github.com/asanchezyali/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

ai files-organizer filesytem llm organizer
Last synced: 10 months ago · JSON representation

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
  • Host: GitHub
  • Owner: asanchezyali
  • License: mit
  • Language: Python
  • Default Branch: main
  • Homepage:
  • Size: 366 KB
Statistics
  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • Open Issues: 0
  • Releases: 1
Topics
ai files-organizer filesytem llm organizer
Created over 3 years ago · Last pushed 11 months ago
Metadata Files
Readme License

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.py and use pytest for 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

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

pyproject.toml pypi
  • langchain *
  • langchain-community *
  • langchain-core *
  • pydantic *
  • pydantic-settings *
  • pytest-asyncio >=0.26.0
  • rich *
  • typer *
uv.lock pypi
  • 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