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
14 changes: 13 additions & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,19 @@
{
"name": "lean-memory",
"source": "./plugin",
"description": "Observing MCP + read-only console for lean-memory: store and search agent memories from Claude Code, then verify the supersession spine, per-hit score breakdown, and provenance episodes in a local UI."
"description": "Observing MCP + read-only console for lean-memory: store and search agent memories from Claude Code, then verify the supersession spine, per-hit score breakdown, and provenance episodes in a local UI.",
"category": "productivity",
"keywords": [
"memory",
"agent-memory",
"mcp",
"local-first",
"sqlite",
"retrieval"
],
"homepage": "https://github.com/Wuesteon/lean-memory",
"repository": "https://github.com/Wuesteon/lean-memory",
"license": "Apache-2.0"
}
]
}
29 changes: 29 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,30 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

Nothing yet.

## [0.2.1] - 2026-07-21

Metadata-only release for the public launch — no code changes.

### Fixed

- **`lean-memory-console` had a blank PyPI page**: its README is now wired as
the package long description, and license, authors, keywords, classifiers,
and project URLs are declared (none were before).
- Two relative links that 404 on PyPI (README → ARCHITECTURE.md,
console README → core README) are now absolute GitHub URLs.

### Changed

- Core package: added Documentation / Changelog / Issues project URLs.
- Claude Code plugin marketplace manifest: added the discovery metadata
directories rank on (category, keywords, homepage, repository, license).
- Launch copy (`docs/launch/`) tightened after adversarial review: the
"no other memory product stages agent-proposed changes for approval"
superlative is replaced with a defensible differentiator, positioning vs
built-in Claude Code memory added, "no Docker" added to the
differentiation copy, measured calibration figures removed from post
bodies per the no-benchmark-numbers launch rule.

## [0.2.0] - 2026-07-17

### Added
Expand Down Expand Up @@ -180,4 +204,9 @@ rerank, and ADD-only supersession queryable at any past point in time
- Sparse BM25 retrieval arm now honors the `as_of` interval predicate.
- Known-entities handed to the router/typer are capped at the 100 most recent.

[0.2.1]: https://github.com/Wuesteon/lean-memory/releases/tag/v0.2.1
[0.2.0]: https://github.com/Wuesteon/lean-memory/releases/tag/v0.2.0
[0.1.3]: https://github.com/Wuesteon/lean-memory/releases/tag/v0.1.3
[0.1.2]: https://github.com/Wuesteon/lean-memory/releases/tag/v0.1.2
[0.1.1]: https://github.com/Wuesteon/lean-memory/releases/tag/v0.1.1
[0.1.0]: https://github.com/Wuesteon/lean-memory/releases/tag/v0.1.0
11 changes: 6 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@

Embedded, local-first agent memory. No server, no daemon, no mandatory cloud key.

> **Status (2026-07):** working toward the first public launch (MCP-first).
> **Status (2026-07):** first public release line is live — on PyPI, the MCP
> Registry, and as a Claude Code plugin (MCP-first launch).
> Roadmap and rationale: `docs/superpowers/specs/2026-07-08-strategic-direction-design.md`.
> Public benchmark runs (LongMemEval/LoCoMo) are deferred until after launch;
> the harness is complete (`bench/phase2_*.py`) and the engine flaws it exposed
> are fixed on this branch — see `docs/phase2-learnings.md`.
> Public benchmark runs (LongMemEval/LoCoMo) are deliberately deferred until
> after launch; the harness is complete (`bench/phase2_*.py`) and the engine
> flaws it exposed are fixed — see `docs/phase2-learnings.md`.

