DEV Community

Cover image for Introducing Carrick
David Moores
David Moores

Posted on • Originally published at carrick.tools

Introducing Carrick

Cross-posted from carrick.tools.

Today we're launching Carrick, the context layer for polyrepo TypeScript teams: one index of your whole system, every service, type and contract, served to your AI coding agents over MCP and checked in CI. It lets agents search code by what it does, validate against real types across service boundaries, and reuse functions instead of rewriting them. Your agent reads one structured answer per question instead of grepping and reading source, so a question costs the same handful of tokens whether your system is three repos or thirty.

Carrick works by parsing the source code of your deployed code in CI, so every merge updates your agent's context. This is achieved by first building an AST (abstract syntax tree) using SWC (Speedy Web Compiler) and extracting function closures, API routes, protocol contracts and dependencies. Alongside that, a TypeScript compiler sidecar resolves explicit and implicit types, which lets Carrick know function arguments, return types and request/response types with compiler accuracy. The AST data goes through a multi-stage inference process which allows Carrick to know not only what your code does, but what it is intending to do. We then vectorise these intent descriptions and expose them to agents, letting your agents grep by meaning, not by name. Agents can ask natural language questions and get back the code they need, instead of hunting for it.

For example, if an agent needs to enrich user information with subscription data, it might grep "subscriptions" or "users", serving up hundreds of matches. The agent then needs to identify likely source files and load them into context. If these are misses, it tries again. Once the code is found, it might be some logic on a route path /subs hoisted onto a route tree that looks like api -> v1 -> users. The agent then needs to traverse this tree, import by import, file by file, to surface api/v1/users/subs, assuming it manages to do so correctly. All of that context gathering repeats every time you build a new feature. Carrick lets agents take a different path. They can surface the correct code by asking for precisely what they need:

"I need to enrich user data with subscription data"

Carrick builds vector embeddings and constructs call graphs in CI to surface exactly what the agent needs in one go during development. Even anonymous functions are found easily, as the search runs on intended behaviour, not naming. This is also what lets agents reuse your existing utilities instead of writing near-duplicates of them. If the agent needs to call an endpoint it has the mount graph fully resolved, and should it need to construct the correct request body, it has complete type level access to that too.

Carrick is accessible to your agents via MCP at https://api.carrick.tools/mcp. Because it integrates tightly with the TypeScript compiler, it exposes real type information to your agents, so they can validate against real types across service boundaries instead of hallucinating API shapes. It constructs accurate REST routes across your applications using a branch to leaf node routing process that follows mounting patterns and path identifiers across API libraries and frameworks, and it does the same across protocols. This combination provides powerful context to agents, allowing them to build and maintain contracts across your services by only reading source code. The same index also works for you in CI: the Carrick GitHub App catches contract drift in the pull request, flagging duplicate functions, version conflicts and contract mismatches before they merge.

The context problem compounds when working cross repo, which is why Carrick has been developed for single repositories, monorepos and polyrepo setups. If you are vibe coding on a single repo, serving a React frontend with a monorepo backend, or dealing with multiple repositories in a legacy system, you can use Carrick today to give your agents the whole system's context, build confidently and ship rapidly.

Carrick is free during pre-release. No card, no application. Every scan, MCP call and PR check runs on us while we figure out pricing, and polyrepo teams can apply for three months of free inference. When paid plans arrive there will be a generous free tier for solo developers, and team pricing designed so that deploying Carrick pays for itself, but more importantly, delivers better agentic output and fewer bugs in production.

You can get started now at app.carrick.tools: sign up with GitHub, add the Carrick GitHub Action to your TypeScript repositories, and connect your agent:

claude mcp add --transport http carrick https://api.carrick.tools/mcp
Enter fullscreen mode Exit fullscreen mode

Authentication is keyless end to end: the Action authenticates via GitHub Actions OIDC, and your agent signs in with Carrick through the browser, so no API key changes hands. You can find the system requirements and documentation at docs.carrick.tools.


Carrick is the context layer for polyrepo TypeScript teams: one index of every service, type and contract, served to AI coding agents over MCP and checked in CI. Get started.

Top comments (0)