Step-by-step instructions to implement the HeliOS Studio stack.
- Proxmox homelab with at least one GPU (T600, RTX 4000 Quadro, or similar)
- GitHub account
- Basic familiarity with Docker, Linux, and Git
- Windows/Linux/Mac workstation
# Download from https://cursor.sh
# Or via package manager:
brew install --cask cursor # macOSConfiguration:
- Sign in with GitHub
- Settings → AI → Add API keys:
- Claude (Anthropic)
- GPT (OpenAI)
- Gemini (Google)
- Enable Composer for multi-file edits
- Set preferred model per task type
# Download from https://claude.ai/downloadEnable MCP:
- Open Claude Desktop settings
- Enable "Experimental Features"
- Configure MCP servers (see Phase 2)
# Linux
curl -fsSL https://ollama.com/install.sh | sh
# macOS
brew install ollama
# Windows (WSL or native)
winget install Ollama.OllamaPull initial models:
ollama pull llama3 # 8B general model
ollama pull phi3 # 3.8B fast utility model
ollama pull qwen3 # 7B coding/reasoningTest:
ollama run llama3 "Write a hello world in Python"Configure API (optional, for remote access):
# Edit ~/.ollama/config
export OLLAMA_HOST=0.0.0.0:11434Create VM on Proxmox:
- Name:
ollama-server - OS: Ubuntu 22.04 LTS
- CPU: 8 cores
- RAM: 32GB
- GPU: Passthrough T600 or RTX 4000
Install:
ssh ollama-server
curl -fsSL https://ollama.com/install.sh | sh
# Install NVIDIA drivers if using GPU
sudo apt install nvidia-driver-535
# Verify GPU
nvidia-smi
# Pull larger models
ollama pull qwen3:30b # 30B parameter modelExpose API:
sudo systemctl edit ollama
# Add:
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
sudo systemctl restart ollamaOn Proxmox VM (automation-hub):
# Create docker-compose.yml
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: always
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=<strong-password>
- N8N_HOST=n8n.yourdomain.com
- WEBHOOK_URL=https://n8n.yourdomain.com/
volumes:
- n8n_data:/home/node/.n8n
- /var/run/docker.sock:/var/run/docker.sock
volumes:
n8n_data:docker-compose up -dAccess: http://your-vm-ip:5678
First workflow: Create a test workflow that logs a webhook payload.
Install MCP tools:
npm install -g @modelcontextprotocol/server-filesystemConfigure Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/workspace"]
}
}
}Create workspace directory:
mkdir -p ~/workspace/helios-studio
cd ~/workspace/helios-studioTest: In Claude Desktop, ask "List files in my workspace"
npm install -g @modelcontextprotocol/server-githubCreate GitHub fine-grained token:
- GitHub → Settings → Developer settings → Personal access tokens → Fine-grained tokens
- Token name:
helios-studio-mcp - Repository access: Select "HeliOS-Studio" and other studio repos
- Permissions:
- Contents: Read and write
- Issues: Read and write
- Pull requests: Read and write
- Metadata: Read-only
Configure Claude Desktop:
{
"mcpServers": {
"filesystem": { ... },
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here"
}
}
}
}Test: In Claude Desktop, ask "List issues in zebadee2kk/HeliOS-Studio"
Create simple Express server (~/workspace/mcp-servers/n8n/server.js):
const express = require('express');
const axios = require('axios');
const app = express();
app.use(express.json());
const N8N_URL = process.env.N8N_URL || 'http://localhost:5678';
const N8N_API_KEY = process.env.N8N_API_KEY;
app.post('/trigger', async (req, res) => {
const { workflow, payload } = req.body;
try {
const result = await axios.post(
`${N8N_URL}/webhook/${workflow}`,
payload
);
res.json({ success: true, data: result.data });
} catch (error) {
res.status(500).json({ success: false, error: error.message });
}
});
app.listen(3000, () => console.log('n8n MCP server on port 3000'));Run:
node server.js- Go to https://notebooklm.google.com
- Sign in with a dedicated Google account (studio identity, not personal)
- Create notebooks:
HeliOS-Opportunities-CybersecHeliOS-Opportunities-DevtoolsHeliOS-Tech-ResearchHeliOS-Experiments
gh repo create kb-opportunities-cybersec --private
gh repo create kb-opportunities-devtools --private
gh repo create kb-tech-research --private
gh repo create kb-feeds --privateAdd structure:
cd kb-opportunities-cybersec
mkdir -p {research,summaries,opportunities}
echo "# Cybersecurity Opportunities" > README.md
git add -A && git commit -m "Initial structure" && git pushProcess:
- Perplexity: Research a topic, save to Collection
- NotebookLM: Create notebook, add Perplexity links as sources
- NotebookLM: Run Deep Research
- NotebookLM: Export report as PDF/Doc to Google Drive
- Download and commit to appropriate GitHub kb-repo
Example:
cd kb-opportunities-cybersec/research
cp ~/Downloads/mcp-security-gaps-report.pdf .
git add mcp-security-gaps-report.pdf
git commit -m "Add MCP security gaps research from NotebookLM"
git pushn8n workflow (to be built):
- Trigger: Google Drive file created in "NotebookLM Exports" folder
- Action: Download file
- Action: Commit to appropriate GitHub repo based on filename pattern
- Action: Notify via email/Slack
gh repo create studio-inbox --private
cd studio-inboxCreate issue template (.github/ISSUE_TEMPLATE/idea.md):
---
name: Project Idea
about: New project or opportunity to explore
title: '[IDEA] '
labels: 'idea'
---
## Problem
What problem does this solve?
## Users
Who needs this?
## Constraints
Time, budget, technical limitations?
## Success Criteria
How do we know it works?
## Research
Link to NotebookLM notebook or GitHub kb-repoSave as ~/workspace/prompts/idea-to-plan.md:
# Idea to Plan
Given this issue and research notebook, produce:
1. **Architecture Decision Records (ADRs)**
- Key technical decisions
- Trade-offs considered
- Rationale
2. **Architecture Diagram** (Mermaid)
- System components
- Data flow
- Integration points
3. **90-Day Roadmap**
- Week 1-4: MVP
- Week 5-8: Core features
- Week 9-12: Polish and launch
4. **Threat Model** (for security-related projects)
- Attack surface
- Mitigations
- Security controls
5. **GitHub Issues**
- Milestone issues with acceptance criteria
- Labeled by priority and type
Format output as markdown files ready to commit.Workflow:
- Trigger: GitHub webhook on new issue with label
auto-plan - Action: Fetch issue body and linked research
- Action: Call Claude API with idea-to-plan prompt
- Action: Parse response, create GitHub issues for roadmap
- Action: Comment on original issue with summary and links
gh repo create project-template --public --template
cd project-templateAdd standard files:
docker-compose.yml:
version: '3.8'
services:
app:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/app
depends_on:
- db
db:
image: postgres:16
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=app
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:.github/workflows/ci.yml:
name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: pip install -r requirements.txt
- run: pytest
- run: ruff check .Workflow:
- Trigger: Cron (nightly)
- Action: Call project
/experimentendpoint with test scenarios - Action: Aggregate metrics (latency, accuracy, cost)
- Action: Write markdown report to repo
experiments/YYYY-MM-DD.md - Action: Update NotebookLM experiment notebook (via Drive API)
- Cursor installed and configured with API keys
- Claude Desktop installed with MCP enabled
- Ollama running on workstation with 3+ models
- Ollama running on homelab VM with GPU
- n8n deployed and accessible
- Filesystem MCP server working
- GitHub MCP server working
- NotebookLM account created with 4 initial notebooks
- GitHub knowledge repos created (4 repos)
- Studio inbox repo with issue template
- Project template repo with CI/CD
- First test workflow in n8n
# Verify NVIDIA drivers
nvidia-smi
# Reinstall if needed
sudo apt purge nvidia-*
sudo apt install nvidia-driver-535
sudo reboot- Check Claude Desktop logs:
Help → Show Logs - Verify MCP config syntax (valid JSON)
- Test MCP server manually:
npx -y @modelcontextprotocol/server-filesystem /tmp- Check n8n logs:
docker logs n8n - Verify webhook URL is publicly accessible
- Test with curl:
curl -X POST https://your-n8n.com/webhook/test \
-H "Content-Type: application/json" \
-d '{"test": true}'See WORKFLOWS.md for end-to-end examples.