Add comprehensive documentation for Claude OS deployment and daily usage. Documentation Added: - docs/PRODUCTION_DEPLOYMENT.md: Complete production deployment guide - Server architecture and resource allocation - SQLite deployment (simpler than PostgreSQL for read-heavy workloads) - Step-by-step deployment instructions - Integration with Rails applications - Service management, backups, monitoring - Troubleshooting and performance optimization - Security considerations - docs/QUICK_REFERENCE.md: Developer quick reference - All slash commands with examples - Skills and trigger phrases - Agent-OS commands (if installed) - Common workflows - Production server commands - API endpoints for integration - Troubleshooting guide - Printable cheat sheet Templates Added: - templates/agents/: 8 Agent-OS agent templates - spec-initializer, spec-shaper, spec-writer - tasks-list-creator, implementer - implementation-verifier, spec-verifier - product-planner - templates/project-files/agent-os/: Agent-OS project structure - config.yml.template - README.md with setup instructions - .gitignore for state files Updates: - templates/commands/claude-os-init.md: Enhanced project initialization - templates/project-files/CLAUDE.md.template: Improved project context Benefits: - Easy onboarding for new team members - Complete deployment automation - Production-ready configuration - Comprehensive troubleshooting - All commands in one place 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
8.9 KiB
Claude OS Production Deployment Guide for PISTN
Date: 2025-10-30 Server: Rails App Server (16 CPU / 32GB RAM / 640GB Storage) Database: SQLite (simple, fast for read-heavy workloads)
Overview
Deploy Claude OS to PISTN production server to power the DocumentationAssistant with AI-powered documentation search and Q&A.
Server Architecture
PISTN Production Server (staging.pistn.com)
├── Rails App :80/:443 (existing)
│ └── DocumentationAssistant (calls Claude OS)
├── MySQL (remote/hosted) (existing)
├── Redis :6379 (existing)
└── Claude OS (NEW)
├── MCP Server :8051
├── SQLite database (local file)
└── Ollama :11434 (CPU mode, llama3.1:8b)
Resource Allocation
Before Claude OS:
- Rails + Nginx: ~4-6 CPUs, 8-12GB RAM
- Redis: ~1 CPU, 2GB RAM
- Available: 9-10 CPUs, 18-20GB RAM
After Claude OS:
- Flask MCP Server: ~1-2 CPUs, 2GB RAM
- Ollama (CPU): ~2-4 CPUs, 4-8GB RAM
- SQLite: minimal overhead
- Total Claude OS: ~3-6 CPUs, 6-10GB RAM
Remaining: 3-7 CPUs, 8-14GB RAM for traffic spikes
Deployment Steps
1. Copy Deployment Script to Server
# From your Mac
scp /tmp/deploy-claude-os-production.sh deploy@staging.pistn.com:/tmp/
# SSH into server
ssh deploy@staging.pistn.com
2. Run Deployment Script
# Make executable and run
chmod +x /tmp/deploy-claude-os-production.sh
/tmp/deploy-claude-os-production.sh
The script automatically:
- ✅ Installs Python 3.11, Git, Nginx
- ✅ Clones Claude OS from GitHub
- ✅ Sets up Python virtual environment
- ✅ Creates SQLite database directory
- ✅ Installs Ollama
- ✅ Pulls llama3.1:8b model (~4.7GB)
- ✅ Creates systemd services
- ✅ Configures firewall
- ✅ Sets up Nginx reverse proxy
- ✅ Creates helper scripts (update, backup)
- ✅ Sets up daily backups (2am cron)
- ✅ Runs health checks
3. Initialize PISTN Knowledge Bases
# Create project
curl -X POST "http://localhost:8051/api/projects" \
-H "Content-Type: application/json" \
-d '{
"project_name": "Pistn",
"tech_stack": "Ruby on Rails 4.2",
"database": "MySQL",
"description": "Automotive service management platform"
}'
# Import PISTN documentation
curl -X POST "http://localhost:8051/api/kb/Pistn-knowledge_docs/import" \
-d "directory_path=/var/www/pistn/current/docs"
# Verify knowledge bases created
curl "http://localhost:8051/api/kb/list"
4. Update PISTN Rails App
Add to /var/www/pistn/shared/.env:
CLAUDE_OS_URL=http://localhost:8051
Update DocumentationAssistantService:
# app/services/documentation_assistant_service.rb
class DocumentationAssistantService
CLAUDE_OS_URL = ENV['CLAUDE_OS_URL'] || 'http://localhost:8051'
def self.query(question)
response = HTTParty.post(
"#{CLAUDE_OS_URL}/api/query",
body: {
kb_name: 'Pistn-knowledge_docs',
query: question,
use_hybrid: true,
use_rerank: true
}.to_json,
headers: { 'Content-Type' => 'application/json' },
timeout: 30
)
if response.success?
response.parsed_response
else
{ error: "Claude OS unavailable", status: response.code }
end
rescue => e
{ error: e.message }
end
end
Update DocumentationAssistant Controller:
# app/controllers/system_admin/documentation_assistant_controller.rb
def query
result = DocumentationAssistantService.query(params[:question])
if result[:error]
render json: { error: result[:error] }, status: :service_unavailable
else
render json: result
end
end
Redeploy Rails app:
cap production deploy
5. Test Integration
# Test Claude OS directly
curl -X POST "http://localhost:8051/api/query" \
-H "Content-Type: application/json" \
-d '{
"kb_name": "Pistn-knowledge_docs",
"query": "How do I set up auto-accept appointments?"
}'
# Test via Rails app (from browser or curl)
# Visit: https://staging.pistn.com/system_admin/documentation_assistant
Management Commands
Service Control
# Start/Stop/Restart
sudo systemctl start claude-os
sudo systemctl stop claude-os
sudo systemctl restart claude-os
# Check status
sudo systemctl status claude-os
sudo systemctl status ollama
# View logs
sudo journalctl -u claude-os -f
sudo journalctl -u ollama -f
# Or view log files directly
tail -f /opt/claude-os/logs/claude-os.log
tail -f /opt/claude-os/logs/ollama.log
Updates
# Update Claude OS to latest version
cd /opt/claude-os
./update.sh
# Or manually:
cd /opt/claude-os
git pull origin main
source venv/bin/activate
pip install -r requirements.txt
sudo systemctl restart claude-os
Backups
# Manual backup
/opt/claude-os/backup.sh
# Backups are automatically created daily at 2am
# Location: /opt/claude-os-backups/
# Restore from backup
sudo systemctl stop claude-os
cp /opt/claude-os-backups/claude-os-YYYYMMDD_HHMMSS.db \
/opt/claude-os/data/claude-os.db
sudo systemctl start claude-os
Health Checks
# Check MCP server
curl http://localhost:8051/health
# Check Ollama
curl http://localhost:11434/api/tags
# List knowledge bases
curl http://localhost:8051/api/kb/list
# Get KB stats
curl http://localhost:8051/api/kb/Pistn-knowledge_docs/stats
Monitoring
Resource Usage
# CPU and RAM usage
htop
# Check Claude OS process
ps aux | grep python | grep mcp_server
# Check Ollama process
ps aux | grep ollama
# Disk usage
df -h /opt/claude-os
Performance Metrics
# Response time test
time curl -X POST "http://localhost:8051/api/query" \
-H "Content-Type: application/json" \
-d '{"kb_name":"Pistn-knowledge_docs","query":"test"}'
# Expected: 1-5 seconds for simple queries
# Expected: 5-15 seconds for complex queries
Troubleshooting
Claude OS won't start
# Check logs
sudo journalctl -u claude-os -n 100
# Common issues:
# 1. Port already in use
sudo lsof -i :8051
# 2. Python dependencies missing
cd /opt/claude-os
source venv/bin/activate
pip install -r requirements.txt
# 3. Database permissions
ls -la /opt/claude-os/data/
chown deploy:deploy /opt/claude-os/data/claude-os.db
Ollama won't start
# Check logs
sudo journalctl -u ollama -n 100
# Verify model downloaded
ollama list
# Re-pull model if needed
ollama pull llama3.1:8b
Slow responses
# Check if Ollama is using CPU (not GPU)
ollama list
# Check system load
uptime
htop
# Reduce model size if needed (faster but less accurate)
ollama pull llama3.1:3b
# Update config to use smaller model
Database locked errors
# SQLite database locked (rare)
# Check for multiple processes
ps aux | grep claude-os
# Restart service
sudo systemctl restart claude-os
Security Considerations
- Firewall: Claude OS only accessible from localhost (127.0.0.1)
- No external access: MCP server not exposed to internet
- Rails app proxy: All external requests go through Rails authentication
- Backups: Daily backups kept for 7 days
- Updates: Regular security updates via update.sh
Performance Optimization
For Better Performance
-
Use smaller Ollama model (faster, less RAM):
ollama pull llama3.1:3b # Update claude-os-config.json model to "llama3.1:3b" -
Limit concurrent requests in Rails:
# Add request throttling to controller before_action :throttle_requests -
Cache frequent queries in Redis:
def query(question) Rails.cache.fetch("claude_os:#{question}", expires_in: 1.hour) do DocumentationAssistantService.query(question) end end
Cost Analysis
Server Resources Used:
- CPUs: 3-6 cores (~20-40% of available)
- RAM: 6-10GB (~20-30% of available)
- Storage: ~10GB (model + database + logs)
Additional Costs:
- $0 - Running on existing server
- No API costs (local Ollama, not OpenAI)
- No extra database costs (SQLite)
Total Cost: $0 per month (uses existing infrastructure)
Future Enhancements
-
Add more knowledge bases:
- Support tickets archive
- Common solutions database
- Tekmetric integration guides
-
Improve responses:
- Fine-tune on PISTN-specific data
- Add conversation history
- Multi-turn dialogues
-
Scale if needed:
- Move to dedicated server if traffic increases
- Use GPU for faster inference
- Upgrade to PostgreSQL if concurrent writes needed
Support
Logs Location:
- Claude OS:
/opt/claude-os/logs/claude-os.log - Ollama:
/opt/claude-os/logs/ollama.log - Systemd:
sudo journalctl -u claude-os
Configuration:
/opt/claude-os/claude-os-config.json/var/www/pistn/shared/.env
Helper Scripts:
- Update:
/opt/claude-os/update.sh - Backup:
/opt/claude-os/backup.sh
Deployment Date: 2025-10-30 Server: staging.pistn.com (16 CPU / 32GB RAM) Status: Ready for production use