I build developer tools: test harnesses, docs tooling, and lately the pieces that let AI agents work with code and docs. I mostly write TypeScript on Node.js.
I'm a software engineer at Glean. I work on the developer platform: the Glean APIs, MCP, and the tools people use to build on Glean. Before that I worked on web infrastructure at LinkedIn.
LinkedIn · npm · Glean developer docs
The 68 packages I maintain on npm get about 3.2M downloads a month. I've had 1,441 pull requests merged on GitHub, 1,132 of them in other people's projects.
Most of my recent work is about AI agents: docs they can read, a review process they have to follow, and tests and evals that show whether they work.
| Project | What it does | Stars | npm/month |
|---|---|---|---|
| docusaurus-plugin-mcp-server | Serves a Docusaurus site as an MCP server, so Claude, Cursor and other agents can search and read your docs. | 35 | 20k |
| mcp-server-tester | Playwright-based tests and evals for MCP servers, with an LLM judge. I'm its main author at Glean. | 19 | |
| agent-review | A code review harness that people and AI agents run through the same commands. Models make the findings. The harness enforces the steps, independent verification and human sign-off. | ||
| skills | Agent Skills for Claude Code and Codex: self-review, pull request review, working through review comments, and plain writing. |
Tools for testing CLIs against real files and keeping docs in step with the code.
| Project | What it does | Stars | npm/month |
|---|---|---|---|
| bintastic | Runs your CLI as a subprocess against real files and captures the output, so CLI tests read like unit tests. | 4 | 918 |
| markdown-code | Keeps code samples in Markdown in sync with real source files that you can lint and test. | 1 | 2.8k |
| docusaurus-plugin-search-glean | Adds Glean search and chat to a Docusaurus site. | 1 | 6.6k |
This page updates itself every week. A GitHub Action runs scripts/update-readme.mjs, which reads projects.json and fills in stars and downloads from GitHub and npm.





