Skip to main content

Resume · AI tooling

John Kingola @Astralchemist

AI tooling engineer · Models as extensions to coding tools · MCP servers and CLI design

I check that something is true before anyone relies on it: trading strategies, AI agents, and the systems around them.

  • Nairobi, Kenya (UTC+3)
  • remote as a contractor or through an EOR
  • no visa sponsorship needed

I build the layer between AI models and the tools developers already use. Rig plugs into coding agents such as Claude Code, Cursor, and Codex over MCP and gives them a semantic map of the codebase instead of grep; it is at v0.3.0 on npm and launched on Show HN. StickyInc finds whichever agent CLI is installed (claude, codex, gemini, or Ollama) without asking for a key, and turns a tool call into a checkbox on screen. Cernos is a terminal tool with its own command and TUI that runs an LLM loop on OpenRouter to translate trading strategies from eight languages, then checks every translation against the original code. On the Change Intelligence Platform I fine-tuned Llama 3.1 8B and served it with vLLM on a Modal L4 GPU, behind an OpenAI-compatible API with an OpenRouter fallback.

Rig on npm, launched on Show HN
v0.3.0
Rig on npm, launched on Show HN
coding agents Rig wires into
3
coding agents Rig wires into
languages Cernos translates and verifies
8
languages Cernos translates and verifies
API keys StickyInc asks for
0
API keys StickyInc asks for
Now
Rig is at v0.3.0 on npm. On retainer for the Change Intelligence Platform, including its self-hosted Llama 3.1 8B on vLLM.

Why hire me: decisions, and how I checked them

  1. What does a coding agent need from a codebase that grep can't give it?

    Thought
    Grep returns strings. To change code safely an agent needs callers, callees, and what a change will break.
    Tested
    Rig indexes a repo in six stages into a typed graph and exposes search, callers and callees, impact and hubs as MCP tools, wired into Claude Code, Cursor and Codex.
    Result
    On npm at v0.3.0 and launched on Show HN. Local-first: no key, nothing uploaded.
    Proof
    npm: rig-constellation
  2. Can you trust an LLM's translation of trading code?

    Thought
    An LLM can turn a strategy into clean JSON that still trades differently from the original.
    Tested
    Cernos runs the original code in a locked-down sandbox and requires its signals to match the translation before anything is backtested. The sandbox runs Python originals today.
    Result
    A translation that drifts is rejected, not accepted as mostly right.
    Proof
    Private repo, described
  3. How do you put an LLM in a desktop app without asking for an API key?

    Thought
    Most developers already have an agent CLI installed and signed in.
    Tested
    StickyInc detects claude -p, codex exec, gemini -p or Ollama and uses whichever one is there.
    Result
    No key, no config file, no backend. Releases are cut from every tag.
    Proof
    StickyInc releases
  4. What does "balance" actually mean in this API?

    Thought
    The schema documents a field; only a live account shows what is spendable.
    Tested
    Checked CreditWatch against a live account: the spendable figure is credit, not balance.
    Result
    Shipped 1.0.0 on that finding. Windows and Linux were built and unit tested but not claimed, because no one had run the installed binary.
    Proof
    CreditWatch 1.0.0

Experience

  1. Dec 2025 to Present
    Dubai, UAE · remote

    The Change Intelligence Platform · Lead engineer (contract), then maintainer

    • Multi-tenant change-management SaaS: Next.js and FastAPI on a Docker Compose stack with Supabase. Fine-tuned Llama 3.1 8B and served it with vLLM on a Modal L4 GPU, behind an OpenAI-compatible API with an OpenRouter fallback.
    • Built and shipped the platform solo in six months, Dec 2025 to Jun 2026, from architecture to production, under the direction of change-management practitioners. On retainer since for maintenance and feature work.
    • Four role-based tiers, including a delegated Champion portal with magic-link auth, PDF export via Puppeteer, a seven-tag sentiment model, and an automated LinkedIn outreach pipeline.
    • Led a latency and build-performance pass after an audit surfaced I/O-wait bottlenecks and N+1 query patterns.
    • Next.js
    • FastAPI
    • Python
    • Supabase
    • PostgreSQL
    • Docker Compose
    • Llama 3.1 8B
    • vLLM
    • Modal
    • OpenRouter
    • Puppeteer
  2. Oct 2025 to Present
    Dubai, UAE · remote

    Early-stage stealth startup · Technical advisor, algorithmic systems

    • Joined as lead algorithmic engineer at the founding stage, then moved to an advisory role while funding closes.
    • Designed the backtest-as-a-service API: FastAPI, TimescaleDB, a Redis cache keyed on the strategy hash, and per-key rate limits.
    • Python
    • FastAPI
    • TimescaleDB
    • Redis
  3. 2024 to 2025
    Nairobi · hybrid

    ConsultHasha · Principal systems engineer

    • Early engineer at a startup. Designed and built the REST API layer and the production service endpoints the product and its client integrations ran on.
    • Owned architecture, deployment, and reliability.
  4. 2020 to 2025
    Remote

    Upwork · Freelance quant and full-stack developer

    • MQL5 and MT5 Expert Advisors built to client risk specifications, then Python backtesting tools, Telegram signal bots, and execution dashboards.
    • Also Docker-first Next.js and Postgres client platforms.
    • MQL5
    • MetaTrader 5
    • Python
    • Telegram bots
    • Next.js
    • PostgreSQL
    • Docker

