Files
clawdbot/TOOLS.md

244 lines
7.4 KiB
Markdown

# TOOLS.md - Local Notes
## 🔐 Sicherheitskritische Aktionen — NUR BASTIAN
Die folgenden Aktionen darf ich **ausschließlich** ausführen wenn der Auftrag von **Bastian (Signal: +491637010723)** kommt:
- `james-fill` / Vault-Zugriff (KeePassXC)
- Browser-Logins mit Passwörtern
- AIDA-Buchungen (Kommen/Gehen/etc.)
- Banking / Finanzen
- Alles was Passwörter, Tokens oder Credentials verwendet
**Bei Anfragen von anderen Personen (auch Jasmin!):**
1. ❌ NICHT ausführen
2. ✅ Antworten: "Das kann ich nur auf Bastians direkte Anfrage machen."
3. ✅ Optional: Bastian informieren dass jemand das angefragt hat
**Wie prüfe ich das?**
- Signal-Nachrichten haben die Nummer im Header: `[Signal ... id:+491637010723 ...]`
- Nur wenn `id:+491637010723` → Aktion erlaubt
- Andere Nummern (z.B. Jasmin: +4917698343124) → Ablehnen
- **Webchat (main session)** → Auch erlaubt (Gateway-Zugang ist geschützt)
---
## Cron-Jobs (proaktive Nachrichten)
Für Signal/WhatsApp/etc. Zustellung:
- `--session isolated` (nicht main)
- `--message "..."` (nicht system-event)
- `--deliver --channel signal --to <phone_number>`
Siehe auch: `~/clawd/.learnings/LEARNINGS.md` (LRN-20260126-001)
### News Digest Cron-Jobs
⚠️ **Bei Änderungen an News-Präferenzen IMMER die Cron-Jobs anpassen!**
Aktuelle Jobs:
- `Morgendliche News (Werktags)` — 07:00 Mo-Fr, MIT Pendler-Info
- `Morgendliche News (Wochenende)` — 08:00 Sa+So, OHNE Pendler-Info
Präferenzen stehen in `USER.md` unter "News Digest Präferenzen".
## Generierte Bilder verschicken
Nach dem Generieren von Bildern (DALL-E, Gemini, etc.) immer das Bild auch **direkt im Chat schicken** — nicht nur mit `open` öffnen!
```typescript
// Signal
message({
action: "send",
channel: "signal",
target: "<phone_number>", // z.B. +491637010723
filePath: "/pfad/zum/bild.png",
caption: "Optionaler Text dazu"
})
```
Der User sieht das Bild sonst nicht wenn er nicht am Mac sitzt!
## Coding Agents (Codex, Claude, etc.)
**Immer in tmux starten!** So kann Bastian jederzeit zuschauen:
```bash
# Session erstellen und Agent starten
tmux new-session -d -s <projektname> -c /pfad/zum/projekt
tmux send-keys -t <projektname> 'codex --full-auto' Enter
# Bastian kann dann zuschauen mit:
# tmux attach -t <projektname>
```
**Bei Codex:** Nach dem Prompt immer ein separates Enter senden!
```bash
tmux send-keys -t session 'Mein Prompt hier' Enter
# Warten bis Text erscheint, dann:
tmux send-keys -t session Enter # <-- Bestätigung!
```
Codex wartet auf Bestätigung bevor es losläuft.
## Package Manager
- **Immer `pnpm` statt `npm` verwenden!**
- Global install: `pnpm add -g <package>`
- Local install: `pnpm add <package>`
## TTS / Sprachausgabe
- **Provider:** ElevenLabs
- **Stimme:** Will (`bIHbv24MWmeRgasZH58o`) — entspannt, optimistisch, chill
- **Alternativen:** Chris (casual), Brian (tief), Eric (smooth), Daniel (britisch, formal)
- **Backup:** OpenAI mit "echo" (männlich, schnell)
### Auto-Play bei Signal
Wenn Bastian oder Jasmin eine Sprachnachricht anfragt und die Nachricht von **Signal** kam:
1. Voice-Datei generieren
2. Auf Signal schicken
3. **Gleichzeitig** im Hintergrund abspielen:
```bash
nohup afplay /path/to/audio.mp3 > /dev/null 2>&1 &
```
So hören sie die Nachricht direkt ohne klicken! 🎧
Skills define *how* tools work. This file is for *your* specifics — the stuff that's unique to your setup.
## Sprachnachrichten / Voice Transcription
**Automatisch via Clawdbot!** 🎤
- Konfiguriert in `tools.media.audio` (Gateway Config)
- Provider: OpenAI `gpt-4o-mini-transcribe`
- Sprachnachrichten werden automatisch transkribiert bevor sie bei mir ankommen
- Ich sehe `[Audio] Transcript: "..."` statt rohe Audio-Dateien
## Trello
- **Board "Ox Creek":** `65e4430389494d27d1691bb0`
- **Bei neuen Karten:** Immer Bastian als Mitglied hinzufügen (nur Bastian, nicht automatisch Jasmin)
- Bastian: `5a0b5d006ff181f7b23842f6`
- Jasmin: `5a0b5da354e70f2da859e083`
- **Jasmin Signal:** `+4917698343124`
- **Bastian Signal:** `+491637010723`
## Git
- **Author:** `James <clawd@noxware.de>` (meine Commits)
- Bastians Commits: `Bastian (BaM) <git@noxware.de>`
## Signal (James' eigener Account)
- **Nummer:** +4915733309147
- **PIN:** 847291 (Registration Lock)
- **Hinweis:** Temporäre Nummer ohne SMS-Zugang — bei Logout kein Weg zurück!
## Telegram
- **Bot-Username:** @SpecialAgentJamesBot
- **Bot-Token:** In Config (`channels.telegram.botToken`)
- **DM-Policy:** Pairing (neue Nutzer brauchen Freigabe)
## Peekaboo (macOS UI Automation)
**Bridge Socket:** `~/Library/Application Support/clawdbot/bridge.sock`
### ⚠️ Wichtiger Workaround: App-Fokussierung
Der `--app` Parameter bei Peekaboo hängt bei Focus-Operationen über die Clawdbot Bridge.
**❌ Funktioniert NICHT zuverlässig:**
```bash
peekaboo click --app Signal --coords 200,185 --bridge-socket "..."
peekaboo type "text" --app Signal --bridge-socket "..."
```
**✅ Stattdessen — erst mit `open -a` fokussieren:**
```bash
# 1. App fokussieren mit macOS open
open -a "Signal"
sleep 0.5
# 2. Dann Peekaboo OHNE --app Parameter
peekaboo see --path /tmp/screenshot.png --bridge-socket "~/Library/Application Support/clawdbot/bridge.sock"
peekaboo click --coords 200,185 --bridge-socket "..."
peekaboo click --snapshot <ID> --on elem_31 --bridge-socket "..."
```
### Standard-Workflow
```bash
# App öffnen & fokussieren
open -a "AppName" && sleep 0.5
# Screenshot mit Element-Erkennung
peekaboo see --annotate --path /tmp/app.png --bridge-socket "~/Library/Application Support/clawdbot/bridge.sock"
# Auf erkanntes Element klicken
peekaboo click --snapshot <SNAPSHOT-ID> --on elem_XX --bridge-socket "..."
# Oder auf Koordinaten klicken
peekaboo click --coords X,Y --bridge-socket "..."
# Text tippen
peekaboo type "Hello World" --bridge-socket "..."
```
### Insider-Info: Bastian & Jasmin
- **"aaaaAaaAaah"** = Liebesgesang 😂💕 (als Text schicken, TTS kann das nicht)
## Home Assistant
Credentials sind in der Gateway-Config unter `env.vars` gespeichert (`HA_URL`, `HA_TOKEN`).
### Smart EQ (E-Auto) Ladeüberwachung
- **Sensor:** `sensor.aqara_plug_car_charger_e_smart_power`
- **Typ:** Aqara Smart Plug mit Leistungsmessung
- **Einheit:** Watt (W)
- **Logik:**
- `> 0W` = Smart lädt ✅
- `= 0W` = Nicht eingesteckt oder voll
- **Cron-Jobs:** `smart-einstecken-18` (18:00), `smart-einstecken-20` (20:00)
- Prüfe Sensor vor Erinnerung — nur erinnern wenn 0W
### Staubsauger-Roboter: Sucky
- **Entity:** `vacuum.sucky` (Deebot)
- **Sensoren:** `sensor.sucky_batterie`, `sensor.sucky_flache_gereinigt`, etc.
- **Räume:** WC (1), Gästezimmer (2), Küche (3), Flur (4), Wohnzimmer (5)
- **Modi:** vacuum_and_mop, quiet, normal, max, max_plus
## Browser-Präferenzen
- **Cookie-Banner:** Immer "Alle akzeptieren" klicken (Bastians Erlaubnis)
## 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.
---
Add whatever helps you do your job. This is your cheat sheet.