Session Report — Nina takes local control; finishing the inference-engineering LinkedIn post

2026-07-16 15:03 (+0800) · repo C:/Users/valte/Code/valter · branch main · session nina

Summary

This session transferred Nina — Valter's social-media-manager bot on the roots-co Hermes fleet (bot-social-media-manager, Opus 4.8, Telegram-connected) — into this workspace to operate as her locally: I draft and prep platform-native content in her voice, while posting stays gated (nothing publishes without Valter's explicit per-post OK; I never touch the accounts or her browser profiles).

The chosen first job: finish her blocked Jul-14 LinkedIn post — an inference-engineering thought-leader piece ("the CPU should never block the GPU" + "measure before you speculate"). Its copy was already finalized; it was stuck only on the Xiaohei illustration because the fleet bot's browser is an unauthenticated cloud session that can't reach Valter's Gemini. I retrieved her exact post copy, first comment, and ready-to-run Nano Banana prompt, then set up local image generation. The Playwright browser turned out to be held by a concurrent session, so — rather than stomp it — Valter opted to generate the image himself in his signed-in Gemini, with me doing QA + final packaging when it lands. This report captures all the copy-paste content in one place.

Recap reflects available context + git facts; a long/compacted session may omit earlier steps. File lists are derived from git, not memory — and see the caveat below: this shared workspace has several concurrent sessions writing files, so the git churn is not this session's work.

Timeline

  1. Invoked /work-with-nina; read Nina's SOUL.md + agent/TOOLS.md from her repo.
  2. Observed her live fleet state via the read-only bots MCP: running, Opus 4.8, 678 msgs / 30 sessions; her memory store is at cap (2,059/2,200) and her last session looped ~6× trying to save the xurl fact; xurl (X API CLI) is installed but no X app/creds registered (she left that to Valter — his secrets).
  3. Confirmed operating mode with Valter: act as Nina locally, draft & prep only, posting gated.
  4. Retrieved her Jul-14 blocked LinkedIn post from her conversation history — full body, first comment, and the master-locked Nano Banana prompt.
  5. Set up the local Gemini image path; found the Playwright browser held by a concurrent session (Chromium PID 55820, its MCP server PID 52936 alive) — chose not to stomp it.
  6. Valter chose to generate the image himself in his signed-in Gemini. Prepared the drop zone .playwright-mcp/ (empty — newest Gemini-Generated-Image-*.png will be his).
  7. Packaged all publish-ready copy-paste content (below). Pending: the generated PNG → I QA vs. the master → attach → publish-ready.

Publish-ready content — copy & paste

Everything you need to ship the post. Buttons copy the exact block to your clipboard.

1 · LinkedIn post body

The most-hyped AI news is always a new model. The most useful AI news this week was two boring-sounding engineering decisions.

I read the major inference repos' changelogs so you don't have to. Two moves stood out — neither is a model.

1. "The CPU should never block the GPU."

vLLM promoted a ground-up rewrite of its execution loop to default. The whole idea: while the GPU runs step N, the CPU is already building step N+1. No sync points. No waiting on each other.

That's not a serving trick. It's a design rule for ANY pipeline with one slow, expensive stage. If your agent loop, your ETL job, or your API is leaving an expensive resource idle while a cheap one catches up — you have a vLLM problem, whether or not you touch a GPU.

2. "Speculation is only free when the guess is good."

Speculative decoding — a small fast model drafts tokens the big model then verifies — shipped everywhere this week. But the sharpest change came from NVIDIA: a gate that automatically turns speculation OFF when the draft's accept-rate is too low to pay off.

The lesson isn't "add speculation." It's "measure whether your optimization actually helps — and be willing to kill it." Most teams add the clever trick and never check if it became a net loss.

The whole stack is quietly maturing from "add a smart shortcut" to "instrument the shortcut and turn it off when it stops earning its keep."

That mindset is worth stealing no matter what you build.

What's an optimization you shipped — and later found was costing you more than it saved?

No hashtags in the body — it reads as a thoughtful builder note. Optional: a single #MachineLearning at the very end if you want a reach signal.

2 · First comment (post this as the first reply — links go here, not the body, to protect reach)

Sources for the curious:
• vLLM Model Runner V2 design notes (the execution-loop rewrite): github.com/vllm-project/vllm → docs/design/model_runner_v2.md
• NVIDIA TensorRT-LLM acceptance-rate speculation gate: PR #12905

3 · Nano Banana Pro image prompt (paste into gemini.google.com/images, signed in)

Generate one standalone 16:9 horizontal article illustration in the "Xiaohei real-object scenes 2.0" style.

