Tailscale Network
Device Tailscale IP LAN IP Status Samsung S23 Ultra 100.124.223.117 - Online DESKTOP-F9KSPPP (Sozo PC) 100.83.112.84 192.168.68.100 Online IDA PC 100.103.118.9 192.168.68.110 Online (WinRM 5985 + Ollama :11434 + SMB share) MSI Laptop 100.107.39.23 192.168.68.111 Online (WinRM 5985 + Ollama :11434)
Tailscale Dependency (2026-05-11)
When Tailscale is OFF: Both SSH/SCP to PC AND Obsidian Local REST API become unreachable
Symptom: News podcast cron fails at “upload script to PC” step with connection timeout/hang
Recovery: User manually reconnects Tailscale on PC → workflow resumes from failed step
Confirmed (2026-05-11): Tailscale down → ssh sozo@100.83.112.84 hangs; Obsidian API curl returns connection timeout
Note: PC can still reach external internet when Tailscale is off (LAN connectivity maintained)
SSH Access
To PC: ssh -i ~/.ssh/id_ed25519 sozo@100.83.112.84
Key type: ed25519
User: Sozo (Administrators group ✓)
Status: Working (CRLF issue resolved)
PC may sleep at night — SSH timed out at ~22:00 MYT (2026-05-10 evening session)
Windows PC SSH Details
PowerShell GBK Display + NTFS UTF-16 Encoding (2026-05-11)
Symptom: PowerShell displays Chinese characters in file paths as garbled (e.g., News-2026-05-11-������.mp3)
Root cause: PowerShell console uses GBK/CP936 to display paths, but NTFS stores filenames as UTF-16 LE
The file is actually correct — Copy-Item with the garbled path STILL WORKS because the underlying filesystem API uses UTF-16
Workaround: Use Copy-Item with garbled display path → copy to clean ASCII filename → download via SCP
Do NOT use: scp host:"D:\path\*.mp3" glob pattern with garbled filename — SCP glob doesn’t work
PowerShell Working Directory
Default: D:\ (not user’s home directory)
When SSH connects to PC via ssh sozo@100.83.112.84 "powershell ...", PowerShell starts in D:\
SCP from Windows uses C:\hermes_wiki\ as staging — files must be in that directory for SCP to work
Working: sozo@100.83.112.84:\hermes_wiki\file (backslash at start, no drive letter)
Fails: sozo@100.83.112.84:C:\path\file (drive letter format)
Unix-style paths (/d/file) do NOT work from Windows SSH environment
File Paths
Path Works via SCP? Notes C:\hermes_wiki\✅ Yes Best for temp files H:\My Drive\...\Obsidian Vault\❌ No Must use copy command D:\hermes\sessions\❌ No Only via OpenClaw/SMB
Connected Services
Service Platform Status Hermes Agent Termux Running Hermes WebUI localhost:5173 Accessible Hermes Backend API localhost:9119 Running OpenClaw Gateway PC:18791 Needs restart Paperclip PC D:\paperclip Running Docker Desktop PC Installed
Google Workspace
Primary account: ida.czia@gmail.com
OAuth token: ~/.hermes/google_token.json (refreshed)
OAuth scopes: forms.body + drive.file (both required for Forms API)
Client secret: ~/.hermes/google_client_secret.json
Secondary account: tttttttttze@gmail.com
OAuth token: ~/.hermes/google_token_tttttttttze.json
Client secret: ~/.hermes/google_client_secret_tttttttttze.json
OAuth Token Expiry (2026-05-10)
Access token expires in ~1 hour — session at 22:00 had expired token (issued ~7hrs earlier at ~15:00)
Token refresh via oauth2.googleapis.com/token succeeds, BUT Forms API may still return 401
Refresh may need full re-auth if token revoked — watch for 401 on Forms API after refresh
client_secret.json on Termux IS valid (914687008998-vkogt2m5jn5s5a3qurj1o1nntfmklmr7.apps.googleusercontent.com)
Forms API: https://forms.googleapis.com/v1/forms
Requires: forms.body + drive.file scopes (drive for photo hosting)
Limitation: No native image options — photos must be hosted on Drive and linked via text
Interior Design Poll Form (2026-05-10): 1FAIpQLScjAaZ2Qmjg6yCvYn9Z7RNZVzX8VgnAubMU9gkjNe4sLgty6Q
8 sections × 5 options = 40 questions
Sections: 客厅/厨房/卧房/衣橱/饭厅 + 3 kids rooms
Google Drive
Obsidian vault folder ID: 1jR76SbioF1u2H-hqca-TejjJ1_d4KDOI
Jakephone folder ID: 1bYsAY4SZcFFmtUtvJak3LWyzOR9OW22N
Obsidian Local REST API
API Key : 047e84eb941910b7ae221ea6b458fbd6c9b2bbfbeab654e05a59893520cd29f9
Base : http://100.83.112.84:27123
Endpoint : POST /vault/{filename}.md
Method : POST with Content-Type: text/markdown header
认证 : Authorization: Bearer {key}
注意 : POST 返回空不代表成功,需 GET 验证内容
已知错误 : "Could not determine home directory" — 改用 SCP fallback
Ports
Port Service 8000 Hermes Gateway 9119 Hermes Backend API 5173 Hermes Web UI 18789 OpenClaw Web UI 18791 OpenClaw Gateway 27123 Obsidian Local REST API 5432 PostgreSQL (if installed) 8080 Pokemon Live Server (pokemon_live.py) — crashed 2026-05-05
Pokemon Live (Windows PC)
Service Info
ROM path: D:\Games\Pokemon\Pokemon - Red Version (USA, Europe) (SGB Enhanced).gb
Script: D:\pokemon_live.py
Port: 8080
Task name: PokemonLive (scheduled task via schtasks)
Python venv: C:\Users\Sozo\pokemon-agent\venv\Scripts\python.exe
Crash Recovery (2026-05-05)
Symptom: Process 16784 in CloseWait state with many connections, then Listen but refusing connections
Fix: Kill and restart via schtasks /Run /I /TN PokemonLive
Verified: schtasks /Run /I successfully starts task in Session 1 (user’s interactive session)
Cron Job Network Isolation (2026-05-06)
Cron sessions run in isolated network namespace on Termux
Cannot reach from cron: Obsidian Local REST API (100.83.112.84:27123), SSH to PC, SCP to PC
Can reach from cron: External internet (YouTube, HuggingFace, etc.)
Workaround: Use SCP+PS1+execute workflow or save to local draft for manual sync
Symptom: Obsidian API curl returns connection timeout; SSH/SCP hangs at connection
Windows Defender Exclusions (2026-05-08)
C:\hermes_wiki\hermes-gateway — Hermes gateway staging directory
Purpose: Prevents Windows Defender from scanning Hermes-related temp files
Telegram
PC Hermes bot: @hermesjake_bot
Bot token (Termux): ~/.hermes/.env → TELEGRAM_BOT_TOKEN
Bot token (PC): D:\\hermes\\.env → TELEGRAM_BOT_TOKEN
Ti Tze Czia: chat_id 5671991810
Old Termux bot token: 8766595133:AAH...iqN_BpP — unauthorized (bot was deleted/blocked)
PC Hermes bot can send messages to Ti Tze Czia via curl.exe PowerShell
Termux Package Notes
sqlite3 CLI not installed — only libsqlite library present
hermes.db is empty (0 bytes) — sqlite3 check in scripts will fail silently
This affects: check_recent_chat.sh (falls through to file-based check)
sozo-todos.json BOM Issue (2026-05-07)
File: D:\\hermes\\sessions\\sozo-todos.json
Issue: File has UTF-8 BOM (\xef\xbb\xbf)
Symptom: PowerShell Get-Content defaults to ANSI, Chinese chars become mojibake
Fix: Use encoding='utf-8-sig' in Python or -Encoding utf8 in PowerShell
Verified: python -c "import json; print(json.load(open('D:\\\\hermes\\\\sessions\\\\sozo-todos.json', encoding='utf-8-sig')))" works
Sessions directory: ~/.hermes/sessions/ (~162 .jsonl files)
Original stat -c %Y per file took ~0.2s on this filesystem (slow FUSE/exFAT)
FIXED (2026-05-04 06:xx): Replaced stat loop with find -mmin -180
New script runtime: 0.062s (was 31s) — 500x faster
check_recent_chat.sh now well under cron timeout
Pokemon Live Server Update (2026-05-05 05-06h)
Status: STABLE ✅ (was crashed, now running with pyboy_lock fix)
Root cause: Concurrent access - background screenshot thread + button_press both accessing PyBoy
Fix: Added pyboy_lock = threading.Lock() to D:\pokemon_live.py
Verified: 5+ consecutive A-button presses work without timeout
Battle flag (0xCC28): Value=1 means “event in progress” (includes dialogue), NOT actual battle
Double process issue: port 8080 still shows 2 LISTENING processes (unresolved)
Web Scraping Limitations from Termux (2026-05-10)
Most Malaysian websites block curl requests from Termux
Blocked sites: qcosa.com, homify.my, renovationlady.com, bighome.com.my (return empty/0-length or 403)
Accessible alternatives: Houzz Australia (houzz.com.au), Space Furniture Singapore, international design sites
Fallback approach: When Malaysian sites are blocked:
Compile content from domain knowledge + accessible international sources
Houzz Australia has accessible interior design style content
Use curated content document as NotebookLM source
Tailscale Network
Device Tailscale IP LAN IP Status Samsung S23 Ultra 100.124.223.117 - Online DESKTOP-F9KSPPP (Sozo PC) 100.83.112.84 192.168.68.100 Online IDA PC 100.103.118.9 192.168.68.110 Online (WinRM 5985 + Ollama :11434 + SMB share) MSI Laptop 100.107.39.23 192.168.68.111 Online (WinRM 5985 + Ollama :11434)
Tailscale Dependency (2026-05-11, updated 2026-05-15)
When Tailscale is OFF: Both SSH/SCP to PC AND Obsidian Local REST API become unreachable
Symptom: News podcast cron fails at “upload script to PC” step with connection timeout/hang
Recovery: User manually reconnects Tailscale on PC → workflow resumes from failed step
Confirmed (2026-05-11): Tailscale down → ssh sozo@100.83.112.84 hangs; Obsidian API curl returns connection timeout
Note: PC can still reach external internet when Tailscale is off (LAN connectivity maintained)
⚠️ Tailscale is NOT a binary on/off — it can be intermittent (2026-05-15):
PC was REACHABLE at 07:23 (待办摘要 cron successfully read D:\\hermes\\sessions\\sozo-todos.json and sent Telegram)
PC became UNREACHABLE by 07:30 (news pipeline, 待办摘要 morning job, 全能新闻实验室 all failed)
PC still unreachable at 14:00 (Singtel Digi reminder failed with SSH timeout)
Tailscale became intermittent again mid-day — OpenClaw startup required Tailscale to be connected
Lesson: Jobs that depend on PC connectivity should have local fallbacks. News pipeline does (local edge-tts). 待办摘要 morning job doesn’t (requires PC access for canvas_summary.json).
OpenClaw npm Package Corruption (2026-05-15)
Symptom
D:\OpenClaw_Home\node_modules\openclaw\dist\ contained only extensions/ folder (1142 bytes total)
Actual JS files (index.js, openclaw.mjs, etc.) were completely missing
Result: OpenClaw completely non-functional — npx openclaw would fail immediately
Fix
# Reinstall openclaw locally in D:\OpenClaw_Home
cd D:\OpenClaw_Home
npm install openclaw
Startup Command (Verified 2026-05-15)
# From D:\OpenClaw_Home directory
npx openclaw gateway --port 18789
⚠️ Do NOT use global npm install
npm install -g openclaw does NOT work — global npm is empty on this PC. Always install locally in D:\OpenClaw_Home.
SSH Access
To PC: ssh -i ~/.ssh/id_ed25519 sozo@100.83.112.84
Key type: ed25519
User: Sozo (Administrators group ✓)
Status: Working (CRLF issue resolved) — but see Port Blockage below
PC may sleep at night — SSH timed out at ~22:00 MYT (2026-05-10 evening session)
⚠️ All TCP Ports Blocked (2026-05-16)
Discovery: Port scan from Termux Hermes shows ALL inbound TCP ports on Sozo PC are firewalled/blocked
Only ICMP (ping) works
Scanned and failed: 22 (SSH), 80 (HTTP), 443 (HTTPS), 445 (SMB), 3389 (RDP), 5900 (VNC), 5985/5986 (WinRM), 8080
Root cause: Windows Firewall or security software blocking all inbound connections
Fix required: Someone must be physically at the PC to run:
New-NetFirewallRule - DisplayName "OpenSSH" - Direction Inbound - Protocol TCP - LocalPort 22 - Action Allow
This is a physical access problem — cannot be fixed remotely
Windows PC SSH Details
PowerShell GBK Display + NTFS UTF-16 Encoding (2026-05-11)
Symptom: PowerShell displays Chinese characters in file paths as garbled (e.g., News-2026-05-11-������.mp3)
Root cause: PowerShell console uses GBK/CP936 to display paths, but NTFS stores filenames as UTF-16 LE
The file is actually correct — Copy-Item with the garbled path STILL WORKS because the underlying filesystem API uses UTF-16
Workaround: Use Copy-Item with garbled display path → copy to clean ASCII filename → download via SCP
Do NOT use: scp host:"D:\path\*.mp3" glob pattern with garbled filename — SCP glob doesn’t work
PowerShell Working Directory
Default: D:\ (not user’s home directory)
When SSH connects to PC via ssh sozo@100.83.112.84 "powershell ...", PowerShell starts in D:\
SCP from Windows uses C:\hermes_wiki\ as staging — files must be in that directory for SCP to work
Working: sozo@100.83.112.84:\hermes_wiki\file (backslash at start, no drive letter)
Fails: sozo@100.83.112.84:C:\path\file (drive letter format)
Unix-style paths (/d/file) do NOT work from Windows SSH environment
File Paths
Path Works via SCP? Notes C:\hermes_wiki\✅ Yes Best for temp files H:\My Drive\...\Obsidian Vault\❌ No Must use copy command D:\hermes\sessions\❌ No Only via OpenClaw/SMB
Connected Services
Service Platform Status Hermes Agent Termux Running Hermes WebUI localhost:5173 Accessible Hermes Backend API localhost:9119 Running OpenClaw Gateway PC:18789 ✅ Running (2026-05-15) Paperclip PC D:\paperclip Running Docker Desktop PC Installed
Google Workspace
Primary account: ida.czia@gmail.com
OAuth token: ~/.hermes/google_token.json (refreshed)
OAuth scopes: forms.body + drive.file (both required for Forms API)
Client secret: ~/.hermes/google_client_secret.json
Secondary account: tttttttttze@gmail.com
OAuth token: ~/.hermes/google_token_tttttttttze.json
Client secret: ~/.hermes/google_client_secret_tttttttttze.json
OAuth Token Expiry (2026-05-10)
Access token expires in ~1 hour — session at 22:00 had expired token (issued ~7hrs earlier at ~15:00)
Token refresh via oauth2.googleapis.com/token succeeds, BUT Forms API may still return 401
Refresh may need full re-auth if token revoked — watch for 401 on Forms API after refresh
client_secret.json on Termux IS valid (914687008998-vkogt2m5jn5s5a3qurj1o1nntfmklmr7.apps.googleusercontent.com)
Forms API: https://forms.googleapis.com/v1/forms
Requires: forms.body + drive.file scopes (drive for photo hosting)
Limitation: No native image options — photos must be hosted on Drive and linked via text
Interior Design Poll Form (2026-05-10): 1FAIpQLScjAaZ2Qmjg6yCvYn9Z7RNZVzX8VgnAubMU9gkjNe4sLgty6Q
8 sections × 5 options = 40 questions
Sections: 客厅/厨房/卧房/衣橱/饭厅 + 3 kids rooms
Google Drive
Obsidian vault folder ID: 1jR76SbioF1u2H-hqca-TejjJ1_d4KDOI
Jakephone folder ID: 1bYsAY4SZcFFmtUtvJak3LWyzOR9OW22N
Obsidian Local REST API
API Key : 047e84eb941910b7ae221ea6b458fbd6c9b2bbfbeab654e05a59893520cd29f9
Base : http://100.83.112.84:27123
Endpoint : POST /vault/{filename}.md
Method : POST with Content-Type: text/markdown header
认证 : Authorization: Bearer {key}
注意 : POST 返回空不代表成功,需 GET 验证内容
已知错误 : "Could not determine home directory" — 改用 SCP fallback
Ports
Port Service 8000 Hermes Gateway 8642 Hermes Gateway (PC Python agent — alternative port) 9119 Hermes Backend API 5173 Hermes Web UI 18789 OpenClaw Web UI (HTTP) 18791 OpenClaw Browser Control ( CDP) 27123 Obsidian Local REST API 5432 PostgreSQL (if installed) 8080 Pokemon Live Server (pokemon_live.py) — crashed 2026-05-05
Pokemon Live (Windows PC)
Service Info
ROM path: D:\Games\Pokemon\Pokemon - Red Version (USA, Europe) (SGB Enhanced).gb
Script: D:\pokemon_live.py
Port: 8080
Task name: PokemonLive (scheduled task via schtasks)
Python venv: C:\Users\Sozo\pokemon-agent\venv\Scripts\python.exe
Crash Recovery (2026-05-05)
Symptom: Process 16784 in CloseWait state with many connections, then Listen but refusing connections
Fix: Kill and restart via schtasks /Run /I /TN PokemonLive
Verified: schtasks /Run /I successfully starts task in Session 1 (user’s interactive session)
Cron Job Network Isolation (2026-05-06)
Cron sessions run in isolated network namespace on Termux
Cannot reach from cron: Obsidian Local REST API (100.83.112.84:27123), SSH to PC, SCP to PC
Can reach from cron: External internet (YouTube, HuggingFace, etc.)
Workaround: Use SCP+PS1+execute workflow or save to local draft for manual sync
Symptom: Obsidian API curl returns connection timeout; SSH/SCP hangs at connection
⚠️ Skill loader transient failures (2026-05-15):
web skill exists at ~/.hermes/skills/web but was skipped during daily-news-podcast-pipeline cron execution
Cron job listed web skill but skill loader returned “skill(s) not found and skipped”
Not a persistent issue — skill files exist, likely a timing/loading order issue in the cron job runner
Monitor: if news pipeline fails to search web content, check skill loader logs
Windows Defender Exclusions (2026-05-08)
C:\hermes_wiki\hermes-gateway — Hermes gateway staging directory
Purpose: Prevents Windows Defender from scanning Hermes-related temp files
Telegram
PC Hermes bot: @hermesjake_bot
Bot token (Termux): ~/.hermes/.env → TELEGRAM_BOT_TOKEN
Bot token (PC): D:\\hermes\\.env → TELEGRAM_BOT_TOKEN
Ti Tze Czia: chat_id 5671991810
Old Termux bot token: 8766595133:AAH...iqN_BpP — unauthorized (bot was deleted/blocked)
PC Hermes bot can send messages to Ti Tze Czia via curl.exe PowerShell
Termux Package Notes
sqlite3 CLI not installed — only libsqlite library present
hermes.db is empty (0 bytes) — sqlite3 check in scripts will fail silently
This affects: check_recent_chat.sh (falls through to file-based check)
sozo-todos.json BOM Issue (2026-05-07)
File: D:\\hermes\\sessions\\sozo-todos.json
Issue: File has UTF-8 BOM (\xef\xbb\xbf)
Symptom: PowerShell Get-Content defaults to ANSI, Chinese chars become mojibake
Fix: Use encoding='utf-8-sig' in Python or -Encoding utf8 in PowerShell
Verified: python -c "import json; print(json.load(open('D:\\\\hermes\\\\sessions\\\\sozo-todos.json', encoding='utf-8-sig')))" works
Sessions directory: ~/.hermes/sessions/ (~162 .jsonl files)
Original stat -c %Y per file took ~0.2s on this filesystem (slow FUSE/exFAT)
FIXED (2026-05-04 06:xx): Replaced stat loop with find -mmin -180
New script runtime: 0.062s (was 31s) — 500x faster
check_recent_chat.sh now well under cron timeout
Pokemon Live Server Update (2026-05-05 05-06h)
Status: STABLE ✅ (was crashed, now running with pyboy_lock fix)
Root cause: Concurrent access - background screenshot thread + button_press both accessing PyBoy
Fix: Added pyboy_lock = threading.Lock() to D:\pokemon_live.py
Verified: 5+ consecutive A-button presses work without timeout
Battle flag (0xCC28): Value=1 means “event in progress” (includes dialogue), NOT actual battle
Double process issue: port 8080 still shows 2 LISTENING processes (unresolved)
Web Scraping Limitations from Termux (2026-05-10)
Most Malaysian websites block curl requests from Termux
Blocked sites: qcosa.com, homify.my, renovationlady.com, bighome.com.my (return empty/0-length or 403)
Accessible alternatives: Houzz Australia (houzz.com.au), Space Furniture Singapore, international design sites
Fallback approach: When Malaysian sites are blocked:
Compile content from domain knowledge + accessible international sources
Houzz Australia has accessible interior design style content
Use curated content document as NotebookLM source