London·BTech — West Herts College·Available now

Kabirr Kohli

I build AI systems end to end — model routing, retrieval, safety gates, interface and deployment. Both of the systems below are in daily use.

3shipped systems
437commits, public history
326klines written

Summary

A voice-driven AI runtime of 928 Python files. A family app running on four phones. A multi-market backtesting engine. Built independently, with dated commit history for all of it.

01 — The ledger · counted 12 August 2026

Figures,
and where
each one
came from.

Counted from the working tree on 12 August 2026. The command that produced each figure is printed with it.

100%
verifiable

Sourced from two git repositories, a backtesting archive and a CV. No stock imagery and no mock-ups.

Kabirr Kohli · London
0
commits on SYRIX

14 May → 10 Aug 2026. Source files go back to April.

git rev-list --count HEAD
0
Python files

1,367 files tracked in the repository.

git ls-files '*.py' | wc -l
0
lines of Python

Plus 51,811 more in the Electron HUD.

git ls-files '*.py' | xargs wc -l
0
test files

Golden routing tests, a silent-swallow ratchet, live acceptance probes.

ls tests/**/*.py | wc -l
0
commits on Kohli

1 → 12 Aug 2026. Twelve days, one app, four phones.

git rev-list --count HEAD
0
lines, zero packages

No framework, no build step, nothing to keep updated.

cat package.json → there isn't one
0
screens captured

Light and dark, by a screenshot harness I wrote myself.

node tests/shots.js
0
strategies backtested

Equities, FX, futures and crypto. Costs modelled, one position at a time.

python run.py
0
MCP servers wired in

chrome-devtools, memory, git-mcp, defillama over stdio; Microsoft Learn over HTTP.

config.json → syrix_mcp_servers
0
model providers routed

With a quota ledger that rotates when one runs dry, and a local one for anything private.

config.json → brain_pool
Scroll — pages turn
SYRIX project mark
Project 01

SYRIX

An always-on AI assistant runtime that lives on my desktop. Voice in, voice out, with a floating HUD over everything else. Speech recognition, speech synthesis, vision and memory all run locally; the language models are routed across seven providers so it never depends on one of them staying up.

  • Python 3.11
  • Electron + React
  • Three.js
  • Faster-Whisper
  • Piper TTS
  • Groq · Ollama · NIM
  • Chroma + DuckDB
  • MCP
  • WebSocket bridge
SYRIX Supercomputer workspace: a research task running with an embedded browser, a permission prompt, and a live step list
SYRIX Supercomputer. An agentic research mode with its own embedded browser. It asks before it browses, shows every step as it happens, and can be paused or taken over mid-task.

Microphone to answer, in one pass

MICclap / wake VADSilero STTWhisper · CUDA BRAINgpt-oss-120b TTSPiper · local HUD60 fps
  1. MICclap / wake
  2. VADSilero
  3. STTWhisper · CUDA
  4. BRAINgpt-oss-120b
  5. TTSPiper · local
  6. HUD60 fps

Speech never leaves the machine — recognition and synthesis are local, and so is vision and memory. Only the language-model call goes out, and there is a fully local fallback for when it shouldn't.

What is actually in there

Ten subsystems
01

Voice pipeline

Double-clap wake, Silero voice-activity gating, Faster-Whisper distil-large-v3 on CUDA fp16, and a 500-term domain bias so tickers and trading vocabulary transcribe correctly.

Piper synthesises in chunks so the first phrase plays before the sentence is finished. A speaker lock stops two replies overlapping, and speaking over it interrupts it.

02

Brain routing

Groq openai/gpt-oss-120b is the default and the strong lane; gpt-oss-20b is the fast one it drops to under rate limits. qwen3:8b runs locally on Ollama.

Behind those, a full NVIDIA NIM stack — llama-4-maverick-17b-128e for general work, mistral-small-4-119b for reasoning and code, phi-4-multimodal, nemotron-nano-vl for vision, parakeet-1.1b for speech, and a Nemotron content-safety model. Plus Gemini 1.5 Pro, Cerebras, OpenRouter and GitHub Models.

A quota ledger rotates lanes as each one runs dry, and a benchmark decides which lane is best before anything routes to it.

03

Intent routing

40+ intents classified by regex first and a model only if that fails, then a deterministic planner picks one of five answer strategies before any tokens are spent.

28 tool adapters behind one executor: trading, weather, news, maps, memory, charts, system control, browser.

04

Zenith — multi-agent

Hard questions fan out to an analyst, a critic, a verifier and a synthesiser, plus quant, risk, comparison, contradiction and trade-off lanes.

