# File Organization & Storage Strategy ## Overview The ClaudeTools system uses a **hybrid storage approach**: - **Database** - Metadata, context, task status, relationships, insights - **Filesystem** - Actual code files, documentation, scripts, configurations - **Gitea** - Version control for all file-based work - **Backups** - Local database dumps and file backups ## Storage Philosophy ### What Goes in Database (via Database Agent) - Task and session metadata - Work item records (problem/solution summaries) - Client and infrastructure details - Environmental insights - Failure patterns - Command history - Credentials (encrypted) - Relationships between entities - Timestamps and audit trails ### What Goes on Filesystem (version controlled) - Source code files - Configuration files - Documentation (markdown, txt) - Scripts (PowerShell, Bash, Python) - Diagrams and images - README files - Project-specific notes - Session logs (markdown) ### Why Hybrid? - **Database**: Fast queries, relationships, metadata - **Filesystem**: Version control, diff tracking, editor-friendly - **Gitea**: Backup, history, team collaboration - **Best of both worlds**: Structured data + version-controlled files ## Folder Structure ``` D:\ClaudeTools\ ├── .claude\ # System configuration │ ├── agents\ # Agent definitions │ │ ├── coding.md │ │ ├── code-review.md │ │ ├── database.md │ │ ├── gitea.md │ │ └── backup.md │ ├── plans\ # Plan mode outputs │ ├── settings.local.json # Local settings │ ├── CODE_WORKFLOW.md │ ├── TASK_MANAGEMENT.md │ ├── FILE_ORGANIZATION.md │ └── MSP-MODE-SPEC.md │ ├── clients\ # MSP Mode - Client work │ ├── dataforth\ │ │ ├── configs\ # Configuration files │ │ │ ├── nas\ │ │ │ │ ├── smb.conf.overrides │ │ │ │ └── sync-to-ad2.sh │ │ │ ├── ad2\ │ │ │ └── dos-machines\ │ │ ├── docs\ # Documentation │ │ │ ├── README.md │ │ │ ├── NETWORK_TOPOLOGY.md │ │ │ ├── CREDENTIALS.md (encrypted) │ │ │ └── TROUBLESHOOTING.md │ │ ├── scripts\ # Automation scripts │ │ │ ├── Sync-FromNAS.ps1 │ │ │ ├── UPDATE.BAT │ │ │ └── monitor-nas.ps1 │ │ ├── session-logs\ # Session logs for this client │ │ │ ├── 2026-01-15-dos-update.md │ │ │ └── 2026-01-14-wins-fix.md │ │ ├── .git\ # Git repository │ │ ├── .gitignore │ │ └── README.md # Client overview │ │ │ ├── grabb\ │ │ ├── configs\ │ │ ├── docs\ │ │ ├── scripts\ │ │ ├── session-logs\ │ │ └── README.md │ │ │ └── [other-clients]\ │ ├── projects\ # Development Mode - Dev projects │ ├── gururmm\ │ │ ├── agent\ # Agent source code (Rust) │ │ │ ├── src\ │ │ │ ├── Cargo.toml │ │ │ └── README.md │ │ ├── server\ # Server source code (Rust) │ │ │ ├── src\ │ │ │ ├── Cargo.toml │ │ │ └── README.md │ │ ├── dashboard\ # Dashboard source code (React) │ │ │ ├── src\ │ │ │ ├── package.json │ │ │ └── README.md │ │ ├── docs\ # Project documentation │ │ │ ├── ARCHITECTURE.md │ │ │ ├── API.md │ │ │ └── DEPLOYMENT.md │ │ ├── scripts\ # Build/deploy scripts │ │ ├── session-logs\ # Development session logs │ │ ├── .git\ │ │ └── README.md │ │ │ ├── claudetools-api\ # ClaudeTools API project │ │ ├── src\ │ │ ├── docs\ │ │ ├── tests\ │ │ ├── .git\ │ │ └── README.md │ │ │ └── [other-projects]\ │ ├── normal\ # Normal Mode - General work │ ├── research\ # Research notes │ │ ├── rust-async-patterns.md │ │ ├── docker-networking.md │ │ └── ... │ ├── experiments\ # Code experiments │ │ ├── test-project-1\ │ │ └── ... │ ├── notes\ # General notes │ └── session-logs\ # Normal mode session logs │ ├── backups\ # Backup storage │ ├── database\ # Database backups │ │ ├── claudetools-2026-01-15-daily.sql.gz │ │ ├── claudetools-2026-01-14-daily.sql.gz │ │ └── ... │ ├── files\ # File backups (snapshots) │ │ ├── clients-2026-01-15.tar.gz │ │ └── ... │ └── .gitignore # Don't commit backups │ └── README.md # ClaudeTools overview ``` ## Gitea Integration ### Repository Structure Each client and project has its own Git repository: **Client Repositories:** - `azcomputerguru/claudetools-client-dataforth` - `azcomputerguru/claudetools-client-grabb` - etc. **Project Repositories:** - `azcomputerguru/gururmm` (already exists) - `azcomputerguru/claudetools-api` - etc. **System Repository:** - `azcomputerguru/claudetools` (for .claude configs, agents, system docs) ### Commit Strategy **When to Commit:** 1. **After completing tasks** - Task marked 'completed' in database 2. **After significant work** - Code review approved, feature complete 3. **End of session** - Session ending, preserve work 4. **On user request** - User explicitly asks to commit 5. **Periodic commits** - Every N tasks completed (configurable) **Commit Message Format:** ``` [Mode] Brief description Detailed context: - Task: [task title] - Changes: [list of changes] - Duration: [time spent] - Status: [completed/in-progress] Files modified: - path/to/file1.py - path/to/file2.md ``` **Example Commit:** ``` [MSP:Dataforth] Fix WINS service on D2TESTNAS Detailed context: - Task: Troubleshoot WINS service failure - Changes: Fixed smb.conf.overrides syntax error - Duration: 45 minutes (billable) - Status: Completed and verified Files modified: - configs/nas/smb.conf.overrides - docs/TROUBLESHOOTING.md - session-logs/2026-01-15-wins-fix.md Co-authored-by: Claude Sonnet 4.5 ``` ### Git Workflow **Orchestrator triggers Git operations via Gitea Agent:** 1. **Detect changes** - Files modified during work 2. **Stage changes** - `git add` modified files 3. **Create commit** - With context-rich message 4. **Push to Gitea** - Sync to remote repository 5. **Update database** - Record commit hash in session ## File Creation Rules ### Client Files (MSP Mode) When working on client project: 1. **Determine client** - From session context 2. **Create/update files** in `D:\ClaudeTools\clients\[client-name]\` 3. **Use appropriate subdirectory**: - `configs/` - Configuration files - `docs/` - Documentation - `scripts/` - Automation scripts - `session-logs/` - Session logs 4. **Update README.md** - Keep client overview current 5. **Stage for commit** - Gitea Agent handles commit ### Project Files (Development Mode) When working on development project: 1. **Determine project** - From session context 2. **Create/update files** in `D:\ClaudeTools\projects\[project-name]\` 3. **Follow project structure** - Respect existing organization 4. **Update documentation** - Keep docs current 5. **Write tests** - Test files alongside code 6. **Stage for commit** - Gitea Agent handles commit ### Normal Mode Files When in Normal Mode: 1. **Categorize work**: - Research → `normal/research/` - Experiments → `normal/experiments/` - Notes → `normal/notes/` 2. **Use descriptive filenames** - Include date if temporal 3. **Commit periodically** - Keep work safe ## Database Backup Strategy ### Backup Schedule **Daily backups:** - Automatic at 2:00 AM (if system running) - Or on first session of the day if not run overnight **On-demand backups:** - Before major changes (schema updates) - After significant data entry - On user request ### Backup Format **Filename:** `claudetools-YYYY-MM-DD-[type].sql.gz` - `type` = daily, manual, pre-migration, etc. **Contents:** - Full database dump (all tables, all data) - Compressed with gzip - Includes schema and data - Stored in `D:\ClaudeTools\backups\database\` **Example:** ``` claudetools-2026-01-15-daily.sql.gz claudetools-2026-01-15-pre-migration.sql.gz claudetools-2026-01-14-daily.sql.gz ``` ### Backup Retention - **Keep last 7 daily backups** - **Keep last 4 weekly backups** (Sunday backups) - **Keep last 12 monthly backups** (1st of month backups) - **Keep pre-migration backups indefinitely** - **Automatic cleanup** - Backup Agent purges old backups ### Backup Verification After each backup: 1. **Check file size** - Not zero, reasonable size 2. **Test gzip integrity** - `gzip -t file.sql.gz` 3. **Record in database** - Log backup in `backup_log` table 4. **Optional: Test restore** - Periodically restore to verify ## Session Logs ### Where They Go **MSP Mode:** - `D:\ClaudeTools\clients\[client]\session-logs\YYYY-MM-DD-[description].md` **Development Mode:** - `D:\ClaudeTools\projects\[project]\session-logs\YYYY-MM-DD-[description].md` **Normal Mode:** - `D:\ClaudeTools\normal\session-logs\YYYY-MM-DD-[description].md` **Shared (cross-mode sessions):** - `C:\Users\MikeSwanson\claude-projects\session-logs\YYYY-MM-DD-session.md` (existing location) - Symlinks or cross-references in mode-specific locations ### Session Log Format ```markdown # Session: [Title] **Date:** 2026-01-15 **Mode:** MSP (Dataforth) / Development (GuruRMM) / Normal **Duration:** 2.5 hours **Billable:** Yes (MSP only) ## Summary [Brief description of what was accomplished] ## Tasks Completed - [✓] Task 1 (30 min) - [✓] Task 2 (45 min) - [✓] Task 3 (15 min) ## Work Items (MSP Mode) ### Problem [Description] ### Cause [Root cause] ### Solution [What was done] ### Verification [How it was tested] ## Files Modified - `path/to/file1.py` - [what changed] - `path/to/file2.md` - [what changed] ## Key Learnings - [Environmental insights discovered] - [Failures encountered and resolved] - [Patterns identified] ## Next Steps - [ ] Pending task 1 - [ ] Pending task 2 ## References - Related sessions: [links] - Documentation: [links] - Tickets: [ticket IDs if MSP mode] ``` ## File Naming Conventions ### Session Logs `YYYY-MM-DD-brief-description.md` - Example: `2026-01-15-wins-service-fix.md` - Example: `2026-01-14-update-bat-simplification.md` ### Configuration Files `service-config.ext` or `SERVICE.CONF` - Example: `smb.conf.overrides` - Example: `sync-to-ad2.sh` - Match existing conventions where applicable ### Scripts `verb-noun.ext` - Example: `Sync-FromNAS.ps1` (PowerShell PascalCase) - Example: `monitor-nas.sh` (Bash kebab-case) - Example: `deploy-app.py` (Python snake_case) ### Documentation `SCREAMING_CASE.md` for important docs, `Title Case.md` for regular - Example: `README.md` - Example: `ARCHITECTURE.md` - Example: `API Documentation.md` ## .gitignore Files Each repository should have appropriate `.gitignore`: **Client repositories:** ```gitignore # Credentials (encrypted versions are OK, plaintext never) **/CREDENTIALS.txt **/*password* **/*secret* # Temporary files *.tmp *.log *.bak # OS files .DS_Store Thumbs.db ``` **Project repositories:** ```gitignore # Dependencies node_modules/ target/ venv/ __pycache__/ # Build outputs dist/ build/ *.exe *.dll # IDE .vscode/ .idea/ *.swp # Environment .env .env.local ``` **ClaudeTools root:** ```gitignore # Backups (local only) backups/ # Local settings .claude/settings.local.json # Temporary *.tmp ``` ## Integration with Database ### File References in Database Store file paths in database for context: ```python # In task_context field: { "files_modified": [ "clients/dataforth/configs/nas/smb.conf.overrides", "clients/dataforth/docs/TROUBLESHOOTING.md" ], "files_created": [ "clients/dataforth/scripts/monitor-nas.ps1" ], "commit_hash": "a3f5b92c...", "repository": "claudetools-client-dataforth" } ``` ### Backup References Track backups in database: ```sql CREATE TABLE backup_log ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), backup_type VARCHAR(50) CHECK(backup_type IN ('daily', 'manual', 'pre-migration', 'weekly', 'monthly')), file_path VARCHAR(500) NOT NULL, file_size_bytes BIGINT NOT NULL, backup_started_at TIMESTAMP NOT NULL, backup_completed_at TIMESTAMP NOT NULL, verification_status VARCHAR(50) CHECK(verification_status IN ('passed', 'failed', 'not_verified')), verification_details TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX idx_backup_type (backup_type), INDEX idx_backup_date (backup_completed_at) ); ``` ## Orchestrator Workflow ### During Work Session 1. **Session starts** → Detect mode, client/project 2. **Create files** → In appropriate directory structure 3. **Update database** → Record task context, file paths 4. **Complete tasks** → Track what files were modified 5. **Periodic commits** → Gitea Agent commits changes 6. **Session ends** → Final commit, session log saved ### Example Flow ```python # User: "Fix the WINS service on D2TESTNAS" # Orchestrator: # 1. Determine context mode = "MSP" client = "Dataforth" base_path = "D:/ClaudeTools/clients/dataforth/" # 2. Launch agents to do work # ... Coding Agent fixes config file ... # 3. Files created/modified files = [ "configs/nas/smb.conf.overrides", "docs/TROUBLESHOOTING.md" ] # 4. Update database via Database Agent Database_Agent.update_task( task_id=task_id, status="completed", task_context={ "files_modified": files, "solution": "Fixed syntax error in smb.conf.overrides", "verification": "WINS service restarted successfully" } ) # 5. Commit to Gitea via Gitea Agent Gitea_Agent.commit( repository="claudetools-client-dataforth", files=files, message=generate_commit_message(task_context), base_path=base_path ) # 6. Create session log session_log_path = f"{base_path}session-logs/2026-01-15-wins-fix.md" create_session_log(session_log_path, session_data) # 7. Commit session log Gitea_Agent.commit( repository="claudetools-client-dataforth", files=["session-logs/2026-01-15-wins-fix.md"], message="Session log: WINS service fix" ) ``` ## Benefits ### For User - **Organized** - Files logically grouped by client/project - **Version controlled** - Complete history in Gitea - **Backed up** - Database and files protected - **Searchable** - Both database queries and file searches - **Recoverable** - Multiple backup layers ### For System - **Hybrid storage** - Right tool for right data - **Context preservation** - Database + files = complete picture - **Audit trail** - Git history + database records - **Disaster recovery** - Multiple backup strategies - **Scalable** - Clean separation of concerns --- ## Summary **Hybrid Approach:** - Database → Metadata, relationships, context, queries - Filesystem → Code, docs, configs (version controlled) - Gitea → Backup, history, collaboration - Local backups → Safety net for database **Organization:** - `clients/` → MSP Mode work - `projects/` → Development Mode work - `normal/` → Normal Mode work - `backups/` → Database and file backups **Automation:** - Gitea Agent → Periodic commits - Backup Agent → Daily database backups - Database Agent → Track file references - Orchestrator → Coordinate all agents **Result:** Complete, organized, version-controlled, backed-up system.