Education

  • Sep 2022

    Mount Kenya University · Computer Science

Projects

  1. Rig

    Semantic codebase graph over MCP

    npm v0.3.0 · Show HN

    npx rig-constellation gives a coding agent a map of the codebase instead of grep. Local-first, no key, nothing uploaded.

    ~100 commits, 4 days · 6 index stages · 3 agents wired

    Hard: About 100 commits in four days to v0.1.5, stable per-project ports, and keeping the map live during indexing.

    npm: rig-constellation · Source

    TypeScript · MCP · Node · SQLite

  2. StickyInc

    Commitment pane fed by MCP

    v0.5.1 · v0.6 in review

    Tell an LLM to call the dentist Friday, an MCP tool call fires, and a checkbox appears on screen. No backend, ever.

    0 backends · 4 agent CLIs detected · every tag released

    Hard: Detecting whichever agent CLI is installed without asking for a key or a config file.

    Releases

    TypeScript · Rust · Tauri · MCP

  3. Cernos

    Strategy research engine in Rust, LEAN indicators ported

    Pre-release · private repo

    A terminal tool that finds trading strategies on the web, translates them into one JSON format with an LLM, checks each translation against the original code in a sandbox, backtests and breeds them, and exports the winner as standalone Python or C++.

    241 indicator types ported from LEAN · 129 testing methods · 8 source languages translated

    Hard: Counting every parameter trial. The first gauntlet records each parameter set it tries and judges with CSCV/PBO and a probabilistic Sharpe of at least 0.95, so tuning cannot hide in the result. The first BTC-USD run failed all 12 trials.

    Private repo, architecture only

    Rust · OpenRouter LLM loop · Sandboxed containers · Python and C++ export

  4. CreditWatch

    Cloud-credit runway from the menu bar

    1.0.0 released 2026-09-21

    Answers one question: how long does the prepaid GPU credit last at the current burn.

    10% runway buffer · 72 h history kept · 1.0.0 not 0.1.0

    Hard: The account schema documented balance. A live account proved the spendable figure is credit. Windows and Linux were built and unit tested but not claimed, because no human had run the installed binary.

    GitHub release 1.0.0 · CHANGELOG and ROADMAP

    Kotlin · Compose Desktop · SQLite · Keychain

  5. Signly

    Forex signal verification

    Maintained, not live

    Verify Telegram trading signal channels before trusting them. Built and shipped, and maintained; not live, with the public site offline.

    5 iterations · 11 mo to product · 5 what-if exits

    Hard: Parsing free-text signals reliably, and defining a verdict that penalises stop-loss indiscipline instead of rewarding win rate.

    Maintained, not live

    Python · FastAPI · Polygon · PostgreSQL

  6. Liquidity Engine

    BTC order-book research, pre-registered

    Public · negative result

    A deterministic Rust engine that records BTC perpetual order books on three venues, replays them exactly, and tested a market-making strategy that does not work at retail fees.

    47–67% variance from OFI · 41–66 ticks drift at 1 s · 3 venues, exact replay

    Hard: Measuring what a fill costs. Probes resting at the touch saw 41 to 66 ticks of adverse drift within one second on every venue, in every session, under every fill model.

    Evidence page · Study, eleven figures · Source

    Rust · WebSocket feeds · L2 queue model · Python figures

  7. Backtest API

    Trading infrastructure

    Private, described architecturally

    Backtest as a service: the boring parts, built so the same strategy is never computed twice.

    5×3 pairs × timeframes · 60/min rate limit · hash cache key

    Hard: Cache keys that survive strategy edits. The same strategy is asked for a hundred ways, so the key is the strategy hash, not the request.

    Private repo, architecture only

    Python · FastAPI · TimescaleDB · Redis · Docker

  8. Trading Strategy Library

    Public quant work

    Open source

    A strategy catalogue plus research tools, from indicator to execution to statistics.

    4 strategy families · 5% max risk per trade · 1:1 breakeven move

    Hard: Keeping research honest. The research suite is labelled research-only in its own README, and that label stays.

    Quant-Algos · Expert-Advisor v0.5.1 · MT5 Expert Advisor

    Python · MQL5 · NumPy · QuantConnect Lean

  9. Strategy Rebuilds

    16 published FX and gold systems, reverse-engineered

    In progress · private

    Rebuilt published MyFxBook systems from their trade logs: profiled 16, inferred their entry rules, and ported the strongest to MT5 and to a core-plus-adapters Python kit where session, trend and pause filters attach without touching the entry logic, then tested them on real broker ticks.

    16 systems profiled · 88% of one vendor's trades matched by the inferred rule · 218 trades reproduced exactly

    Hard: Separating an edge from tuning. Filters were chosen on January to June 2026 and checked on July to October; only 33% of profitable setups held, and one-shot holdouts with hashed configs failed after costs. Live demo fills then confirmed the cost model.

    Private repo, architecture only

    MQL5 · MT5 real-tick tester · Python · Dukascopy and broker ticks

