# Firefrost Codex - Migration to Open WebUI + Repomix

**Document ID:** CODEX-MIGRATION-001  
**Created:** February 21, 2026  
**Status:** 📋 PLANNED - Ready to Execute  
**Estimated Time:** 1 hour  
**Risk Level:** LOW (can rollback to AnythingLLM if needed)

---

## 🎯 OBJECTIVE

Replace AnythingLLM with Open WebUI + Repomix workflow to solve document retrieval quality issues.

**Current Problem:**
- AnythingLLM indexing 319 files creates poor search relevance
- AI finds old/archived docs instead of current operational info
- Vector search overwhelmed by document volume and similarity

**Solution:**
- Open WebUI: More efficient RAG engine, better performance
- Repomix: Packages entire operations manual into single, clean file
- Combined: Fast + accurate retrieval without noise

---

## 📊 COMPARISON

| Feature | AnythingLLM (Current) | Open WebUI + Repomix |
|:--------|:---------------------|:---------------------|
| Documents | 319 individual files | 1 packaged digest |
| Search Quality | Poor (finds old docs) | Good (clean context) |
| Performance | Slow indexing | Fast responses |
| Updates | Re-sync 319 files | Re-run packager |
| Maintenance | High (vector DB) | Low (single file) |
| Cost | $0/month | $0/month |

---

## ⚠️ PREREQUISITES

**Before starting:**
- [ ] SSH access to TX1 (38.68.14.26)
- [ ] Docker running on TX1
- [ ] Ollama running on TX1 (port 11434)
- [ ] Git repo cloned at /root/firefrost-operations-manual
- [ ] ~30 minutes of focused time
- [ ] Backup plan (can restart AnythingLLM if needed)

---

## 🛠️ MIGRATION STEPS

### Step 1: Install Repomix (5 minutes)

**SSH to TX1:**
```bash
ssh root@38.68.14.26
```

**Install Repomix globally:**
```bash
npm install -g repomix
```

**Verify installation:**
```bash
repomix --version
```

**Expected output:** Version number (e.g., `repomix v2.x.x`)

---

### Step 2: Generate Operations Manual Digest (5 minutes)

**Navigate to operations manual:**
```bash
cd /root/firefrost-operations-manual
```

**Run Repomix to package entire repo:**
```bash
repomix --output firefrost-ops-digest.md
```

**What this does:**
- Scans entire repository
- Automatically excludes .git, node_modules, binaries
- Creates single markdown file with intelligent structure
- Optimized for LLM consumption

**Verify the digest:**
```bash
ls -lh firefrost-ops-digest.md
wc -l firefrost-ops-digest.md
```

**Expected:** File should be several thousand lines, representing all docs

---

### Step 3: Stop AnythingLLM (2 minutes)

**Navigate to AnythingLLM directory:**
```bash
cd /opt/anythingllm
```

**Stop the containers:**
```bash
docker-compose down
```

**Verify stopped:**
```bash
docker ps | grep anythingllm
```

**Expected:** No output (containers stopped)

**Optional - Remove containers completely:**
```bash
# Only if you want to free up space
# docker-compose down -v  # This removes volumes too
```

**Note:** We're keeping the data volumes in case we need to rollback.

---

### Step 4: Install Open WebUI (10 minutes)

**Pull and run Open WebUI container:**
```bash
docker run -d \
  -p 3001:8080 \
  --name open-webui \
  --add-host=host.docker.internal:host-gateway \
  -v open-webui:/app/backend/data \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  --restart always \
  ghcr.io/open-webui/open-webui:main
```

