About
I build AI systems where the model reasons and a deterministic engine computes — agentic harnesses, multi-modal pipelines running local models end-to-end, and the audit-grade data layers underneath them. I build them full-stack: the pipelines, the engines, and the product surfaces people actually use.
It started with my own books. I've traded crypto since 2020, and when I had to do my taxes I realised nothing on the market could reconcile activity spread across many wallets and multiple chains — so I built my own: a deterministic double-entry ledger that books crypto and fiat together, derived from rules and raw events and regenerated rather than hand-edited, so every number carries its receipts. It doubles as a trade planning, execution, and analysis engine.
When FTX collapsed in 2022, it was clear the ledger was also a loss-quantification tool: the proof lived off-chain — funds frozen on an exchange that never touched a wallet — but the same ledger could book those losses, structured and sourced. That set me experimenting with early local LLMs and ML: a multi-modal pipeline (voice transcription, vision, and OCR over screen recordings, PDFs, and statements, all on local models) that turns that unstructured evidence into structured, sourced entries.
When AI matured with Claude 3 in 2024, I put the model in the loop — reasoning over messy, unstructured evidence, reconciling it across sources, and classifying it into the ledger's schema, while the deterministic engine keeps the books. The same engine reconstructs any position from raw on-chain events for analytics and due diligence, every figure traceable to source.
Today that stack runs as a business. Ledger AI is its product face — automated statements from connected wallets and accounting files, with a personalised investigation service for the messy tail where the tools give up: dead exchanges, missing cost base, DeFi and LP positions, bridge hops, lost keys, theft and scam losses. Everything is read-only and address-only, and an engagement stops at workpapers for the client’s own accountant to review — never lodgement or advice. Building it has thrown off two products of its own: Ledger UI, the React component library its interfaces are built from, and Fairway, the devtools that keep the parallel coding agents building all of this off each other’s work.
The tooling is the team: local models where the data shouldn’t leave the machine, agents where the work is repetitive, and hand-built instrumentation where nothing off-the-shelf fits. I write up what holds and what doesn’t.
Open to AI and full-stack engineering roles — remote, or based in Tel Aviv.
Work
Tech Stack
Projects
Extends /insights, /usage, claude agents and hooks
Claude Code’s docs tell you what to do when you ask; Fairway tells you what to do when you don’t know what to ask, and gives you hooks to encourage patterns and discourage antipatterns. Nine small devtools sharing one Go binary, one WAL-mode SQLite store and one MCP server, so anything one tool writes another can read — each extending a command Claude Code already ships: /insights, /usage, claude agents and the tool hooks. Pick the ones you want: most are read-only pull commands that need nothing installed, and two wire into your setup with explicit install and uninstall verbs. The binary alone creates no files, opens no ports, writes no config. Same idea as the ledger work one level up: derive the verdict from observable state instead of trusting anyone to remember.
Done-for-you · the messy tail worked by hand
Automated tools reconcile the easy 90% of a position and hand back the 10% that decides the number. This service works that tail by hand, at volume, across crypto and fiat — and quantifies the gap in dollars rather than hiding it.
Accounting components that move correctly
A React component library of animated, Excel-literate accounting primitives — journal entries expanding to their debit and credit legs, transaction split and merge, reconciliation matching, P&L, balance-sheet and pivot tables, and entry forms with spreadsheet input semantics. The domain constraint is the product: components take double-entry-shaped props and animate only the transitions the ledger permits, so a split visibly conserves its parent total. It composes over a headless engine rather than wrapping a data grid.
Writing
See allBuilding in Public
I write about building crypto and financial-data tools — and what I learn using AI to ship faster.