# 2026-09-19 — Ashbot Gate3 dispatch stumble (SOCKS + false "started") ## What happened Anthony waited ~10+ min with "Nothing." CoS had said Ashbot was dispatched. She never ran. No iMessage. No job folder at first. ## Root causes (ordered) 1. **Silent false start:** CoS reported "dispatching" before the relay actually succeeded. First attempt died in ~5s on Tailscale SOCKS (`AssertionError` in socks5 handshake). Job folder never created. User saw silence. 2. **Detached Windows launch unreliable over SSH:** `start /B` and `Start-Process` of a `.bat` did not execute (empty `_launch.log`, no BAT_START). Looked "dispatched" when nothing ran. 3. **Wrong default profile:** Desktop `active_profile` was `jimmy` until CoS explicitly wrote `ashbot`. Env `HERMES_PROFILE` alone is not enough — set `active_profile` file too. 4. **Argv mangling risk:** Long briefs via `cli.py -q ""` still risky on Windows. Prefer file brief (`_cos_brief.txt`) read by launcher. ## Locked workflow (Ashbot / any Hermes oneshot from CoS) 1. **Prove path before claiming start** - SOCKS `:1055` up → SSH `fight@100.64.0.1` OK → SFTP write job folder → only THEN tell Anthony "started." 2. **Job folder first (evidence before inference)** - Create `hermes\workspace\\\YYYY-MM-DD\` - Write `STATUS.md` (`starting`), `_cos_brief.txt`, set `ACTIVE_JOB.txt`, set `active_profile` to target seat. 3. **Launch pattern (proven)** - SSH **sync** exec of launcher Python (real `cpython-3.11.16\python.exe` + `_launch.py`). - Do **not** rely on `start /B` / `Start-Process` for oneshots until proven with log line `BAT_START`. - Launcher must log `LAUNCH … pid=` into `_launch.log` and flip STATUS to `working` with pid. 4. **Ashbot iMessage contract (non-negotiable)** - Brief first action: iMessage Anthony that directions received / work starting. - Brief last action: iMessage done + evidence path. - CoS also pings Grok Bot chat on true dispatch (folder+pid confirmed). 5. **No silent waits** - Mid-job: STATUS ping ~every 5 min from `STATUS.md` until `done`/`blocked`. - If launch fails: ping Anthony immediately with failure mode (SOCKS/SSH/profile/exit), not after they ask "Nothing." ## What worked - File brief + `_launch.py` + SSH sync channel → `LAUNCH2 ashbot chars=… active=ashbot` + `pid=` + STATUS `working`. - Method A fallback: real Python + `cli.py` (not `hermes.exe` over SSH). ## Follow-ups - [ ] Add this into Gitea `docs/agents/` or org v1 relay section when next syncing. - [ ] Optional: STATUS watcher routine only when `ACTIVE_JOB.txt` points at a live job. - [ ] Re-test detached launch later; until then SSH-sync is the standard. ## Second stumble same job — iMessage never left Ashbot After the job *did* run (13:36–13:52 PT), both required iMessages failed: - Photon free-tier shared line: `"Target not allowed for this project"` - Free lines can only **reply** after Anthony texts that number first that day. - Inbound gateway was healthy; outbound blocked until he opens the thread. ### Locked rule (Ashbot ↔ Anthony iMessage) 1. Before expecting Ashbot start/done texts: Anthony sends any iMessage to the Ashbot Photon number (opens the free-tier allow). 2. If CoS needs Anthony notified and iMessage is blocked: CoS pings Grok Bot chat immediately (do not wait on Photon). 3. Treat "iMessage contract" as best-effort on free tier; chat ping is the guaranteed channel. ## Third stumble — email capability gap Ashbot drafted `email-birdeye.txt` but could not send (`send_mail` not available in that oneshot session) despite Anthony enabling email on the profile earlier. - Locked: after enabling a Hermes capability, CoS verifies it in the *oneshot* path (same env/profile as Method A), not only Desktop interactive. - Until verified: CoS routes "send this draft" as Gatekeeper click / Anthony relay, or re-brief with explicit send tool check. ## Job outcome (for the record) - Birdeye: stale La Mae @ Flying C confirmed; email draft ready, not sent. - FindGlocal: already canonical → WONT-DO. - hairsalonsinusa: Cloudflare 403 → WONT-DO (needs browser retry). ## Fourth stumble — CoS silent after done Birdeye send finished ~14:28 PT (STATUS done, email accepted). CoS did not ping Anthony until he wrote "It's been a long time" (~14:39). ### Locked rule On Hermes `done`/`blocked`, CoS pings Grok Bot chat **immediately** with TLDR + evidence path. Mid-job 5-min pings while `working`; terminal ping is mandatory, not optional.