Building practical AI systems from a farm in North Carolina.
After twenty years in payments and enterprise software—mostly at Visa, ending as COO and CPO at Fraedom—I traded corporate life for a farm. Now I am building PersekOS and contributing precise, practical fixes to OSS.
🌱 Currently tending PersekOS, upstream bugs, and an actual farm.
- See what I am building: PersekOS, my local home for work that would otherwise disappear into chats, notes, reminders, and browser tabs.
- See what I have shipped: merged open-source contributions across AI, developer tooling, accessibility, reliability, and local-first software.
- Read the unlikely backstory: from corporate systems to a North Carolina farm.
- Compare notes: X is the best place to reach me.
I am early in my open source journey, so this list is currently small. These are projects where a contribution actually merged upstream. It should grow quickly.
| Project | Contribution |
|---|---|
| codebase-memory-mcp | real ThreadSanitizer test target; tools/list pagination compatibility; Python LSP eval-depth guard; libgit2 allocator version floor; UI delete unwatch cleanup; Visual Studio strict tool schema |
| cli-printing-press | cli-printing-press #3504 OAuth token persistence; cli-printing-press #3497 offset/page bare --all pagination; cli-printing-press #3477 array request body stdin; remove vendor-specific profile wording |
| open-wispr | configurable Whisper prompt; sleep/wake recording recovery; clipboard insertion fix; Handled Homebrew trust installer failures with clearer remediation and installer regression coverage. |
| openwhispr | OpenWhispr #1007 local model download state; clipboard restore delay regression; Preserved rich clipboard formats during restore. |
| nono | network block upstream proxy conflict; intercept argv matcher hardening |
| OpenMAIC | OpenMAIC #876 isDeckComplete predicate, PR #883; Rendered math formulas in quiz text and added focused tests around formula parsing and fallback behavior. |
| Vibe-Trading | Vibe-Trading #403 IM reply timeout config, PR #413; preflight redirect |
| remotion | WebM tail frame extraction; InputDragger keyboard focus |
| graphiti | Fix Graphiti Docker Compose PATH interpolation |
| astryx | ChatComposerInput child onChange submit flow |
| strix | Linux release binary GLIBC baseline |
| SurfSense | SurfSense #1354 separate embedding base URL |
| impeccable | impeccable #334 Google Fonts css2 family parsing |
| openmed | OpenMed #288 biomedical NER entity type categories, PR #1408 |
| server | preserve Universal Player startup restore settings |
| last30days-skill | last30days skillignore regression coverage follow-up |
| browser | charset unicode mojibake |
| SnapOtter | Repaired copied AI virtualenv paths during Docker bootstrap and added regression coverage. |




