Asia/Kolkata
BlogSeptember 13, 2026

How I Started Contributing to AI Agent Tooling Projects

Sumit Vairagar
I've been building with AI agent tooling professionally for a while — using Claude Code, Kiro, and Copilot as force multipliers. But I wanted to go deeper: not just use these tools, but understand how they work at the codebase level and build credibility with the teams making them. So in September 2026, I started making deliberate OSS contributions to AI agent projects. Here's what I learned from the first three. The goal wasn't to collect merged PRs. It was to get known by real teams at real companies. My selection criteria:
  • Small enough that individual commits are attributed and visible
  • A real business behind it — not just a side project
  • Stack I could contribute to meaningfully (TypeScript, Java — my home territory)
  • Maintainers who actually respond
That led me to three projects:
  1. Atomic — TypeScript + Rust TUI coding agent, built by a 2-person SF startup
  2. Hivemind — AI memory layer, built by Activeloop (YC-backed, Mountain View)
  3. spring-ai-agent-utils — Official Spring AI community library, maintained by Christian Tzolov (Spring AI Lead at Broadcom)
My first contribution was documentation — fixing stale references to "BM25" after the implementation had switched to ILIKE. Small, but it forced me to actually understand the embedding pipeline: how the embed-daemon.js launcher works, what HIVEMIND_EMBEDDINGS controls, and what the fallback path looks like when embeddings are disabled. The lesson: documentation PRs are genuinely useful entry points. You have to read the code to write accurate docs, and maintainers appreciate someone who cares about the user-facing mental model. Merged by efenocchi within the day. This one was more interesting. The DomainFilteringTests for BraveWebSearchTool was calling the live Brave API on every test run — 25-second hangs in offline environments — and the assertions only checked isNotNull(). The filtering logic could have been completely broken and the tests would still pass. I added a package-private constructor for test injection, bound a MockRestServiceServer, and rewrote the tests with 6 real offline assertions. But fixing the tests also fixed something else: the FileSystemTools.read description told LLMs it could read PDFs and images. The implementation is a UTF-8 line reader. That mismatch was causing real hallucinations in production — I reproduced it with Gemini on a workspace containing PDFs. The lesson: tool descriptions in AI frameworks are load-bearing. They're not just comments — the LLM reads them to decide what to do. Inaccurate descriptions cause real misbehavior. This was the most technically challenging. The task was to add a [stage: name] label to input prompts so users know which subagent is asking for input. Sounds simple. But the Atomic TUI has multiple rendering paths:
  • A CustomEditor with a post-render injection model (you can't modify the border before render — you have to inject after, because the border detection uses the rendered output)
  • An ask_user_question widget with its own border lifecycle
  • A simple "AWAITING INPUT" banner with a different structure entirely
Each required a different injection strategy. Getting the truncation math right for long stage names took careful column arithmetic — the Greptile automated reviewer caught an off-by-2 that would have overflowed the terminal at the worst moment. The lesson: automated code review bots (Greptile, CodeRabbit) are worth taking seriously. The P1 they flagged was a real bug that would have shipped. OSS contribution at this level is about relationship-building, not PR count. I commented on issues before touching code. I read the maintainer's existing design decisions before proposing anything. I addressed every review comment — bot and human — before nudging anyone. One merged PR in a project used by real engineers is worth more than ten merged typo fixes in abandoned repos. The work is ongoing. If you're building on any of these projects and want to talk about the codebase, find me on GitHub or LinkedIn.
Share this post: