# TOOLS.md - Local Notes Skills define _how_ tools work. This file is for _your_ specifics — the stuff that's unique to your setup. ## What Goes Here Things like: - Camera names and locations - SSH hosts and aliases - Preferred voices for TTS - Speaker/room names - Device nicknames - Anything environment-specific ## Examples ```markdown ### Cameras - living-room → Main area, 180° wide angle - front-door → Entrance, motion-triggered ### SSH - home-server → 192.168.1.100, user: admin ### TTS - Preferred voice: "Nova" (warm, slightly British) - Default speaker: Kitchen HomePod ``` ## Why Separate? Skills are shared. Your setup is yours. Keeping them apart means you can update skills without losing your notes, and share skills without leaking your infrastructure. --- ## Gitea (Git Server - DO NOT INSTALL LOCALLY) **⚠️ CRITICAL:** Gitea runs on a SEPARATE MACHINE (192.168.1.128). Do NOT install it on Matt's Mac. **Server Location:** http://192.168.1.128:3000 (NOT localhost:3000) - **Login:** ai-agent / !7883Gitea - **Organization:** TopDogLabs - **All repos go under:** http://192.168.1.128:3000/TopDogLabs/ ### Using Gitea **Clone existing repo:** ```bash git clone http://192.168.1.128:3000/TopDogLabs/repo-name.git ``` **Push to Gitea:** ```bash git push origin main # Enter username: ai-agent # Enter password: !7883Gitea ``` **Create new repo via web:** 1. Go to http://192.168.1.128:3000 2. Login as ai-agent 3. Click + → New Repository 4. Owner: TopDogLabs 5. Name: [project-name] **NEVER do this:** - ❌ `brew install gitea` on Matt's Mac - ❌ Run `gitea web` locally - ❌ Use port 3000 for anything (it's for Next.js dev) ## Folders for All Content/Projects - **Location:** /Users/mattbruce/Documents/Projects/OpenClaw - **Documents:** /Users/mattbruce/Documents/Projects/OpenClaw/Documents - **iOS:** /Users/mattbruce/Documents/Projects/OpenClaw/iOS - **Web:** /Users/mattbruce/Documents/Projects/OpenClaw/Web ## Blog Backup - **Location:** /Users/mattbruce/Documents/Projects/OpenClaw/Web/blog-backup - **Live URL:** https://blog-backup-two.vercel.app - **Local Dev:** http://localhost:3002 - **Stack:** Next.js + Supabase + Vercel - **Deploy:** `npm run build && vercel --prod` (no GitHub, CLI only) - **Features:** Daily digest blog with tag filtering, search, responsive design ## Mission Control - **Location:** /Users/mattbruce/Documents/Projects/OpenClaw/Web/mission-control - **Live URL:** https://mission-control-rho-pink.vercel.app/ - **Local Dev:** http://localhost:3001 - **Stack:** Next.js + Vercel - **Deploy:** `npm run build && vercel --prod` (no GitHub, CLI only) ## Heartbeat Monitor - **Location:** /Users/mattbruce/Documents/Projects/OpenClaw/Web/heartbeat-monitor - **Local Dev:** http://localhost:3005 - **Stack:** Next.js + Vercel ## Gantt Board - **Location:** /Users/mattbruce/Documents/Projects/OpenClaw/Web/gantt-board - **Live URL:** https://gantt-board.vercel.app - **Login:** mbruce+max@topdoglabs.com / !7883Gantt - **Local Dev:** http://localhost:3000 - **Stack:** Next.js + Supabase + Vercel - **Deploy:** `npm run build && vercel --prod` (no GitHub, CLI only) ## Supabase for Gantt Board - **URL:** https://qnatchrjlpehiijwtreh.supabase.co - **Project ID:** qnatchrjlpehiijwtreh ## User IDs for Gantt Board - **Matt:** 0a3e400c-3932-48ae-9b65-f3f9c6f26fe9 - **Max:** 9c29cc99-81a1-4e75-8dff-cd7cc5ceb5aa ## Tavily AI Search (Configured) **API Key:** Stored in `.env.tavily` (auto-loaded) **Quick Commands:** ```bash # Search cd ~/.openclaw/workspace && ./tavily-search.sh "query" -n 5 # Extract URL content cd ~/.openclaw/workspace && ./tavily-extract.sh "https://example.com" # Deep research cd ~/.openclaw/workspace && ./tavily-search.sh "query" --deep ``` **Note:** API key is automatically loaded from `.env.tavily`. No need to export manually. --- ## Daily Digest Failsafe System **Cron Job:** Daily Digest - 7am CST (America/Chicago) **Status:** ✅ Fixed and monitored **Last Posted:** 2026-02-23 **What I Fixed:** - ✅ Wrong API key in cron job (was `cron_daily_digest_2025`, now `daily-digest-2026-secure-key`) - ✅ Added retry logic (3 attempts with 30s delay) - ✅ Enabled notifications on failure - ✅ Added backup file creation on failure (`memory/YYYY-MM-DD-digest-failed.md`) **If It Fails:** 1. You will get notified immediately 2. Digest content saved to `memory/` folder 3. Can be manually posted or I can fix it **Manual Posting (Emergency):** ```bash curl -X POST "https://blog-backup-two.vercel.app/api/digest" \ -H "Content-Type: application/json" \ -H "x-api-key: daily-digest-2026-secure-key" \ -d '{"date": "2026-02-23", "content": "...", "tags": [...]}' ``` --- Add whatever helps you do your job. This is your cheat sheet.