Skip to main content
Codanna is a local code intelligence MCP server and CLI for AI coding agents. Project resolvers read build configuration files (go.mod, pyproject.toml, tsconfig.json, composer.json, pom.xml, build.gradle.kts, .csproj, Package.swift) to derive module paths and source roots for cross-file relationship tracking and import resolution.

How It Works

  1. Config Discovery: Codanna reads project files (go.mod, pyproject.toml, composer.json, etc.)
  2. Rule Extraction: Module prefixes, source roots, and namespace mappings are extracted
  3. Path Resolution: File paths are mapped to module paths during indexing
  4. Cache Management: Rules are cached in .codanna/index/resolvers/ with SHA-based invalidation
Resolution rules rebuild during codanna index when config file contents change.

Configuration

Add config files to settings.toml:
After configuration changes, re-index:

Go

Reads go.mod to extract the module name and resolve import paths.
Resolution example:
  • File: internal/handlers/user.go
  • Module: github.com/user/repo
  • Result: github.com/user/repo/internal/handlers

Python

Multi-backend support for Python’s build ecosystem. Codanna detects the backend from [build-system].build-backend in pyproject.toml.

Supported Backends

If no backend-specific config is found, Codanna auto-discovers packages by scanning for __init__.py files.

Kotlin

Reads build.gradle.kts to detect source roots based on project layout.
Kotlin Multiplatform projects use different source layouts. Specify source_layout explicitly when auto-detection produces incorrect paths.

Source Layouts

Multi-Project Configuration


Java

Reads Maven pom.xml or Gradle build.gradle to detect source roots.
Java projects use the same layout system as Kotlin. Specify source_layout when the project uses non-standard source directories.

Multi-Project Configuration

Resolution example:
  • File: src/main/java/org/example/service/UserService.java
  • Result: org.example.service.UserService

PHP

Reads PSR-4 autoload configuration from composer.json.
composer.json example:
Resolution example:
  • File: src/Http/Controllers/UserController.php
  • Namespace: App\Http\Controllers\UserController
Codanna sorts namespace mappings by path length (longest match first) for correct resolution.

C#

Reads SDK-style .csproj files to extract namespace configuration.
Extracted fields:
  • RootNamespace - default namespace for the project
  • AssemblyName - output assembly name
.csproj example:

TypeScript

Reads tsconfig.json to resolve path aliases and baseUrl settings.
Resolution features:
  • Path aliases (@app/*, @components/*)
  • baseUrl resolution
  • Project references
tsconfig.json example:

Swift

Reads Swift Package Manager Package.swift to detect source roots.
Uses SPM conventions (Sources/, Tests/) or custom path: specifications from target definitions. Resolution example:
  • File: Sources/Networking/Client.swift
  • Module: Networking

Verifying Resolution

After indexing, verify resolution with:
Cross-file relationships should resolve based on project configuration. Check the callers and calls sections to confirm relationships are detected.

Next Steps

Relationships

Track callers, calls, and type dependencies.

Language Support

Supported languages and filters.