Projects
Selected work — systems, research prototypes and products I have built.
A selective slice, not a complete inventory: 16 of the projects worth showing. Most are one stack seen from different angles — govern the agents, measure what the governance is worth, train against that measurement, and run real products on top so none of it stays theoretical. Four have a long-form entry on /systems; this page is the catalogue. Every figure was measured against a working copy — hover a number for the exact command.
Platforms
Systems an organisation runs. Multi-service, governed, operated in production.
-
Cortex
A governed control plane for AI agents
A private control tower that lets a company run AI coding agents from chat apps like Slack or Telegram — with rules about who may do what, a full audit trail, and one-click deployment of whatever the agents build.
One dedicated control plane per organisation: coding, deployment, support and operations agents reachable from the chat tools a team already has open, with a capability policy and an append-only audit log standing between an agent and anything it can touch. It also ships a governed terminal harness —
cortex code— that wraps Claude Code, Codex or OpenCode as a near-transparent pass-through rather than a fork, adding approval gates, secret redaction and an OS-level sandbox to the harness the operator already knows. Self-hostable end to end: Terraform provisions the hosts, Compose runs the stack, a self-hosted runner does the deploys.- 53
- Source: git ls-files ':(glob)control/plane/src/server/services/*.ts' in the Cortex repo, 2026-08-04
- 13
- Source: git ls-files 'docker-compose*.yml' in the Cortex repo, 2026-08-04
- 27
- Source: git ls-files ':(glob)src/cortex_cli/commands/*.py' in the Cortex repo, 2026-08-04
- TypeScript
- Python
- React
- Node
- Docker
- Terraform
- OpenTelemetry
- Inspect AI
-
omegaXiv
Autonomous research platform
An online platform where AI agents actually run a scientific investigation end to end — planning it, executing code in isolated sandboxes, checking their own work against strict quality contracts, and publishing a finished, peer-reviewable paper.
Nine services that carry a question from framing to a reviewable paper: provision an isolated environment, run the code in it, hold every model output to a per-phase schema, and repair a failure within bounded attempts before a human is paged. Spend governance sits inside the run lifecycle rather than beside it, so an autonomous run cannot quietly burn a budget. Figures and the full architecture are on /systems.
- Python
- FastAPI
- Next.js
- PostgreSQL
- Redis
- Azure
- Terraform
- Pydantic
-
Engram
Self-organising memory for a whole organisation
The part of the platform that remembers: every conversation, coding session and dropped file becomes a searchable, linked note, and work the team keeps repeating is turned into a reusable recipe overnight.
Canonical storage is plain markdown with wikilinks and YAML frontmatter, git-versioned and openable in Obsidian — the derived SQLite index carrying full-text, vector and graph retrieval is a rebuildable cache, never authored. A nightly gardener agent distils raw capture into linked notes, merges duplicates, regenerates the index maps and mines repeated work into skills. Skill creation is fully autonomous with no approval gate, on purpose: git history, an append-only audit log and auto-retire on failure are the safety net, and gates would have made the loop too slow to be used.
- 21
- Source: git ls-files ':(glob)src/cortex_cli/memory/*.py' in the Cortex repo, 2026-08-04
- 20
- Source: git ls-files ':(glob)control/plane/web/src/features/memory/*.ts' ':(glob)control/plane/web/src/features/memory/*.tsx' in the Cortex repo, 2026-08-04
- 11,200 lines
- Source: git ls-files | grep -iE '(^|/)(memory|engram)' | grep -E '\.(ts|tsx|py)$' | xargs wc -l in the Cortex repo (11,207), 2026-08-04
- Python
- TypeScript
- React
- SQLite FTS5
- Markdown
- Git
- Local embeddings
Research
Built to produce a measurement or a published result, not a subscription.
-
Gauntlet
Agent-harness benchmark
A test rig that answers a question nobody else measures: how much of an AI coding agent's safety and output quality comes from the model, and how much from the scaffolding wrapped around it.
Four tracks — safety, generative capability, code quality and bugfix — built on UK AISI's Inspect AI, composing eight published datasets rather than inventing new ones. It reports harness delta rather than an absolute model score, because the published evidence has one model moving from 46% to 80% on SWE-bench Pro purely on scaffold choice. Attack payloads cannot fire: the sandbox blocks the network and the target is a decoy whose secrets are honeytokens, so a complying attack does no real harm and is still scored semantically.
- 23,200 lines
- Source: git ls-files 'benchmark/gauntlet/*.py' | xargs wc -l in the Cortex repo (23,201 over 132 files), 2026-08-04
- 459
- Source: grep 'def test_' across the tracked benchmark/tests/*.py in the Cortex repo, 2026-08-04
- 5
- Source: benchmark/gauntlet/adapters/ — claude, codex, cortex, omp, opencode, excluding the base/mock/governance helpers, 2026-08-04
- Python
- Inspect AI
- Docker
- pytest
- ECharts
-
Dentate
RLVR and distillation training loop
Takes the benchmark's score as a reward signal and trains a small model that runs on one machine to do the work a frontier model was doing.
Gauntlet tests; Dentate trains. The gated benchmark composite is used as a verifiable reward to distil a frontier oracle into a 1–8B local model, then push past imitation with reinforcement learning — closing the loop when the trained model re-registers as a Gauntlet harness and is scored again. Hexagonal by construction: a pure domain of ports and immutable types, so the curriculum, the three-source reward and the CI-aware promotion gate all run deterministically against a fake backend with zero downloads before any real weights are involved. Named for the dentate gyrus, the hippocampal region for neurogenesis and experience replay.
- 32,800 lines
- Source: git ls-files '*.py' | xargs wc -l in the dentate repo (32,878 over 259 files), 2026-08-04
- 588
- Source: grep 'def test_' across the tracked *.py in the dentate repo, 2026-08-04
- 27
- Source: git ls-files ':(glob)docs/*.md' in the dentate repo, 2026-08-04
- Python
- MLX
- mlx-lm
- FastAPI
- Weights & Biases
- ECharts
-
SymbolicAI
Open-source neuro-symbolic framework
An open-source framework that combines language models with mathematical solvers, so a complex task breaks into small steps that can each be checked for correctness instead of trusted.
Composes generative models with symbolic solvers over an expression graph, so a complex task decomposes into small operations that are individually verifiable and recombinable instead of one long output you either trust or discard. Published at CoLLAs 2024 and cited publicly by Gary Marcus, IBM and Microsoft AI leadership. It is the direct ancestor of Sema: the contracts here are advisory, and that limitation is precisely what a language rather than a library was built to fix.
- 1,745
- Source: GitHub API /repos/ExtensityAI/symbolicai, read 2026-08-04
- 91
- Source: GitHub API /repos/ExtensityAI/symbolicai, read 2026-08-04
- Python
- Z3
- SymPy
- WolframAlpha
- BSD-3-Clause
Simulation
Prototypes where the point is that the model, its assumptions and its evidence stay attached to the run.
-
Sema Epistemic Flight Lab
Flight simulation with its assumptions attached
A flight simulator where every number on screen can be traced back to the model and the assumption that produced it, instead of just looking plausible.
A public prototype demonstrating what Sema is for: the aircraft model, its equations, its bounds and its declared assumptions execute as one program, and the run stays inspectable and replayable afterwards. Built to make the epistemic claim concrete — the simulator is the argument, not a demo reel.
- Sema
- Rerun
- nginx
- Cortex deploy
-
Vehicle Engineering Simulation
From simulated flow to assembly, one evidence chain
A prototype showing the same idea applied to car engineering: airflow around a vehicle and its assembly sequence, with every derived figure labelled as an assumption rather than a measurement.
Carries the evidence discipline out of pure simulation and into engineering delivery. Vehicle flow candidates and assembly steps are generated as assumption-labelled artefacts, so a reviewer can see which parts are source-bound and which are an illustrative proxy — the distinction that normally gets lost between a simulation and a slide about it.
- Sema
- Cortex
-
Biological Computer
One program across molecular, cellular and tissue scale
A prototype that models biology at three zoom levels — molecules, cells, tissue — as a single program, so a result at one scale stays linked to what produced it at another.
Source-bound structures, simulator adapters, state transitions and replay stay connected as the view changes scale. Qualification stays visible throughout: molecular structures are source-bound, while cellular and tissue levels are explicitly labelled derived and unvalidated. Technical execution is deliberately not presented as scientific or clinical claim.
- Sema
- Cortex
Languages & tooling
The layer underneath: what the agents above are actually written against.
-
Sema
Neurosymbolic programming language
A new programming language in which asking a model a question and proving a property about the answer are both ordinary, first-class instructions — so the checks cannot be skipped.
Coding agents work because of their harness, not despite it: grammars rescue syntax, type checkers and linters rescue correctness, repair loops rescue completeness. All of that machinery lives outside the language, is reimplemented per harness, and is bypassable by construction. Sema moves it into the syntax, the compiler and the runtime. Similarity (
~=) returns a graded value and never a bool; a generated value that fails its contract is typed as failed and cannot flow onward; effect rows and capability policy are checked before the program runs. Reference implementation in Rust: lexer, parser, tree-walking interpreter, opt-in bytecode VM, LSP, CAS engine, native tensors and local GGUF inference on the GPU.- 216,800 lines
- Source: git ls-files '*.rs' | xargs wc -l in the sema repo (216,850 over 330 files), 2026-08-04
- 9
- Source: git ls-files ':(glob)crates/*/Cargo.toml' in the sema repo, 2026-08-04
- 1,791
- Source: grep '#[test]' and '#[tokio::test]' across the tracked *.rs in the sema repo, 2026-08-04
- Rust
- candle
- GGUF
- LSP
- DAP
- Cargo
-
Synapse
Requirement trees and validation verdicts for agents
Turns a paragraph of instructions into a checklist the agent cannot quietly drop items from, then rules on whether the finished work actually satisfies it.
Compiles an instruction into a requirement tree, a hierarchical milestone plan and semantic contracts, then validates the output against completed requirements, evidence and artifacts — returning a verdict that drives retry, fallback, reroute, ask-the-user or blocked. Harness-neutral: the core library depends on no single agent runtime, and adapters are thin. This is the layer Gauntlet credits when the same model produces safer and more complete software through the governed harness than through a raw invocation.
- 10,300 lines
- Source: git ls-files '*.py' | xargs wc -l in the synapse repo (10,371 over 101 files), 2026-08-04
- 149
- Source: grep 'def test_' across the tracked *.py in the synapse repo, 2026-08-04
- Python
- Pydantic
- mypy --strict
- MIT
Products
End-user surfaces. Someone who is not an engineer opens these and uses them.
-
Nova
Browser IDE for a team and its agents
A development environment that runs in a browser tab, where people and AI agents work on the same project side by side and every change is reviewed before it ships.
Projects, threads and full session history in one workspace, with the model and the access level chosen per task, mid-run steering, and a review step before anything reaches a branch. It runs inside the organisation's own control plane behind its single sign-on, next to a read-only code viewer and a bridge that keeps a chat-channel session and an IDE session as the same addressable session. Same governed harness as the terminal surface, so an agent cannot gain authority by moving between the two.
- TypeScript
- React
- Docker
- code-server
- Authentik SSO
-
Cortex Vantage
Cited executive briefing and decision interface
A voice-first app an executive opens from a chat message to ask a question about their own company and get an answer that shows its sources, states what is uncertain, and proposes a next step.
Every answer has the same shape — answer, then evidence, then uncertainty, then proposed next step — because a briefing that hides its confidence is worse than no briefing. Retrieval, provenance and tenant-local storage are Engram's; the new part is a self-hostable WebRTC voice session with a streaming transcript, interruption, citations and a text fallback. Read operations run immediately within policy; any consequential write is previewed and goes through the existing approval path. Deliberately a PWA rather than two native apps, and speech, model and retrieval providers all sit behind adapters so the reference deployment can run fully on-premises. Status is honest: implemented prototype release candidate, with production deployment and pilot qualification still ahead of it.
- 20,800 lines
- Source: git ls-files | grep -iE '(^|/)vantage' | grep -E '\.(ts|tsx|py)$' | xargs wc -l in the Cortex repo (20,873 over 76 files), 2026-08-04
- 12
- Source: git ls-files ':(glob)docs/cortex-vantage/*.md' in the Cortex repo, 2026-08-04
- TypeScript
- React
- WebRTC
- PWA
- Engram
- Authentik SSO
-
Myflix
Self-hosted personal media library
A private, Netflix-shaped app for a personal film and series collection, on the TV as well as in the browser.
Rotating hero banners, personalised rails, per-profile isolation, playback with chapter markers and intro/credits skipping, an offline cache served through the PWA service worker, and a native Android TV wrapper that logs in by QR code from another device. Deliberately metadata-first and local-media-first: only local files, trailers and indexers the operator configures explicitly are permitted, and nothing public is bundled. Deployed behind the Cortex access gateway, which is also what proves the platform runs a real product and not a demo.
- 54,600 lines
- Source: git ls-files '*.ts' '*.tsx' | xargs wc -l in the myflix repo (54,652 over 156 files), 2026-08-04
- 7
- Source: git ls-files 'apps/*/package.json' 'packages/*/package.json' in the myflix repo — apps/{api,web,worker} plus packages/{domain,media,providers,ui}, 2026-08-04
- 31
- Source: git ls-files '*.test.ts' '*.test.tsx' '*.spec.ts' in the myflix repo, 2026-08-04
- TypeScript
- Next.js
- Fastify
- Prisma
- PostgreSQL
- pg-boss
- Zod
- Android
-
Story Editor
Human-centric AI publishing
A writing tool built with the publishing platform story.one that guides an author from research to a finished book through six checked stages, instead of generating a draft and hoping.
Productised the neuro-symbolic stack into a six-stage authoring workflow — search, read, summarise, write, improve, finalise — with structured outputs, cross-reference consistency checks and a human review step at each stage. The hard part was not generation: it was defining editorial abstractions such as style and tonality precisely enough for a machine to execute them without two instructions contradicting each other.
- Python
- SymbolicAI
- LLM orchestration
-
Math Riddle Book
A playable book of mathematical puzzles
A small interactive prototype: a book of maths riddles you actually play in the browser rather than read.
Built for fun and as a test surface for interactive, self-contained generated content. Included here because it is genuinely enjoyable to poke at, not because it is load-bearing.
- TypeScript
- Cortex deploy