Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 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
20 changes: 20 additions & 0 deletions .agents/plugins/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "hypermnesia-mcp-viz-marketplace",
"interface": {
"displayName": "Hypermnesia MCP Viz"
},
"plugins": [
{
"name": "hypermnesia-mcp-viz",
"source": {
"source": "local",
"path": "./"
},
"policy": {
"installation": "AVAILABLE",
"authentication": "ON_INSTALL"
},
"category": "Developer Tools"
}
]
}
35 changes: 35 additions & 0 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"name": "hypermnesia-mcp-viz-marketplace",
"owner": {
"name": "Clement Deust",
"email": "admin@ai-architect.tools"
},
"metadata": {
"description": "Hypermnesia MCP Viz — the read-only visualization companion for Cortex",
"version": "2.8.0"
},
"plugins": [
{
"name": "hypermnesia-mcp-viz",
"source": "./",
"description": "Live memory galaxy, methodology map, workflow graph, wiki browser, and execution trace over the shared Cortex store.",
"version": "2.8.0",
"author": {
"name": "Clement Deust",
"email": "admin@ai-architect.tools"
},
"homepage": "https://github.com/cdeust/cortex-viz",
"repository": "https://github.com/cdeust/cortex-viz",
"license": "MIT",
"keywords": [
"visualization",
"graph",
"mcp",
"claude-code",
"cortex",
"knowledge-graph"
],
"category": "productivity"
}
]
}
4 changes: 2 additions & 2 deletions .claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"name": "cortex-viz",
"name": "hypermnesia-mcp-viz",
"description": "Standalone visualization MCP for Cortex — a live neural-graph galaxy of every project, file, symbol, memory, discussion and wiki page, plus a per-session execution trace. Read-only bridge over Cortex's shared PostgreSQL and the ~/.claude artifacts.",
"version": "2.8.0",
"author": {
Expand All @@ -26,7 +26,7 @@
}
},
"mcpServers": {
"cortex-viz": {
"hypermnesia-mcp-viz": {
"command": "python3",
"args": [
"${CLAUDE_PLUGIN_ROOT}/scripts/launcher.py",
Expand Down
47 changes: 47 additions & 0 deletions .codex-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
"name": "hypermnesia-mcp-viz",
"version": "2.8.0",
"description": "Read-only visualization and graph MCP for Cortex, packaged for Codex.",
"author": {
"name": "Clement Deust",
"email": "admin@ai-architect.tools",
"url": "https://github.com/cdeust"
},
"homepage": "https://github.com/cdeust/cortex-viz",
"repository": "https://github.com/cdeust/cortex-viz",
"license": "MIT",
"keywords": [
"visualization",
"graph",
"mcp",
"codex",
"cortex"
],
"skills": "./skills/",
"mcpServers": {
"hypermnesia-mcp-viz": {
"command": "uvx",
"args": [
"--from",
"hypermnesia-mcp-viz",
"hypermnesia-mcp-viz"
]
}
},
"interface": {
"displayName": "Hypermnesia MCP Viz",
"shortDescription": "Inspect Cortex memory and graph state",
"longDescription": "Open a read-only memory galaxy, methodology map, workflow graph, wiki browser, and execution trace over the shared Cortex store.",
"developerName": "Clement Deust",
"category": "Developer Tools",
"capabilities": [
"Read",
"Interactive"
],
"websiteURL": "https://github.com/cdeust/cortex-viz",
"defaultPrompt": [
"Open the Cortex memory visualization.",
"Show the methodology graph for this project."
]
}
}
36 changes: 18 additions & 18 deletions .github/workflows/Release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,24 @@ name: Release
# Filename casing is part of PyPI's Trusted Publisher identity. Keep this file
# as `Release.yaml` to match the verified publisher record exactly.

# Issue #37. Until now cortex-viz had NO release workflow: 2.7.1 was cut by
# Issue #37. Until now Hypermnesia MCP Viz had NO release workflow: 2.7.1 was cut by
# hand, so there was no committed, reproducible build path and therefore no
# artifact to attest. This workflow is the build that was missing — it is now
# the ONLY way a release is produced, and provenance layers on top of it.
#
# Delivery reality (do not confuse with "released"): cortex-viz is consumed
# Delivery reality (do not confuse with "released"): hypermnesia-mcp-viz is consumed
# through Anthropic's plugin marketplace, PINNED in Cortex's marketplace
# manifest. Tagging + this GitHub Release do not reach installs by themselves;
# the release checklist still ENDS with bumping that pin. This is the same
# pin-gate lesson that let six zetetic-team-subagents releases and two
# cortex-viz releases ship to zero installs (Cortex #179) — a release workflow
# hypermnesia-mcp-viz releases ship to zero installs (Cortex #179) — a release workflow
# that runs is necessary but not sufficient.
#
# The canonical distribution is published to PyPI as `hypermnesia-mcp-viz`
# through Trusted Publishing. No long-lived PyPI token exists: the protected
# `pypi` environment and id-token permission bind publication to this workflow,
# repository, tag, and environment. The legacy `cortex-viz` console command is
# carried inside the new distribution as a compatibility alias.
# repository, tag, and environment. The canonical console command is
# `hypermnesia-mcp-viz`; no deprecated publication alias is emitted.

on:
push:
Expand Down Expand Up @@ -85,7 +85,7 @@ jobs:
- name: Build sdist and wheel
run: uv build

- name: Verify distribution identity and compatibility entry points
- name: Verify canonical distribution identity and entry point
run: python -m scripts.check_distribution_artifact

# Fingerprint the browser-executed UI (issue #37 criterion 2). The 91 JS
Expand All @@ -100,9 +100,9 @@ jobs:
set -euxo pipefail
find ui -type f -print0 \
| LC_ALL=C sort -z \
| xargs -0 sha256sum > cortex-viz-ui-manifest.sha256
echo "UI files fingerprinted: $(wc -l < cortex-viz-ui-manifest.sha256)"
head -5 cortex-viz-ui-manifest.sha256
| xargs -0 sha256sum > hypermnesia-mcp-viz-ui-manifest.sha256
echo "UI files fingerprinted: $(wc -l < hypermnesia-mcp-viz-ui-manifest.sha256)"
head -5 hypermnesia-mcp-viz-ui-manifest.sha256

# CycloneDX SBOM from uv.lock (issue #37 criterion 5). This covers the
# Python dependency graph, including the viz-tile stack (datashader,
Expand All @@ -118,8 +118,8 @@ jobs:
--format requirements-txt > sbom-requirements.txt
wc -l sbom-requirements.txt
uv tool run --from cyclonedx-bom cyclonedx-py requirements \
sbom-requirements.txt --output-format JSON --output-file cortex-viz.cdx.json
ls -la cortex-viz.cdx.json
sbom-requirements.txt --output-format JSON --output-file hypermnesia-mcp-viz.cdx.json
ls -la hypermnesia-mcp-viz.cdx.json

# Publish while dist/ contains distributions only. The checksum step
# below adds *.sha256 sidecars that Twine rejects as unknown formats.
Expand All @@ -132,7 +132,7 @@ jobs:
- name: Compute SHA-256 checksums for every release asset
run: |
set -euxo pipefail
for f in dist/* cortex-viz.cdx.json cortex-viz-ui-manifest.sha256; do
for f in dist/* hypermnesia-mcp-viz.cdx.json hypermnesia-mcp-viz-ui-manifest.sha256; do
sha256sum "$f" | tee "$f.sha256"
done

Expand All @@ -146,8 +146,8 @@ jobs:
subject-path: |
dist/*.whl
dist/*.tar.gz
cortex-viz.cdx.json
cortex-viz-ui-manifest.sha256
hypermnesia-mcp-viz.cdx.json
hypermnesia-mcp-viz-ui-manifest.sha256

- name: Create GitHub Release with attested assets
uses: softprops/action-gh-release@3d0d9888cb7fd7b750713d6e236d1fcb99157228 # v3.0.2
Expand All @@ -158,8 +158,8 @@ jobs:
dist/*.whl
dist/*.tar.gz
dist/*.sha256
cortex-viz.cdx.json
cortex-viz.cdx.json.sha256
cortex-viz-ui-manifest.sha256
cortex-viz-ui-manifest.sha256.sha256
hypermnesia-mcp-viz.cdx.json
hypermnesia-mcp-viz.cdx.json.sha256
hypermnesia-mcp-viz-ui-manifest.sha256
hypermnesia-mcp-viz-ui-manifest.sha256.sha256
fail_on_unmatched_files: true
17 changes: 14 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,17 @@ Releases before 2.7.0 were recorded as `chore(release)` / `release:` commits in

### Changed

- **Breaking publication rename.** `hypermnesia-mcp-viz` is now the sole
Claude Code plugin, MCP server, Python distribution, and console identity.
Existing Claude installs must run
`claude plugin uninstall cortex-viz@cortex-plugins`, refresh
`cortex-plugins`, and run
`claude plugin install hypermnesia-mcp-viz@cortex-plugins`. Permission and
tool references must move from `plugin:cortex-viz:*` to
`plugin:hypermnesia-mcp-viz:*`; direct-process hosts must replace the removed
`cortex-viz` executable with `hypermnesia-mcp-viz`. This source change and
the marketplace rename in `cdeust/Cortex#351` form one coordinated release
and must not be published independently.
- Synchronize committed assurance evidence with OpenSSF Best Practices Silver,
verified v2.8.0 Sigstore attestations, 81% Python statement coverage, zero
open CodeQL alerts, and post-Silver OpenSSF Scorecard 7.4.
Expand All @@ -24,9 +35,9 @@ Releases before 2.7.0 were recorded as `chore(release)` / `release:` commits in
- The canonical Python and MCP Registry distribution is now
`hypermnesia-mcp-viz` at version 2.8.0. Releases publish the wheel and source
archive to PyPI through Trusted Publishing, and `server.json` describes the
matching stdio package for the official MCP Registry. The Cortex Viz product,
Claude Code plugin, import package, and existing `cortex-viz` command remain
compatible; `hypermnesia-mcp-viz` is an additional canonical command.
matching stdio package for the official MCP Registry. The Python import
package remains `cortex_viz`, but no `cortex-viz` publication or console
alias is emitted.
- A versioned, host-neutral live activity contract
(`docs/host-event-v1.schema.json`) for Codex, Gemini, and generic MCP-host
adapters. `POST /api/activity` normalizes it into the existing activity
Expand Down
46 changes: 34 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,10 @@
<a href="https://www.bestpractices.dev/projects/13846"><img src="https://www.bestpractices.dev/projects/13846/badge" alt="OpenSSF Best Practices"></a>
</p>

# Cortex Viz
# Hypermnesia MCP Viz

**Cortex Viz is published to Python and MCP registries as `hypermnesia-mcp-viz`.**
The product and Claude Code plugin remain `cortex-viz`, and the existing
`cortex-viz` command remains a supported compatibility alias.
**Hypermnesia MCP Viz is published as `hypermnesia-mcp-viz` everywhere:**
Python, MCP Registry, Claude Code, Codex, Gemini, and the console command.

**The cross-platform visualization layer for [Cortex](https://github.com/cdeust/Cortex).** Codex, Gemini CLI, Claude Code, and any stdio MCP host can launch the same read-only server and browser UI. It turns Cortex's memory store, a host-neutral live activity stream, Claude Code's historical session archive, and your codebase graph into six live reading angles: a project galaxy, a 3D anatomical brain, an execution trace, a consolidation kanban, a curated knowledge browser, and a wiki. It **never writes a memory**: it renders, it never remembers. (It does keep its own derived graph/layout caches in the Cortex database, listed under [Boundary](#boundary).)

Expand All @@ -32,14 +31,39 @@ The whole UI ships on the **AI Architect design system**: a paper-first reading

## Getting Started

Claude Code users can install cortex-viz from the same `cortex-plugins` marketplace as Cortex:
Claude Code users can install Hypermnesia MCP Viz from the same
`cortex-plugins` marketplace as Cortex:

```bash
claude plugin marketplace add cdeust/Cortex
claude plugin install cortex-viz
claude plugin install hypermnesia-mcp-viz@cortex-plugins
```

> **cortex-viz is a companion to [Cortex](https://github.com/cdeust/Cortex) that never writes a memory.** Install Cortex first (`claude plugin install cortex`): cortex-viz reads its shared PostgreSQL store, and writes only its own derived caches there ([Boundary](#boundary)). Point both at the same database: the `database_url` plugin setting defaults to `postgresql://127.0.0.1:5432/cortex`; set it to the same value you gave Cortex.
This install name becomes available in the Cortex marketplace only when this
repository and the matching marketplace change in
[`cdeust/Cortex#351`](https://github.com/cdeust/Cortex/pull/351) are released
together. Maintainers must not publish either half of the rename on its own.

### Migrating from `cortex-viz`

Existing Claude Code installs are not aliases for the new plugin identity.
Remove the old install, refresh the marketplace after the coordinated release,
and install the canonical plugin:

```bash
claude plugin uninstall cortex-viz@cortex-plugins
claude plugin marketplace update cortex-plugins
claude plugin install hypermnesia-mcp-viz@cortex-plugins
```

The MCP/tool qualifier changes from `plugin:cortex-viz:*` to
`plugin:hypermnesia-mcp-viz:*`; update permission allowlists, hooks, skills,
agents, and host configuration that match the old prefix. The removed
`cortex-viz` console command is not retained as an alias, so Cursor, Windsurf,
VS Code, and other direct-process configurations must invoke
`hypermnesia-mcp-viz` instead.

> **Hypermnesia MCP Viz is a companion to [Cortex](https://github.com/cdeust/Cortex) that never writes a memory.** Install Cortex first (`claude plugin install hypermnesia-mcp@cortex-plugins`): the visualizer reads its shared PostgreSQL store, and writes only its own derived caches there ([Boundary](#boundary)). Point both at the same database: the `database_url` plugin setting defaults to `postgresql://127.0.0.1:5432/cortex`; set it to the same value you gave Cortex.

Restart your Claude Code session, then launch the visualizer:

Expand Down Expand Up @@ -136,17 +160,15 @@ Five columns by consolidation stage (`labile` · `early_ltp` · `late_ltp` · `c

## Install

cortex-viz is a cross-platform MCP server with an optional Claude Code plugin. Point it at the **same database as your Cortex install**: it reads Cortex's memories from that store and never writes them.
Hypermnesia MCP Viz is a cross-platform MCP server with a Claude Code plugin. Point it at the **same database as your Cortex install**: it reads Cortex's memories from that store and never writes them.

**As a plugin**: ships the MCP server, the `/cortex-visualize` skill, and the live session-activity hooks. The bundled `scripts/launcher.py` bootstraps its own dependencies on first launch (no manual `pip` needed). Configure the DB via the plugin's `database_url` user-config (defaults to `postgresql://127.0.0.1:5432/cortex`).

**As a raw MCP (v2.8.0 and later):**

```bash
pip install "hypermnesia-mcp-viz[data,viz-tile]" # optional PG and large-graph extras
hypermnesia-mcp-viz
# Existing integrations can continue to use: cortex-viz
cortex-viz # or: python -m cortex_viz (stdio MCP transport)
hypermnesia-mcp-viz # or: python -m cortex_viz (stdio MCP transport)
```

If this repository was previously installed as an editable `cortex-viz`
Expand All @@ -157,7 +179,7 @@ Set `DATABASE_URL` to the shared Cortex database. `open_visualization` launches

### Other MCP hosts

Any MCP host can launch the server: it is a plain stdio process. Install it with `pip install hypermnesia-mcp-viz`, then register `hypermnesia-mcp-viz` as the command in your host's MCP config. The compatibility command `cortex-viz` and the module form `python3 -m cortex_viz` are equivalent (Gemini CLI `~/.gemini/settings.json`, Cursor `.cursor/mcp.json`, Windsurf `~/.codeium/windsurf/mcp_config.json`, VS Code `.vscode/mcp.json` under `"servers"`, or Codex CLI: `codex mcp add cortex-viz -- hypermnesia-mcp-viz`). The `open_visualization` tool opens the UI in the browser. The historical **Trace** archive still reads Claude Code JSONLs under `~/.claude/projects/`, but live activity is host-neutral: a Codex, Gemini, or generic MCP adapter can POST the versioned schema below to the local `/api/activity` endpoint. The galaxy/brain/knowledge/wiki/board views still need a [Cortex](https://github.com/cdeust/Cortex) store to read.
Any MCP host can launch the server: it is a plain stdio process. Install it with `pip install hypermnesia-mcp-viz`, then register `hypermnesia-mcp-viz` as both the server name and command in your host's MCP config (Gemini CLI `~/.gemini/settings.json`, Cursor `.cursor/mcp.json`, Windsurf `~/.codeium/windsurf/mcp_config.json`, VS Code `.vscode/mcp.json` under `"servers"`, or Codex CLI: `codex mcp add hypermnesia-mcp-viz -- hypermnesia-mcp-viz`). The equivalent Python module form is `python3 -m cortex_viz`. The `open_visualization` tool opens the UI in the browser. The historical **Trace** archive still reads Claude Code JSONLs under `~/.claude/projects/`, but live activity is host-neutral: a Codex, Gemini, or generic MCP adapter can POST the versioned schema below to the local `/api/activity` endpoint. The galaxy/brain/knowledge/wiki/board views still need a [Cortex](https://github.com/cdeust/Cortex) store to read.

### Host-neutral live activity

Expand Down
4 changes: 2 additions & 2 deletions cortex_viz/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@
neural-graph galaxy UI and methodology map. Memory/recall/wiki tools remain in
the Cortex MCP — this server is the visualization surface only.

Run: ``python -m cortex_viz`` (stdio MCP transport), or either the canonical
``hypermnesia-mcp-viz`` or compatibility ``cortex-viz`` console script.
Run: ``python -m cortex_viz`` (stdio MCP transport), or the canonical
``hypermnesia-mcp-viz`` console script.
"""

from __future__ import annotations
Expand Down
2 changes: 1 addition & 1 deletion cortex_viz/core/layout_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ def layout(
except ImportError as exc:
raise ImportError(
"igraph is required for layout — install the 'viz-tile' extra: "
"pip install cortex-viz[viz-tile]"
"pip install hypermnesia-mcp-viz[viz-tile]"
) from exc

if not node_ids:
Expand Down
2 changes: 1 addition & 1 deletion cortex_viz/core/tile_renderer.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def render_tile_png(
except ImportError as exc:
raise ImportError(
"datashader + pandas are required for tile rendering — install "
"the 'viz-tile' extra: pip install cortex-viz[viz-tile]"
"the 'viz-tile' extra: pip install hypermnesia-mcp-viz[viz-tile]"
) from exc

min_x, min_y, max_x, max_y = tile_world_bbox(z, x, y)
Expand Down
9 changes: 4 additions & 5 deletions cortex_viz/identity.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
"""Canonical technical identity for the Cortex Viz distribution.
"""Canonical publication identity for Hypermnesia MCP Viz.

The human-facing product and Claude plugin remain ``Cortex Viz`` /
``cortex-viz``. The PyPI and official MCP Registry identity is the secured
Cortex-family name below. Cross-manifest tests bind these constants to
pyproject.toml, server.json, and the plugin version.
PyPI, MCP Registry, Claude Code, Codex, Gemini, release artifacts, and console
entry points all use this single identity. The Python import package remains
``cortex_viz`` and the source repository keeps its historical URL.
"""

DISTRIBUTION_NAME = "hypermnesia-mcp-viz"
Expand Down
15 changes: 15 additions & 0 deletions gemini-extension.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"name": "hypermnesia-mcp-viz",
"version": "2.8.0",
"description": "Read-only visualization and graph MCP for Cortex, packaged for Gemini CLI.",
"mcpServers": {
"hypermnesia-mcp-viz": {
"command": "uvx",
"args": [
"--from",
"hypermnesia-mcp-viz",
"hypermnesia-mcp-viz"
]
}
}
}
Loading
Loading