Your AI tools read your repo blind and bill you for it. karst gives them a map first — so they load only what matters, and you see the cost before every call.
Ask Cursor or a custom agent “how does checkout work?” and it dumps tens of thousands of tokens of vaguely-related files into the model — every single time. You can’t see what it loaded, you can’t scope it, and the bill arrives at the end of the month.
Click a step — or just watch. This is exactly what the engine does to your repo today.
// imports import { getUser } from '../auth/users'; import { charge } from '../billing/stripe'; chunk · checkout()export async function checkout(cartId: string) { const cart = await loadCart(cartId); const user = await getUser(cart.userId); const total = cart.items.reduce((s, i) => s + i.price, 0); return charge(user, total); } chunk · loadCart()async function loadCart(id: string) { return db.carts.findById(id); }
Measured on Byfoods — a real 246-file NestJS + Next.js repo: 906 chunks, re-index 343s → 2.3s.
The engine and the MCP server that exposes it to Cursor & Claude Desktop are both real and tested — every number on this page is measured, not promised. What’s left is distribution: a one-line install once it’s on PyPI. We’d rather tell you exactly where the line is than pretend.
Get an early-access invite when the MCP server lands, or try the CLI today.