For Engineers, PMs & Support

Understand Any CodebaseIn Minutes, Not Months

Stop grepping through thousands of files. Ask questions in English, get answers with code references. AST-aware semantic search that actually understands your codebase.

On-premAny LLMOpenTelemetryOpen source

Free and open source. Business and Enterprise plans available.

What changes for your workflow
Before
Grep returns 500 results, none useful
Documentation is 6 months out of date
Asking busy teammates for every question
After
Ask in English, get code with line numbers
Answers grounded in actual source code
Self-serve from the source of truth
Privacy-first by design
On-prem Any LLM OpenTelemetry

Why teams choose Probe for codebase understanding

Ask Questions in English

No more grep, no more guessing at class names. Ask "How does authentication work?" and get answers with code references and line numbers.

Understand Architecture

Map request flows, trace dependencies, understand how services connect. See the system architecture emerge from the code itself.

Onboard Instantly

New team members get productive in days, not weeks. No waiting for knowledge transfer or tribal knowledge gatekeepers.

Change Confidently

Know what you're breaking before you break it. Understand dependencies, impacts, and gotchas before touching a line of code.

The Real Problem

Knowledge is locked in code nobody has time to read.

The answers are there. The problem is finding them before the deadline, the incident, or the meeting with your VP.

01

The Knowledge Silo

Only 2-3 people actually understand how each system works. They're in back-to-back meetings. You're blocked on a question that would take them 30 seconds to answer if they had the time. You spend the day reading code you don't understand instead of shipping the feature you were hired to build.

02

The Documentation Lie

The docs say the auth service uses JWT. You read 4 wiki pages and a Confluence doc. You implement against the spec. It doesn't work. The actual implementation switched to session cookies 6 months ago. Nobody updated the docs. You wasted 3 hours on a problem that didn't exist.

03

The Search Failure

You grep for "payment" and get 487 results across 40 files. You try the IDE's "find usages" — it finds the interface, not the implementation. You ask ChatGPT — it hallucinates a solution that looks right but uses APIs that don't exist in your codebase. You're back to reading code line by line like it's 2005.

What engineers actually ask Probe

Real questions from teams understanding new codebases. Architecture discovery, feature investigation, and impact analysis.

