Now in Beta — Limited Access

The missing context layer
for AI coding agents.

Grep by meaning, not by name. A semantic context layer your agent reads instead of your source.

Vector-indexed function intents · compiler-grade types · served via MCP. Exact retrieval, not approximate.

Queryable via MCP. Runs in CI.

feature/update-orders → main
GitHub Actions · carrick / analyze

Every function, searchable by what it does.

Your agent asks in plain English and gets ranked matches across every repo — with resolved types and call graphs attached. No source-reading required.

carrick list_function_intents
user-service
Ask
Ask in plain English.
"Where do we verify webhook signatures?"
Semantic search across every function's intent, ranked by cosine similarity over the org.
"Show me functions that dedupe users by email."
Concept-level matches, not keyword matches — finds it even when the function isn't named what you'd guess.
Resolve
Compiler-grade types, pre-baked.
"What does this endpoint return?"
Two forms ready to read: named types preserved, plus every generic and utility type fully expanded.
"Was this type written or inferred?"
Each field carries evidence — file, line, and whether it's Explicit, Implicit, or Unknown.
Map
Every mount, every call.
"What's the full route after middleware?"
Mount graph resolved at scan time — full path, middleware chain, and owning router.
"Who calls this service?"
Cross-service HTTP calls tracked across the org. No flattened endpoint lists.

95%+ fewer tokens. Across every repo.

Your agent burns most of its context budget grepping and reading source to find the right function. Carrick returns it in one MCP call — and the gap grows with your codebase.

010k20k30k40k1 repo3 repos10 reposcodebase size →tokens per querygrepcarrick

Measured on semantic lookups across three TypeScript microservices, then extrapolated to a 50-source-file baseline. Keyword-friendly queries sit toward the low end of the range; the gap widens with codebase size and the number of repos searched.

See how your services connect.

The mount graph resolves every endpoint's full path and middleware chain. A live map across your org, regenerated on every PR.

Drift shows up in the PR.

The same index your agent reads can run on every PR. When a producer and consumer drift apart, you see it as a comment — not at 3am.

github-actionsbot
🪢 CARRICK: API Analysis Results
Analyzed 14 endpoints and 8 API calls across 3 repositories.
Found 2 critical mismatches, 3 connectivity issues, 1 dependency conflict.
2 Critical: API Mismatches
Type Compatibility Issue: GET /users/:id/comments
Producer: GET /users/:id/comments → Response
Consumer: GET /users/:userId/comments → Response
missing properties from Comment[]: length, pop, push, concat, and 28 more.
Type Compatibility Issue: GET /api/comments
Producer: GET /api/comments → Response
Consumer: GET /api/comments → Response
missing properties from { id: string; order_id: string; }[]: length, pop, push, concat, and 28 more.
3 Connectivity Issues
Endpoints defined but never called, or called but never defined.
GET /api/orders/:id/items — called but not defined
DELETE /users/:id — called but not defined
GET /api/stats — defined but never called
1 Dependency Conflict
Major version differences that could cause breaking changes.
express
user-service: 5.1.0
order-service: 4.21.0
comment-service: 5.0.1

Notes from the boundary.

The Multi-Repository TypeScript Problem
Navigating Type Safety Across Service Boundaries

Common questions.

Carrick runs as a GitHub Action and builds three layers per repo: a mount graph (endpoints with their full paths and middleware chains, via SWC), compiler-grade types (two pre-baked forms via ts-morph), and intent embeddings (one-to-two-sentence descriptions vectorised with Bedrock Titan v2). Your AI agent queries them via MCP — including semantic search across every function in the org, with exact cosine retrieval, not approximate.

Grep finds the name you guessed. search_by_intent finds the function that does what you described — even when it's named something unexpected in a sibling repo. Embeddings are exact-cosine at org scale (no ANN approximation), so misses don't get silently filtered.

Your agent reads one structured response per question instead of grepping and reading source. A 'what does this endpoint return' query returns the resolved type, not the file it lives in. A 'find functions that do X' query returns ranked matches, not a directory tree to crawl.

Carrick stores only API metadata — endpoint signatures, resolved types, and dependency information. It never stores or transmits your source code. Your organisation's data is isolated using unique API keys, and all storage is encrypted at rest.

Currently JavaScript and TypeScript. Once the core tooling is refined, we plan to expand to other major languages.

We'll be rolling out a generous free tier alongside paid plans in line with other CI tooling. Beta users will get early access to pricing details.

Beta members get access to a private Discord server with dedicated channels for support, feature requests, and discussion. Invitations are sent to approved beta users via email.

Stop shipping blind.

Join the beta. Be the first to give your AI agents a map of your system.