jarvising · entry 002 jarvising.com

cor·tex

/ˈkɔː.tɛks/ noun; here, a memory you can walk around Entry 002

What a fleet of AI agents remembers, drawn as a living war table, then handed on as an open-source library so anyone can point it at a brain of their own.

A domed holographic table in a starfield: seven glowing clusters of memories sit in their own sectors around a bright central core, and tall light pillars rise from the most important ones. Open the map → WebGL · 3D on desktop, flat on phones
fictional data · keyboard works

An Adapt Progress Evolve Limited project by Jack Stovell (registered in England and Wales, company no. 10047328, VAT GB362654684) · Library: github.com/StovBuilds/cortex-map · This page's copy: src/cortex/

What it does

It draws a knowledge graph as a place. Every memory is an orb; every cluster owns a sector of a domed, holographic table; the most important orbs throw up pillars of light; strong links arc across the map as bright trails of particles, and weak ones make a faint web underneath. Fresh memories glow in their cluster's colour and ride proud of the surface. Old ones cool to slate and settle into it. Under it all a sea rolls, and where a part of the mind is busy, that sector of the sea ripples and then storms.

Click an orb and the rest of the map dims while tentacles reach out to everything it is linked to, with an inspector listing each link by strength. Click twice and the camera swoops down to it. Press / to search every label and note, L to simulate a brain at work (memories arriving, recalls setting off chains along the links), G for the globe projection, still marked β in the library. The theming panel is the library demo's own: table size, dome curvature, camera, colours, each cluster's temperament, link thresholds, sea and bloom, and a button that copies your settings as the props to paste.

On a phone, or with reduced motion switched on, it opens as a flat 2D map instead, which is the library's own lite mode. ?kiosk=1 runs it unattended: no links out, the camera drifts round the table, the stream runs, and a minute of quiet puts the room back.

Where it comes from

This site's definition says jarvising comes from Jarvis, a home-built assistant that grew into a fleet of small, cooperating agents. This entry is that line made real. The agents share one memory: each writes what it learns into Postgres with pgvector, and a consolidation job runs every fifteen minutes to embed it, link each memory to its nearest neighbours, let stale links decay and merge duplicates. The public architecture notes put that graph at 3,183 nodes and 3,924 edges, verified on 27 July 2026. Cortex is the map Jack reads it on.

That is the first sense of the word: building at scale. This is the first entry for the second, giving people the tools to do it themselves. On 15 July the renderer was lifted out of the fleet's dashboard into its own public repository with its own data contract, so it draws whatever you hand it and none of the fleet comes with it. The map you open here is its demo dataset: a fictional indie game studio's second brain, 191 memories, 273 links and seven clusters, generated from a fixed seed so it is the same on every load. None of Jack's real memories are in it.

Etymology

First attested as cortex-map v0.1.0 on 15 July 2026, extracted from the fleet's dashboard in the half hour after the go-ahead; given a theming panel and a globe on 23 July; copied here on 29 September. Below, the build replays itself: every frame is the library's own demo rebuilt from git at that commit with that commit's own dependencies, and photographed in the same state, so the only thing that changes is the work.

The brief, as loggedparaphrase
Build NoctemJack/cortex-map: OSS extraction of the war-table 3D map (npm pkg + demo app + docs + waitlist link)

The session's one-line summary of the job, written into the commitment ledger at the moment Jack said go. Not his exact words. The npm package it mentions was never published; that is still Jack's call.

  • Promise logged15:57 UTC
  • First commit16:24 221d13e
  • Public, demo live16:29 UTC
  • Logged to live32 min

Day one, from the records: the commitment ledger (fdf6a1f3, opened 15:57:48, closed 16:29:56), git log on cortex-map (221d13e at 16:24:20, a CI fix at 16:26:25) and the state-log entry committed at 16:30:33, which records the repository made public, CI green and the demo deployed to cortex-map.pages.dev. That entry's heading says Jack gave the go-ahead at 15:55; it was typed by hand, so the ledger's clock is the one shown.

The Cortex piece as built at jarvising commit 7d60968 on 29 September 2026: the war table with its seven clusters, under this site's bar.

The latest frame, 29 Sep 2026. With JavaScript on, drag across the picture or use the slider to replay all seven.

  1. 221d13ecortex-map: v0.1.0, the war table extracted and themeable
  2. 498b74bcortex-map: A live theming panel: size, colours, waves
  3. 72cba99cortex-map: Camera, link, pillar and per-cluster motion controls
  4. 165e8e8cortex-map: A globe projection, as a prototype
  5. 101bfc4cortex-map: The globe rebuilt: a lit world, a ring, orbiting clusters
  6. 68db7b1cortex-map: Globe options: transparency, grid, orbs on the surface
  7. 7d60968Vendored into jarvising.com as entry 002

Frames rendered by tools/render-build-frames.mjs in software WebGL at 1200×675: each cortex-map commit checked out alone, installed from its own lockfile, its demo built and shot on first load (the table) and after pressing its Globe button (the globe). Three commits are left out because nothing on screen changes: a CI fix (ed6eaf0), the GitHub account rename (078561c) and a docs rewrite (f6fe240). The Globe button first appears at 165e8e8; before it, the globe view shows the table. Every commit built, the first included. The last frame is this site's copy. The list gives each commit's subject shortened; the caption above gives it in full.

