Commit Graph

18 Commits

Author SHA1 Message Date
e08951de21 feat(openclaw): deploy OpenClaw AI chatbot gateway on VM 120
- Add Docker Compose configs with security hardening (cap_drop ALL, non-root, read-only FS)
- Add Prometheus node_exporter scrape target for 192.168.2.120:9100
- Update services/README.md, INDEX.md, and CLAUDE_STATUS.md with VM 120
- Image pinned to v2026.2.1 (patches CVE-2026-25253)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 18:14:58 -07:00
e481c95da4 docs(security): comprehensive security audit and remediation documentation
- Add SECURITY.md policy with credential management, Docker security, SSL/TLS guidance
- Add security audit report (2025-12-20) with 31 findings across 4 severity levels
- Add pre-deployment security checklist template
- Update CLAUDE_STATUS.md with security audit initiative
- Expand services/README.md with comprehensive security sections
- Add script validation report and container name fix guide

Audit identified 6 CRITICAL, 3 HIGH, 2 MEDIUM findings
4-phase remediation roadmap created (estimated 6-13 min downtime)
All security scripts validated and ready for execution

Related: Security Audit Q4 2025, CRITICAL-001 through CRITICAL-006

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-21 13:52:34 -07:00
c4962194e3 feat(auth): integrate TinyAuth SSO for NetBox authentication
Deploy TinyAuth v4 as CT 115 (192.168.2.10) to provide centralized
SSO authentication for NetBox via Nginx Proxy Manager.

**New Infrastructure:**
- CT 115: TinyAuth authentication layer
- Domain: tinyauth.apophisnetworking.net
- Integration: NPM auth_request → TinyAuth → NetBox

**Configuration:**
- Docker Compose with bcrypt-hashed credentials
- NPM advanced config for auth_request integration
- HTTPS enforcement via SSL termination

**Issues Resolved:**
- 500 Internal Server Error (Nginx config syntax)
- "IP addresses not allowed" (APP_URL domain requirement)
- Port mapping (8000:3000 for internal port 3000)
- Invalid password (bcrypt hash requirement for v4)

**Documentation:**
- Complete TinyAuth README at services/tinyauth/README.md
- Updated CLAUDE_STATUS.md with CT 115 infrastructure
- Added bug report for scribe agent tool permissions

**Note:** Container restart required on CT 115 to apply bcrypt hash

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-18 08:15:05 -07:00
07f9638d8b docs(infrastructure): update documentation for PVE 8.4.0 upgrade and VM 114 deployment
Infrastructure updates reflected in latest collection (homelab-export-20251211-144345):

Platform Upgrade:
- Proxmox VE upgraded from 8.3.3 to 8.4.0
- Kernel 6.8.12-8-pve, pve-manager 8.4.14
- Enhanced performance, security updates, and bug fixes

New Deployment:
- VM 114 (haos): Home Assistant OS for smart home automation
  * Specs: 4GB RAM (87% utilized), 2 vCPUs, 50GB boot disk
  * Status: Running with ~3 days uptime
  * Purpose: Centralized IoT device management and home automation hub

Service Activation:
- CT 103 (netbox): Network documentation/IPAM now Running
  * Previously Stopped, now active with ~3.1 days uptime
  * Resource usage: 1.28GB/2GB memory (64%)
  * Required for ongoing infrastructure expansion planning

Storage Utilization Updates:
- PBS-Backups: 27.43% → 28.27% (normal backup retention growth)
- Vault (ZFS): 10.88% → 12.13% (data accumulation monitored)
- local: 15.13% → 19.11% (new VM deployment + system updates)
- local-lvm: 0.0% → 0.01% (thin provisioned baseline)
- iso-share: 1.4% → 1.45% (minimal change)

Infrastructure Scale:
- Total VMs: 8 → 9
- Templates: 2 (unchanged)
- LXC Containers: 4 (unchanged)