The verifier can delete a claim the sources never supported. It says so instead of shipping it.

05

Atlas — retrieval

Query rewriting, parallel fetch, domain scoring, ranking, semantic verification and a freshness gate, with lanes tuned per subject: finance, companies, technology, education, sport.

Free and privacy-first sources first — SearXNG, Wikipedia, RSS, Yahoo, Stooq.

06

Supercomputer

An agentic loop with its own isolated browser, a permission gate, a resource governor that yields while I'm gaming, an evidence store and a project graph.

It writes real deliverables — documents, exports, downloads — into a working folder, and resumes a task it was interrupted in.

07

Memory

Four tiers: a ten-minute recency window, session state, a Chroma vector store for semantic recall, and DuckDB for structured decisions and events.

Everything worth keeping is exported as Markdown into an Obsidian vault I can read without the app.

08

Connectors + MCP

Gmail, Outlook, Slack, Discord, Teams, Google Calendar, Notion, Todoist, Asana, Trello, Hostinger mail, IBKR and the local filesystem — each behind a per-permission gate, an audit trail, and a token store encrypted with Windows DPAPI.

The permissions are individual, not a single yes. Gmail can read, search and draft; send and delete are blocked at the connector, not by asking the model nicely.

MCP runs both ways: SYRIX's tool registry is exposed as an MCP server over stdio, and it consumes five external ones — chrome-devtools, memory, git-mcp and defillama over stdio, Microsoft Learn over HTTP JSON-RPC — through the same deny-by-default domain allowlist, so MCP can't become a way around the browser hardening.

09

Trading engine

Smart-money structure (fair-value gaps, order blocks, break of structure, change of character), multi-timeframe confluence, volume profile and VWAP.

A circuit breaker blocks trades on news shock, high volatility or earnings. Max daily loss 2%. Max risk per trade 0.25%.

10

Safety

Secret redaction before anything is logged or drawn. An access guard on screen, file and system reach. Policy gates on risky actions. Fail-closed dispatch — an ambiguous command asks rather than guesses.

A speaker-identity check with a 0.78 confidence floor before anything sensitive runs.

Scroll — moves sideways
The SYRIX Connectors panel: Gmail connected with per-permission toggles, where Read, Search and Create Drafts are allowed but Send Emails and Delete Emails are blocked
Connectors, and the part that matters. Read, search and draft are allowed. Send and delete are blocked — at the connector, with a DPAPI-encrypted token, an audit trail underneath, and a data policy of metadata first, full content only on explicit request, never stored.
1,367files tracked
277,266lines of Python
51,811lines in the Electron HUD
13services connectable

SYRIX has its own website.

A 3D, scroll-driven site I built for the project before I built this one — Three.js, a boot sequence, a raymarched core, and the whole architecture laid out chapter by chapter.

Open the SYRIX site
Preview of the SYRIX project
Project 02

Kohli

A private family hub — lists, jobs, dates, meals, money, documents, markets and an assistant, on my family's actual phones. Plain HTML, CSS and JavaScript. No framework, no build step, no packages, nothing to install. Twenty-three screens, and it installs to a home screen like an app.

  • Vanilla JS
  • PWA + service worker
  • Cloudflare Workers
  • AES-256-GCM
  • PBKDF2 · 310k
  • Canvas charts
  • Open-Meteo
  • OpenStreetMap
  • Zero dependencies

Twelve screens, one turn

Real captures · light and dark

Kohli — the in-app SYRIX family assistant screen
Assistant
Kohli — the finance screen with UK indices and a sector heatmap
Markets
Kohli — a full stock chart for AAPL with volume and indicators
Charting
Kohli — the planner showing a week of household jobs
Planner
Kohli — the encrypted family-code lock screen
Lock screen
Kohli — weekly meal planning
Meals
Kohli — documents sorted by expiry
Documents
Kohli — month calendar
Calendar
Kohli — Simple Mode, four large buttons
Simple Mode
Kohli — shared shopping lists
Lists
Kohli — household jobs
Jobs
Kohli — search across everything on the device
Search
Scroll — the ring turns

