
Security News
Re-Enabled GitHub Actions Expose Thousands of Repositories to Mini Shai-Hulud
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.
@memtensor/memos-local-hermes-plugin
Advanced tools
Persistent local conversation memory for Hermes Agent. Every conversation is automatically captured, semantically indexed, and instantly recallable — with task summarization & skill evolution, team sharing, and Memory Viewer.
Full-write | Hybrid Search | Task Summarization & Skill Evolution | Team Sharing | Memory Viewer
📦 NPM · 📖 Documentation
| Problem | Solution |
|---|---|
| Agent forgets everything between sessions | Persistent memory — every conversation auto-captured to local SQLite |
| Fragmented context, repeated mistakes | Task summarization & skill evolution — conversations organized into structured tasks, then distilled into reusable skills that auto-upgrade |
| No visibility into what the agent remembers | Memory Viewer — full visualization of all memories, tasks, and skills |
| Privacy concerns with cloud storage | 100% local — zero cloud uploads, anonymous opt-out telemetry only |
One command installs the plugin, all dependencies, and build tools automatically.
macOS / Linux:
curl -fsSL https://raw.githubusercontent.com/MemTensor/MemOS/main/apps/memos-local-plugin/install.sh | bash
Alternative — Install via npm:
npm install -g @memtensor/memos-local-hermes-plugin
Environment variables for install script:
Variable Default Description MEMOS_INSTALL_DIR~/.hermes/memos-pluginOverride install directory MEMOS_STATE_DIRauto Override memory DB location MEMOS_DAEMON_PORT18992Bridge daemon port MEMOS_VIEWER_PORT18901Memory Viewer port MEMOS_EMBEDDING_PROVIDERlocalEmbedding provider
Copy and edit the environment template:
cd ~/.hermes/memos-plugin
cp .env.example .env
Edit .env with your API keys (or leave blank for local-only mode):
# Embedding — leave blank to use local offline model (Xenova/all-MiniLM-L6-v2)
EMBEDDING_PROVIDER=openai_compatible
EMBEDDING_API_KEY=your-embedding-api-key
EMBEDDING_ENDPOINT=https://your-embedding-api.com/v1
EMBEDDING_MODEL=bge-m3
# Summarizer — leave blank for rule-based fallback
SUMMARIZER_PROVIDER=openai_compatible
SUMMARIZER_API_KEY=your-summarizer-api-key
SUMMARIZER_ENDPOINT=https://api.openai.com/v1
SUMMARIZER_MODEL=gpt-4o-mini
SUMMARIZER_TEMPERATURE=0
| Provider | provider value | Example model | Notes |
|---|---|---|---|
| OpenAI / compatible | openai_compatible | bge-m3, text-embedding-3-small | Any OpenAI-compatible API |
| Gemini | gemini | text-embedding-004 | Requires apiKey |
| Cohere | cohere | embed-english-v3.0 | Separates document/query embedding |
| Voyage | voyage | voyage-2 | |
| Mistral | mistral | mistral-embed | |
| Local (offline) | local | — | Uses Xenova/all-MiniLM-L6-v2, no API needed |
| Provider | provider value | Example model |
|---|---|---|
| OpenAI / compatible | openai_compatible | gpt-4o-mini |
| Anthropic | anthropic | claude-3-haiku-20240307 |
| Gemini | gemini | gemini-1.5-flash |
| AWS Bedrock | bedrock | anthropic.claude-3-haiku-20240307-v1:0 |
The plugin communicates with the Hermes Agent via a JSON-RPC bridge (bridge.cts), supporting two modes:
Stdio mode (default) — Short-lived, reads JSON-RPC from stdin, responds on stdout:
MEMOS_BRIDGE_CONFIG='...' npx tsx bridge.cts
Daemon mode — Long-running, listens on a TCP port, also starts the Memory Viewer:
MEMOS_BRIDGE_CONFIG='...' npx tsx bridge.cts --daemon --port 18992 --viewer-port 18901
After installing and starting the daemon, open the Memory Viewer at http://127.0.0.1:18901.
The plugin includes adapters for different agent frameworks:
Located at adapters/hermes/. Python-based adapter for direct integration with the Hermes Agent.
cd adapters/hermes
bash install.sh
Located at adapters/openharness/. For integration via the OpenHarness framework.
cd adapters/openharness
bash install.sh
Conversation → Memory Write Pipeline → Task Generation Pipeline → Skill Evolution Pipeline
↓
Smart Retrieval Pipeline ← ← ← ← ← ← ← ← ←
Conversation → Capture (filter roles, strip system prompts)
→ Semantic chunking (code blocks, paragraphs, error stacks)
→ Content hash dedup → LLM summarize each chunk
→ Vector embedding → Store (SQLite + FTS5 + Vector)
New chunks → Group into user-turns → Process one turn at a time
→ Warm-up (first user turn): assign directly
→ Each subsequent user turn: LLM topic judge
→ "NEW"? → Finalize current task, create new task
→ "SAME"? → Assign to current task
→ Time gap > 2h? → Always split regardless of topic
→ Finalize: Chunks ≥ 4 & turns ≥ 2? → LLM structured summary
Completed task → Rule filter (min chunks, non-trivial content)
→ Search for related existing skills
→ Related skill found? → Evaluate upgrade → Merge → Version bump
→ No related skill? → Evaluate create → Generate SKILL.md + scripts
→ Quality score (0-10) → Install if score ≥ 6
Query → FTS5 + Vector dual recall → RRF Fusion → MMR Rerank
→ Recency Decay → Score Filter → Top-K
→ LLM relevance filter → Dedup by excerpt overlap
→ Return excerpts + metadata
| Tool | Purpose |
|---|---|
memory_search | Search memories with hybrid retrieval (FTS5 + vector + RRF + MMR) |
memory_get | Get full original text of a memory chunk |
memory_timeline | Get surrounding conversation context around a chunk |
task_summary | Get structured summary of a completed task |
skill_get | Get skill content by skillId or taskId |
skill_install | Install a skill into the agent workspace |
memory_viewer | Get the URL of the Memory Viewer web UI |
| Parameter | Default | Range | Description |
|---|---|---|---|
query | — | — | Natural language search query |
maxResults | 20 | 1–20 | Maximum candidates before LLM filter |
minScore | 0.45 | 0.35–1.0 | Minimum relevance score |
role | — | user / assistant / tool | Filter by message role |
Open http://127.0.0.1:18901 in your browser after starting the daemon.
| Page | Features |
|---|---|
| Memories | Timeline view, pagination, filters, CRUD, semantic search |
| Tasks | Task list with status filters, chat-bubble chunk view, structured summaries |
| Skills | Skill list with version history, quality scores, ZIP download |
| Analytics | Daily write/read activity charts, memory/task/skill totals |
| Logs | Tool call log with input/output and duration |
| Import | Memory migration with real-time progress |
| Settings | Online configuration and team sharing settings |
Forgot password? Click "Forgot password?" on the login page.
All optional — shown with defaults:
# In .env or environment variables
# Recall tuning
RECALL_MAX_RESULTS=6 # Default search results
RECALL_MIN_SCORE=0.45 # Default min score threshold
RECALL_RRF_K=60 # RRF fusion constant
RECALL_MMR_LAMBDA=0.7 # MMR relevance vs diversity (0-1)
RECALL_RECENCY_HALF_LIFE=14 # Time decay half-life in days
# Deduplication
DEDUP_SIMILARITY_THRESHOLD=0.75 # Cosine similarity for dedup
DEDUP_ENABLE_SMART_MERGE=true # LLM judge: DUPLICATE / UPDATE / NEW
# Skill Evolution
SKILL_EVOLUTION_ENABLED=true # Enable skill evolution
SKILL_AUTO_EVALUATE=true # Auto-evaluate tasks for skill generation
SKILL_AUTO_INSTALL=false # Auto-install generated skills
# Viewer
VIEWER_PORT=18901 # Memory Viewer port
# Telemetry (opt-out)
TELEMETRY_ENABLED=true # Set false to opt-out
MemOS collects anonymous usage analytics to help improve the plugin. Telemetry is enabled by default and can be disabled at any time.
Set environment variable:
TELEMETRY_ENABLED=false
apps/memos-local-plugin/
├── index.ts # Plugin entry — hooks, tool registration, lifecycle
├── bridge.cts # JSON-RPC bridge (stdio + daemon modes)
├── install.sh # One-click installer script
├── adapters/
│ ├── hermes/ # Python adapter for Hermes Agent
│ │ ├── plugin.yaml # Plugin metadata
│ │ ├── config.py # Configuration
│ │ ├── bridge_client.py # JSON-RPC client
│ │ ├── daemon_manager.py# Daemon lifecycle management
│ │ └── install.sh # Adapter installer
│ └── openharness/ # OpenHarness adapter
│ ├── plugin.json # Plugin metadata
│ ├── scripts/ # Python bridge scripts
│ └── install.sh # Adapter installer
├── src/
│ ├── config.ts # Configuration schema & defaults
│ ├── types.ts # TypeScript type definitions
│ ├── capture/ # Message capture & filtering
│ ├── embedding/ # Embedding providers
│ ├── ingest/ # Ingestion pipeline (chunker, dedup, tasks)
│ ├── recall/ # Hybrid retrieval engine (FTS5 + Vector + RRF + MMR)
│ ├── skill/ # Skill evolution pipeline
│ ├── storage/ # SQLite database layer + vector search
│ ├── tools/ # Tool implementations
│ ├── viewer/ # Memory Viewer web server
│ ├── client/ # Hub client & skill sync
│ ├── shared/ # Shared utilities (LLM fallback chain)
│ └── telemetry.ts # Anonymous usage analytics
├── www/docs/ # Documentation pages
├── package.json
└── tsconfig.json
node -v)npm -v)better-sqlite3 native module):
xcode-select --installsudo apt install build-essential python3git clone https://github.com/MemTensor/MemOS.git
cd MemOS/apps/memos-local-plugin
npm install
npm run build # Compile TypeScript
npm run dev # Watch mode
git clone https://github.com/MemTensor/MemOS.git
cd MemOS/apps/memos-local-plugin
npm install && npm run build
| File | Path |
|---|---|
| Database | ~/.hermes/memos-plugin/data/memos.db |
| Plugin code | ~/.hermes/memos-plugin/ |
| Gateway log | ~/.hermes/memos-plugin/logs/ |
better-sqlite3 native module error — Could not locate the bindings file:
cd ~/.hermes/memos-plugin && npm rebuild better-sqlite3
If rebuild fails, install C++ build tools:
xcode-select --installsudo apt install build-essential python3Viewer won't open — The viewer starts in daemon mode only. Ensure the daemon is running:
npx tsx bridge.cts --daemon --port 18992 --viewer-port 18901
Node version — Requires Node.js >= 18 and < 25. Check with node -v.
MIT — See LICENSE for details.
FAQs
MemTensor Local memory plugin for Hermes Agent
The npm package @memtensor/memos-local-hermes-plugin receives a total of 0 weekly downloads. As such, @memtensor/memos-local-hermes-plugin popularity was classified as not popular.
We found that @memtensor/memos-local-hermes-plugin demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 7 open source maintainers collaborating on the project.

Security News
Two compromised GitHub Actions were re-enabled with malicious tags intact, exposing thousands of downstream repositories to Mini Shai-Hulud.

Research
/Security News
A malicious Firefox extension fetches its payload after installation to evade detection, steal Google session cookies, and automate account takeover.

Research
/Security News
The compromise affects MemTensor's MemOS, an open source memory framework for large language models (LLMs) and AI agents. Both npm package @memtensor/memos-cloud-openclaw-plugin and the PyPI package MemoryOS are compromised. They drop cross-platform Go binaries that exfiltrate developer secrets.