Files Updated:
- CLAUDE_STATUS.md: Added comprehensive change log section, updated all metrics
- INDEX.md: Updated infrastructure counts, VM/CT tables, storage utilization

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 17:08:10 -07:00
892684c46e feat(monitoring): resolve Loki-stack syslog ingestion with rsyslog filter fix
Fixed critical issue preventing UniFi router logs from reaching Loki/Promtail/Grafana.

Root Cause:
- rsyslog filter in /etc/rsyslog.d/unifi-router.conf filtered for 192.168.1.1
- VM 101 on VLAN 2, actual source IP is 192.168.2.1 (VLAN 2 gateway)
- Filter silently rejected all incoming syslog traffic

Solution:
- Updated rsyslog filter from 192.168.1.1 to 192.168.2.1
- Logs now flow: UniFi → rsyslog → Promtail → Loki → Grafana

Changes:
- Add services/loki-stack/* - Complete Loki/Promtail/Grafana stack configs
- Add services/logward/* - Logward service configuration
- Update troubleshooting/loki-stack-bugfix.md - Complete 5-phase resolution
- Update CLAUDE_STATUS.md - Document 2025-12-11 resolution
- Update sub-agents/scribe.md - Agent improvements
- Remove services/promtail-config.yml - Duplicate file cleanup

Status:  Monitoring stack fully operational, syslog ingestion active

Technical Details: See troubleshooting/loki-stack-bugfix.md for complete analysis

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-11 13:56:27 -07:00
698a5b531a fix(docs): complete documentation phase and resolve CLAUDE_STATUS.md corruption
- Marked 5 documentation tasks as complete (INDEX.md, README.md, CLAUDE.md, services/README.md, cross-references)
- Corrected infrastructure counts from "10 VMs, 4 Containers" to "8 VMs, 2 Templates, 4 Containers"
- Fixed 71 control character corruptions affecting file formatting and readability
- Updated current status to "Operational - Documentation Complete"
- Added .gitignore patterns for backup files (*.nullbyte-backup, *.control-chars-backup)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-08 13:59:25 -07:00
d3dc899b30 docs(infrastructure): correct VM/template counts and clarify resource types
Update infrastructure documentation across all files to accurately distinguish
between active VMs (8), templates (2), and LXC containers (4). Previously,
VM templates 104 (ubuntu-dev) and 107 (ubuntu-docker) were incorrectly counted
as active VMs, inflating the total VM count to 10.

Changes:
- CLAUDE.md: Update Quick Reference and Infrastructure Overview sections
- CLAUDE_STATUS.md: Add dedicated VM Templates section with explanatory note
- INDEX.md: Separate templates from active VMs in infrastructure inventory
- README.md: Add VM Templates section distinguishing from active VMs
- Claude_UPDATES.md: Update infrastructure counts in Quick Reference tables
- services/README.md: Correct footer infrastructure counts
- sub-agents/*.md: Update infrastructure context in all agent prompts

This ensures accurate resource tracking and clarifies that templates are
immutable base images for cloning, not running workloads.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-08 13:11:29 -07:00
004e3da77c feat(agents): optimize sub-agent architecture with comprehensive prompt engineering
This commit implements a comprehensive optimization of all sub-agent prompt
definitions based on Opus-powered prompt engineering analysis. All agents now
match the quality standard established by librarian.md.

Agent Improvements:
- scribe.md: 29→340 lines (11.7x expansion)
  * Added 6 usage examples with role clarity
  * Implemented comprehensive responsibilities section
  * Added 3 complete ASCII diagram templates
  * Included safety protocols and decision frameworks

- backend-builder.md: 40→291 lines (7.3x expansion)
  * Added 6 usage examples with clear boundaries
  * Expanded core responsibilities (Ansible, Terraform, Docker, Python, Shell)
  * Added technology stack and validation rules tables
  * Included handoff protocol for lab-operator deployment
  * Defined clear boundaries (CREATES code, does NOT deploy)

- lab-operator.md: 37→193 lines (5.2x expansion)
  * Added 6 usage examples with role clarity
  * Expanded domain expertise with specific commands
  * Added command style guide (5-step pattern)
  * Included safety protocols and decision-making framework
  * Defined clear boundaries (DEPLOYS/OPERATES, does NOT create IaC)

- librarian.md: Minor formatting improvements

CLAUDE.md Fixes:
- Moved YAML frontmatter to line 1 (was incorrectly at line 89)
- Fixed trailing pipe character
- Completed incomplete sentences about backup strategy and storage growth
- Removed redundant information
- Expanded status file template with recovery instructions

Files Added:
- Claude_UPDATES.md: Comprehensive prompt engineering analysis report
- monitoring/pve-exporter/pve.yml: PVE monitoring configuration

Impact:
- Total agent documentation: 249→967 lines (288% increase)
- Usage examples: 6→24 total (400% increase)
- All agents now have comprehensive safety protocols
- Clear role boundaries prevent agent overlap
- Validation testing confirms all agents functional

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-07 22:39:40 -07:00
f42eeaba92 feat(docs): update documentation for monitoring stack and infrastructure changes
- Update INDEX.md with VM 101 (monitoring-docker) and CT 112 (twingate-connector)
- Update README.md with monitoring and security sections
- Update CLAUDE.md with new architecture patterns
- Update services/README.md with monitoring stack documentation
- Update CLAUDE_STATUS.md with current infrastructure state
- Update infrastructure counts: 10 VMs, 4 Containers
- Update storage stats: PBS 27.43%, Vault 10.88%
- Create comprehensive monitoring/README.md
- Add .gitignore rules for monitoring sensitive files (pve.yml, .env)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-07 12:41:08 -07:00
0366c63d51 docs(status): update status after repository reorganization commit
Mark all three steps in repository reorganization task as completed:
- Step 1: Librarian review (90 files, identified sensitive file exclusion)
- Step 2: Commit creation (hash 4f69420, 935 insertions, 349 deletions)
- Step 3: Push to Gitea (successful, processed eec4c4b..4f69420)

Task completed at 2025-12-02 21:45 MST.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 21:40:24 -07:00
4f69420aaa refactor(repo): reorganize repository structure for improved navigation and maintainability
Implement comprehensive directory reorganization to improve discoverability,
logical grouping, and separation of concerns across documentation, scripts,
and infrastructure snapshots.

Major Changes:

1. Documentation Reorganization:
   - Created start-here-docs/ for onboarding documentation
     * Moved QUICK-START.md, START-HERE.md, GIT-SETUP-GUIDE.md
     * Moved GIT-QUICK-REFERENCE.md, SCRIPT-USAGE.md, SETUP-COMPLETE.md
   - Created troubleshooting/ directory
     * Moved BUGFIX-SUMMARY.md for centralized issue resolution
   - Created mcp/ directory for Model Context Protocol configurations
     * Moved OBSIDIAN-MCP-SETUP.md to mcp/obsidian/

2. Scripts Reorganization:
   - Created scripts/crawlers-exporters/ for infrastructure collection
     * Moved collect*.sh scripts and collection documentation
     * Consolidates Proxmox homelab export tooling
   - Created scripts/fixers/ for operational repair scripts
     * Moved fix_n8n_db_*.sh scripts
     * Isolated scripts with embedded credentials (templates tracked)
   - Created scripts/qol/ for quality-of-life utilities
     * Moved git-aliases.sh and git-first-commit.sh

3. Infrastructure Snapshots:
   - Created disaster-recovery/ for active infrastructure state
     * Moved latest homelab-export-20251202-204939/ snapshot
     * Contains current VM/CT configurations and system state
   - Created archive-homelab/ for historical snapshots
     * Moved homelab-export-*.tar.gz archives
     * Preserves point-in-time backups for reference

4. Agent Definitions:
   - Created sub-agents/ directory
     * Added backend-builder.md (development agent)
     * Added lab-operator.md (infrastructure operations agent)
     * Added librarian.md (git/version control agent)
     * Added scribe.md (documentation agent)

5. Updated INDEX.md:
   - Reflects new directory structure throughout
   - Updated all file path references
   - Enhanced navigation with new sections
   - Added agent roles documentation
   - Updated quick reference commands

6. Security Improvements:
   - Updated .gitignore to match reorganized file locations
   - Corrected path for scripts/fixers/fix_n8n_db_c_locale.sh exclusion
   - Maintained template-based credential management pattern

Infrastructure State Update:
   - Latest snapshot: 2025-12-02 20:49:54
   - Removed: VM 101 (gitlab), CT 112 (Anytype)
   - Added: CT 113 (n8n)
   - Total: 9 VMs, 3 Containers

Impact:
   - Improved repository navigation and discoverability
   - Logical separation of documentation, scripts, and snapshots
   - Clearer onboarding path for new users
   - Enhanced maintainability through organized structure
   - Foundation for multi-agent workflow support

Files changed: 90 files (+935/-349)
   - 3 modified, 14 new files, 73 renames/moves

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 21:39:33 -07:00
eec4c4b298 feat(security): implement template-based credential management for sensitive configurations
Introduce template-based approach to prevent credential exposure in version control.
This security enhancement establishes a standard pattern for managing sensitive data
across the homelab repository.

Changes:
- Create services/homepage/services.yaml.template with env var placeholders
  * Replace 7 hardcoded credentials with ${VARIABLE_NAME} format
  * Add OPNSense, Proxmox, Plex, Radarr, Sonarr, Deluge placeholders
- Create scripts/fix_n8n_db_c_locale.sh.template with env var validation
  * Remove hardcoded PostgreSQL password
  * Add N8N_DB_PASSWORD environment variable requirement
  * Include security reminder to shred script after use
- Update .gitignore with explicit exclusions for sensitive files
  * Add services/homepage/services.yaml exclusion
  * Add scripts/fix_n8n_db_c_locale.sh exclusion
- Create services/homepage/README.md with comprehensive setup guide
  * Document environment variable usage (recommended method)
  * Provide API key acquisition instructions for all services
  * Include troubleshooting and security best practices
- Update scripts/README.md with template pattern documentation
  * Add fix_n8n_db_c_locale.sh template usage instructions
  * Create "Template-Based Script Pattern" section
  * Enhance security guidelines with shred usage

Template Pattern Benefits:
- Repository remains credential-free
- Templates serve as documentation
- Easy to recreate configs on new systems
- Supports CI/CD pipelines with secret injection

Security Validation:
- No API keys in staged files (verified)
- No passwords in staged files (verified)
- .gitignore properly excludes sensitive files
- Templates contain clear usage instructions

Related: n8n troubleshooting (CLAUDE_STATUS.md), Docker Compose migration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 19:49:28 -07:00
3eea6b1b4e feat(services): migrate Docker Compose configurations from GitLab
Migrate all docker-compose service configurations from legacy GitLab instance
to homelab repository for consolidation and version control.

Services migrated (6):
- bytestash: Code snippet management
- filebrowser: Web-based file browser
- gitlab: QoL scripts for NPM cert sync
- paperless-ngx: Document management with OCR
- portainer: Docker management UI
- speedtest-tracker: Internet speed test tracker

Changes:
- Add services/ directory with complete configurations
- Update .gitignore with Docker Compose exclusions
- Create comprehensive services/README.md documentation
- Document migration process in CLAUDE_STATUS.md

Migration details:
- Source: https://vulcan.apophisnetworking.net/jramos/homelab.git
- Files migrated: 10 files (6 compose + 3 utilities + 1 README)
- Total size: 84 KB
- Lines added: 836

Security notes:
- .env files excluded from git
- Hardcoded secrets identified in documentation
- Review and update secrets before deployment

Related: GitLab VM 101 decommissioning preparation

🤖 Generated with Claude Code

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 14:34:32 -07:00
779ae2fb24 docs(n8n): enhance setup guide with PostgreSQL 15+ fixes and encryption key validation
Update n8n deployment documentation to prevent three critical issues discovered during troubleshooting:

1. PostgreSQL 15+ Compatibility (Phase 3):
   - Add explicit schema permission grants for public schema
   - Include C.utf8 locale specification for Debian 12 minimal LXC
   - Add permission validation test before proceeding

2. Encryption Key Generation (Phase 5):
   - Add pre-generation validation to prevent literal command strings in .env
   - Include verification steps for 64-character hex key format
   - Document common misconfiguration and remediation steps

3. SSL Termination Architecture (Phase 7):
   - Clarify NPM scheme setting (http backend vs https external)
   - Explain reverse proxy SSL termination pattern
   - Document why https scheme causes 502 Bad Gateway errors

Update CLAUDE_STATUS.md to mark troubleshooting session complete and document deployment success.

These preventive measures ensure clean deployments on PostgreSQL 16 and avoid the 805+ restart crash loops encountered during initial deployment.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-02 08:55:41 -07:00
a626c48e7b docs(n8n): complete PostgreSQL 15+ troubleshooting and add operational scripts
This commit documents the comprehensive troubleshooting session that identified
and resolved the n8n 502 Bad Gateway issue, along with production-ready fix scripts.

Root Cause Identified:
- PostgreSQL 15+ removed default CREATE privilege on public schema
- n8n_user unable to create tables during database migration
- Service trapped in crash loop (805+ restart cycles over 6 minutes)
- Error: "permission denied for schema public"

CLAUDE_STATUS.md Updates:
- Executive summary with key findings and 95% deployment confidence
- Complete error log evidence (exact error messages from 805+ restart cycles)
- Detailed root cause analysis of PostgreSQL 15+ breaking change
- Fix script validation by backend-builder (92/100 rating)
- Quick deployment guide with pre/post-deployment procedures
- Communication log documenting all three agent contributions
- Lessons learned for future Debian 12 + PostgreSQL 16 deployments

Scripts Added (All Sanitized):
1. fix_n8n_db_permissions.sh
   - Fixes PostgreSQL 15+ permission issue for n8n database
   - Creates backups before changes (pg_dump to /var/backups/n8n/)
   - Recreates database with proper ownership and explicit schema grants
   - Tests permissions before restarting service
   - Parameterized password (via N8N_DB_PASSWORD env var)
   - Comprehensive logging to /var/log/n8n_db_fix_*.log
   - Production-ready with error handling and validation

2. export_cf_dns.py (Cloudflare DNS Export Tool)
   - Exports Cloudflare DNS records and zone settings
   - Supports pagination for large zone configurations
   - Parameterized credentials (CF_ZONE_ID, CF_API_TOKEN)
   - Useful for backup/disaster recovery workflows
   - Includes validation function to prevent misconfiguration

3. scripts/README.md
   - Comprehensive documentation for all scripts
   - Usage examples with environment variable approach
   - Security notes and best practices
   - Directory structure and use cases

Security Measures:
- All scripts parameterized (no hardcoded credentials)
- Updated .gitignore to exclude script variants with embedded credentials
- Added patterns for *_with_creds.*, *.local.*, *_prod.* variants
- Documentation emphasizes environment variable usage

Agent Contributions:
- Lab-Operator: Analyzed error logs, identified PostgreSQL 15+ permission issue (100% confidence)
- Backend-Builder: Created fix script, validated against errors (92/100 rating, 95% deployment confidence)
- Scribe: Documented complete troubleshooting session with evidence and deployment guides
- Librarian: Sanitized scripts, managed git operations, ensured no credential exposure

Files Changed:
- Modified: CLAUDE_STATUS.md (+313 lines comprehensive troubleshooting documentation)
- Modified: .gitignore (+9 lines for script credential protection)
- New: scripts/fix_n8n_db_permissions.sh (349 lines, production-ready)
- New: scripts/crawlers-exporters/export_cf_dns.py (144 lines, sanitized)
- New: scripts/README.md (138 lines documentation)
- New: scripts/crawlers-exporters/*.json (DNS export examples)

Ready for Deployment: User can now execute fix script with 95% confidence
Expected Result: n8n service will successfully complete database migrations and start

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 17:16:20 -07:00
fe75402738 docs(n8n): document troubleshooting session for 502 Bad Gateway issue
Root Cause:
- N8N_ENCRYPTION_KEY in /opt/n8n/.env contained literal shell command
  string $(openssl rand -hex 32) instead of executed value
- .env files do not execute shell commands, only parse literal strings
- Caused n8n service crash loop preventing startup

Troubleshooting Process:
- Identified service crash loop via journalctl logs
- Backend-Builder diagnosed invalid encryption key issue
- Multiple heredoc script attempts failed due to Windows/Linux line
  ending issues in WSL environment
- Created simple fix script using echo statements (no heredoc)

Solution:
- Fix script created at /tmp/fix_n8n_simple.sh
- Generates proper encryption key using openssl rand -hex 32
- Recreates .env with corrected configuration including missing
  N8N_LISTEN_ADDRESS=0.0.0.0 and NODE_ENV=production
- Backs up existing .env before changes
- Sets proper permissions (600, n8n:n8n)

Reviews:
- Backend-Builder: APPROVED (95% confidence, technically sound)
- Lab-Operator: APPROVED with safeguards (ZFS snapshot, DB backup)

Status: Ready for deployment by user on CT 113 tomorrow

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-01 00:17:55 -07:00
c16d521070 docs(n8n): correct architecture for Debian 12 and Nginx Proxy Manager
Real-world deployment feedback revealed documentation mismatches:
- OS: Ubuntu references → Debian 12 (actual deployment)
- Reverse Proxy: Standalone nginx → Nginx Proxy Manager (NPM)

Changes Applied (30+ corrections in 4 batches):

Batch 1 - OS Corrections:
- Update OS template and PostgreSQL repo references to Debian 12

Batch 2 - NPM Terminology (10 updates):
- Update CT 102 specs (2 cores, 4GB RAM, 10GB disk)
- Rename nginx → nginx-proxy-mgr throughout
- Add NPM admin UI port 81 to diagrams
- Remove nginx-light/certbot from prerequisites

Batch 3 - Major Rewrites:
- Section VI-A: Complete NPM architecture overview
- Phase 7: Rewrite for NPM web UI (20min → 10min)
  * Replace SSH/manual config with browser-based setup
  * Add step-by-step proxy host creation guide
  * Include NPM-specific troubleshooting

Batch 4 - Minor Updates (15+ changes):
- Update troubleshooting sections for NPM
- Update architecture diagrams
- Update deployment workflows

Impact:
- Deployment time reduced (Phase 7: 20min → 10min)
- Complexity reduced (GUI vs manual nginx config)
- Accuracy improved (matches actual Debian 12 + NPM deployment)

Validated-by: Lab-Operator
Real-world-tested: PostgreSQL installation, NPM configuration

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 17:37:00 -07:00
a1841f1c41 docs(infrastructure): add MCP setup and n8n deployment documentation
- Add Obsidian MCP server setup guide for WSL2 integration (820 lines)
- Add comprehensive n8n workflow automation deployment plan (1,948 lines)
- Add agent workflow coordination via CLAUDE_STATUS.md
- Update CLAUDE.md with universal agent workflow protocol
- Remove deprecated homelab-steve agent definition
- Enhance .gitignore with Claude config exclusions

Security: API key sanitized, no production secrets exposed
Infrastructure Impact: None (documentation only)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-30 13:24:29 -07:00