What it does

  • 23 screens · one codebase · light and dark
  • Installs to a home screen · works offline
  • Encrypted on device · syncs across four phones
  • Built-in AI assistant that reads and edits the app
  • Live markets — London, New York, Mumbai
  • Charting with indicators, drawn on canvas
  • Live map, location sharing that expires itself
  • Meals → shopping list in one tap
  • Documents sorted by what expires first
  • Simple Mode — four buttons, for grandparents
  • Voice input · photo recognition
  • Zero dependencies · zero build step
  • AES-256-GCMThe whole store — messages, photos, locations, prices — is ciphertext until the passcode is entered.
  • 310,000 roundsPBKDF2 stretching from passcode to key. Five wrong codes and the wait doubles up to a minute.
  • Re-locks itselfFive minutes in the background and it closes again. A passcode that only guards opening isn't a passcode.
  • Keys never in the appAnything shipped to a phone can be read off it. The model keys live in a Cloudflare Worker gateway instead.
  • Sync it can't readWhat goes up is encrypted with a key derived from the family code, and that code never leaves the device.
  • Never coordinatesThe assistant is told “at home” or “1.2 mi away”. It is never given a latitude and longitude.
Kohli lists screen in light mode
Light
Kohli planner screen in light mode
Light
Kohli lists screen in dark mode
Dark
Kohli planner screen in dark mode
Dark

Light and dark — both real captures, not recolours.

23screens
49,508lines, no dependencies
41test files · 9,859 lines
0packages installed
Project 03

Backtest Lab

Five trading strategies, run against equities, FX, futures and crypto on one engine, ranked by the metrics that survive contact with real money. I built it because I wanted to know whether the setups I read about actually hold — and the honest answer needed a machine.

  • Python
  • backtrader
  • pandas · numpy
  • yfinance
  • ccxt
  • ATR risk sizing
Entry ATR stop 2R target

SMC_BOS on a synthetic series — the engine's wiring-test mode, which the README labels clearly because these numbers carry no meaning for live trading. The mechanics are the production ones: position size derived from stop distance, ATR stop, fixed 2R target, one position at a time.

SMC_BOSBreak of structure — swing high/low breakout
RSI_TrendRSI pullback filtered by the 200 EMA
Boll_MRBollinger mean reversion
EMA_Ribbon21/55 cross, trend following
Donchian20-bar channel breakout, turtle-style
strats.py
class BaseRisk(bt.Strategy):
    """Shared: ATR stop, RR target, % risk sizing, one position at a time."""
    params = dict(risk_pct=0.01, atr_period=14, atr_mult=2.0, rr=2.0)

    def size_for_risk(self, stop_dist):
        if stop_dist <= 0: return 0
        risk_cash = self.broker.getvalue() * self.p.risk_pct
        return max(int(risk_cash / stop_dist), 0)

Position size is derived from the stop distance, never guessed. Commission is modelled at 0.05% a side. One position at a time, so results cannot be inflated by stacking entries.

What the README says before it says anything else

  1. Out-of-sampleBacktest 2020–2023, then check 2024–2025 separately.
  2. Walk-forwardDoes the edge hold in chunks, or was it one lucky run?
  3. Forward paper trade100+ live paper fills before a penny of real money.
  4. Real costsSpread and slippage, not just commission.
  5. Beware overfittingTune the parameters until it looks great and it will break live.

The engine also ships a synthetic mode for wiring tests, clearly marked so those results are never mistaken for evidence. An over-fitted backtest is worse than none.

04

Build history

437 commits across two repositories, May to August 2026. Five milestones, then the raw log.

14 May 2026 · SYRIXModularisation

A 40,000-line single file split into modules behind a routing layer.

23 Jul 2026 · SYRIXBenchmarked routing

Model lanes measured before the router is allowed to trust them.

24–27 Jul 2026 · SYRIXSupercomputer mode

Isolated browser, permission gate, resource governor, evidence store.

1–2 Aug 2026 · KohliFamily app shipped

v1, an in-app assistant, and a gateway needing no key or open port.

10 Aug 2026 · SYRIXSpark Zenith 1.1

Two-lane runtime complete, with a threat model and a recorded rollback.

From git log

