I design and ship products end-to-end — architecture, backend, frontend, and the AI workflows that build them faster. Currently exploring what it takes to make AI coding agents actually reliable, not just fast.
🔎 SkannrUniversal AI code analysis tool — repo-agnostic static + AI-powered review, published to npm. Ships a "Blast Radius" feature that walks git-diff → dependency graph → risk score, with a React/D3 visualizer, plus a pre-commit review mode called Guard.
|
⚙️ StackForgeA loop engine for AI coding agents. Instead of generating code, it enforces structured progress — gating "done" on evidence (passing type-checks, tests), persisting memory across sessions, and stopping runaway agents. No LLM inside, no API keys — your agent supplies the intelligence, StackForge supplies the discipline.
|
🧠 FosselLocal-first MCP memory for every repo you work on. Store conventions, bug fixes, reviewer patterns, and decisions in SQLite on your machine with FTS5 search. Works with Cursor, Claude Desktop, and any stdio MCP client. No accounts, no cloud.
|
Done-integrity auditor for AI coding agents. When an agent marks a spec task complete, SpecTruth audits the claim against acceptance criteria using deterministic static evidence - no scores, no confidence values, just READY / BLOCKED / REVIEW_REQUIRED.
|
📊 PgPulseTerminal-based live monitoring tool for PostgreSQL (like
|
Active contributor to Tracer-Cloud/OpenSRE — 12 merged PRs on agentic observability/SRE tooling.
Merged PRs to OpenSRE
| # | Title |
|---|---|
| #3821 | fix(delivery): align error shapes across messaging delivery modules |
| #2222 | feat(scheduler): add cron-driven scheduled deliveries to messaging providers |
| #1714 | feat(messaging): add identity model, DM pairing, and tool approval metadata |
| #1570 | fix(synthetic-tests): skip E2E tests gracefully when LLM credentials are missing |
| #1404 | feat(interactive-shell): run_cli_command supports full opensre subcommand surface |
| #1037 | refactor(tools): centralize code-host unavailable payload for code-host tools |
| #1017 | test(tools): add unit tests for Bitbucket tools |
| #1015 | test(cli): add direct unit tests for CLI layout renderers |
| #1007 | test(tools): add unit tests for Azure Monitor Logs tool |
| #977 | feat(alerts): normalize incoming payloads to OpenSRE canonical format |
| #958 | refactor(wizard): split integration health validators into grouped modules |
| #957 | refactor(wizard): migrate Slack webhook validation from requests to httpx |
Active contributor to Agent-Field/agentfield — 24 merged PRs across the control plane, Go/Python/TypeScript SDKs, and security hardening.
Merged PRs to AgentField
| # | Title |
|---|---|
| #996 | fix(control-plane): skip disk payload writes in postgres storage mode |
| #975 | refactor(handlers): split execute.go into focused files (3048 -> 807 LOC) |
| #959 | refactor(storage): split local.go into focused files (9009 -> 5917 LOC) |
| #958 | fix(sdk/go): propagate caller context through MemoryBackend interface |
| #952 | feat(control-plane): add per-key rate limiting on hot endpoints |
| #945 | fix(execute): propagate agent 4xx in async lane instead of blanket 502 |
| #943 | fix(execute): resolve webhook not triggering on async status callback |
| #917 | feat(examples): triggers-demo-go end-to-end demo + Go skill docs |
| #915 | feat(sdk/go): trigger test helpers + fixture library |
| #914 | feat(sdk/go): dispatch envelope unwrap + Context injection |
| #906 | feat(sdk/go): triggers package + OnEvent/OnSchedule sugar |
| #904 | fix(sdk/python): add lock timeouts + offload blocking requests fallback |
| #899 | fix(sdk/python): replace bare asyncio.run() with loop-aware helpers |
| #812 | chore(sdk/python): enable ruff ASYNC lint rules to gate async/blocking hazards |
| #799 | fix(sdk/python): resolve ResultCache cross-loop deadlock |
| #796 | feat(sdk/typescript): trigger system parity - dispatch, sugar, testing, demo |
| #794 | test(sdk/python): expand verification.py coverage to 100% |
| #790 | fix(security): SSRF protection for approval callback_url |
| #743 | feat(sdk/ts): add trigger types, factories, and registration plumbing |
| #724 | fix(sdk/go): rewrite max_tokens to max_completion_tokens for newer OpenAI models |
| #717 | fix(control-plane): add timestamp freshness checks to prevent webhook replay attacks |
| #716 | fix(control-plane): flush SSE headers immediately in memory events handler |
| #715 | fix(control-plane): implement graceful shutdown on SIGTERM/SIGINT |
| #701 | fix(control-plane): prevent structured logs from leaking execution payloads |
Active contributor to supabase/supabase-js — open PRs on auth and PostgREST type improvements.
Open PRs to supabase-js
| # | Title | Status |
|---|---|---|
| #2573 | feat(auth): add maxAutoRefreshFailures option | 🟡 Open |
| #2445 | fix(postgrest): add typed column inference for order() with referencedTable | 🟡 Open |
Languages & Runtime
Frontend
Backend & Data
Cloud & Infra
Tools
Open to full-stack / AI-tooling roles — always happy to talk about agentic engineering.



