Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ When a PR merges, `action.py` runs this sequence:
If true → exit 0, log "low-signal PR skipped"
6. Call `extract(title, body, review_comments)` — Instructor + Claude Sonnet
7. If `contains_decision` is False → exit 0 silently
7b. If `contains_decision` is True but `confidence < 0.65` → discard silently
7b. If `contains_decision` is True but `confidence < 0.40` → discard silently
8. If `contains_decision` is True:
- Scan PR body + review comments for `ADR-NNN` patterns; glob matching knowledge records
into a `related` list
Expand Down
14 changes: 12 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
# Memex

Memex extracts and indexes the institutional knowledge buried in your GitHub pull requests, review threads, and ADRs — automatically, without changing how your team works.
[![PyPI](https://img.shields.io/pypi/v/memex-oss)](https://pypi.org/project/memex-oss/)
[![Python 3.12+](https://img.shields.io/badge/python-3.12%2B-blue)](https://pypi.org/project/memex-oss/)
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)

Engineers don't write anything new. Memex hooks into the artifacts that already exist and makes them searchable.
**[trymemex.dev](https://trymemex.dev)** · [PyPI](https://pypi.org/project/memex-oss/)

Most architectural decisions are never written down. They live in a three-minute hallway conversation, a Slack thread that gets deleted, or a pull request where every review is just "LGTM".

Memex captures decisions at the moment they're made — extracting structured rationale from the GitHub artifacts that already exist (PRs, review threads, ADRs) without asking engineers to change how they work.

```bash
$ memex query "why did we move off MongoDB"
Expand All @@ -19,6 +25,10 @@ Results for: why did we move off MongoDB
#2 ...
```

Or, surfaced automatically by an AI coding agent before it suggests an architecture change:

![Cursor using memex_query to surface a past decision before suggesting an architecture change](memex_cursor_landing.html.png)

---

## How it works
Expand Down
2 changes: 1 addition & 1 deletion memex/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
class ConfidenceLevel(str, Enum):
high = "high" # >= 0.80 — publish
medium = "medium" # 0.65–0.80 — publish with flag
low = "low" # < 0.65 — discard
low = "low" # < 0.65 — publish with ⚠️ flag


class KnowledgeRecord(BaseModel):
Expand Down
Binary file added memex_cursor_landing.html.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 8 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@ build-backend = "hatchling.build"

[project]
name = "memex-oss"
version = "0.3.0"
version = "0.3.1"
description = "Institutional knowledge extraction for engineering teams"
readme = "README.md"
license = { text = "AGPL-3.0-or-later" }
authors = [{ name = "Memex Contributors" }]
keywords = ["knowledge-management", "github-actions", "adr", "engineering"]
keywords = ["knowledge-management", "github-actions", "adr", "engineering", "llm", "mcp", "developer-tools", "institutional-knowledge"]
classifiers = [
"Development Status :: 3 - Alpha",
"Intended Audience :: Developers",
Expand All @@ -34,6 +34,12 @@ dev = [
"pytest-mock>=3.14.0",
]

[project.urls]
Homepage = "https://trymemex.dev"
Repository = "https://github.com/Jonasb8/memex"
"Bug Tracker" = "https://github.com/Jonasb8/memex/issues"
Changelog = "https://github.com/Jonasb8/memex/releases"

[project.scripts]
memex = "memex.cli:cli"

Expand Down
Loading