**Breakdown:**
- `-p 3001:8080` - Same port as old Codex (http://38.68.14.26:3001)
- `--add-host` - Allows container to reach host's Ollama
- `-v open-webui:/app/backend/data` - Persistent storage
- `-e OLLAMA_BASE_URL` - Points to existing Ollama instance
- `--restart always` - Auto-start on server reboot

**Verify container running:**
```bash
docker ps | grep open-webui
```

**Expected:** Container should show as "Up"

**Check logs:**
```bash
docker logs open-webui
```

**Expected:** Should see startup messages, no errors

---

### Step 5: Initial Setup via Web UI (10 minutes)

**Access Open WebUI:**
1. Open browser to: http://38.68.14.26:3001
2. First visit will prompt to create admin account
3. Create account:
   - Username: `mkrause612`
   - Email: (your email)
   - Password: (secure password)

**Verify Ollama connection:**
1. Click Settings (gear icon)
2. Go to "Connections"
3. Should show Ollama at `http://host.docker.internal:11434`
4. Should list available models (qwen2.5-coder:7b, llama3.3:70b)

**If models don't show:**
```bash
# Verify Ollama is accessible from container
docker exec open-webui curl -s http://host.docker.internal:11434/api/tags
```

---

### Step 6: Upload Operations Manual Digest (5 minutes)

**In Open WebUI:**
1. Click "Documents" in sidebar
2. Click "Upload Documents"
3. Select `/root/firefrost-operations-manual/firefrost-ops-digest.md`
4. Upload completes
5. Document should appear in list

**Alternative - Upload via command line:**
```bash
# Get file size to verify
ls -lh /root/firefrost-operations-manual/firefrost-ops-digest.md

# File is uploaded via web UI (easier than API for first time)
```

---

### Step 7: Create Workspace and Test (10 minutes)

**Create Operations workspace:**
1. Click "Workspaces" (or similar)
2. Create new workspace: "Operations"
3. Attach `firefrost-ops-digest.md` document
4. Select model: `qwen2.5-coder:7b`

**Test queries:**

**Query 1: Current tasks**
```
What are the current Tier 0 tasks according to tasks.md?
```

**Expected:** Should list actual current tasks (Whitelist Manager, NC1 Cleanup, etc.)

**Query 2: Infrastructure**
```
What servers does Firefrost Gaming operate and what are their IP addresses?
```

**Expected:** Should list TX1, NC1, Command Center, etc. with correct IPs

**Query 3: Recent work**
```
What was accomplished in the most recent Codex session?
```

**Expected:** Should reference Phase 2 work, workspaces created, etc.

**If responses are accurate:** ✅ Migration successful!

---

### Step 8: Create Additional Workspaces (10 minutes)

**Replicate the workspace structure:**

1. **Operations** (already created)
   - Document: firefrost-ops-digest.md
   - Model: qwen2.5-coder:7b
   - Users: Admins only

2. **Brainstorming**
   - Document: firefrost-ops-digest.md
   - Model: llama3.3:70b (for deeper thinking)
   - Users: Admins only

3. **Public KB**
   - Document: (none yet - future public docs)
   - Model: qwen2.5-coder:7b
   - Users: Public access (future)

4. **Subscriber KB**
   - Document: (none yet - future subscriber docs)
   - Model: qwen2.5-coder:7b
   - Users: Subscriber access (future)

5. **Relationship**
   - Document: firefrost-ops-digest.md (has relationship docs in it)
   - Model: qwen2.5-coder:7b
   - Users: Admins only

6. **Pokerole Project**
   - Document: (none yet - needs pokerole repo)
   - Model: qwen2.5-coder:7b
   - Users: Admins + Holly

---

### Step 9: Create User Accounts (5 minutes)

**In Open WebUI Settings → Users:**

1. **gingerfury (Meg)**
   - Role: Admin
   - Email: (Meg's email)
   - Temporary password (she can change)

2. **Unicorn20089 (Holly)**
   - Role: User (not Admin)
   - Email: (Holly's email)
   - Access: Pokerole Project workspace only

**Note:** Open WebUI has different permission model than AnythingLLM. 
May need to configure workspace access differently.

---

### Step 10: Document Sync Automation (10 minutes)

**Update the sync workflow:**

Instead of syncing individual files, we now just re-run Repomix.

**Create new sync script:**
```bash
cat > /root/codex-sync-openwebui.sh << 'EOFSCRIPT'
#!/bin/bash
# Firefrost Codex - Open WebUI Sync Script
# Updates the operations manual digest

set -e

REPO_DIR="/root/firefrost-operations-manual"
DIGEST_FILE="$REPO_DIR/firefrost-ops-digest.md"

echo "=== Firefrost Codex Sync (Open WebUI) ==="
echo "Started: $(date)"
echo ""

# Pull latest from Git
cd "$REPO_DIR"
echo "📥 Pulling latest from Git..."
git pull
echo ""

# Regenerate digest
echo "📦 Regenerating operations manual digest..."
repomix --output firefrost-ops-digest.md
echo ""

# Show file info
echo "✅ Digest updated:"
ls -lh "$DIGEST_FILE"
echo ""

echo "📌 Next step: Upload firefrost-ops-digest.md to Open WebUI"
echo "   Location: http://38.68.14.26:3001"
echo ""

echo "✅ Sync complete: $(date)"
EOFSCRIPT

chmod +x /root/codex-sync-openwebui.sh
```

**Test the new sync script:**
```bash
/root/codex-sync-openwebui.sh
```

**Then manually upload the new digest via web UI**

---

## 🔄 ROLLBACK PLAN

**If Open WebUI doesn't work or has issues:**

**Step 1: Stop Open WebUI**
```bash
docker stop open-webui
docker rm open-webui
```

**Step 2: Restart AnythingLLM**
```bash
cd /opt/anythingllm
docker-compose up -d
```

**Step 3: Access old Codex**
- URL: http://38.68.14.26:3001
- All data still intact (we didn't remove volumes)

**Time to rollback:** 2 minutes

---

## 📋 POST-MIGRATION CHECKLIST

After migration is complete:

- [ ] Open WebUI accessible at http://38.68.14.26:3001
- [ ] Ollama connection working (models listed)
- [ ] Operations workspace created with digest uploaded
- [ ] Test queries return accurate, current information
- [ ] Additional workspaces created (Brainstorming, etc.)
- [ ] User accounts created (gingerfury, Unicorn20089)
- [ ] Sync script updated and tested
- [ ] Old AnythingLLM containers stopped (but not deleted)
- [ ] Documentation updated in Git

**Optional cleanup (after 1 week of successful use):**
- [ ] Remove AnythingLLM Docker volumes (frees ~500MB)
- [ ] Remove old sync script `/root/codex-sync.sh`
- [ ] Update PROJECT-SCOPE with new architecture

---

## 📊 EXPECTED IMPROVEMENTS

**Performance:**
- Faster responses (Open WebUI more efficient)
- No indexing lag (single file vs 319 files)
- Lower memory usage

**Accuracy:**
- Better retrieval (clean context vs noisy corpus)
- Current info prioritized (packaged digest vs mixed archives)
- Fewer "hallucinations" (clearer document structure)

**Maintenance:**
- Simpler updates (re-run packager vs re-sync 319 files)
- Clear versioning (digest is dated file)
- Easier to troubleshoot (one file to check)

---

## 🆘 TROUBLESHOOTING

**If Open WebUI won't start:**
```bash
# Check logs
docker logs open-webui

# Common issues:
# - Port 3001 already in use (make sure AnythingLLM is stopped)
# - Ollama not accessible (check host.docker.internal)
```

**If Ollama connection fails:**
```bash
# Test from inside container
docker exec open-webui curl http://host.docker.internal:11434/api/tags

# If that fails, Ollama might not be running
systemctl status ollama
```

**If upload fails:**
- Check file size: `ls -lh firefrost-ops-digest.md`
- File too large? Repomix should auto-limit, but check
- Try uploading via web UI instead of API

**If queries return poor results:**
- Check which model is being used
- Verify digest file uploaded correctly
- Try more specific queries
- May need to adjust retrieval settings

---

## 📝 NOTES

**Why Repomix instead of manual curation?**
- Automatic exclusion of .git, node_modules, binaries
- Intelligent structure preservation
- Consistent formatting for LLMs
- Easy to regenerate when repo updates
- Industry-standard tool (maintained, documented)

**Why Open WebUI instead of alternatives?**
- Most mature AnythingLLM alternative
- Active development community
- Better performance than AnythingLLM
- More features (function calling, tools)
- Docker-based (consistent with our stack)

**Can we keep AnythingLLM running alongside?**
- Yes, but they'd need different ports
- Not recommended (confusing to have both)
- Better to fully commit to one approach

---

## 🔗 RESOURCES

- **Open WebUI Docs:** https://docs.openwebui.com/
- **Repomix GitHub:** https://github.com/yamadashy/repomix
- **Ollama API:** http://38.68.14.26:11434/api/tags
- **New Codex URL:** http://38.68.14.26:3001

---

## ✅ SUCCESS CRITERIA

**Migration is successful when:**
1. ✅ Open WebUI accessible and responsive
2. ✅ Operations manual digest uploaded
3. ✅ Test queries return current, accurate information
4. ✅ Response time under 10 seconds
5. ✅ Multiple workspaces functional
6. ✅ User accounts working with correct permissions
7. ✅ No errors in Docker logs

**At that point:** Phase 2 can be considered COMPLETE ✅

---

**Fire + Frost + Foundation + Better Tools = Where Love Builds Legacy** 💙🔥❄️

**Document Status:** Ready to execute  
**Next Action:** Run Step 1 when ready  
**Estimated Completion:** 1 hour from start to finish