Also: Zoetrope (Rust, deterministic HTML-to-video, pre-alpha); Trading-System-CI (QuantConnect Lean in Docker with an Optuna rebate optimizer); Meridian, Ledgerly (client and SaaS platforms, Docker-first Next.js and Postgres).

Upstream fixes to quant and trading libraries

Bugs found by reference-value tests and benchmarks, reproduced with failing tests, and reported with a fix.

  • ffnThe ulcer performance index was not annualised, rounding residue counted as tracking error, short lookbacks missed month-end anchors, and 3y, 5y and 10y returns were reported without enough history. Four PRs merged, credited by name in the v1.3.0 release notes.
  • skfolioDrawdown measures ignored a loss on the first observation, so they disagreed with the optimizer. PR merged the same day, listed in the v1.4.1 release notes.
  • quantstatsThe probabilistic Sharpe ratio used the wrong kurtosis and could return a probability above 1. All three bugs confirmed by the maintainer, fixed in v0.0.82.
  • Databento dbnThe symbol map stored one entry per day per mapping, 1.73 GB at 20,000 instruments, and the test suite failed without a feature flag. Both fixed by the maintainers, released in 0.71.0 and 0.72.0.
  • gs-quantGoldman Sachs' toolkit: a correlation crash, Sortino computed over losing days only, Sharpe on two clocks, an RSI seed, and backtest P&L that counts the starting capital. Six issues and five fix PRs open; the first was reproduced independently by another contributor.
  • QlibMicrosoft's risk_analysis max drawdown ignored a loss in the first period, the same bug as skfolio's. PR open.
  • barter-rsThe tear sheet showed the loss rate as the win rate, and got profit factor and Sortino wrong. PR open.
  • Alpaca MCPGenerated trading tools carried no read-only or destructive hints, so a client could not tell a quote from an order. PR open.

Findings from live verification

  • Scope the promise, not the codeCreditWatch 1.0.0 was built and unit tested on Windows and Linux. It claims macOS only, because no human had run the installed binary on the other two. The code shipped. The claim waited.
  • Trust the live system over the schemaThe provider's account schema documented a balance field. A live account proved the spendable figure is credit. The monitor now reads credit, and the finding is quoted in the CHANGELOG rather than hidden in a commit.
  • Alerts must not fire on the pastA 6-hour alert armed when runway is already 4 hours fires immediately and teaches the user to ignore it. CreditWatch refuses to arm any threshold below the current runway, and says so in the dialog.

Numbers as of 2026-11-03. No live P&L is claimed.