unedited · 24 of 437
  1. SYRIX

    Prepare Jarvis/SYRIX for safe GitHub sync

  2. SYRIX

    Complete safe modularization routing phase 1

  3. SYRIX

    tools: free-brain benchmark — prove which lane is best before routing

  4. SYRIX

    feat(supercomputer): Phase 1–2 — safety baseline + isolated mode with fail-closed dispatch

  5. SYRIX

    feat(supercomputer): Phase 3 — isolated embedded browser sandbox

  6. SYRIX

    fix(supercomputer): the real cause — 21k tokens per step was starving the pool

  7. SYRIX

    fix(supercomputer): 16 bugs from the first live drive — safety, scope, answers

  8. SYRIX

    feat(supercomputer): a resource governor, so a task can run while Boss games

  9. SYRIX

    feat(supercomputer): ask for what only Boss knows, never invent it

  10. SYRIX

    fix(chat): repair an answer from the web instead of shipping the gap

  11. SYRIX

    fix(tests): the suite was calling live search APIs, and I raised the ratchet

  12. SYRIX

    perf(spark): 16.4s → 10.5s, and stop refusing before actually looking

  13. SYRIX

    docs: threat model Spark Zenith 1.1

  14. Kohli

    Kohli v1: private family hub

  15. Kohli

    Rewrite PLAN.md as a handover document; move the tests into the repo

  16. Kohli

    Make SYRIX work with no API key, no PC left on and no port opened

  17. Kohli

    Deploy Kohli Core, and fix what only a live deploy could reveal

  18. Kohli

    The passcode has to cover the price cache too

  19. Kohli

    A screenshot harness, and an overflow check that reads the real screen list

  20. Kohli

    Drop 'unsafe-inline' from style-src, and fix the boot flag it exposed

  21. Kohli

    Undo instead of "are you sure", weekday repeats, voice, sunset and streaks

  22. SYRIX

    feat: complete Spark Zenith 1.1 Vanguard runtime

  23. Kohli

    Finance: a real charting screen, and the family section earns its place

  24. Kohli

    Keypad keys pop on press, and stop the lock screen sliding on a swipe

03

Engineering principles

Eight decisions that shape both systems, each one traceable to code in these repositories.

01Deterministic before the model

Regex classifies intent, a planner selects the answer strategy, and every figure is computed in code. The model phrases the result and nothing else.

02Fail closed

Ambiguous command: ask. Unknown domain: deny. Missing capability: degrade and report it. The default is never a best guess.

03Local by default

Speech recognition, synthesis, vision and memory run on the machine. Private queries route to a local model, and external lanes are disabled for connector, document, memory and MCP data.

04Permissions are per-action

Gmail can read, search and draft. Send and delete are blocked at the connector, with a DPAPI-encrypted token and an audit trail — not enforced by prompting.

05Measure before routing

A benchmark ranks the model lanes, and a quota ledger rotates them as each is exhausted. Provider choice is data, not preference.

06Minimal dependencies

Kohli has zero packages and no build step. The HUD transpiles JSX at runtime. Neither can break from an update I did not make.

07Verify in a real browser

Screenshot harnesses, overflow checks and live acceptance probes. A passing unit test and a working screen are separate claims.

08Run it daily

SYRIX runs on my desktop; Kohli runs on four phones in my family. Defects surface in use rather than in review.

Scroll — travels down the column
05

AI tooling

Each of these left a directory, a config entry or a commit on this machine.

Agentic CLIClaude CodeMy main driver. Skills, hooks, subagents, MCP servers, custom slash commands. 3,523 files in ~/.claude.
Agentic CLICodexSecond opinion and long refactors. SYRIX has a handover doc written specifically for it. 8,547 files in ~/.codex.
IDE agentCursorWhere SYRIX's early modularisation happened — avan_cursor_mode.py exists because of it.
IDE agentAntigravity2,874 files. Used through the Gemini-backed agent flow.
IDE agentKiro · Copilot · ContinueSpec-driven work, inline completion, and a local-model IDE loop against Ollama.
ProtocolMCP — both directionsSYRIX is an MCP server over stdio, and a client of five: chrome-devtools, memory, git-mcp, defillama, Microsoft Learn.
Local modelsOllamaqwen3:8b for private queries, llava for vision. Unloaded automatically after five idle minutes to free VRAM.
InferenceGroq · NVIDIA NIMgpt-oss-120b and 20b on Groq; a nine-model NIM stack for reasoning, vision, speech, reranking and safety.
OrchestrationLangGraph · DSPy · smolagents · Pydantic AIAll wired behind feature flags — two are switched off in config, because a router I can't explain isn't an upgrade.
MemoryChroma · DuckDB · mem0 · LightRAG · ZepVector recall, structured events, and a Markdown vault I can read without any of them.
AutomationPlaywright · crawl4aiReal browsers driven headlessly — for SYRIX's research mode, and for testing this very page at five widths.
ResearchPerplexity · Gemini · GPT · GrokFor the things a search engine is bad at. None of them are in the critical path of anything I ship.

Knowing which one to reach for

Having the tools is not the skill. This is the routing table I actually use, and the same reasoning is hard-coded into SYRIX's model router.

