// the find
badlogic/lemmy
Wrapper around tool using LLMs for agentic workflows
Lemmy is a TypeScript monorepo that wraps Anthropic, OpenAI, and Google LLM APIs behind a unified interface, with manual tool execution control as the central design choice. It ships alongside a terminal UI framework, an MCP client, and a handful of practical apps — most notably claude-bridge (swap providers under Claude Code) and claude-trace (inspect Claude Code's raw API traffic). Aimed at developers who want to build agentic tooling without being locked to one provider's SDK.
The manual tool execution model is the right call — you intercept tool calls, decide whether to run them, and feed results back yourself, which gives you real control over agentic loops instead of magic auto-execution. claude-trace is genuinely useful: it hooks into Claude Code's HTTP layer and produces inspectable JSONL + HTML of every request/response, which is something the official tooling doesn't give you. Zod-based tool schemas with automatic JSON Schema conversion means type safety carries through to the LLM boundary. The monorepo build order (packages before apps via TypeScript project references) is handled correctly, which is easy to get wrong.
The abstraction layer over three providers is the kind of thing that looks good until a provider ships a feature the unified interface doesn't model — extended thinking, prompt caching, native structured output — and then you're either waiting on this library or patching around it. claude-bridge (patching Claude Code's local node_modules to intercept API calls) is inherently fragile; any Claude Code update can break it and there's no graceful degradation. The lemmy-tui package has no tests at all, just demo scripts, which is a risk if you build anything on top of it. Documentation lives mostly in the README with minimal API reference, so expect to read source to understand behavior.