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.
- Contributor Onboarding (Required)
- 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
To protect the repository from low-effort spam and ensure a healthy community, all contributors must complete a brief onboarding process before they can open issues, submit pull requests, or leave comments.
- Visit the Memanto Contributor Onboarding Page.
- Read through the brief expectations regarding AI usage and community standards.
- Authenticate with GitHub at the end of the flow to link your username and automatically be added to the approved contributors list.
If you attempt to open an issue or PR without completing this step, our automated systems will block the action and direct you to the onboarding link.
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
- Reddit: Join our community — for discussions and feedback
- GitHub Issues: https://github.com/moorcheh-ai/memanto/issues — bugs and feature requests
- Email: [email protected] — 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.