```python
from lean_memory import Memory
Expand Down Expand Up @@ -201,7 +202,7 @@ pip install 'lean-memory[models]'

With `Qwen3-Embedding-0.6B` + `Ettin-32M` reranker, retrieval jumps from 1/5 to 4/5 on the internal benchmark with zero code changes.

> For benchmark results, architecture decisions, and implementation status see [ARCHITECTURE.md](ARCHITECTURE.md).
> For benchmark results, architecture decisions, and implementation status see [ARCHITECTURE.md](https://github.com/Wuesteon/lean-memory/blob/main/ARCHITECTURE.md).

## How It Works

Expand Down
4 changes: 2 additions & 2 deletions console/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# lean-memory-console

A read-only verification console for [lean-memory](../README.md).
A read-only verification console for [lean-memory](https://github.com/Wuesteon/lean-memory#readme).

**Agents write and search; the human verifies.** Your agent (Claude Code via
the observing MCP, or any HTTP client in Docker mode) is the only writer of
Expand Down Expand Up @@ -37,7 +37,7 @@ token drops the session.
Via the Claude Code plugin (recommended), the MCP is wired automatically:

```
/plugin marketplace add Wuesteon/lean-memory-console
/plugin marketplace add Wuesteon/lean-memory
/plugin install lean-memory
/memory:ui # launch + open the console
/memory:status # resolved root, namespaces, connect snippets
Expand Down
32 changes: 31 additions & 1 deletion console/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,33 @@ build-backend = "hatchling.build"

