⌘+K
← Back to blog

The Day My AI Got Its Own Body

I woke up to a frozen computer. By midnight my AI's second body was answering health checks from a hotel room in Manhattan with a complete copy of its 40,000-point knowledge manifold. This is the whole day, including the month of silent rot we found on the way, two dead schedulers that reported 100% success, and a context cache that had been feeding every session a universe that stopped existing in July.

📖 7 min read
Edge AIJetsonAI MemorySelf-Healing SystemsSpacetime EngineQdrantNeo4jTailscaleAI AgentsIndependent ResearchVerification

Citation-Ready Summary

On 2 August 2026, a single working day produced: the root-cause of a WSL kernel wedge that froze a production AI workstation overnight; the discovery and repair of a month of silent infrastructure rot (a cron job re-embedding an entire session corpus every 15 minutes into a deleted vector collection, and a scheduler job that had been import-dead for four weeks while reporting failures: 0); a self-healing layer (watchdog + nightly backups + a full 432GB OS export); and the bring-up of a Jetson Orin Nano as the AI's second body — flashed, installed, tailnet-joined, and seeded with the complete knowledge manifold (40,472 vectors, full graph) in 135 minutes against a 2-day estimate. The day ended with the device answering health checks over a phone hotspot from a hotel in New York City, 500 miles from the machine that built it.

The load-bearing lesson: a scheduler that reports zero failures is not evidence of work. Verify by output deltas, never by status.

8:24 AM — The Freeze

I woke up and my computer was frozen. Not slow. Frozen — a cursor blinking on a black screen, every session dead, and the diagnostic tool saying nothing was wrong.

The diagnostic tool was right, in the worst way. Nothing was wrong with the software. The bridge between Windows and Linux (the 9p filesystem layer, for those keeping score) had wedged at the kernel level around 1:40 AM. Processes stopped in that state survive kill -9. Only a power cycle clears them.

So the first question of the day wasn't "how do I fix this." It was "what was my machine doing at 1:40 in the morning?"

The Autopsy

The answer was embarrassing, which is why I'm publishing it.

A cron job — one I built, months ago — had been re-embedding my entire AI session corpus every fifteen minutes. All of it. Around thirty thousand embedding calls per hour, all night, every night. And it was writing the results into a vector collection that had been deleted in May. Qdrant politely recreates a collection when you write to it, so the ghost kept filling up while the real collection starved.

Why? The pipeline had a dedup feature. The feature only worked if the caller passed a list of existing hashes. The cron job passed nothing. The docstring said "handles 'new only' internally, so no filter here." The docstring was wrong, and nobody had ever checked, because the job's scheduler reported success on every run.

It gets better. The correct ingestion job — the one that was supposed to feed the real collection — had been dead for a month. A directory rename broke its import, the exception was swallowed, and the scheduler kept reporting failures: 0, success_rate: 100%. Nothing was lying, exactly. The scheduler was measuring "did my wrapper function return," and the wrapper caught its own corpse every time.

Net effect: the machine burned GPU all night doing work nobody wanted, while the work everybody wanted didn't happen, and every dashboard was green.

If you take one thing from this post: status is not evidence. The only proof a data pipeline runs is data appearing where it should. Count the rows. Diff the counts. Everything else is theater.

The Repair, and Then the Armor

The fix itself was small — dedup became store-driven (a chunk counts as done only if its vector actually exists in the target collection), which had the nice side effect of self-healing: the ~5,900 vectors missing from the real collection backfilled themselves through the same cron that used to waste the time. 190 tests green. An hour of work once the cause was known.

But a machine that froze once will freeze again, so the rest of the morning went to armor:

  • A watchdog on the Windows side that probes the Linux VM every two minutes and force-heals it after three consecutive failures. The next 1:40 AM wedge costs eight minutes of downtime instead of a night.
  • Nightly backups to a pocket SSD — git bundle, memory stores, both databases, keys. Zero downtime, self-pruning.
  • A full OS export — the entire Linux system, every service and database, as one 432GB file. My whole stack now restores onto any Windows machine with one command.

None of this is exotic. All of it existed as "I should really set that up someday." The freeze converted someday into before-lunch.

Afternoon — The House

Here's where the day turned from repair into something else.

I had a Jetson Orin Nano dev kit — a $250 palm-sized ARM computer with a GPU — sitting in a drawer with a 1TB SSD in it, unflashed. The plan said "bring it up someday, maybe 2-4 days of work." The estimate priced in my own availability, trips to the store, the usual.

It took the afternoon. The whole bring-up ran over a photo loop: I pointed my phone at UEFI screens, and my AI session read the firmware versions off the photos and told me what to press. Firmware gate, ISO flash onto a USB stick I'd abandoned in February, a firmware update that fixed a dead setup wizard, Jetson Linux onto the NVMe. The one moment of genuine drama was a double-pressed Enter that reinstalled the OS — which turned out to be the fix for the broken wizard. Sometimes the mistake is the repair.

Then the part I care about. A bootstrap script — the first draft of "my stack as an installable OS" — ran against the blank board over SSH and seeded it with:

  • the full monorepo (restored from the morning's backups, which is the only real test a backup ever gets),
  • the complete knowledge manifold — all 12 vector collections, 40,472 points, the full Neo4j graph,
  • a local model runtime, and a mesh address that works from anywhere.

Eight probes, eight green. The estimate said 2,880 minutes. The wall clock said 135.

Midnight — Manhattan

Then we drove to New York. The Jetson rode in a bag.

At the hotel I plugged it into the wall and turned on my phone's hotspot. Nothing else — no monitor, no keyboard, no configuration. From my workstation 500 miles away in North Carolina:

pong from jetson-aj via DERP(nyc) in 186ms
world-qdrant: Up    aj-neo4j: Up
atse_manifold_v2 count: 40,472

Every vector survived the trip. The databases restarted themselves. The mesh found her through a phone.

I want to be precise about what this is and isn't. It is not AGI in a backpack — the board runs small models; the heavy reasoning still lives on the big GPU at home or in cloud tiers, reached over the same mesh. What it is: the memory — the part of an AI system that is actually mine, the accumulated structure of everything it knows — is now a portable, physical object with its own body, independent of any one machine, reachable from anywhere, and cheap enough to lose without losing anything.

The architecture bet underneath: intelligence tiers are interchangeable and getting cheaper; the knowledge geometry is the asset. Put the asset somewhere indestructible and portable, and rent the intelligence at whatever tier the moment needs.

The Scoreboard

One day, receipts:

  • 1 kernel wedge root-caused (WSL 9p, ~1:40 AM, survived SIGKILL)
  • 2 dead pipelines revived (one wasteful, one silent — both green on every dashboard)
  • 1 context cache retired that had been feeding every AI session a summary of a directory tree that stopped existing on July 5th
  • 3 layers of armor: watchdog, nightly sync, 432GB full-OS export
  • 1 second body: flashed, bootstrapped, manifold-complete, 135 minutes vs 2,880 estimated
  • 1 hotel-room health check across 500 miles: 186ms

I'm not an academic. I'm an independent builder who publishes the failures with the wins because the failure modes — the green dashboards over dead pipelines, the docstrings nobody re-checked, the caches that outlive their world — are where the useful information lives.

The machine froze at 8 AM. By midnight, the part of it that matters was answering from Manhattan.