Untitled Excavation

The Ghost Window and the Portfolio Brain

My laptop “died” overnight. Then it refused to sleep because of a black window that flashed too fast to read.

Same machine. Same morning. Two different problems. Felt like getting bucked off the bike twice before coffee.

I was already deep in OpenClaw, Discord routing, and local voice-note transcription work. I had context-compressed enough times that my brain was doing that thing where every bug starts looking like one bug wearing a fake mustache.

So I started where I should have started. Logs.

Not vibes. Not “maybe Windows updates did some weird shit.” Logs.

The laptop had actually crashed. PAGE_FAULT_IN_NONPAGED_AREA (0x50). WinDbg later pointed at nvlddmkm.sys, the NVIDIA driver. So no, it didn’t “just die.” It blue-screened and face-planted in the dark.

Different problem than the popup. Important distinction.

The popup bug was nastier because it was intermittent. Blink and miss it. But every time it flashed, it reset the idle timer and kept the machine from sleeping. Ever troubleshoot a ghost by waiting for it to happen again? Real fun.

I chased the wrong suspect first. Windows Hotpatch. There was a scheduled task launching cmd.exe, and the timing looked dirty enough to blame.

Reasonable theory. Wrong component.

I ended up building a little ghost trap instead: poll short-lived cmd.exe and conhost.exe processes, capture command lines, capture parent PIDs, write the hits to a log. Boring work. Load-bearing work.

Then the thing finally showed its face:

cmd.exe /c "arp -a | findstr /C:"---""

Parent process: my PM2-managed OpenClaw gateway.

Not Windows being haunted. My own stack shelling out through a Node dependency with a visible console on Windows.

The fix was one line. Of course it was.

exec('arp -a | findstr /C:"---"', { windowsHide: true }, ...)

Three hours to find the screw. Three seconds to turn it. Merit badge earned.

That should have been the whole story.

It wasn’t.

Because by lunch I realized the ghost window was only half the problem. The other half was workflow confusion. Mine.

I had a good stack on paper:

  1. OpenClaw + Discord for capture and routing
  2. Ollama + Whisper for local transcript cleanup and classification
  3. Codex/Claude for code, debugging, docs, and SOPs
  4. Gemini CLI for large-context review

And I still felt scattered. Why?

Because I was using all of it like a junk drawer. One mental bucket. One big “AI helps me” blob. Fancy tools. Muddy roles.

The fix there was the same shape as the popup fix: identify the actual component.

There are three jobs. That’s it.

  1. Capture (messy, fast, phone-first)
  2. Project work (one repo, one problem, one lane)
  3. Cross-project synthesis (weekly portfolio decisions)

Once I split those lanes, the whole system stopped feeling clever and started paying rent.

#captures is for voice notes, screenshots, and half-cooked ideas. Messy on purpose.

#garret, #dipradar, #valkyrie-dispatch, and #doctor-db are for execution. Wrenches, not debates.

And Gemini? This is where I was grading the wrong test.

I kept evaluating Gemini like a coding assistant. Can it debug faster? Can it replace Codex? Can it out-write Claude in the middle of a repo task?

Wrong brain. Wrong fight.

Gemini’s value in my setup is weekly portfolio sequencing from curated digests. It looks across projects and tells me the thing I don’t want to hear when I’m excited:

Without that pass, every project is urgent and I can rationalize all of them. That’s not planning. That’s Dark Souls logic. I’m still sprinting back to the boss room pretending the runback is progress.

So I turned the day into infrastructure.

I wrote a Windows crash + popup + sleep triage playbook. Real commands. Real failure modes. Real rollback.

I wrote a Discord project-channel + portfolio-digest workflow playbook so future-me doesn’t “get creative” and collapse the lanes again.

I added prompt packs for pre-mortems, test gates, blind-spot reviews, and digest generation. I added a quality runner. A CURRENT_INTENT freshness check. A Gemini packet builder. A popup trace poller.

And because I know exactly how my brain fails after a few context compressions, I built an Obsidian workflow atlas with diagrams so I can see the whole machine without reconstructing it from memory.

Then I did the part that actually matters: I used it.

I generated project status digests for Garret, DipRadar, Valkyrie Dispatch, and Doctor DB. I packed them with the latest wrapup. I ran a Gemini portfolio review. It gave me conflicts, reuse opportunities, a 7-day focus split, explicit deferrals, and next actions by project.

Then I turned that into channel tasks and executed the follow-through:

That’s the point. Not “AI made a summary.” Summaries are cheap.

The point is the summary changed what I did next.

The visible bug was a black popup window.

The hidden bug was role confusion in my workflow.

Same pattern both times: wrong component, wrong diagnosis.

Windows Hotpatch wasn’t the popup. My OpenClaw stack was. Gemini isn’t my coding brain. It’s my portfolio brain.

Capture in Discord. Build in repos. Summarize in digests. Sequence with Gemini. Execute the next thing.

Not poetry. But it keeps the bike upright.