agentmemory-python / CONTRIBUTING.md
Yash030's picture
docs: rewrite all MD files for Python project + fix graph node colors
7921736
# Contributing to agentmemory-python
Thanks for your interest. This covers the path from "I have an idea" to "it's merged."
## License
Apache-2.0. Every contribution is covered by it.
## Before opening an issue
Search [open issues](https://github.com/Yash030/agentmemory-python/issues?q=is%3Aopen) and [closed issues](https://github.com/Yash030/agentmemory-python/issues?q=is%3Aclosed) first.
**Bug reports** β€” include:
- Python version (`python --version`)
- OS
- Exact steps to reproduce
- What you expected vs. what happened
- Any relevant log lines from the server
**Feature requests** β€” describe the user problem before the implementation. "I couldn't X because Y" is more useful than "please add Z."
## Before opening a PR
1. Fork the repo and create a branch off `main`:
- `feat/<short-name>` for new features
- `fix/<issue-number>-<short-name>` for bug fixes
- `docs/<topic>` for documentation
- `refactor/<topic>`, `chore/<topic>` for everything else
2. Install dependencies:
```bash
pip install -r requirements.txt
```
3. Make your change. Keep it focused β€” one logical change per PR.
4. Run the server and test manually:
```bash
python src/app.py
curl http://localhost:3111/agentmemory/livez
```
5. No test runner is configured yet. If you're adding tests, use `pytest`:
```bash
pip install pytest
pytest
```
6. Run linting before submitting:
```bash
pip install ruff
ruff check src/
ruff format src/
```
## Pull request guidelines
- Write a clear description: what it does, why, and how to verify.
- Link the issue the PR resolves (`Fixes #NNN` or `Closes #NNN`).
- Keep PRs small β€” large PRs are harder to review and slower to merge.
- Address review feedback in new commits, not force-pushes.
## Code style
- Python 3.10+. No walrus operator or match/case unless there's a real reason.
- No comments that restate what the code does. Only comment the *why* β€” a hidden constraint, a workaround for a specific bug, a non-obvious invariant.
- No dead code or commented-out blocks.
- Validate inputs at system boundaries (REST endpoints, MCP handlers). Never pass raw request bodies to internal functions.
- Use `hmac.compare_digest` for secret comparisons β€” never `==`.
## Architecture rules
When adding a REST endpoint, also update:
- `README.md` API Reference table
- `AGENTS.md` if it's agent-callable
When adding an MCP tool, also update:
- The schema list in `GET /agentmemory/mcp/tools` in `src/app.py`
- The dispatch handler in `POST /agentmemory/mcp/tools` in `src/app.py`
- The tool table in `README.md`
- The tool list in `AGENTS.md`
When adding a new KV scope, also update:
- The `KV` class in `src/functions.py`
- The scope table in `AGENTS.md`
## Good first contributions
- Add pytest test coverage for `src/functions.py`
- Add a hook script for a new agent (see `INSTALL_FOR_AGENTS.md`)
- Add support for an additional embedding provider (OpenAI, Cohere, local)
- Improve error messages in the viewer
- Add a language-specific README to `READMEs/`
## Questions?
Open an issue or start a discussion. The project is small enough that a quick question is usually faster than reading all the code.