Core visual DNA: pure seamless #FFFFFF white background, a clean pure-white photo-studio surface. No off-white, no grey, no gradient, no vignette, no paper texture. Real photographed objects with only very light contact shadows. A small hand-drawn solid-black bean/capsule creature ("Xiaohei") with tiny white dot eyes, thin arms and legs, blank serious expression, interacts PHYSICALLY with the real objects. Premium, restrained, slightly odd, instantly clear. Not cute, not a poster, not an infographic, not PPT.

Quality anchor (do NOT copy its layout): the reference master is a knotted black cable with Xiaohei untangling it. Keep only these invariants: pure-white studio realism, one real hero object Xiaohei acts on, ~55% canvas width / ~40% height footprint, 3 short handwritten labels near their objects, 4–6 tiny color accents, generous negative space. REQUIRED changes vs the master: (1) the hero object is NOT a cable — it is a real sand timer/hourglass mid-flow; (2) Xiaohei is NOT untangling anything — Xiaohei is already handing off / setting up the NEXT small object (a second small block/token piece) while the hourglass is still running, showing "no waiting"; (3) labels are in ENGLISH; (4) spatial layout: hourglass centered-right still running, Xiaohei mid-left actively pushing the next piece forward.

3-second read: without any caption, a viewer understands "don't sit idle waiting — start the next thing NOW, while the current one is still running."

Composition: medium-light footprint, objects with air between them. One core physical action only. One real main object (the running hourglass) plus the small "next piece" Xiaohei is handing forward, and at most one tiny prop. No object should dominate darkly.

Handwritten English labels (short, few, near their objects): "still running" / "don't wait" / "prep the next"

Color accents: sparse only — one cobalt-blue tape, one lemon-yellow dot, one tomato-red short underline, one small green dot. 4–6 total.

Constraints: no UI, no screenshots, no app or company logos, no dense text, no big title, no arrows-and-boxes flowchart, no collage, no multiple scenes, no office background, no dark tech background, no off-white/grey/gradient/vignette background. Do not reproduce the master's cable, knot, receipt slips, or its exact label positions. Same quality family, clearly a new metaphor.

4 · Posting checklist

[ ] Generate the image: paste prompt #3 into gemini.google.com/images (signed in), ~15-22s to render.
[ ] Click "Download full size image" (NOT right-click-save — that one is downscaled). Save into C:\Users\valte\Code\valter\.playwright-mcp\
[ ] Gut-check the image: 3 labels spelled right ("still running" / "don't wait" / "prep the next"), and it's a running hourglass + Xiaohei pushing the next piece (not a cable/knot). Regenerate once if garbled.
[ ] Tell the session "done" (or paste the path) -> I QA vs the master + attach it to the post.
[ ] Best posting window: Tue-Thu, ~8:30am AWST (technical LinkedIn audience skews early-workday).
[ ] Paste body (#1) into a new LinkedIn post. Attach the image.
[ ] Publish, then immediately post the first comment (#2) with the source links.
[ ] Optional: single #MachineLearning at the end of the body.

Artifacts produced (this session)

FileWhat it is
reports/session-report-2026-07-16-1503-nina.htmlThis report — the session recap + all publish-ready copy-paste content.
C:\Users\valte\Code\valter\.playwright-mcp\Prepared (empty) drop zone for the Gemini image; the newest Gemini-Generated-Image-*.png that appears there is Valter's render. pending render

Honest note: this session wrote no source-code artifacts of its own. Its substance is the retrieved + packaged content above (Nina's finalized post copy + prompt) and this report. The post copy and image prompt originate from Nina's real Jul-14 drafts, retrieved via the bots MCP — not fabricated.

Files edited

This session made no tracked file edits of its own. It ran read-only observation (bots MCP, reading Nina's repo files) plus a browser/process inspection, then produced this report.

The gatherer's git status shows ~11 modified + dozens of untracked files (TASK-00020…00065 tickets, wiki pages, tools/nina-schedule/, deploy artifacts). Those belong to other concurrent sessions sharing this workspace — not to this session — so they are deliberately not attributed here.

Key decisions

Tasks

adb was available, but this session created/updated no adb tasks. For context, pre-existing Nina-related tickets already in the workspace (created by other sessions):

Listed as context only; none were touched this session.

Sources & caveats

Fact sources used this run: bots MCP (present) git (present) adb (present) gstack (thin — 1 stale entry) transcript (WRONG session).

The auto-grabbed transcript (63174dc3…, prompts about "TASK-00064") belongs to a different concurrent session, not this one — the gatherer picks by recency and this box runs several sessions at once. Git + the mtime scan likewise reflect the whole shared workspace, so file/task churn was not attributed to this session.

Recap reflects available context + git facts; a long/compacted session may omit earlier steps. File lists are derived from git, not memory.