Thank you for your interest in contributing to MEMANTO — the universal memory layer for agentic AI. This guide will help you get set up and understand how we work.
- Code of Conduct
- Ways to Contribute
- Reporting Bugs
- Requesting Features
- Development Setup
- Project Structure
- Code Style
- Running Tests
- Submitting a Pull Request
- Commit Message Convention
- Community
By participating in this project, you agree to abide by our Code of Conduct. Please read it before contributing.
- Bug reports — open a GitHub issue with reproduction steps
- Feature requests — open a GitHub issue describing the use case
- Documentation improvements — fix typos, improve clarity, add examples
- Bug fixes and features — submit a pull request (see below)
- Memory type integrations — propose new memory type handlers or agent connectors
Before opening an issue, please check that it hasn't been reported already.
When filing a bug, include:
- MEMANTO version (
pip show memanto) - Python version (
python --version) - Operating system
- Steps to reproduce — a minimal, self-contained script is ideal
- Expected behavior vs. actual behavior
- Relevant logs or error output
Open a bug report at: https://github.com/moorcheh-ai/memanto/issues
Security vulnerabilities must not be reported as public issues. See SECURITY.md for responsible disclosure instructions.
Open a feature request at https://github.com/moorcheh-ai/memanto/issues and include:
- A clear description of the problem you are trying to solve
- Your proposed solution or API
- Any alternatives you considered
- Whether you are willing to implement it yourself
- Python 3.10–3.12
uv(recommended) orpip- A Moorcheh API key from https://console.moorcheh.ai/api-keys
git clone https://github.com/<your-username>/memanto.git
cd memantoWith uv (recommended):
uv sync --group devWith pip:
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -e ".[all]"cp .env.example .env
# Edit .env and add your MOORCHEH_API_KEYpre-commit installThe hooks run uv run ruff check, uv run ruff format --check, and uv run mypy on every commit automatically.
memanto/
├── memanto/
│ ├── app/ # FastAPI application, routes, models
│ └── cli/ # Typer CLI commands
├── tests/ # pytest test suite
├── docs/ # Additional documentation
├── assets/ # Logos and diagrams
├── pyproject.toml # Project metadata and tool configuration
└── SECURITY.md # Security policy
We use Ruff for linting and formatting, and mypy for static type checking. All tools are run via uv run so no global installs are needed.
# Check for lint errors
uv run ruff check .
# Check formatting (non-destructive — reports issues without modifying files)
uv run ruff format --check .
# Apply lint fixes and format in one go (use before committing)
uv run ruff check . --fix && uv run ruff format .
# Type check
uv run mypy .Key conventions:
- Line length: 88 characters
- Target Python version: 3.10+
- Import order enforced by ruff (
isortrules) - Do not suppress type errors with
# type: ignorewithout a comment explaining why
Running pre-commit manually:
uv run pre-commit run --all-files# Run the full test suite
pytest
# Run a specific test file
pytest tests/test_cli.py
# Run with verbose output
pytest -v
# Run and stop on first failure
pytest -xTests require a valid MOORCHEH_API_KEY in your environment or .env file for any integration tests. Unit tests that don't hit the network will run without a key.
-
Create a branch from
main:git checkout -b fix/describe-your-fix # or git checkout -b feat/describe-your-featureBranch naming:
Prefix Use for feat/new features fix/bug fixes docs/documentation only chore/maintenance, dependency updates test/adding or fixing tests refactor/code restructuring without behavior change -
Make your changes. Keep each PR focused on a single concern.
-
Add tests for any new behavior. PRs that reduce test coverage will be asked to add tests before merging.
-
Ensure all checks pass:
pre-commit run --all-files pytest
-
Push your branch and open a pull request against
main. -
Fill in the PR description:
- What problem does this solve?
- How did you test it?
- Link any related issues (e.g.,
Closes #42)
-
A maintainer will review your PR. Please respond to feedback within a reasonable time. PRs with no activity for 30 days may be closed.
- Code follows the project style (
ruff,mypypass) - Tests added or updated for changed behavior
- All existing tests pass
- Documentation updated if the public API or CLI changed
- No secrets or credentials in the diff
We follow Conventional Commits:
<type>(<scope>): <short summary>
[optional body]
[optional footer(s)]
Types: feat, fix, docs, chore, test, refactor, perf, ci
Examples:
feat(cli): add --type flag to recall command
fix(app): handle empty memory list in daily-summary endpoint
docs: update REST API section in README
chore(deps): bump pydantic to 2.7.0
Rules:
- Use the imperative mood in the summary ("add", not "added" or "adds")
- Keep the summary under 72 characters
- Reference issues in the footer:
Closes #123
- Discord: Join our server — the best place for quick questions and discussions
- GitHub Issues: https://github.com/moorcheh-ai/memanto/issues — bugs and feature requests
- Email: support@moorcheh.ai — for anything that doesn't fit the above
- Docs: https://docs.memanto.ai
We appreciate every contribution, no matter how small. Thank you for helping make MEMANTO better.