Projects

A mix of things I’ve been building lately. Each one solves a different problem but they all sit in the same space I care about: getting AI systems to work reliably outside of a notebook.


Grampus — Production-Grade Agentic AI Framework

Most agentic frameworks make it easy to write a demo and nearly impossible to run one in production. Grampus is my answer to that gap. It’s an open-source Python framework built on top of Dapr’s distributed runtime, and it ships with everything agents actually need once the demo phase is over: a four-layer memory architecture (working, episodic, semantic, procedural) with SHA-256 provenance tracking, a multi-layer safety pipeline that intercepts every LLM call and tool invocation, sandboxed code execution, MCP protocol support, and full OpenTelemetry observability. The CLI gets you from zero to a running agent in under 10 seconds.

The design philosophy is simple: Dapr handles the hard distributed systems problems (durable state, pub/sub, mTLS, workflow checkpoints) so you can focus on agent logic. Swap your state backend from PostgreSQL to DynamoDB with a one-line YAML change. The framework includes a 15-assertion eval suite, ReAct + graph orchestration with conditional routing and parallel branches, and multi-agent crew coordination. It’s published on PyPI as `grampus-ai` and has full documentation covering single-agent, multi-agent, memory, safety, evaluation, observability, and deployment guides.

Stack: Python, Dapr, PostgreSQL, Redis, OpenTelemetry, Docker

GitHub · Documentation · PyPI


Predicto — Autonomous Sports Prediction System

Predicto is a multi-agent system that predicts NBA game outcomes and compares those predictions against live Polymarket betting odds to surface potential mispricings. The interesting part isn’t the prediction itself — it’s that the system is self-improving. A “Meta-Scientist” agent (backed by Claude Opus) continuously designs and runs ML experiments, reads its own persistent learning log from previous runs, and converges toward better models without human intervention. After 36+ experiments across 5 iterations, the system settled on Logistic Regression with L2 regularization as the winner — because with ~6,000 games and 25 features, tree models overfit and linear models generalize better. That’s the kind of finding that only comes from letting the system explore the space itself.

The pipeline has five autonomous agents running sequentially: a Data Agent that fetches NBA results and Polymarket odds, a Feature Agent that computes 25 predictive features (Elo ratings, rolling form stats, rest days) with strict temporal leakage checks, the Meta-Scientist that runs the experiments, an Evaluation Agent that compares everything against naive and market baselines, and a Report Agent that generates an interactive HTML report with predictions, calibration curves, and betting edges. Time-series cross-validation ensures the model never sees future data during training. The whole thing runs end-to-end with a single `python main.py` command and includes a Flask web dashboard for viewing reports and triggering runs.

Stack: Python, Anthropic Claude (Sonnet + Opus), scikit-learn, XGBoost, LightGBM, PyTorch, pandas, Flask, SQLite

GitHub · Live Demo


GitHub Insights API — LLM-Powered Code Review Analytics

This is a FastAPI service that ingests GitHub collaboration data via GraphQL, computes reviewer-load and cycle-time metrics, and generates LLM-powered narrative insights with structured, evidence-grounded output. Point it at any public repo and a date range, and it gives you the Gini coefficient of review distribution, p50/p90 time-to-first-review and time-to-merge, and a Claude-generated narrative that explains what the numbers mean for the team — complete with a computed confidence score and grounding validation that cross-checks every number the model produces against the actual metrics.

The part I’m most proud of is the grounding pipeline. The confidence score is deterministic (sample size, effect size, window length, data freshness — weighted and combined), not LLM-generated. If Claude produces a number that doesn’t exist in the metrics payload, the system retries with the failures surfaced in the prompt. Historical data is cached per repo using a coverage table, so re-running or extending a date range only fetches the missing gap from GitHub. The service respects GitHub’s rate limits proactively, includes prompt caching to reduce Anthropic API costs, and caches insights for 24 hours keyed by repo, date range, metric, model, and prompt version. It ships with a web UI dashboard, interactive OpenAPI docs, Docker Compose support, and 50 unit + integration tests.

Stack: Python, FastAPI, Anthropic Claude (with extended thinking), GitHub GraphQL API, SQLite, Docker

GitHub · Live Demo


Artifact Hub — AI Content Platform with MCP Server

Artifact Hub is a platform for publishing, browsing, reviewing, and sharing AI-generated content. HTML mockups, images, PDFs, Markdown, CSV, code — you upload it and the system figures out the type from magic bytes (never trusting the client), generates title/description/tags via Claude Haiku, and renders a safe live preview. The same capabilities are exposed three ways: a web UI, a REST API, and a remote MCP server over stateless Streamable HTTP. That last part means Claude Desktop or any MCP client can publish, search, and leave feedback conversationally — “publish this HTML, share it for 72 hours, any feedback yet?” maps directly to tool calls.

The review system supports anchored comments — you can select a text range or click a pixel on an image to pin your feedback to the exact spot. Once an artifact has two or more comments, the system synthesizes them into consensus, disagreements, and action items, with each bullet citing the comments it drew from. Share links are HMAC-signed, time-limited, and revocable, with hash-only storage. HTML renders inside a locked-down sandboxed iframe with `connect-src ‘none’` so uploaded scripts can’t exfiltrate anything. The whole thing is one Next.js deployable on Vercel with Neon Postgres and Vercel Blob, and it includes an admin panel with AI telemetry (calls, cost, latency, outcomes), CI via GitHub Actions, an LLM eval harness, and a post-deploy smoke test that exercises the full loop over HTTPS.

Stack: TypeScript, Next.js 16, Neon Postgres, Drizzle ORM, Vercel Blob, Anthropic Claude Haiku, MCP SDK, Tailwind CSS, shadcn/ui

GitHub · Live Demo