Intelligence is the new infrastructure. I'm the architect.
Not the kind who draws boxes on whiteboards. The kind who sits with the numbers, finds what they are actually saying, and builds systems that make organisations act on it. Autonomously. At scale. Reliably.
Over 10 years in IT, from business analyst to GenAI architect always following the data. I've led cross-functional teams across the US and Middle East, engaged C-suite stakeholders on AI strategy, and driven real transformation in financial services (BFSI), consumer goods (CPG), energy (EPG), and healthcare (HLM).
MBA from Liverpool Business School, UK not to step away from technology, but to understand the business problems well enough to solve them with it.
What drives me: the 10-day process that becomes 2 hours. The 3% error rate that drops to under 0.5%. The alert noise cut by 30%. The best AI systems are the ones nobody notices, because they just work.
I build the systems that make AI useful in production — not demos, not prototypes. The work that turns a model into a reliable, observable, autonomous system that enterprises can actually depend on.
Agent Harness Engineering Designing the scaffolding around frontier models: context resets, structured handoffs, generator-evaluator loops, and sprint contracts that keep long-running agents coherent across multi-hour sessions. Inspired by Anthropic's harness design research and the GAN-inspired generator-evaluator pattern.
Loop Engineering Building self-correcting agent loops where an evaluator agent grades outputs against concrete criteria, feeds critique back to the generator, and iterates until quality thresholds are met. Turning subjective judgments ("is this good?") into gradable, testable contracts.
Context Engineering Managing what enters the context window, when, and in what form. Compaction, retrieval-augmented context, and structured artifacts (progress files, feature lists) that let agents pick up where the last session left off without guessing.
Multi-Agent Orchestration Planner → generator → evaluator architectures, A2A and MCP protocols, and frameworks like LangGraph, CrewAI, and the OpenAI Agents SDK. Orchestrating specialized agents that each own a slice of the SDLC.
LLM Platform & Vector Infrastructure AWS Bedrock, Azure OpenAI & Foundry, Vertex AI for model serving; Pinecone, FAISS, ChromaDB, and Azure AI Search for retrieval. Building the retrieval and serving layer that production agents depend on.
Open to freelance, collaboration, and technical co-founder conversations.
An architect who ships without a governance layer is shipping liability. I build AI systems that are not just capable but accountable — designed to pass audit, survive regulatory scrutiny, and earn the trust of the business and its customers.
Regulatory Alignment I design against the frameworks that matter in 2026: the EU AI Act (risk-tiered obligations, high-risk system conformity assessments, GPAI transparency duties, now in force), the NIST AI Risk Management Framework (Govern–Map–Measure–Manage lifecycle), and ISO/IEC 42001 (the first certifiable AI management system standard). For any system touching EU users or regulated sectors, compliance is designed in from day one — not bolted on after launch.
Responsible AI by Design Bias detection and mitigation in training data and model outputs. Human-in-the-loop checkpoints for high-stakes decisions. Explainability and audit trails so every automated decision can be traced, justified, and challenged. Model cards and system documentation as living artifacts, not afterthoughts.
Agent Containment & Safety As agents grow more autonomous, blast radius grows with them. I design containment boundaries, permission scoping, and tool-use guardrails so an agent that goes off-script cannot take production systems with it. Inspired by Anthropic's containment research for Claude Code and Cowork.
Data Governance PII handling, retention policies, and data lineage that satisfy GDPR and sector-specific privacy regimes. Retrieval pipelines that respect access controls — no leaking privileged context across tenants or user boundaries.
Transparency & Disclosure AI-generated content labelling, chatbot disclosure, and deepfake detection readiness — aligned with the EU AI Act's transparency obligations taking effect August 2026.
Governance is not a brake on innovation. It is the foundation that lets an enterprise deploy AI with confidence.
I fix real bugs in production-grade AI infrastructure the kind that silently corrupt data, break under concurrency, or fail in edge cases that only surface at scale. Every single one is a genuine bug fix not a typo, not a docs tweak.
| Repo | Stars | Impact |
|---|---|---|
| langgenius/dify | 149K+ | 2 PRs merged — email validator fix, audio-to-text 400 error. Open: MCP timeout fix, Agent node completion params, PG logical replication, system message ordering, agent files dropped |
| chroma-core/chroma | 28.8K | 9 PRs — path normalization, fixture registration, NUL byte FTS5 corruption, include-list mutation, dependency cleanup, naming bugs |
| openai/openai-python | 31.1K | 4 PRs — null output guard, NO_PROXY sanitization, stream drain, list merge by logical index |
| NousResearch/hermes-agent | 217K+ | 4 PRs — cwd-shaped path detection, Telegram caption retry, environment shutdown guard, model override rehydration |
| firecrawl/firecrawl | 153K+ | 4 PRs — charset detection, ignoreRobotsTxt forwarding, community link fix, batch pagination |
| mem0ai/mem0 | 61.5K+ | 2 PRs — ImportError pattern, embedding dim propagation |
| topoteretes/cognee | 29.1K+ | 2 PRs — ACL raw-download for read-grant users, Postgres import guard |
| QwenLM/qwen-code | 26.2K+ | 1 PR — npm path resolution with mise/asdf Node version managers |
| huggingface/smolagents | 28.5K+ | 2 PRs — managed-agent summary leak, big-integer timeout bypass |
| crewAIInc/crewAI | 56.0K+ | 1 PR — async tools in native tool loop |
| pydantic/pydantic-ai | 18.7K+ | 1 PR — AG-UI round-trip metadata loss |
| langchain-ai/langchain | 101K+ | 2 PRs — PydanticOutputParser type coercion, OpenAI phased response parsing (auto-closed, no assignment) |
| agno-agi/agno | 41.3K+ | 2 PRs — mutable default arguments, team history subteam query (closed, no assignment) |
| openai/openai-agents-python | 28.1K+ | 1 PR — incomplete tool call stream guard (closed, maintainer wanted repro) |
| earendil-works/pi | 76.1K+ | 1 PR merged — wl-copy exit code + xclip fallback ✅ |
| mlflow/mlflow | 10.4K+ | 1 PR — bound duplicate-metric recovery cost by batch size, not run history |
langgenius/dify — Email validator rejects trailing newlines — re.search matched valid emails even with trailing newlines, causing silent validation bypass. Fix: re.fullmatch. → Merged ✅ #39320
langgenius/dify — Audio-to-text returns 400 instead of 500 — Missing file field caused an unhandled server error. Fix: return proper 400 with clear message. → Merged ✅ #39322
earendil-works/pi — wl-copy exit code ignored — The /copy command always set copied=true after spawning wl-copy without awaiting its exit code. When wl-copy failed, the xclip/OSC 52 fallbacks never ran. Fix: await exit code, fall through on failure. → Merged ✅ #7009
huggingface/smolagents — 10 ** 10**8 freezes entire process — CPython computes arbitrary-precision integers in C while holding the GIL. The thread-based timeout() decorator never fires because the worker never reaches a bytecode boundary. After timeout, the leaked thread still holds the GIL, blocking all subsequent executor submissions. Fix: pre-check bit-length before allowing exponentiation. → #2564
crewAIInc/crewAI — asyncio.run() crash in async native tools — When the async native tool path calls tool.run() → asyncio.run(), it crashes with RuntimeError: asyncio.run() cannot be called from a running event loop. Fix: add async variants that use asyncio.gather and await tool.arun(). → #6622
pydantic/pydantic-ai — Metadata loss across AG-UI round-trip — Seven categories of part-level fields (id, provider_name, provider_details) were silently dropped when messages were round-tripped through dump_messages()/load_messages(). Fix: extend existing carrier mechanisms to preserve metadata. → #6682
openai/openai-python — Streamed output lost on null response.completed — The streaming accumulator never updated the snapshot on done events, so a null output field caused silent data loss. Fix: handle all four done event types in accumulate_event(). → #3517
chroma-core/chroma — NUL bytes corrupt FTS5 index — Embedded null bytes in documents bypassed validation and corrupted the SQLite FTS5 index. Fix: reject NUL bytes before storage. → #7474
NousResearch/hermes-agent — write_file creates doubled paths — A cwd-shaped relative path like home/user/dev/notes/x.md produced /home/user/dev/home/user/dev/notes/x.md. Fix: structural detection in path resolver. → #67426
firecrawl/firecrawl — Charset detection in fire-engine — Responses without UTF-8 charset produced garbled text. Fix: detect charset from Content-Type and HTML meta tags. → #4088
topoteretes/cognee — ACL read-grant users blocked from downloading raw data — The endpoint called get_data(user.id, data_id) which checks data.owner_id == user_id, blocking users with dataset-level read grants. Fix: use the already-verified membership result instead. → #4200
QwenLM/qwen-code — npm path resolution fails with mise/asdf — Node version managers replace bin/npm with a bash shim. fs.realpathSync succeeds but spawning node /path/to/bash-wrapper fails with Syntax Error. Fix: validate resolved path ends with .js. → #7591
langchain-ai/langchain — PydanticOutputParser type coercion — List-to-str and str-to-list field types in PydanticOutputParser failed silently. Fix: coerce types at parse boundary. → Auto-closed (no issue assignment) #38996
openai/openai-agents-python — Incomplete tool call stream guard — Non-buffered Chat Completions stream could emit incomplete tool calls that crashed the parser. Fix: guard against partial tool call payloads. → Closed (maintainer wanted real-provider repro) #3912
I'm open to architecture challenges, enterprise AI strategy, freelance engagements, or startup ideas in the GenAI space.
If you're building something that matters, let's talk.
Data first. Always.