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, tested, and shipping — install it today with pip install karst. Every number on this page is measured, not promised. We’d rather tell you exactly where the line is than pretend.
Install it today with pip install karst, or get product updates by email.