How it was made

Extracted, not rewritten. The scene began as the Cortex page in the fleet's dashboard, where it first drew a real personal memory graph of about 600 nodes (the library's README tells the story). Extraction meant cutting every tie to that world: data now arrives as three plain props (nodes, edges, clusters), live effects go through a small handle (flash, ignite, focus), the Tailwind classes became one self-contained stylesheet, and a seeded fictional studio replaced the real brain. Testing the extracted code also turned up a real bug, which went back into the dashboard the next day: waking the sleeping render loop could re-enter itself through the camera controls and overflow the stack on the first click after a pause.

The layout is fixed, not simulated. It is built on 3d-force-graph, but the forces are switched off. Each cluster gets an angle on the disc; the core sits at the centre, hubs at their sector's heart, children in rings around their parent, and anything without a parent on a golden-angle spiral. Every node is pinned there, so the same data always draws the same map and the map becomes a place you learn.

It sleeps. Nothing moves between interactions, so the heavy render loop pauses when idle and wakes on the pointer, the camera or a flash. A separate throttled loop at about 25 frames a second keeps only the sea rolling. Every decorative object (the sea alone is a 32,000-triangle plane) is taken out of the raycaster, which is what removed a drop from about 150 to 20 frames a second whenever the mouse moved.

Everything is drawn in code. The ground grid, glows, labels, starfield and nebula are canvases and small shaders made at runtime. No images, fonts or models are downloaded, which is why it passes this site's content-security policy.

Here, it is vendored. src/cortex/lib/ is the library's source at commit 68db7b1 with four documented changes: two handle methods so the page can steer the camera, class names on the three HUD panels so a phone can rearrange them, a screen-size check that answers before the first render so a phone never downloads the 3D renderer it is about to swap out, and a named list of the three.js classes it uses in place of import("three"), so the three.js chunk this page shares with entry 001 stays tree-shaken. Two unused dependencies are aliased to stubs in the build: three's WebGPU renderer, which would have added its whole WebGPU build, and ngraph's layout engine, which generates code with new Function and would break under a policy without unsafe-eval.

How to make your own

cortex-map is not on npm. It is a public repository, MIT licensed, so for now you take it from GitHub.

  1. Run the demo. git clone https://github.com/StovBuilds/cortex-map, then npm install and npm run dev; it serves this same studio brain on localhost. The demo reads the library's source directly, so edits reload as you save.
  2. Bring it into your app. Either copy packages/cortex-map/src/ (seven files) into your project and install react-force-graph-3d, react-force-graph-2d and three, which is what this site does; or build it with npm run build -w cortex-map and depend on the folder, npm install ../cortex-map/packages/cortex-map. Both were checked on 29 September 2026 with React 18 and Vite 5.
  3. Shape your data. Nodes need an id, a label and a cluster. Add role and parentId for structure, weight for importance and lastSeenAt for the age gradient. Edges take a strength from 0 to 1, and origin: "semantic" for links a machine inferred. The full contract is in docs/data-format.md.
  4. Give it a height. The map fills its parent, so the parent needs a real one.
  5. Make it live. Keep a ref and call flash(id) when a memory arrives, ignite([ids]) when a recall touches several, focus(id) to fly there. Sustained activity in one cluster builds a storm in its sector on its own.
  6. Tune the look in the demo, then paste it. The theming panel's "Copy theme" hands back only the props you changed. docs/theming.md lists every knob.
  7. If your site sends a strict CSP, alias ngraph.forcelayout and three/webgpu to stubs as this site's vite.config.ts does. Neither is used, and the first would otherwise need unsafe-eval.

The smallest working map:

import { CortexMap } from "./cortex-map";   // the copied src/ folder

const clusters = [
  { name: "Ideas",    color: "#ffcf7a", angleDeg: 30 },
  { name: "Projects", color: "#4d8bf0", angleDeg: 150 },
];
const nodes = [
  { id: "core", label: "My brain", cluster: "Projects", role: "core", weight: 1 },
  { id: "i1", label: "Underwater metroidvania", cluster: "Ideas", role: "hub", parentId: "core" },
  { id: "n1", label: "grappling hook physics", cluster: "Ideas", parentId: "i1", lastSeenAt: Date.now() },
];
const edges = [
  { source: "core", target: "i1", strength: 0.95 },
  { source: "i1", target: "n1", strength: 0.8 },
];

export function Brain() {
  return <div style={{ height: "100vh" }}><CortexMap nodes={nodes} edges={edges} clusters={clusters} /></div>;
}

Publishing the package to npm, and the hosted brain backend the library's README asks about, are Jack's decisions and not made yet. Until then, the repository is the release.

Credits

See also

Entry 001, Enigma: a teardown in scroll.

Entry 003, Inside the Rig: a gaming PC taken apart in scroll, then exploded into a searchable atlas.

← all entries