Over the past few weeks, I’ve been contributing to BasedHardware/omi, the open-source AI wearable project. As of this week, all three of my pull requests have been officially approved and merged into main by core maintainers and Omi’s founder Nik Shevchenko (@kodjima33).
Here is a quick recap of the journey, the recipes built, and 3 key engineering lessons learned along the way.
🚀 What We Built: The Python CLI Recipe Trilogy
The goal was to enable Omi users to seamlessly export and structure their conversational data without needing complex setups or external dependencies.
-
PR #13701: Conversations to Markdown
- Built a lightweight CLI recipe to convert raw conversation JSON dumps into structured Markdown compatible with Obsidian, Notion, and local notes.
- Handled UTF-8 character encoding and atomic file writing to prevent corrupt exports.
-
PR #14458: Memories Export with Categorization
- Created an exporter for Omi’s memory stream, organizing insights by date and category tags.
-
PR #13960: Action Items to Markdown with Full Unit Tests
- The most rigorous of the three! This recipe extracts action items and checklists into formatted task lists.
- When maintainer Aryan Gupta noted that earlier attempts had messy merge commits and no tests, I went back to the drawing board:
- Implemented 9 comprehensive unit tests using Python’s standard
unittest(all 9 passed in 0.05s). - Executed a clean linear git rebase on
origin/mainto eliminate redundant commits. - Result: Received quick approval from
@kodjima33and was merged directly into the core repo.
- Implemented 9 comprehensive unit tests using Python’s standard
💡 3 Key Lessons Learned
1. Zero External Dependencies Win Every Time
In open-source CLI tools, relying on third-party libraries introduces dependency bloat and breaking changes across user environments. Writing scripts purely with Python’s standard library (urllib.request, json, datetime, argparse) guarantees that anyone can run the recipe out of the box with zero setup pain.
2. Welcome Tough Maintainer Feedback
When a maintainer asks for tests or calls a branch dirty, don’t get discouraged — treat it as free mentorship. Adding automated tests not only got the PR merged, but it also made the code unbreakable against future regressions.
3. Keep Git History Squeaky Clean
Interactive rebasing and keeping commits atomic is a superpower. A clean, single-commit PR with passing CI makes a maintainer’s job 10x easier to review and click “Merge”.
🔮 What’s Next?
I’m currently looking into extending these recipes to support direct third-party REST API payloads (like Todoist tasks and Notion blocks).
Contributing to active AI hardware/software projects is one of the fastest ways to level up real-world software engineering skills.
Have you contributed to open-source recently? What was your biggest takeaway from working with repository maintainers? Let’s discuss below! 👇