3.6 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
This is a Python TUI (Terminal User Interface) application for managing /etc/hosts
files. The application provides a two-pane interface built with Textual, allowing users to view, edit, activate/deactivate, and reorder hostname entries in their system's hosts file with proper sudo permission handling.
Development Commands
Package Management (uv)
uv sync
- Update project environment and install dependenciesuv add <package>
- Add new dependency to projectuv run <command>
- Run commands in the project environment
Running the Application
uv run hosts
- Launch the TUI application (main entry point)uv run python -m hosts.main
- Alternative way to run the application
Testing
uv run pytest
- Run all testsuv run pytest tests/test_<module>.py
- Run specific test moduleuv run pytest -k <test_name>
- Run tests matching pattern
Code Quality
uv run ruff check
- Run linter checksuv run ruff check --fix
- Auto-fix linting issuesuv run ruff format
- Format code
Architecture
Core Structure
The application follows a modular architecture with clear separation of concerns:
src/hosts/
├── core/ # Core business logic
│ ├── config.py # Configuration management
│ ├── manager.py # HostsManager with sudo permission handling
│ ├── models.py # Data models (HostEntry, HostsFile)
│ └── parser.py # Hosts file parsing/serialization
├── tui/ # Textual UI components
│ ├── app.py # Main application class (HostsManagerApp)
│ └── ... # Various handlers and modals
└── main.py # Entry point
Key Components
HostsManager (src/hosts/core/manager.py:106
): Central component that handles all edit operations with proper sudo permission management. Key features:
- Permission management through PermissionManager class
- Edit mode with backup creation and restoration
- Safe file operations with validation
- Entry manipulation (toggle, move, update)
HostsParser (src/hosts/core/parser.py
): Handles reading/writing hosts files and maintains original formatting.
HostsManagerApp (src/hosts/tui/app.py:26
): Main Textual application providing the two-pane interface with reactive state management.
Permission Model
The application operates in two modes:
- Read-only mode (default): Safe browsing of hosts file entries
- Edit mode: Requires sudo permissions for modifications, includes automatic backup creation
Memory Bank Integration
This project uses Cline's Memory Bank system (see .clinerules
) for maintaining project context across sessions. Key files are in memory-bank/
directory.
Development Guidelines
Testing Approach
- Tests are located in
tests/
directory - Uses pytest framework
- Test individual modules with
uv run pytest tests/test_<module>.py
Code Style
- Uses ruff for both linting and formatting
- Configuration is embedded in
pyproject.toml
- Run
uv run ruff check --fix && uv run ruff format
before committing
Dependencies
- Textual: TUI framework for the interface
- pytest: Testing framework
- ruff: Linting and code formatting
- Managed via uv with dependencies declared in
pyproject.toml
File Permissions
When working on permission-related code, be aware that the application needs to handle sudo operations safely. The PermissionManager class in src/hosts/core/manager.py:17
manages this complexity.