Question
How does authentication work in this repo? Walk me through the request lifecycle from login to protected endpoint.
Authentication flow: 1. POST /auth/login hits AuthController.login (controllers/auth.go:47) 2. Validates credentials against UserService (services/user.go:123) 3. Generates JWT using jwt.NewWithClaims (middleware/auth.go:89) 4. Returns token to client. For protected routes: middleware chain checks JWT signature, extracts user ID from claims, loads user context...
Question
What services does the payment flow touch? If I need to debug a failed payment, where do I start?
Payment flow touches 5 services: 1. checkout-service receives the order (src/handlers/checkout.go), 2. payment-service processes the charge (services/stripe/charge.go), 3. inventory-service reserves items (inventory/reserve.go), 4. notification-service emails receipt (mailers/order.go), 5. analytics-service tracks conversion (events/purchase.go). Start debugging at payment-service logs, specifically StripeWebhookHandler.
Investigation
What would break if I change the User schema to make email optional?
Impact analysis: 23 files reference User.Email directly. Breaking changes: AuthService.login assumes email is non-null (services/auth.go:67), EmailVerification workflow sends to User.Email without null check (workers/verification.go:34), 3 database queries filter by email, admin dashboard displays email in user list. Recommend: add migration path and null checks in 5 critical paths before schema change.
Question
Where is the "auto-save draft" feature implemented? I need to understand how it works.
Auto-save lives in frontend/src/components/Editor.tsx. The implementation: 1. useEffect hook with 2-second debounce (line 145), 2. Calls saveDraft API endpoint (api/drafts.ts:67), 3. Backend handler in controllers/drafts.go:89 writes to Redis with 24h TTL, 4. Draft recovery on page load checks Redis first (Editor.tsx:201), falls back to localStorage. Edge case: concurrent edits use last-write-wins, no conflict resolution.
Investigation
Trace the request lifecycle for /api/orders from ingress to database and back.
Request path: 1. Nginx ingress (config/nginx.conf) routes to api-gateway:8000, 2. API gateway (gateway/main.go:145) applies rate limiting middleware, 3. Proxies to order-service (internal port 3000), 4. OrderHandler.List (handlers/orders.go:56) queries PostgreSQL via Gorm, 5. Response serialized by OrderSerializer (serializers/order.go:23), 6. Returns JSON through the gateway. Middleware chain: rate-limit → auth → logging → metrics → handler.
Question
What external HTTP calls does this service make? I need to understand all external dependencies.
External HTTP dependencies: 1. Stripe API (clients/stripe.go) for payment processing, 2. SendGrid API (clients/sendgrid.go) for transactional emails, 3. AWS S3 (clients/s3.go) for file uploads, 4. Datadog API (clients/datadog.go) for custom metrics, 5. Auth0 (clients/auth0.go) for user management. All clients have retry logic except Auth0. Stripe and S3 have circuit breakers. Network timeouts set to 10s globally (config/http.go:34).
Question
How does authentication work in this repo? Walk me through the request lifecycle from login to protected endpoint.
Authentication flow: 1. POST /auth/login hits AuthController.login (controllers/auth.go:47) 2. Validates credentials against UserService (services/user.go:123) 3. Generates JWT using jwt.NewWithClaims (middleware/auth.go:89) 4. Returns token to client. For protected routes: middleware chain checks JWT signature, extracts user ID from claims, loads user context...
Question
What services does the payment flow touch? If I need to debug a failed payment, where do I start?
Payment flow touches 5 services: 1. checkout-service receives the order (src/handlers/checkout.go), 2. payment-service processes the charge (services/stripe/charge.go), 3. inventory-service reserves items (inventory/reserve.go), 4. notification-service emails receipt (mailers/order.go), 5. analytics-service tracks conversion (events/purchase.go). Start debugging at payment-service logs, specifically StripeWebhookHandler.
Investigation
What would break if I change the User schema to make email optional?
Impact analysis: 23 files reference User.Email directly. Breaking changes: AuthService.login assumes email is non-null (services/auth.go:67), EmailVerification workflow sends to User.Email without null check (workers/verification.go:34), 3 database queries filter by email, admin dashboard displays email in user list. Recommend: add migration path and null checks in 5 critical paths before schema change.
Question
Where is the "auto-save draft" feature implemented? I need to understand how it works.
Auto-save lives in frontend/src/components/Editor.tsx. The implementation: 1. useEffect hook with 2-second debounce (line 145), 2. Calls saveDraft API endpoint (api/drafts.ts:67), 3. Backend handler in controllers/drafts.go:89 writes to Redis with 24h TTL, 4. Draft recovery on page load checks Redis first (Editor.tsx:201), falls back to localStorage. Edge case: concurrent edits use last-write-wins, no conflict resolution.
Investigation
Trace the request lifecycle for /api/orders from ingress to database and back.
Request path: 1. Nginx ingress (config/nginx.conf) routes to api-gateway:8000, 2. API gateway (gateway/main.go:145) applies rate limiting middleware, 3. Proxies to order-service (internal port 3000), 4. OrderHandler.List (handlers/orders.go:56) queries PostgreSQL via Gorm, 5. Response serialized by OrderSerializer (serializers/order.go:23), 6. Returns JSON through the gateway. Middleware chain: rate-limit → auth → logging → metrics → handler.
Question
What external HTTP calls does this service make? I need to understand all external dependencies.
External HTTP dependencies: 1. Stripe API (clients/stripe.go) for payment processing, 2. SendGrid API (clients/sendgrid.go) for transactional emails, 3. AWS S3 (clients/s3.go) for file uploads, 4. Datadog API (clients/datadog.go) for custom metrics, 5. Auth0 (clients/auth0.go) for user management. All clients have retry logic except Auth0. Stripe and S3 have circuit breakers. Network timeouts set to 10s globally (config/http.go:34).
Question
Find all event handlers for user.created. What happens when a new user signs up?
user.created triggers 4 handlers: 1. SendWelcomeEmail (events/user/welcome.go:23) sends welcome email via SendGrid, 2. CreateDefaultPreferences (events/user/prefs.go:45) initializes user settings, 3. TrackSignup (events/user/analytics.go:67) logs to analytics service, 4. SyncToCRM (events/user/crm.go:89) pushes to Salesforce. All run async via message queue (RabbitMQ). Retry logic: 3 attempts with exponential backoff.
Investigation
How does the caching layer work? What's cached, where, and for how long?
Caching strategy: 1. API responses cached in Redis with 5-minute TTL (middleware/cache.go:34), 2. Database query results cached per-request in memory (repositories/base.go:56), 3. Static assets cached in CDN for 30 days (config/cdn.yml), 4. User sessions in Redis with 24h sliding expiration (sessions/redis.go:78). Cache invalidation: explicit on write operations, no automatic background refresh. Cache keys prefixed with version number for safe deploys.
Question
What's the retry logic for failed payments? How many times do we retry and with what backoff?
Payment retry logic in workers/payment_retry.go: 1. Immediate retry on network timeout (line 67), 2. 3 additional retries with exponential backoff: 1min, 5min, 30min (line 89), 3. Max 4 total attempts before marking as failed, 4. Specific errors bypass retry: insufficient_funds, invalid_card (line 123). Webhook from Stripe can trigger out-of-band retry. Failed payments after max retries trigger notification to user and admin dashboard alert.
Question
Who owns the billing module? What team should I talk to about invoice generation?
Billing module ownership from CODEOWNERS: services/billing/ owned by @payments-team (Sarah, Marcus, Priya). Invoice generation specifically: InvoiceService (services/billing/invoices.go) owned by @priya. Related: PDF generation (lib/pdf/) owned by @platform-team. Docs: docs/billing/invoices.md last updated 2 months ago. Slack channel: #team-payments. Primary contact for invoices: @priya (Priya Sharma, priya@company.com).
Investigation
What changed in the last sprint that could affect checkout performance?
Recent changes affecting checkout (last 2 weeks): 1. PR #1847 added fraud check to cart-service (adds 200ms per request), 2. PR #1902 changed inventory lookup from cache-first to database-first (increased p95 by 150ms), 3. PR #1923 added analytics event on checkout start (async, shouldn't impact latency), 4. Database migration #034 added index on orders.user_id (should improve performance). Net impact: likely 300-400ms regression. Primary culprit: inventory lookup change.
Question
How do we handle rate limiting? What are the current limits per endpoint?
Rate limiting in middleware/ratelimit.go using token bucket algorithm. Limits by endpoint: /api/auth/* - 5 req/min per IP (line 45), /api/orders - 100 req/min per user (line 67), /api/search - 30 req/min per user (line 89), all other /api/* - 60 req/min per user (default, line 23). Backend: Redis for distributed state. Exceeded limit returns 429 with Retry-After header. Whitelist for internal services in config/ratelimit.yml. Admin override available via feature flag.
Question
Find all event handlers for user.created. What happens when a new user signs up?
user.created triggers 4 handlers: 1. SendWelcomeEmail (events/user/welcome.go:23) sends welcome email via SendGrid, 2. CreateDefaultPreferences (events/user/prefs.go:45) initializes user settings, 3. TrackSignup (events/user/analytics.go:67) logs to analytics service, 4. SyncToCRM (events/user/crm.go:89) pushes to Salesforce. All run async via message queue (RabbitMQ). Retry logic: 3 attempts with exponential backoff.
Investigation
How does the caching layer work? What's cached, where, and for how long?
Caching strategy: 1. API responses cached in Redis with 5-minute TTL (middleware/cache.go:34), 2. Database query results cached per-request in memory (repositories/base.go:56), 3. Static assets cached in CDN for 30 days (config/cdn.yml), 4. User sessions in Redis with 24h sliding expiration (sessions/redis.go:78). Cache invalidation: explicit on write operations, no automatic background refresh. Cache keys prefixed with version number for safe deploys.
Question
What's the retry logic for failed payments? How many times do we retry and with what backoff?
Payment retry logic in workers/payment_retry.go: 1. Immediate retry on network timeout (line 67), 2. 3 additional retries with exponential backoff: 1min, 5min, 30min (line 89), 3. Max 4 total attempts before marking as failed, 4. Specific errors bypass retry: insufficient_funds, invalid_card (line 123). Webhook from Stripe can trigger out-of-band retry. Failed payments after max retries trigger notification to user and admin dashboard alert.
Question
Who owns the billing module? What team should I talk to about invoice generation?
Billing module ownership from CODEOWNERS: services/billing/ owned by @payments-team (Sarah, Marcus, Priya). Invoice generation specifically: InvoiceService (services/billing/invoices.go) owned by @priya. Related: PDF generation (lib/pdf/) owned by @platform-team. Docs: docs/billing/invoices.md last updated 2 months ago. Slack channel: #team-payments. Primary contact for invoices: @priya (Priya Sharma, priya@company.com).
Investigation
What changed in the last sprint that could affect checkout performance?
Recent changes affecting checkout (last 2 weeks): 1. PR #1847 added fraud check to cart-service (adds 200ms per request), 2. PR #1902 changed inventory lookup from cache-first to database-first (increased p95 by 150ms), 3. PR #1923 added analytics event on checkout start (async, shouldn't impact latency), 4. Database migration #034 added index on orders.user_id (should improve performance). Net impact: likely 300-400ms regression. Primary culprit: inventory lookup change.
Question
How do we handle rate limiting? What are the current limits per endpoint?
Rate limiting in middleware/ratelimit.go using token bucket algorithm. Limits by endpoint: /api/auth/* - 5 req/min per IP (line 45), /api/orders - 100 req/min per user (line 67), /api/search - 30 req/min per user (line 89), all other /api/* - 60 req/min per user (default, line 23). Backend: Redis for distributed state. Exceeded limit returns 429 with Retry-After header. Whitelist for internal services in config/ratelimit.yml. Admin override available via feature flag.

Three things that change everything

01

AST-Aware Semantic Search

Search code by meaning, not just keywords. Understands functions, classes, imports, and call graphs — not just text matches.

  • "Find all API endpoints that query the users table"
  • "Where do we make external HTTP calls?"
  • "Show me error handling patterns for database failures"
  • "What's the implementation of the password reset flow?"

Traditional search tools match strings. Probe understands code structure. It parses your codebase into an Abstract Syntax Tree, recognizes language constructs, and searches semantically. When you ask "where is authentication implemented," it finds the actual auth logic — not every file that mentions the word "auth" in a comment.

Language-aware parsingUnderstands Go, Python, JavaScript, TypeScript, Java, Rust, and 20+ languages
Structural searchFind code by what it does, not what it's named
Cross-reference analysisFollow calls across files, modules, and packages
02

Multi-Repo Intelligence

Query across your entire codebase, not just one repository. Understand how systems connect, what depends on what.

Real systems aren't single repos. Your frontend calls a backend API that talks to 3 microservices that share a common library. When you need to understand how a feature works, you need to see the whole picture — not just the one repository you happen to have open.

Probe maps dependencies across repositories. It understands which services call which APIs, which libraries are imported where, and how data flows through the system. Ask about a feature and get answers that span the entire architecture.

Cross-repo searchQuery all repositories at once, not one at a time
Dependency mappingSee what depends on what across the entire codebase
Impact analysisKnow what breaks when you change something
03

Plain English Q&A

Ask questions in natural language, get answers with code references, file paths, and line numbers.

You shouldn't need to know the exact class name, function signature, or file location to find what you're looking for. You should be able to ask "how does billing work" and get a coherent explanation grounded in the actual code, with references you can click through.

Probe takes your question, searches the relevant code, understands the context, and gives you an answer with direct links to the source. It's like pair programming with someone who has read and memorized the entire codebase.

Natural language queriesNo special syntax, no regex, just ask your question
Code-grounded answersEvery answer includes file paths, line numbers, and code snippets
Contextual understandingKnows the difference between "authentication" and "authorization" in your specific system

Workflow packs for common scenarios

Pre-built workflows you can deploy immediately. Customize per team, version like code, improve over time.

Week 1

Codebase Onboarding

New to the project? Start here. Understand the architecture, find the entry points, learn the patterns. Get productive without waiting for knowledge transfer sessions or tribal knowledge gatekeepers.

  • System architecture overview
  • Request flow diagrams
  • Key patterns and conventions
  • Where to start for common tasks
Before Changes

Impact Analysis

Before you touch a line of code, understand what you're breaking. Map dependencies, find consumers, identify side effects. Make changes confidently with full knowledge of downstream impacts.

  • Dependency graph for the component
  • List of all consumers and callers
  • Potential breaking changes flagged
  • Recommended test coverage
Feature Work

Architecture Discovery

How does this feature actually work? Trace request flows, map service dependencies, understand data transformations. Go from "I need to fix checkout" to "Here's exactly how checkout works" in minutes.

  • End-to-end request trace
  • Service interaction map
  • Database queries and schema
  • External API dependencies
Continuous

Knowledge Capture

Tribal knowledge shouldn't live only in people's heads. Capture architectural decisions, document gotchas, record why things work the way they do. Make the codebase self-documenting.

  • Architectural decision records
  • Pattern documentation
  • Common pitfalls and workarounds
  • Historical context for changes

Built for privacy and security

On-Premises Deployment

Runs entirely on your infrastructure. Your code never leaves your environment. Full data sovereignty and compliance with SOC 2, HIPAA, and enterprise security requirements.

Any LLM Provider

Use your preferred model — Claude, GPT, open-source, or self-hosted. No vendor lock-in. Switch providers without changing workflows or losing context history.

Full Audit Trail

OpenTelemetry instrumentation captures every query, every search, every answer. Complete traceability for compliance, debugging, and understanding how the system is being used.

Open Source Core

The core engine is open source and auditable. Security teams can inspect exactly how code is being analyzed and processed. No proprietary black boxes.

Open Source vs Enterprise

Start with the open-source core to explore a single codebase. Scale to enterprise when you need multi-repo intelligence and team workflows.

Probe Open Source

Free forever

The core code intelligence engine. Perfect for individual engineers or teams exploring a single repository.

  • Single-repository intelligence — Ask questions about one codebase at a time
  • AST-aware semantic search — Understands code structure, not just text matching
  • No indexing required — Works instantly on any codebase, local or remote
  • MCP integration — Use with Claude Code, Cursor, or any MCP-compatible tool
  • Any LLM provider — Claude, GPT, open-source models — your choice
  • Privacy-first — Everything runs locally, no data sent to external servers

Probe Enterprise

Contact for pricing

Everything in Open Source, plus multi-repo architecture mapping, team workflows, and integrations with your existing tools.

  • Multi-repository intelligence — Query across your entire codebase, not just one repo
  • System-wide dependency mapping — Understand how services connect across all repositories
  • Cross-repo impact analysis — Know what breaks when you change something in any repo
  • Jira integration — Pull ticket context, requirements, and specs into code understanding
  • GitHub integration — Link code to PRs, issues, and historical context
  • Slack/Teams integration — Ask questions from where you already work
  • Workflow automation — Pre-built workflows for onboarding, discovery, and impact analysis
  • Intelligent routing — System determines which repos and files are relevant per query
  • Team knowledge sharing — Capture and share architectural insights across the organization
  • On-premises deployment — Runs entirely in your infrastructure for maximum security

Try Probe in under 10 minutes

Start with the open source version on your own machine. No account required, no data sent anywhere.

Quick Start

Try on Your Codebase

~5 minutes

Pick one of these quickstart options and try Probe on a real codebase before your next meeting.

~2 min

Add to AI Coding Tools

Get semantic code search in Claude Code, Cursor, or any MCP-compatible tool. Install with one command, works with any LLM API.

You get: A specialized agent for code search that finds the right context and reduces hallucinations with bounded, structured retrieval.
AI code editor setup →
~5 min

Deploy a Slack Bot

Create a Slack bot that answers questions about your codebase. Your team can ask questions in Slack and get answers grounded in actual code — no context switching.

You get: A codebase-aware Slack bot your entire team can query. Run locally to test, then deploy anywhere.
Full setup guide →
~3 min

Local CLI

Install the Probe CLI and start asking questions about any local repository. Works offline, no external dependencies.

You get: A command-line interface to ask questions about your code. Perfect for quick investigation or scripting.
CLI installation →
Enterprise

Multi-Repo Setup

1-2 weeks

Once you've validated the core technology, scale to enterprise for multi-repo intelligence, dependency mapping, and team workflows.

1
Map your architecture

We work with your team to map which repositories contain what, how services connect, and which teams own which components.

2
Configure integrations

Connect Probe to your GitHub org, Jira project, Slack workspace. Set up intelligent routing so queries go to the right repos.

3
Deploy workflows

Enable pre-built workflows for common scenarios: onboarding, impact analysis, architecture discovery. Customize per team.

4
Measure impact

Track time-to-productivity for new team members, reduction in Slack questions to senior engineers, and improvements in change confidence.

Success criteria: New engineers productive in days instead of weeks. Fewer questions blocking senior teammates. More confident changes with fewer surprises.

Want to discuss how Probe could work for your team?

Schedule a Conversation

What engineers ask us

How is this different from GitHub Copilot or ChatGPT?

Copilot and ChatGPT work with whatever code is currently visible in your editor. They don't understand your codebase's architecture, patterns, or the relationships between components across multiple repositories.

Probe maps your entire codebase — across all repos, with full understanding of dependencies and call graphs. It's the difference between asking someone who's reading the file in front of them versus someone who's read and understood the entire system.

Does this work with legacy codebases?

Yes, and this is exactly where it's most valuable. Legacy systems are where context is hardest to find — original developers are gone, documentation is outdated, patterns are inconsistent. Probe builds understanding from the code itself, regardless of documentation quality.

What languages are supported?

Probe has AST-aware parsing for 20+ languages including Go, Python, JavaScript, TypeScript, Java, Rust, C++, Ruby, PHP, and more. For languages without native AST support, it falls back to intelligent text search that's still more accurate than grep.

How long does it take to set up?

For a single repository with the open source version: 2 minutes to install, instant to start asking questions. For enterprise multi-repo setup: typically 1-2 weeks including architecture mapping, integration setup, and team onboarding. Most teams start seeing value immediately.

Ready to understand your codebase?

Try the open source version on your own machine, or talk to us about how enterprise could work for your team. We'll show you how it works on a real codebase — yours.