The jobWhat I reach forWhy that one
Anything private — money, health, family, keysOllama, locallyIt physically cannot leave the machine. SYRIX has a config flag that forces this and blocks the external lanes for connector, document, memory and MCP data.
A voice reply that must land in under two secondsGroq · gpt-oss-20bLatency beats depth when someone is waiting mid-sentence. The 120b answers the same question when it's typed instead of spoken.
Multi-step research with sourcesZenith multi-agentA single model writing at length will invent a citation. An analyst, a critic and a verifier that disagree will not pass the claim through.
Long refactor across a big unfamiliar repoCodexIt holds a wide file set without losing the thread. I keep a handover document in SYRIX written for it specifically.
Architecture and debuggingClaude CodeIt challenges assumptions and asks for evidence rather than agreeing, which is what a design decision needs.
Reading a chart or a screenshotNIM nemotron-nano-vl, or llava locallyCloud vision for accuracy, local vision for anything on my own screen. Screen capture never goes to a cloud API.
A number in an answerNo model at allEvery figure SYRIX and Kohli quote is computed in code. The model is only allowed to phrase it. That is the single biggest reason they don't hallucinate.
06

Skills

Everything listed appears in code I have written and run. Nothing here is from a tutorial I watched.

Languages

Python · JavaScript (ES5 → modern) · HTML · CSS · GLSL · SQL · PowerShell · Bash

LLM engineering

Prompt engineering · context-window and cost/latency management · model routing and fallback · quota ledgers · function/tool calling · structured output validation · evaluation harnesses · streaming

RAG & retrieval

Retrieval-augmented generation · vector databases (Chroma) · embeddings · chunking · hybrid ranking · query rewriting · semantic verification · freshness gating · citation grounding

Agents

Multi-agent systems (analyst / critic / verifier / synthesiser) · agentic tool loops · LangGraph · DSPy · smolagents · Pydantic AI · MCP as both server and client · permission gating · sandboxed browser automation

Models & inference

Groq · NVIDIA NIM · Google Gemini · Cerebras · OpenRouter · Ollama (local) · gpt-oss 120b/20b · Qwen3 · Llama 4 · Mistral · Phi-4 · Nemotron

Speech & vision

Faster-Whisper STT · Piper and Kokoro TTS · Silero VAD · multimodal and vision-language models · llava · PaddleOCR · MediaPipe · YOLO

Frontend

Electron · React · Canvas 2D · WebGL and raymarched shaders · CSS 3D · Progressive Web Apps · service workers · responsive and accessible UI · light/dark theming

Backend & infra

FastAPI · WebSocket state bridges · Cloudflare Workers and Pages · Wrangler · zero-dependency Node servers · OpenTelemetry · Git

Data & markets

pandas · numpy · DuckDB · backtrader · yfinance · ccxt · Finnhub · Alpha Vantage · Stooq · TradingView · IBKR · technical indicators and risk sizing

Security

AES-256-GCM · PBKDF2 key derivation · CSP without unsafe-inline · OAuth token handling · DPAPI-encrypted stores · secret redaction · deny-by-default allowlists · per-action permissions · audit trails · threat modelling

Testing & QA

pytest · golden regression suites · Playwright · CDP automation · screenshot and layout-overflow harnesses · live acceptance probes · cross-device verification

Currently going deeper on

Formal evaluation harnesses for agent output · walk-forward validation for strategies · real-time graphics and shader work · distributed edge deployment

Kabirr Kohli as a small child, absorbed in a tablet
07

About

I'm in London, studying BTech at West Herts College. Before that, GCSEs at Northwood School in Pinner, and school up to Grade 8 at Amity International in India.

Every project on this page was built outside coursework, self-directed and unassessed. One of them is now relied on daily by my family.

I have also managed a personal investment portfolio for 18 months — 22 holdings, reviewed monthly, with 20+ written reviews of my own decisions and roughly 27% in one annual period. The discipline carries into the engineering: establish what is known, record what is not, and size the risk accordingly.

Previously a competitive footballer: Player of the Month at the LaLiga Football School in Delhi, and invited to train with Real Madrid's youth programme in Spain.

  • EducationBTech, West Herts College, Watford — 2025 to present
  • BasedLondon, UK
  • Investing18 months · 22 holdings · monthly reviews · ~27% in one period
  • HonoursPlayer of the Month, LaLiga Football School Delhi · Real Madrid youth invitation

Kabirr Kohli · AI Systems Engineer · London

Made by Kabirr Kohli

Available for
AI engineering roles.

Based in London, open to relocation. Happy to walk through any of the above in detail, including the parts that did not work first time.