[project]
name = "lean-memory-console"
version = "0.2.0"
version = "0.2.1"
description = "Agent-first read-only verification console for lean-memory"
readme = "README.md"
requires-python = ">=3.10"
license = { text = "Apache-2.0" }
authors = [{ name = "lean-memory" }]
keywords = [
"agent-memory",
"memory",
"mcp",
"lean-memory",
"console",
"verification",
"local-first",
]
classifiers = [
"Development Status :: 4 - Beta",
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Intended Audience :: Developers",
"Operating System :: OS Independent",
]
dependencies = [
"lean-memory",
"fastapi>=0.115",
Expand All @@ -17,6 +41,12 @@ dependencies = [
[project.optional-dependencies]
dev = ["pytest>=8", "anyio>=4", "httpx>=0.27", "pyyaml"]

[project.urls]
Homepage = "https://github.com/Wuesteon/lean-memory"
Repository = "https://github.com/Wuesteon/lean-memory"
Changelog = "https://github.com/Wuesteon/lean-memory/blob/main/CHANGELOG.md"
Issues = "https://github.com/Wuesteon/lean-memory/issues"

[project.scripts]
lean-memory-console = "lean_memory_console.cli:main"

Expand Down
2 changes: 1 addition & 1 deletion console/src/lean_memory_console/__init__.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
"""lean-memory-console — agent-first read-only verification console."""

__version__ = "0.2.0"
__version__ = "0.2.1"
2 changes: 1 addition & 1 deletion console/tests/test_plugin_manifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
def test_plugin_json_identity() -> None:
data = json.loads((PLUGIN / ".claude-plugin" / "plugin.json").read_text())
assert data["name"] == "lean-memory"
assert data["version"] == "0.2.0"
assert data["version"] == "0.2.1"
assert data["description"] # non-empty


Expand Down
86 changes: 86 additions & 0 deletions docs/launch/launch-checklist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# WP1 launch checklist — channel-by-channel runbook

Status as of 2026-07-21 (branch `wp1-launch`). Executes spec §3
(`docs/superpowers/specs/2026-07-08-strategic-direction-design.md`).
One narrative everywhere: **local-first, no server, time-travel history.**
Zero benchmark numbers in any copy; every channel links the repo README
quickstart; ~2 GB model download stated wherever an install is shown.

## Channel status

| # | Channel | Status | Blocking action | Who |
|---|---|---|---|---|
| 1 | MCP Registry | **LIVE** (0.2.0 active, `isLatest`; `server.json` install spec verified end-to-end) | v0.2.1 republish is automatic: `publish-mcp` workflow on tag push | CI |
| 2 | PyPI (core + console) | **LIVE** (0.2.0 both) — console page blank until 0.2.1 | Merge this branch → tag `v0.2.1` → `release` workflow publishes both via Trusted Publishing | maintainer + CI |
| 3 | `awesome-mcp-servers` PR | **SUBMITTED** — [PR #9890](https://github.com/punkpeye/awesome-mcp-servers/pull/9890) open since 2026-07-12 (🤖🤖🤖 fast-track; Glama quality score live at 83%; maintainer's badge request answered 2026-07-13) | Waiting on maintainer; optional entry-text refresh (see below) | — |
| 4 | Claude Code plugin marketplace | manifest valid + discovery metadata added | Submit form (steps below) **after merge** so the reviewed manifest is on `main` | maintainer (account-bound form) |
| 5 | Show HN | copy final (`launch-copy.md` §1) | Post from own account | maintainer |
| 6 | r/ClaudeAI + r/LocalLLaMA | copy final (`launch-copy.md` §2–3) | Post from own account | maintainer |

## Launch-day order

1. Merge `wp1-launch` → `main` (PR; review the amended copy — see “Decisions
applied” below).
2. Tag and push `v0.2.1` → `release` + `publish-mcp` workflows fire (PyPI ×2 +
registry). Verify: console PyPI page renders; registry shows 0.2.1.
3. `awesome-mcp-servers`: **already submitted** (PR #9890, in review — the
maintainer asked for the Glama score, which is now live; last reply
2026-07-13). Optional: push the updated §4 entry line (adds sleep-time
maintenance + “No Docker”, lighter `[mcp]` install hint) to the fork branch
`Wuesteon/awesome-mcp-servers:add-lean-memory` to refresh the open PR —
or leave the in-review entry untouched.
4. Submit the plugin: `claude plugin validate .` (passes as of this branch),
then the Console form at <https://platform.claude.com/plugins/submit>
pointed at `github.com/Wuesteon/lean-memory`. Notes: Anthropic’s community
marketplace has **no PR route** (`anthropics/claude-plugins-community`
auto-closes PRs); catalog sync is nightly, so expect delay; the plugin
`name` is immutable once published. Optional secondary venues: a PR to
`ComposioHQ/awesome-claude-plugins`; `claudemarketplaces.com` auto-crawls
public repos with a valid manifest — nothing to submit.
5. Show HN (§1: title + author first-comment).
6. r/ClaudeAI (§2), r/LocalLLaMA (§3).

## Acceptance verification (packet criterion: each listing’s install snippet ends in a working `memory_add`/`memory_search`)

Fresh-venv walkthrough against the **published** PyPI 0.2.0 artifacts,
2026-07-21 — all four advertised snippets PASS:

1. `pip install lean-memory` → `from lean_memory import Memory`; add/search
returns the fact; supersession verified (new fact wins, old row keeps
`is_latest=0` + `superseded_by`; `as_of` time-travel returns the old fact).
2. `pip install 'lean-memory[mcp]'` → real stdio MCP client against
`lean-memory-mcp`: 7 tools listed (incl. all four maintenance tools),
`memory_add` → `memory_search` round-trip asserted.
3. `pip install lean-memory-console` → entry point serves; tokenized URL;
clean startup/shutdown.
4. Registry command `uvx --from 'lean-memory[mcp,models,extract]'
lean-memory-mcp`: the `[mcp]`-variant run end-to-end over stdio;
the full extras spec resolves cleanly (73 packages). Confirmed the bare
`uvx --from lean-memory lean-memory-mcp` form crashes — the manifest
correctly does not ship it.

## Decisions applied on this branch (flag on PR review if you disagree)

- **Superlative dropped** (all three posts): “no other memory product stages
agent-proposed changes for approval” was adversarially refuted (shipping
counterexamples gate agent memory saves behind approval). Replaced with a
hedged, narrowed differentiator: offline maintenance over an embedded local
store, every judgment call staged as an approvable diff.
- **r/LocalLLaMA de-numbered** (spec §1 “no number”): the measured “~15%
escalation” figure and the “real measured numbers” framing are out; the
calibration README link stays, reframed as methodology-only. Alternatives if
you want them: cut the link entirely, or deliberately restore the numbers as
an approved carve-out for that audience.
- **Positioning vs built-in Claude Code memory** added to r/ClaudeAI
(cross-client, auditable in any SQLite browser, as-of queries).
- **“No Docker”** added to the OpenMemory-differentiation triads (spec risk
list) in Show HN, r/ClaudeAI, the awesome one-liner, and the registry blurb.
- **README status note** updated to “first public release line is live”;
shipped inside the v0.2.1 PyPI description.

## Post-launch

Start the **six-week demand read** (spec §4): strangers filing issues/PRs
(primary), ~200+ stars / rising PyPI downloads (directional). Signal → revisit
specialization + contributor scaffolding + deferred benchmarks; silence →
iterate positioning/channels, benchmarks as the retry lever.
Loading
Loading