
Trusty Services
- 1 installs
- 145 repo stars
- Updated July 27, 2026
- bobmatnyc/claude-mpm
trusty-services is a Claude Code migration skill that installs and configures the trusty-memory and trusty-search Rust services for claude-mpm.
About
trusty-services is a claude-mpm migration subskill that installs and configures two optional Rust services: trusty-memory (persistent cross-session knowledge graph) and trusty-search (hybrid semantic plus BM25 code search). A developer runs it to add memory and semantic search that the base claude-mpm install lacks. It detects, checks system requirements, installs via cargo, wires .mcp.json, and verifies both daemons respond before marking the migration complete.
- Five-phase install wizard for trusty-memory and trusty-search Rust services
- Wires both daemons into .mcp.json and verifies /health before recording completion
- Adds cross-session memory (:3038) and semantic code search (:7878) to claude-mpm
Trusty Services by the numbers
- 1 all-time installs (skills.sh)
- Ranked #1,172 of 1,435 DevOps & CI/CD skills by installs in the Skillselion catalog
- Data as of Aug 2, 2026 (Skillselion catalog sync)
trusty-services capabilities & compatibility
free (local Rust services)
- Capabilities
- mcp setup · semantic search · agent memory
- Works with
- docker
- Use cases
- memory · research
- Platforms
- macOS
- Runs
- Runs locally
- Pricing
- Free
What trusty-services says it does
This is a **migration subskill**. It declares WHAT to install in its frontmatter.
trusty-memory**: persistent, hierarchical knowledge graph (palace / wing / room / closet / drawer) that survives across sessions.
trusty-search**: hybrid semantic + BM25 + knowledge-graph code search with RRF fusion.
A typical install takes 3-8 minutes (mostly cargo compile time).
npx skills add https://github.com/bobmatnyc/claude-mpm --skill trusty-servicesAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 145 |
| Last updated | July 27, 2026 |
| Repository | bobmatnyc/claude-mpm ↗ |
What it does
Install and wire trusty-memory and trusty-search Rust services into claude-mpm for cross-session memory and semantic code search.
Who is it for?
claude-mpm users who want persistent cross-session memory and semantic code search added to their agent setup.
Skip if: Environments without Rust/cargo or the ~2GB disk and one-time setup pass required.
When should I use this skill?
You run /mpm-migrate trusty-services or want to add trusty-memory and trusty-search to claude-mpm.
What you get
Both Rust daemons are installed, running, and wired into .mcp.json, verified by health checks.
- Installed trusty-memory and trusty-search binaries
- launchd plists and .mcp.json wiring
- Verified daemon health checks
By the numbers
- Five-phase install wizard
- 3-8 minute typical install
- Two Rust services (memory on :3038, search on :7878)
Files
Trusty Services
This is a migration subskill. It declares WHAT to install in its frontmatter. The HOW lives in the parent protocol: `migration-wizard/SKILL.md`.
Always load the migration-wizard protocol before executing this skill.
The five-phase wizard (user choice → detect → check → install → verify →
complete) is defined there, not here.
Why install these?
trusty-memory and trusty-search are optional Rust services that give claude-mpm two capabilities the base install lacks:
- trusty-memory: persistent, hierarchical knowledge graph (palace / wing
/ room / closet / drawer) that survives across sessions. Lets agents remember context from previous conversations without re-explaining.
- trusty-search: hybrid semantic + BM25 + knowledge-graph code search
with RRF fusion. Drop-in replacement for mcp-vector-search with better recall on large codebases.
Together they raise the ceiling on what cross-session workflows can accomplish — but they require Rust, ~2GB disk, and a one-time setup pass, which is why they ship as a migration skill rather than a default dependency.
What to expect during install
The protocol's Phase 3 delegates to scripts/install-trusty.sh, which:
1. Prefers claude-mpm setup trusty-memory trusty-search (the consolidated command that handles cargo install, launchd plist creation, and .mcp.json wiring atomically). 2. Falls back to per-binary claude-mpm setup <name> on older claude-mpm. 3. Falls back to raw cargo install if claude-mpm is unavailable; in that case daemon startup and MCP wiring become manual steps.
A typical install takes 3-8 minutes (mostly cargo compile time).
Known gotchas
- macOS, `linker 'cc' not found` — install Xcode Command Line Tools
with xcode-select --install, then retry.
- `cargo install` SSL error — usually a corporate proxy. Configure
CARGO_HTTP_PROXY and retry.
- `Address already in use` — a previous daemon is still running. Run
pkill -f trusty-memory; pkill -f trusty-search and retry.
- Default ports — memory uses :3038, search uses :7878. If those are
occupied, the daemons will pick alternates and write the actual ports to ~/.trusty-*/address.json; the health checks in this skill assume the defaults.
Verification
Phase 4 runs scripts/verify-trusty.sh, which checks:
1. Both binaries on $PATH. 2. Both daemons responding to /health. 3. .mcp.json (if present in CWD) references trusty server entries. 4. On macOS, launchd plists exist under ~/Library/LaunchAgents/.
Verification must pass completely before Phase 5 records completion. A partial install (binary present, daemon down) will be re-detected on the next session and the wizard will offer to repair it.
#!/usr/bin/env bash
# Quick status check for trusty services.
#
# Usage: check-trusty-status.sh
#
# Prints one of:
# installed - both binaries on PATH AND both daemons healthy
# partial - some components present, others missing
# missing - neither binary on PATH
#
# Always exits 0 so callers can capture the status string.
set -uo pipefail
have_memory=0
have_search=0
healthy_memory=0
healthy_search=0
command -v trusty-memory >/dev/null 2>&1 && have_memory=1
command -v trusty-search >/dev/null 2>&1 && have_search=1
if command -v curl >/dev/null 2>&1; then
curl -fs -o /dev/null --max-time 2 "http://localhost:3038/health" \
&& healthy_memory=1 || true
curl -fs -o /dev/null --max-time 2 "http://localhost:7878/health" \
&& healthy_search=1 || true
fi
if [[ "${have_memory}" -eq 1 && "${have_search}" -eq 1 \
&& "${healthy_memory}" -eq 1 && "${healthy_search}" -eq 1 ]]; then
echo "installed"
elif [[ "${have_memory}" -eq 0 && "${have_search}" -eq 0 ]]; then
echo "missing"
else
echo "partial"
fi
#!/usr/bin/env bash
# Install trusty-memory and trusty-search.
#
# Prefers the consolidated `claude-mpm setup` command (handles cargo install,
# launchd plist creation, and .mcp.json wiring atomically). Falls back to
# cargo + per-binary setup if the consolidated command is not available.
#
# Usage: install-trusty.sh
#
# Exit 0 on success, non-zero on any installation failure.
set -euo pipefail
echo "==> Installing trusty-memory and trusty-search"
if command -v claude-mpm >/dev/null 2>&1; then
# Probe whether the multi-arg setup form exists in this version.
if claude-mpm setup --help 2>&1 | grep -qE 'trusty-memory|trusty-search'; then
echo "==> Using consolidated 'claude-mpm setup' command"
claude-mpm setup trusty-memory trusty-search
exit $?
fi
# Fall back to per-binary setup (older claude-mpm versions).
echo "==> Using per-binary 'claude-mpm setup <name>'"
claude-mpm setup trusty-memory
claude-mpm setup trusty-search
exit $?
fi
# No claude-mpm CLI available — fall back to raw cargo install. The user
# will need to start the daemons manually.
if ! command -v cargo >/dev/null 2>&1; then
echo "error: neither 'claude-mpm' nor 'cargo' are on PATH" >&2
echo " install Rust first: https://rustup.rs/" >&2
exit 1
fi
echo "==> Fallback: cargo install trusty-memory trusty-search"
echo " Note: daemon startup and .mcp.json wiring must be done manually."
cargo install trusty-memory trusty-search
#!/usr/bin/env bash
# Verify trusty-memory and trusty-search installation.
#
# Checks performed:
# 1. Both binaries on PATH.
# 2. Both daemons responding to /health.
# 3. .mcp.json contains trusty server entries (if a .mcp.json exists in CWD).
# 4. On macOS, launchd plists exist.
#
# Usage: verify-trusty.sh
#
# Exits 0 if every applicable check passes, 1 otherwise (each failure printed
# to stderr).
set -uo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
HEALTH_SCRIPT="${SCRIPT_DIR}/../../migration-wizard/scripts/check-service-health.sh"
ERRORS=0
note_failure() {
echo "FAIL: $1" >&2
ERRORS=$((ERRORS + 1))
}
# 1. Binaries on PATH
if ! command -v trusty-memory >/dev/null 2>&1; then
note_failure "trusty-memory binary not on PATH"
fi
if ! command -v trusty-search >/dev/null 2>&1; then
note_failure "trusty-search binary not on PATH"
fi
# 2. Daemon health (default ports)
if [[ -x "${HEALTH_SCRIPT}" ]]; then
if ! bash "${HEALTH_SCRIPT}" "http://localhost:3038/health" 3 2>/dev/null; then
note_failure "trusty-memory daemon not healthy on :3038"
fi
if ! bash "${HEALTH_SCRIPT}" "http://localhost:7878/health" 3 2>/dev/null; then
note_failure "trusty-search daemon not healthy on :7878"
fi
else
# Inline fallback if the shared script isn't reachable.
if ! curl -fs -o /dev/null --max-time 3 "http://localhost:3038/health"; then
note_failure "trusty-memory daemon not healthy on :3038"
fi
if ! curl -fs -o /dev/null --max-time 3 "http://localhost:7878/health"; then
note_failure "trusty-search daemon not healthy on :7878"
fi
fi
# 3. .mcp.json wiring (only check when a .mcp.json exists in CWD)
if [[ -f ".mcp.json" ]] && command -v python3 >/dev/null 2>&1; then
if ! python3 - <<'PYEOF'
import json
import sys
try:
with open(".mcp.json") as f:
data = json.load(f)
except (OSError, json.JSONDecodeError) as e:
print(f"could not parse .mcp.json: {e}", file=sys.stderr)
sys.exit(1)
servers = data.get("mcpServers", {})
expected = ("trusty-memory", "trusty-search")
missing = [name for name in expected if not any(name in key for key in servers)]
if missing:
print(f"missing MCP entries: {missing}", file=sys.stderr)
sys.exit(1)
PYEOF
then
note_failure ".mcp.json does not reference trusty-memory and trusty-search"
fi
fi
# 4. macOS launchd plists
if [[ "$(uname -s)" == "Darwin" ]]; then
PLIST_DIR="${HOME}/Library/LaunchAgents"
if ! ls "${PLIST_DIR}"/com.bobmatnyc.trusty-memory.plist >/dev/null 2>&1; then
note_failure "missing launchd plist: com.bobmatnyc.trusty-memory.plist"
fi
if ! ls "${PLIST_DIR}"/com.bobmatnyc.trusty-search.plist >/dev/null 2>&1; then
note_failure "missing launchd plist: com.bobmatnyc.trusty-search.plist"
fi
fi
if [[ "${ERRORS}" -eq 0 ]]; then
echo "OK: trusty-memory and trusty-search verified"
exit 0
fi
echo "verification failed with ${ERRORS} error(s)" >&2
exit 1
Related skills
FAQ
What does trusty-services install?
trusty-memory (persistent cross-session knowledge graph at :3038) and trusty-search (hybrid semantic plus BM25 code search at :7878).
What are the requirements?
Rust/cargo, ~2GB disk, ~4GB RAM, and a 3-8 minute install that is mostly cargo compile time.