Skill discovery engine, agent onboarding, API consistency
The CLI flags, JSON output shapes, and ranking weights are now frozen. 34 automated tests (go test -race) cover graph build, query scoring, ranking order (golden corpus), serve API JSON-error contract, end-to-end ingest, and memory write — running on every push via GitHub Actions CI. memgraph remember now supports stdin input (was not_implemented). Ranking pipeline consolidated into a single rankNodes function, eliminating triplicated logic across query, recommend, and /api/search.
Unknown /api/* paths (e.g. /api/unknown) now return a JSON 404 error instead of Go's default plain-text 404 page not found. Completes the v1.3.2 "all serve API errors return JSON" contract — previously only known endpoints returned JSON errors, while unknown API paths leaked the default handler. Non-API paths (UI routes) still return plain-text 404.
Serve API /api/search limit=0 now returns all results (was returning 0 — missing limit > 0 check before truncation). limit=-1 also returns all. Now consistent with CLI. Added "git" to stop words — "GitHub" camelCase-splits to "git"+"hub", and "git" was too common, causing GitHub queries to match generic git skills.
All serve API error responses now return JSON instead of plain text. Unknown nodes → 404 JSON, missing/empty q → 400 JSON, wrong HTTP method → 405 JSON, empty graph → 503 JSON. Added writeJSONError helper for consistent error responses across all API handlers.
--memory-dir flag now respected by query, recommend, and related commands. Previously, the global ~/.memgraph/skills-graph was always preferred, ignoring the override. All commands now output JSON errors in --json mode (empty args, unknown commands, no command). Global flag scanning moved before command dispatch — memgraph --json recommend and memgraph recommend --json both work.
memgraph setup --sync-dir <dir> now ADDS the directory to the auto-discovered dirs instead of replacing them. Previously, it would ingest only that dir into ~/.memgraph/skills-graph, wiping the 212-skill global graph with just 1 skill.
memgraph related now defaults to --limit 10 (was unlimited, returning 55+ related skills). count field shows total, related field shows the limited list. Use --limit 0 for all, --limit N for top N. Keeps agent output manageable.
Prefix matching tightened to prevent false positives. "rbm2" no longer matches "rbm21" (different containers). Reverse prefix match (query longer than text word) now requires text word ≥ 5 chars. Fixed "jar/rbm21/manage" returning the wrong skill.
Multi-word queries where every non-stopword matches a skill now get a +50 bonus. Helps concept queries like "skill discovery" match skills containing all words. "skill", "skills", "agent", "agents" added to stop words — too common in this context.
memgraph bridge with invalid/no agent now outputs JSON errors in --json mode (was plain text to stderr). Graph boost cap reduced from 50% to 30% — was still allowing highly-connected nodes to dominate in some cases.
Queries are now split on camelCase, dots, slashes, underscores, and hyphens. "a2aUseCase" → ["a2a","use","case"], "jar/rbm21/manage" → ["jar","rbm21","manage"]. All-caps words (JWT, API, SSL) kept whole, not split per-letter. Accents stripped from each word for accent-insensitive matching. Applied to all 3 scoring paths (recommend, query, serve /api/search).
Highly-connected nodes (120+ edges) were dominating over better word matches. E.g. "jar mongo vault" returned jar-machin-vault-manage (120 edges) instead of jar-mongo-vault-manage (74 edges). Graph boost now capped at 50% of the node's own score, so word matches always dominate. Boost rate reduced from 5% to 2% per edge.
memgraph graph-from-dir <dir> with a specific directory now writes to the project-local .memgraph instead of the global ~/.memgraph/skills-graph. Only the no-arg form (auto-discover all 4 skill dirs) writes to the global graph. Use --memory-dir to override.
/api/sync now rejects non-POST methods with 405 (was accepting DELETE, PUT, etc.). memgraph remember "" in --json mode now returns invalid_argument error JSON (was printing "Enter memory content" prompt to stderr).
Three new commands for finding relevant skills: memgraph recommend "<task>" ranks skills by relevance to a task description, memgraph query "<keywords>" searches by keyword, memgraph related "<skill>" gets connected skills. Scoring uses IDF weighting, accent folding, project name boost, extended content matching, graph-based relatedness, stop words, and stemming. 212 skills from 4 directories.
memgraph setup auto-discovers all 4 skill directories, ingests them into the graph, upserts AGENTS.md with usage instructions, and creates .devin/skills/memgraph-usage/SKILL.md. Agents in the repo will now discover and use memgraph for skill lookup before starting work.
memgraph graph-from-dir (no arg) and memgraph serve (no --sync-dir) now auto-discover all 4 standard skill directories. Previously only a single explicitly-specified directory was ingested, causing 17 skills in ~/.config/devin/skills to be missing from the graph. Graph grew from 195 to 212 skills.
/api/search now uses the same IDF-weighted scoring as the CLI and returns QueryResultItem JSON. /api/nodes/<id> returns JSON from the graph node (was raw markdown frontmatter). All endpoints return proper JSON errors.
All 15+ commands now output raw JSON (no {version, data} wrapper). Memory and graph commands all use consistent {count, results} or {id, status} formats. Errors output {error: {code, type, message}} in --json mode.
All 3 agent bridges (claude-code, opencode, copilot) now include a "Skill Discovery" section with memgraph recommend, memgraph query, and memgraph related commands. Previously only memory commands were documented.
Filtered namespace nodes and sub-file references from results. Limited related field to 5 items sorted by relation priority. Sub-file references (README.md, references/*.md) excluded from main query and recommend results.
Removed the 2D Cytoscape.js and 3D Three.js views. The Via Lactea galaxy visualization is now served at the root path. Unknown paths return 404. 834 lines of dead code deleted.
Left-click+drag on any star to move it on the z=0 plane. Glow, label, and connected edges follow in real-time. Click without drag (4px threshold) still opens the detail panel. Pan is disabled during node drag.
Left-click drag now pans (was right-click only). Replaced 293 individual glow sphere meshes with a single Points cloud (1 draw call). Removed per-frame glow pulse loop. Label scale updates cached. Stars 3000→1500, dust 800→400.
2D top-down galaxy view with spiral arm layout. 1500 background stars with twinkle, 400 dust particles with additive blending, node glow halos, namespace nodes as golden core stars. Additive blending throughout for Milky Way luminosity.
Each node gets a floating label above it. Namespace labels larger (48px) and bright, skill labels smaller (32px) and muted. Labels scale with camera distance. Cached canvas textures for performance.
3D phyllotaxis layout with spherical node distribution. OrbitControls for rotate/zoom/pan. Raycasting for node hover and click. Same search/filter/copy-paths/sync functionality.
--sync-dir accepts comma-separated paths for multiple source directories. Scanner picks up both SKILL.md and plain .md files. Deduplicates by ID across sources. No default directory — the user specifies what to sync.
Renamed from sick-memory to memgraph-cli. Binary is now memgraph. Storage at ~/.memgraph with fallback to ~/.sick-memory. New repo at github.com/javimosch/memgraph.
Fixed ReferenceError that prevented the entire graph.js IIFE from executing, causing a blank graph.