Local Multi-Agent Repository Intelligence System
Project description
MARIS
MARIS is a local-first, multi-agent repository intelligence system for understanding source code. It indexes repositories with language-aware parsers, stores repository knowledge locally, and uses local Ollama models for search, Q&A, documentation, and impact analysis.
The goal is to help developers reason about codebases without sending source code to external services. MARIS focuses on repository understanding rather than code generation.
Current Status
MARIS is an alpha-stage Python package.
Implemented:
- CLI entry point:
maris - Local storage with DuckDB metadata and LanceDB vectors
- Ollama-based embeddings and local model validation
- Parser implementations for Python, Java, and Scala
- Repository indexing, semantic search, symbol explanations, Q&A, documentation generation, and repository stats
- Git-based incremental indexing
- Impact analysis commands for impact, edge cases, test coverage, and breaking changes
Planned or incomplete:
- Parser factory lists additional planned languages, but Kotlin, JavaScript, TypeScript, Go, Bash, and Rust parsers are not implemented yet
- Git archaeology and architecture evolution agents are roadmap items
- Some secondary docs may lag the CLI; the root README should be treated as the current quick-start reference
AGENT.mdis contributor guidance and product direction, not an executable agent spec
Requirements
- Python 3.11+
- Ollama running locally
- Required Ollama models:
nomic-embed-textfor embeddingsqwen2.5:7bby default for Q&A and documentation
Install or start Ollama separately, then pull the default models:
ollama pull nomic-embed-text
ollama pull qwen2.5:7b
Installation
For local development:
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements-dev.txt
pip install -e .
Alternatively, use the setup script:
./setup.sh
source venv/bin/activate
Verify the CLI:
maris --help
Quick Start
Run MARIS from the repository you want to analyze. By default, MARIS stores project-specific data in .maris/ in the current working directory unless MARIS_DATA_DIR is set.
# Index supported source files recursively
maris index src/ --recursive
# Show indexed repository statistics
maris stats
# Search indexed symbols
maris search "RepositoryKnowledge"
# Ask a question grounded in indexed symbols
maris ask "How does indexing work?"
# Explain a symbol
maris explain IndexingAgent
# Generate documentation for one file
maris document src/maris/agents/indexing_agent.py --output docs/indexing_agent.md
Incremental indexing uses Git change detection:
maris index --incremental
Impact analysis examples:
maris impact analyze --symbol "GitAgent.detect_changes"
maris impact edge-cases --file "src/maris/agents/git_agent.py"
maris impact tests --symbol "QAAgent.answer_question"
maris impact breaking-changes --symbol "RepositoryKnowledgeImpl"
Interactive Q&A:
maris interactive
CLI Reference
Global options:
maris --config-file .env --skip-validation COMMAND
Commands:
maris index [PATH]: index a file or directorymaris index --incremental: index files changed since the last indexed commitmaris search QUERY: semantic symbol searchmaris explain SYMBOL_NAME: explain a symbol with relevant indexed contextmaris ask QUESTION: ask a natural-language repository questionmaris impact analyze: analyze callers, callees, affected files, and recommendationsmaris impact edge-cases: detect likely edge case risksmaris impact tests: inspect test coverage signalsmaris impact breaking-changes: detect potential breaking change risksmaris document FILE_PATH: generate Markdown documentation for a filemaris stats: show indexed symbol countsmaris clear: clear indexed metadata and vectorsmaris interactive: start an interactive Q&A session
Use command help for exact options:
maris COMMAND --help
maris impact COMMAND --help
Configuration
Configuration is loaded in this order:
- Environment variables with the
MARIS_prefix .envin the current directory~/.maris/.env- Defaults
Common settings:
MARIS_DATA_DIR=.maris
MARIS_OLLAMA_HOST=http://localhost:11434
MARIS_EMBEDDING_MODEL=nomic-embed-text
MARIS_EMBEDDING_BATCH_SIZE=32
MARIS_QA_MODEL=qwen2.5:7b
MARIS_QA_TEMPERATURE=0.7
MARIS_QA_MAX_TOKENS=2048
MARIS_DOC_MODEL=qwen2.5:7b
MARIS_DOC_TEMPERATURE=0.3
MARIS_DOC_MAX_TOKENS=4096
MARIS_MAX_SEARCH_RESULTS=20
MARIS_MAX_CONTEXT_SYMBOLS=10
MARIS_ENABLE_CACHING=true
MARIS_PARALLEL_INDEXING=false
MARIS_LOG_LEVEL=INFO
For first-time setup, maris index ... --auto-pull can pull missing Ollama models automatically. Use --skip-validation only when you intentionally want to bypass Ollama and model checks.
Architecture
MARIS is organized around a shared repository knowledge layer:
Source repository
-> Indexing Agent
-> Repository Knowledge Layer
-> DuckDB metadata store
-> LanceDB vector store
-> Ollama embeddings
-> Specialized agents
-> Q&A Agent
-> Documentation Agent
-> Git Agent
-> Impact Analysis Agent
Core source layout:
src/maris/
agents/ specialized agents and orchestrator
cli/ Click-based CLI
config/ configuration loading
core/ domain models
embeddings/ Ollama embedding service
indexing/ Tree-sitter parsers and parser factory
knowledge/ repository knowledge service
storage/ DuckDB and LanceDB adapters
utils/ shared validation helpers
Development
Run tests:
pytest
Run targeted tests:
pytest tests/test_python_parser.py
pytest tests/test_orchestrator_agent.py
Formatting and linting tools are configured in pyproject.toml:
black src tests
ruff check src tests
Contributor Guidance
AGENT.md contains contributor guidance and product direction. The key expectations are:
- Read
.codex/project-profile.mdbefore changing architecture or design direction - Read relevant files in
.codex/specs/before changing behavior - Preserve the local-first, retrieval-first, symbol-aware design
- Prefer deterministic workflows and specialized agents over broad autonomous loops
- Update specs when behavior, acceptance criteria, API contracts, or domain rules change
Gaps found during review:
AGENT.mdrefers to apragmatic-developerskill and says the guidance is intended for Claude; that dependency is not represented in this repository and may confuse other agents or contributors- The root README previously read more like a product vision than a setup and usage guide
- Some docs mention stale or unsupported CLI flags; verify behavior against
src/maris/cli/main.py - Runtime dependencies are split unevenly between
requirements.txtandpyproject.toml; userequirements.txtfor a reliable local setup until package metadata is reconciled - The roadmap and parser support docs should distinguish implemented languages from planned languages consistently
Additional Docs
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file maris-0.1.1.tar.gz.
File metadata
- Download URL: maris-0.1.1.tar.gz
- Upload date:
- Size: 94.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
46c0603fe2d965f8b227b8955e005135e81deed8ef3a323ba6386b53e55b9923
|
|
| MD5 |
bdb7fe88299e0eddf306f87557c52a5e
|
|
| BLAKE2b-256 |
82d735a1cf45f9486db6541a1ce977a5f9c2888ea241286e1a79d49fef179f54
|
File details
Details for the file maris-0.1.1-py3-none-any.whl.
File metadata
- Download URL: maris-0.1.1-py3-none-any.whl
- Upload date:
- Size: 75.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c83b0479af2d08b8104f82505bcc617033ba7caa005be7371667cc8574810f23
|
|
| MD5 |
b6c720e1982fd48a18d7ffb16191d549
|
|
| BLAKE2b-256 |
dbfebfa93521beb47cf3a0aaaa050e542862f95345c48127e3de7f9f1e107095
|