test-repo/TOOLS.md

195 lines
5.9 KiB
Markdown

# 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)
### CLI Access (Create Tasks Directly)
**Location:** `/Users/mattbruce/Documents/Projects/OpenClaw/Web/gantt-board/scripts/gantt-task-crud.sh`
**Create Task:**
```bash
cd /Users/mattbruce/Documents/Projects/OpenClaw/Web/gantt-board
./scripts/gantt-task-crud.sh create "Task Title" todo high a1b2c3d4-0001-0000-0000-000000000001 9c29cc99-81a1-4e75-8dff-cd7cc5ceb5aa task
```
**Parameters:**
1. `title` - Task title (required)
2. `status` - open, todo, in-progress, review, validate, done
3. `priority` - low, medium, high, urgent
4. `project_id` - Default: a1b2c3d4-0001-0000-0000-000000000001
5. `assignee_id` - Default: 9c29cc99-81a1-4e75-8dff-cd7cc5ceb5aa (Max)
6. `type` - task, idea, bug, research, plan
**Other Commands:**
```bash
./scripts/gantt-task-crud.sh list # List all tasks
./scripts/gantt-task-crud.sh list todo # List todo tasks
./scripts/gantt-task-crud.sh get <task-id> # Get specific task
./scripts/gantt-task-crud.sh update <id> status done # Update task status
./scripts/gantt-task-crud.sh delete <task-id> # Delete task
```
**Note:** The CLI uses Supabase service role key for direct DB access. Description, tags, and sprint assignment must be added via the web UI after creation.
## 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.