Go to file
type-two 4aa7e19825 fix(money-safety): 4 confirmed bugs from adversarial review + Animate guard
Adversarial review (21 agents, verify layer refuted the false positives) confirmed 4:

CRITICAL — double-generation on requeue (content.js): submitEditor commits 15 credits,
  but if the visual stuck-signals lag under load the task requeue+reloads and re-submits
  (promptEchoed unreliable across reload) → up to 4×15=60 credits for one task. Fix:
  durable per-task 'submitted_<id>' marker persisted BEFORE the stuck-check, checked on
  entry, cleared only on terminal status (centralized in reportCompletion). A rare
  genuine submit-failure now times out and fails (retryable) instead of paying twice.

HIGH — transient harvest miss permanently blacklisted the asset: every miss path did
  seen.add()+persist, so a hover/menu race wrote a never-downloaded tile to storage and
  the seen-guard skipped it forever. Fix: transient misses go to an in-memory
  missedThisPass set (retried next run); ONLY confirmed downloads are persisted.

MEDIUM — Try-again re-ran succeeded gens: a spurious 'Something went wrong' banner
  co-occurring with a lagging-but-real asset auto-clicked Try-again (15cr each, ×3).
  Fix: settle + re-check assets AND new completion-message before clicking; cap 3→1.

MEDIUM — seen-list slice(-3000) evicted oldest done URLs on big libraries → re-download.
  Fix: cap raised to 20000 (and only confirmed downloads accumulate now).

+ belt-and-suspenders: findTileMenuButton fallback can never land on Animate/Like/♥/redo
  (a stray Animate click = paid image→video gen). Proven by unit test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 10:04:38 +10:00
banks feat: bake in the by-hand reliability ritual — agent-ready wait, stop-square verify, hard-refresh requeue 2026-07-07 17:42:15 +10:00
.gitignore Flow rinse: browser downloads, fast-fail, autoStart, launcher + self-healing launchd 2026-07-06 01:20:32 +10:00
background.js fix(harvest): four verified stages — pill wait, menu wait, jiggle-hover flyout, download-event confirmation 2026-07-08 09:03:25 +10:00
content.js fix(money-safety): 4 confirmed bugs from adversarial review + Animate guard 2026-07-08 10:04:38 +10:00
flowclient.py Flow rinse: browser downloads, fast-fail, autoStart, launcher + self-healing launchd 2026-07-06 01:20:32 +10:00
games.monsterrobot.flowrinse.plist Flow rinse: browser downloads, fast-fail, autoStart, launcher + self-healing launchd 2026-07-06 01:20:32 +10:00
install.sh Flow rinse: browser downloads, fast-fail, autoStart, launcher + self-healing launchd 2026-07-06 01:20:32 +10:00
launch.sh Flow rinse: browser downloads, fast-fail, autoStart, launcher + self-healing launchd 2026-07-06 01:20:32 +10:00
local_server_example.py feat: bake in the by-hand reliability ritual — agent-ready wait, stop-square verify, hard-refresh requeue 2026-07-07 17:42:15 +10:00
manifest.json Flow rinse: browser downloads, fast-fail, autoStart, launcher + self-healing launchd 2026-07-06 01:20:32 +10:00
popup.css Flow Auto-Pilot: trusted-CDP input driver, local queue server, 91-prompt bank 2026-07-05 22:44:10 +10:00
popup.html feat: Prompt Mode / DL Mode split in the popup 2026-07-08 09:22:06 +10:00
popup.js feat: Prompt Mode / DL Mode split in the popup 2026-07-08 09:22:06 +10:00
queue.jsonl content.js: auto-click "Try again" on Flow's transient error; fix 2 queue ratios 2026-07-06 01:40:25 +10:00
README.md Flow rinse: browser downloads, fast-fail, autoStart, launcher + self-healing launchd 2026-07-06 01:20:32 +10:00

Flow Auto-Pilot

A Brave extension + local queue that drains a prompt bank through Google Labs Flow (Nano Banana 2 images, Veo videos) on the webui-only credits you can't reach via API. The extension types prompts into the Flow agent box with trusted CDP input (Flow ignores synthetic DOM events), waits for the media grid to grow, harvests the new asset URLs, and downloads them with the page's session cookies.

Not headless: Brave must be running and logged into the Flow account. But once the tab is open with Auto-start ticked, it runs unattended.

Parts

File Role
manifest.json, background.js, content.js, popup.* the Brave MV3 extension
local_server_example.py queue server on :8017queue.jsonl in, results.jsonl out
queue.jsonl the prompt bank (one task per line)
flowclient.py enqueue() / wait_for() so a game project can request assets
launch.sh start server + keep Mac awake + open/focus one Flow tab
install.sh + games.monsterrobot.flowrinse.plist self-healing launchd agent

Run it by hand

./launch.sh https://labs.google/fx/tools/flow/project/<PROJECT_ID>

Server comes up (under caffeinate), Brave focuses the Flow tab, and with Auto-start ticked the rinse begins. Files land in ~/Downloads/flowrinse/<category>/.

Run it unattended (launchd)

./install.sh

Fires launch.sh at login and every 10 min. Because launch.sh is idempotent (port check + tab reuse), the repeat runs are no-ops that self-heal a dead server or a closed tab.

macOS TCC gotcha (same as the vault-backup job): launchd can't execute scripts inside ~/Documents, so install.sh runs a copy at ~/Library/Application Support/flowrinse/. That copy owns the live queue.jsonl / results.jsonl / downloads/ once the agent is running. Re-run ./install.sh after editing launch.sh or local_server_example.py to resync the copy. First run pops one Automation prompt (allow control of Brave) — click Allow on the rig's screen.

launchctl kickstart -k gui/$(id -u)/games.monsterrobot.flowrinse   # run now
launchctl bootout   gui/$(id -u)/games.monsterrobot.flowrinse      # stop it

Enqueue from another project

from flowclient import enqueue
enqueue("Sierra EGA record-store back room, 160x168, 16-color",
        kind="image", category="morp2_bg")

Or over the wire: POST http://localhost:8017/enqueue with {"prompt","kind","model","category","dest"}.