Skip to content

Open Intel — Project Reference

Auto-published VitePress site powered by OpenClaw daily scrapes, deployed to cPanel via FTP.


Architecture

OpenClaw (WSL, heartbeat every 30min)
  → scrapes web daily for defined topics
  → writes/updates markdown in ~/repos/open-intel/docs/
  → git commit + push to GitHub (main)
  → GitHub Actions: npm ci → vitepress build → FTP upload
  → Live at: https://omnes.pro/open-intel/

Current State (2026-02-16)

ComponentStatusDetails
VitePress siteDeployedomnes.pro/open-intel/
GitHub repoPrivaterichardtheshannon/open-intel
GitHub ActionsAuto-deploy on pushFTP to cPanel public_html/open-intel/
WSL clone~/repos/open-intelOpenClaw reads/writes here
Windows copyD:\_dev\priori-dev\open-intelDev copy, git pull to sync
WSL git authgh CLIInstalled + authenticated
WSL git identityConfiguredrichard@salesfield.net / Richard Shannon
HEARTBEAT.mdConfiguredDaily security scrape + commit + push
Scrape topic: SecurityActivedocs/security/best-practices.md

Key Decisions Made

  • Repo name: open-intel
  • Visibility: Private
  • Hosting: cPanel (omnes.pro) via GitHub Actions FTP
  • Push model: Auto-push to main (no PR review)
  • FTP protocol: Plain FTP (port 21) — FTPS caused FIN packet errors
  • VitePress base: /open-intel/ (required for subdirectory deploy)

File Locations

FileLocationPurpose
VitePress configdocs/.vitepress/config.jsSite config, auto-sidebar, base path
VitePress themedocs/.vitepress/theme/Custom theme (Layout, EditButton, EditorModal, PinGate)
Homepagedocs/index.mdLanding page
Security topicdocs/security/best-practices.mdOpenClaw security intelligence
Deploy workflow.github/workflows/deploy.ymlGitHub Actions → FTP to cPanel
.gitignore.gitignoreExcludes: node_modules, cache, dist, _TEMP, .claude
package.jsonpackage.jsonname: open-intel, vitepress ^2.0.0-alpha.16
HEARTBEAT.md~/.openclaw/workspace/HEARTBEAT.md (WSL)OpenClaw daily task config
This fileD:\_open-claw\_TEMP\SCRAPE-SITE.mdProject reference

GitHub Secrets (configured)

SecretPurpose
FTP_SERVERcPanel FTP hostname
FTP_USERNAMEFTP account username
FTP_PASSWORDFTP account password

Config Notes

VitePress config.js — key settings

js
base: '/open-intel/',          // subdirectory deploy
title: 'Open Intel',
sidebar: auto-generated from docs/ subfolders

deploy.yml — key settings

yaml
on: push to main + workflow_dispatch
build: npm ci → npm run build
deploy: FTP-Deploy-Action v4.3.5
  server-dir: /open-intel/      # relative to FTP root (which is public_html/)
  local-dir: ./docs/.vitepress/dist/
  protocol: ftp (not ftps)
  port: 21

Auto-sidebar

The sidebar auto-generates from folder structure in docs/. Any new folder with .md files appears automatically — no config changes needed.

HEARTBEAT.md (what OpenClaw runs daily)

OpenClaw searches for "OpenClaw security risks", "OpenClaw vulnerabilities", "AI agent security best practices" and updates ~/repos/open-intel/docs/security/best-practices.md:

  • New findings added at top of "Actionable Security Items" section
  • Existing items preserved, duplicates removed
  • Timestamp updated
  • Then: git add docs/ && git commit && git push origin main
  • Constraints: only touches docs/, no force push, no config changes

Development Guidelines

  • Minimal edits — use existing systems, avoid new dependencies
  • Warn before breaking changes — especially anything affecting layout or deploy
  • No unsolicited docs — don't create guides/READMEs unless asked
  • Windows ↔ WSL sync — Windows copy is for dev, WSL copy is for OpenClaw. Use git pull to sync either side
  • Adding topics — create a new folder in docs/, add .md file, update HEARTBEAT.md in WSL
  • Testing locallynpm run build in Windows copy to verify VitePress builds

TODO

  • [ ] Add more scrape topics (AI news, dev tools, etc.)
  • [ ] Custom VitePress theme/branding
  • [ ] RSS feed generation
  • [ ] Notification on failed pushes (via OpenClaw channel)
  • [ ] Clean up stale public_html/public_html/ directory on cPanel

Gotchas

  • FTP path: FTP account root is public_html/, so server-dir in workflow is /open-intel/ not /public_html/open-intel/
  • FTPS doesn't work: Server rejects TLS — use plain ftp protocol
  • VitePress base path: Must set base: '/open-intel/' or all assets 404
  • WSL sudo: Prompts for password can't be entered from Claude Code — run sudo commands in a WSL terminal directly
  • gh CLI: Installed in WSL for git auth — handles credentials automatically
lock

Enter PIN to continue