{"name":"lk.ghosts/wyrm","slug":"ghosts-wyrm","title":null,"description":"Local-first memory for AI agents: ground truths, failure firewall, negotiated recall over MCP.","url":"https://mcp.market/server/ghosts-wyrm","rating":null,"grade":"B","score":74,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":39,"stars":3,"forks":0,"downloads_week":1087,"last_push_at":"2026-09-14T07:00:21.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":null,"website":"https://ghosts.lk/wyrm","version":"9.2.3","remotes":[],"packages":[{"registryType":"npm","identifier":"wyrm-mcp","version":"9.2.3","transport":{"type":"stdio"}}],"tools":[{"name":"buddy","description":"Use when another buddy-compatible MCP server (or the operator) asks Wyrm for a brief, data-grounded status reply - the Buddy Protocol v1.0 well-known entry point. Companion params switch to the full companion reply; bare calls stay protocol-pure. Cycle-protected.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_activate","description":"Activate a license key to unlock Pro/Team/Enterprise features","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_agent_init","description":"Bootstrap Wyrm's autonomous agent loop in one call. Starts the wyrm-loop daemon as a detached background process so subsequent ticks happen automatically every interval_seconds. Optionally seeds a first goal in the same call. Idempotent: if already running, returns status without spawning a second instance.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_agent_restart","description":"Stop the daemon and start it again with optional new settings. Useful when changing interval_seconds or max_steps without manually stopping first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_agent_status","description":"Inspect the autonomous agent: is the wyrm-loop daemon running, what was the last action, how many active goals + total iterations. Use to confirm bootstrap worked.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_agent_stop","description":"Stop the autonomous agent daemon (SIGTERM with grace, then SIGKILL). Goals remain in DB and can be resumed by calling wyrm_agent_init again.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_analytics_dashboard","description":"View usage analytics dashboard: tool calls, tokens, costs, cache efficiency (Pro+)","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_audit_export","description":"Export a date-ranged tamper-evident audit bundle (JSON). Includes full chain so an external auditor can verify offline without DB access. Use range_start='2026-01-01' for SOC2 audit windows.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_audit_log","description":"Append a hash-chained audit event. Each entry references the previous entry's sha-256, so tampering breaks the chain. Optional Ed25519 signature layer. Used for SOC2/HIPAA-grade audit.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_audit_verify","description":"Walk the entire audit_log chain and verify every prev_hash / row_hash. Returns ok=true if intact, or first_invalid_id when tampering is detected. Optional public_keys also verify Ed25519 signatures.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_auto_capture","description":"Auto-extract durable memories from freeform text (a session transcript, notes, a chat) into the REVIEW QUEUE. A LOCAL extractor (a configurable Ollama model via WYRM_EXTRACT_MODEL or the `model` arg if set, else a deterministic heuristic) pulls out truths, failures, decisions, patterns, and lessons as needs_review candidates; approve/reject with wyrm_review (nothing auto-trusted). Closes the 'just","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_buddy","description":"Friendly, data-grounded coding companion. Returns a brief greeting + project state + suggested next step sourced entirely from Wyrm's real data. Every claim cites a real DB row ID; no hallucinated encouragement. Personas: wyrm (default, dragon-themed), drogo (gruff), berlin (precise), sumair (warm), custom. Moods: normal / celebratory / stuck / quiet (auto-detected). Sizes: full (10-line PhantomDr","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_call_external","description":"Use to call a tool on an outbound MCP server registered via wyrm_mcp - lazily spawned over stdio, result returned and logged to external_call_log.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_capabilities","description":"Use to learn what your memory system can actually do - feature inventory, why each matters, runtime state, and which tool to reach for. Call at session start instead of re-discovering the surface.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_capture","description":"Use to save anything worth keeping - the single write funnel. Auto-classifies notes, decisions, and lessons into quest, ground truth, or memory; risky writes queue for wyrm_review. mode=direct (store a proven pattern or lesson learned so future agents reuse it), extract (pull memories from a conversation transcript or freeform text), trace (harvest a session JSONL / tool-call log into run-tagged r","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_capture_trace","description":"Harvest a harness's working trace into run-tagged review-queue candidates (OFFLINE). Ingests a Claude Code session transcript (JSONL), a ~/.dragon/traces file/dir, or WYRM_TRACE_TOOL_CALLS event output. The SAME local extractor as auto-capture (Ollama WYRM_EXTRACT_MODEL if set, else deterministic; never a cloud LLM) pulls durable truths/failures/decisions/patterns/lessons; secrets (API keys, token","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_check_update","description":"Check whether a newer wyrm-mcp is available on npm. Cached 24h by default; pass force:true to bypass cache.","write_action":true,"price_micros":0,"input_schema":null},{"name":"wyrm_cloud_backup","description":"Legacy whole-DB snapshot backup to encrypted cloud storage (Pro+): backup, restore, list, prune. This is a full-database snapshot (last-write-wins on restore), NOT the sovereign per-row sync; for multi-device memory use wyrm_cloud_sync action=sovereign. Keep this for simple point-in-time backups.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_cloud_sync","description":"Cloud sync. The SOVEREIGN path is the promoted one: zero-knowledge, per-row AES-256-GCM E2E-encrypted delta sync with tombstone propagation; the cloud never sees plaintext. Use action 'sovereign' to sync (push+pull), 'sovereign-preview' for a dry run, 'sovereign-status' to show device + sync state. For hands-off periodic sync, 'sovereign-daemon-start' / 'sovereign-daemon-stop' / 'sovereign-daemon-","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_context_build","description":"Use to build a compact context brief for the current task under a token budget - relevant patterns, lessons, and truths in one formatted block; max_tokens elides low-score items to recallable stubs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_cost_report","description":"View estimated API cost report for current billing period (Pro+)","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_data_batch_insert","description":"Batch insert multiple data points efficiently","write_action":true,"price_micros":0,"input_schema":null},{"name":"wyrm_data_categories","description":"List all data categories for a project","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_data_insert","description":"Insert data into the data lake for a project","write_action":true,"price_micros":0,"input_schema":null},{"name":"wyrm_data_query","description":"Query data from the data lake","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_decided_because","description":"Use to link a choice or decision to the assumption or evidence it was based on - records a causal edge (truth/quest/artifact/session) so stale foundations invalidate downstream.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_decision_downstream","description":"List all decisions that depend on the given source. Use before invalidating a truth to see the blast radius.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_decision_invalidate","description":"Cascade-invalidate all decisions downstream of a source (recursive). Use when a foundational truth turns out to be wrong. Returns the set of affected (kind, id) pairs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_decision_upstream","description":"List all sources a decision was based on (incoming edges). Walks the 'why did we choose this?' chain.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_digest","description":"Render a plain-English summary of what Wyrm has done for the operator over a period. Shows counts (sessions tracked, quests completed, repeated failures blocked, ground truths set, references clipped, hours logged) and highlights so a non-technical operator can see Wyrm's actual contribution. Use this when the user asks 'what did Wyrm do?', 'is Wyrm doing anything?', or to demonstrate value to ske","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_distill","description":"Distill a work session into candidate memory artifacts for review. Parses the session's objectives, decisions, and outcomes into structured artifacts (lessons, patterns, anti-patterns) and queues them for approval via wyrm_review. Use at session end to extract institutional knowledge.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_embed","description":"Make Wyrm FIRST-PRIORITY, always-loaded memory across Claude Code and other CLIs, so it isn't ignored and is consulted proactively, not just when called. Prepends a managed 'Wyrm is your memory. Consult it FIRST.' directive to the TOP of each client's always-loaded instruction file (~/.claude/CLAUDE.md globally; project CLAUDE.md/AGENTS.md, and with allClients also .cursorrules/.windsurfrules/.git","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_encrypt_setup","description":"Set up or check encryption status for sensitive data (Pro+)","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_entity_add","description":"Add an entity to the knowledge graph (person, concept, tool, etc.)","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_entity_graph","description":"Get the neighborhood graph around an entity: all connected nodes within N hops","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_entity_link","description":"Create a relationship between two entities in the knowledge graph","write_action":true,"price_micros":0,"input_schema":null},{"name":"wyrm_entity_merge","description":"Merge two entities: combines aliases, redirects relationships, deletes the source","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_entity_path","description":"Find the shortest path between two entities in the knowledge graph","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_entity_search","description":"Search for entities in the knowledge graph","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_events_publish","description":"Live Memory: manually publish an event onto a project's stream (e.g. a tool_call or presence marker). Failure-isolated: never throws. Payload is stored only when isShared is true (reference-only otherwise).","write_action":true,"price_micros":0,"input_schema":null},{"name":"wyrm_events_replicate","description":"Live Memory (Phase 3): one-shot cross-device replication with a peer Wyrm node: pulls the peer's shared events and pushes ours over the peer's HTTP surface. Privacy-gated (only is_shared events leave the box; reference-only rows carry no payload), with automatic dedup + echo-suppression. Watermarks persist, so repeat calls are incremental. Returns pulled/pushed/duplicate counts.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_events_since","description":"Live Memory: pull events newer than a cursor for a project, in chronological order. Idempotent: safe to re-poll. Returns the events and the new head cursor to pass next time.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_events_subscribe","description":"Use to START consuming a project's Live Memory event stream: returns the current head cursor plus a recent chronological window of events in one read-only call. Nothing persists server-side; poll wyrm_events_since with the returned cursor for new events. Returns disabled:true if WYRM_LIVE_MEMORY is off. Keywords: events, live memory, event stream, cursor, tail events, watch project, replication fe","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_failure_check","description":"Use before proposing or executing any fix, command, or approach - did this fail before? Is it a known landmine? Counter-pattern memory: returns unresolved matching failures (empty = safe to proceed); show the mistakes already made on a project with `wyrm failure list` (CLI). Subagents: check before retrying anything flagged.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_failure_list","description":"List unresolved failures for a project (or globally), most-recent-first.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_failure_record","description":"Use when an approach failed or something broke - log the dead end so nobody tries it again. Identical (scope, target, description) coalesces with occurrences++; when the root cause is fixed, stop flagging it with `wyrm failure resolve <id>` (CLI). Run-scoped failures quarantine until confirmed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_failure_resolve","description":"Mark a failure as resolved (the underlying issue was fixed). Keeps history but excludes from check() results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_feedback","description":"Record whether a recalled knowledge artifact was useful. Adjusts confidence over time: successful reuse boosts it, failure lowers it. Call after applying a recalled pattern or lesson.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_goal_abandon","description":"Abandon a goal (won't be auto-pursued; record kept for audit).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_goal_complete","description":"Manually mark a goal completed (e.g. when the agent reports done or the operator finishes it).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_goal_iterations","description":"List the OODA iterations Wyrm has run for a goal: what it observed, decided, and resulted.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_goal_list","description":"List goals, optionally filtered by status / project. Default: active goals, prioritized.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_goal_pause","description":"Pause a goal; wyrm-loop will skip it until resumed.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_goal_resume","description":"Resume a paused goal.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_goal_set","description":"Set a persistent goal Wyrm will pursue across sessions. Goals carry title, success_criteria, deadline, priority, and a max_iterations cap. The wyrm-loop daemon picks the highest-priority active goal each tick.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_harvest","description":"Auto-populate memory from artifacts you already produce. Walks a project (or ALL registered projects) and harvests durable facts from its docs (README/CLAUDE/AGENTS/ARCHITECTURE) plus recent commit subjects (git log) into the REVIEW QUEUE; approve/reject with wyrm_review, nothing is auto-trusted. Idempotent (re-runs skip what's already harvested). Use dryRun to preview. The fix for a thin corpus.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_hours_report","description":"Hours worked, derived from sessions in a date range. Per-project breakdown + per-session line items. Falls back to a default-hour estimate for sessions with no content.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_import_git","description":"Import a list of commits into the Wyrm memory review queue. Useful for onboarding a project's history or capturing recent work.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_import_pr","description":"Import a pull request (title, body, review comments) into the Wyrm memory review queue to extract patterns and heuristics.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_import_rules","description":"Import a .cursorrules / copilot-instructions file into Wyrm. Parses by section and creates ground truths (for constraint/rule language) or memory artifacts (for general guidelines).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_inject_prompt","description":"Opt-in: inject a Wyrm session-prime instruction block into .github/copilot-instructions.md and/or .cursor/rules for a project. Uses managed markers so re-runs are safe.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_intro","description":"Return a plain-English explanation of what Wyrm is and what it does. Aimed at HUMANS who don't yet understand Wyrm's value: co-founders, operators, designers, anyone who didn't read the docs. Call this when a human user asks 'what does Wyrm even do?' or seems unaware Wyrm is involved in their AI assistant's behavior. NOT for AI-agent self-orientation (use wyrm_capabilities for that).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_invoice_generate","description":"Generate a markdown invoice from a date-ranged hours report. Per-session line items + per-project totals + grand total.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_license","description":"View current license status, tier, and available features","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_list_projects","description":"List all registered projects with their status","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_maintenance","description":"Use for periodic upkeep of the memory store - archive old sessions, vacuum, prune stale events, sweep run quarantine. Admin-gated, destructive; fleets run it between waves.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_mcp_disable","description":"Disable an MCP server config (kept in DB but won't be spawned).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_mcp_list","description":"List registered MCP server configs.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_mcp_register","description":"Register an outbound MCP server config. Wyrm can then call its tools via wyrm_call_external. e.g. server_name='github', command='npx', args=['-y', '@modelcontextprotocol/server-github'], env={GITHUB_PERSONAL_ACCESS_TOKEN: '...'}.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_mcp_tools","description":"List the tools a registered server exposes (one-shot tools/list call over MCP).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_migrate_prompt","description":"Rewrite the Wyrm-managed block in this project's AI-client instruction files (.cursor/rules, .github/copilot-instructions.md, CLAUDE.md, etc.) to the current canonical version. Operator-authored content outside the <!-- wyrm:start --> / <!-- wyrm:end --> markers is preserved verbatim. Dry-run by default; pass apply:true to write changes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_orchestrate_task","description":"Classify a task and get automatic orchestration recommendation (ensemble voting, parallel research, etc)","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_orchestration_config","description":"Get or update auto-orchestration configuration","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_orchestration_stats","description":"Get auto-orchestration effectiveness statistics and task distribution","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_presence_announce","description":"Use from every fleet agent to announce presence and heartbeat liveness: upserts a TTL row that orchestrators and sibling agents poll before assigning or stealing work, stamped with the ambient run_id and the agent's fleet role so the board reads per-run. Re-announce to heartbeat; dead sessions expire by TTL and are reaped by wyrm_maintenance. Announce BEFORE wyrm_quest_claim - claims require a pre","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_presence_list","description":"Use from an orchestrator to see which agents are live right now (heartbeat within TTL) before dispatching work - optionally scoped to a project or to agents touching a specific file, so file-level collisions surface before they happen.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_presence_release","description":"Use on clean agent exit: removes the presence row and drops every quest claim the agent holds, so queued work is immediately re-claimable by the rest of the fleet instead of waiting out the TTL. Idempotent - safe to call twice.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_project_context","description":"Get full context for a specific project including recent sessions, quests, and stored context","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_reference_add","description":"Clip a design reference (URL, image path, palette, or inline snippet) for inspiration. Stored per-project (or globally if no project path). Tag aggressively: tags drive future search and recall when building a new project in the same vein.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_reference_list","description":"Browse saved design references. Filter by project or tag. Default: 50 most recent across all projects.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_reference_search","description":"Full-text search across design references' title / notes / tags. Returns matching references sorted by recency.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_reindex","description":"Rebuild embeddings for a project or all projects. Regenerates vectors for sessions, quests, data, and memory artifacts (the latter power hybrid recall).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_remember","description":"Store a distilled knowledge artifact: proven patterns, lessons learned, anti-patterns, and reasoning traces. These are recalled automatically by wyrm_context_build to help AI models apply past knowledge to new tasks. Example: wyrm_remember({ projectPath: '/home/user/api', kind: 'anti_pattern', problem: 'Jest suite hung after adding the SSE server', validatedFix: 'close() the server in afterAll; it","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_replication","description":"Use to sync memory between machines and watch the live event mesh - action=start|stop|status|tick (daemon + peers; tokens via tokenEnv), conflicts (did the last sync leave conflicts to resolve?), resolve, publish, since, subscribe (watch a project's live activity feed for changes from other agents), replicate (one-shot: sync my memory over to another machine or peer), unshare (kind + id: make a re","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_scaffold_get","description":"Find the best reasoning scaffold for a task description. Returns the most relevant structured checklist, or null if no match meets the confidence threshold.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_scaffold_save","description":"Save a reasoning scaffold: a structured checklist that guides step-by-step thinking for a specific problem type. Scaffolds are automatically surfaced by wyrm_context_build when the task matches, helping AI models apply proven reasoning patterns.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_scan_projects","description":"Scan a directory for git projects and register them. Use this to auto-discover all projects.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_self_update","description":"Run `npm install -g wyrm-mcp@latest` to upgrade. Returns the install transcript. Requires the operator to have write access to the global npm prefix.","write_action":true,"price_micros":0,"input_schema":null},{"name":"wyrm_setup","description":"Auto-detect installed AI clients (VS Code, Claude Desktop, Cursor, Windsurf, Zed) and configure Wyrm's MCP server in all of them. Run this to connect Wyrm to a new AI or after switching providers.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_spec_register","description":"Make spec-kit Wyrm-native. Reads a spec directory (spec.md title/summary + tasks.md task list) and creates one Wyrm quest per task, linked to a project, with a stored spec\\u2192project link. Idempotent: re-running updates the same quests (deduped by a per-spec-task signature) instead of duplicating.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_stats","description":"Use for a health snapshot of the memory database - row counts, vector index coverage, usage.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_sync","description":"Sync database with .wyrm folders in all projects","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_token_delete","description":"Remove a design token from a project.","write_action":true,"price_micros":0,"input_schema":null},{"name":"wyrm_token_get","description":"Retrieve all design tokens for a project, optionally filtered by category. Returns the design system primitives the project is built on.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_token_set","description":"Set a design token for a project. Tokens are colour / type / spacing / motion / shadow / radius / breakpoint / custom: the design system primitives the project is built on. Stored first-class so AI helpers working on creative tasks don't have to re-derive the system from scattered CSS each time. Upserts on (project_id, category, key).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_tool_analytics","description":"Wyrm watches Wyrm: per-tool usage stats (volume, error rate, p50/p95 latency) over a configurable window. Use to find under-performing tools and tune retrieval/ranking. Pass mode='overview' for the total summary, 'usage' for per-tool, 'errors' for recent error sample.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_truth_get","description":"Use to read the established facts and ground rules for a codebase - validated truths the AI should treat as baseline, optionally filtered by category.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_truth_set","description":"Use to lock in a confirmed fact or constraint as project ground truth - architecture, conventions, key decisions. Injected first into every brief; re-setting the same category+key supersedes (history kept).","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_usage","description":"View token usage stats, cache hit rates, and estimated cost savings. Helps monitor and optimize AI credit consumption.","write_action":false,"price_micros":0,"input_schema":null},{"name":"wyrm_vector_setup","description":"Configure embedding provider and download models. Supports local, OpenAI, and Ollama.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":74,"grade":"B","scanned_at":"2026-09-19T21:13:46.417Z","report":{"scannerVersion":"0.1.8","scannedAt":"2026-09-19T21:13:46.439Z","components":{"code":{"score":15,"max":25,"notes":["218 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 6 days ago"]},"identity":{"score":6,"max":10,"notes":["namespace and repository owner differ","website matches verified namespace"]}},"findings":[{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present"},{"id":"install.script","severity":"medium","component":"code","title":"npm install lifecycle script present","evidence":"package.json: …\", \"NOTICE\" ], \"scripts\": { \"preinstall\": \"node scripts/preinstall.cjs\", \"pos…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"wyrm-mcp","version":"9.2.3","found":true,"license":"SEE LICENSE IN LICENSE","hasInstallScripts":true,"dependencyCount":4,"publishedAt":"2026-09-14T06:56:29.066Z","repositoryUrl":"git+https://github.com/Ghosts-Protocol-Pvt-Ltd/wyrm-mcp.git","weeklyDownloads":1087}],"repo":{"found":true,"owner":"Ghosts-Protocol-Pvt-Ltd","repo":"wyrm-mcp","archived":false,"pushedAt":"2026-09-14T07:00:21Z","stars":3,"forks":0,"openIssues":1,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/259326946?v=4","ownerCreatedAt":"2026-02-04T11:43:27Z","license":"NOASSERTION"},"icon":{"url":"https://ghosts.lk/icons/icon-192.png","source":"registry","width":192,"height":192},"presence":{"stars":3,"forks":0,"downloadsWeek":1087,"license":"NOASSERTION","lastPushAt":"2026-09-14T07:00:21.000Z","score":39}}}},"grade_history":[{"kind":"restore","fromGrade":"C","toGrade":"B","reason":"score 74: npm install lifecycle script present; npm install lifecycle script present","createdAt":"2026-09-19T21:13:46.927Z"}],"reviews":[]}