Conversation
…tions
Strengthens per-turn behavioral injection from conditional ("Before
answering questions about prior work...") to assertive ("Search
proactively... Do not wait to be asked") across OpenClaw, Claude Code,
Cursor, and Codex. Addresses user reports of GPT 5.4 and Kimi K2.5 not
proactively searching memories.
OpenClaw (0.8.2): tightened BASE_GUIDANCE and SESSION_CONTEXT_GUIDANCE
to 6 lines (~60 tokens), removed redundant signal list and output-format
description, restored "(not file paths)" hint. Both search and save
directives now include "Do not wait to be asked."
Claude Code (0.7.3): UserPromptSubmit hook text changed from passive
syntax hint to directive framing. Also fixes pre-existing plugin.json
version mismatch (was 0.7.1, CHANGELOG already had 0.7.2).
Cursor (0.1.2): rule header changed to assertive, "Writing Rules"
renamed to "Autonomous Save" with explicit proactive directive.
Codex prompts: AGENTS.md search section aligned with shared behavioral
guidance (signal list expanded, directive lead).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
@codex please help review bugbot run |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (3)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughAdds a Cursor session-start Working Memory hook and bootstrap script; updates install, validation, and docs for Cursor, OpenClaw, and Hermes; bumps multiple plugin/integration versions; tightens proactive search/save guidance; and refactors Hermes provider tooling and input/result normalization. Changes
Sequence Diagram(s)sequenceDiagram
participant Cursor as Cursor (session start)
participant Hook as session-start.mjs
participant nmem as nmem CLI
participant File as LegacyFile (~\/ai-now/memory.md)
participant Session as SessionContext
Cursor->>Hook: sessionStart event
Hook->>nmem: spawn `nmem --json wm read` (10s)
alt nmem returns working memory
nmem-->>Hook: JSON { content: "..." }
Hook->>Hook: trim & wrap in <nowledge_working_memory>
Hook->>Session: emit JSON with additional_context + hookSpecificOutput
else nmem fails or parse error
Hook->>File: read legacy file if present
alt legacy file found
File-->>Hook: file content
Hook->>Hook: trim & wrap in <nowledge_working_memory>
Hook->>Session: emit JSON with additional_context + hookSpecificOutput
else no memory available
Hook-->>Session: emit empty payload (no-op)
end
end
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
bugbot run |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 836c9c7585
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
nowledge-mem-openclaw-plugin/package.json (1)
39-42: Validateopenclaw.releaseflags in the validator too.You now declare
openclaw.release.publishToClawHub/publishToNpmon Line 39-Line 42, but they are not currently enforced byscripts/validate-plugin.mjs, so accidental drift won’t fail validation.♻️ Suggested validator patch
diff --git a/nowledge-mem-openclaw-plugin/scripts/validate-plugin.mjs b/nowledge-mem-openclaw-plugin/scripts/validate-plugin.mjs @@ assertString(openclaw.install?.npmSpec, "package.json openclaw.install.npmSpec"); assertVersionFloor(openclaw.install?.minHostVersion, "package.json openclaw.install.minHostVersion"); assertVersionFloor(openclaw.compat?.pluginApi, "package.json openclaw.compat.pluginApi"); assertString(openclaw.build?.openclawVersion, "package.json openclaw.build.openclawVersion"); + if (typeof openclaw.release?.publishToClawHub !== "boolean") { + fail("package.json openclaw.release.publishToClawHub must be a boolean"); + } + if (typeof openclaw.release?.publishToNpm !== "boolean") { + fail("package.json openclaw.release.publishToNpm must be a boolean"); + }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@nowledge-mem-openclaw-plugin/package.json` around lines 39 - 42, Add validation in scripts/validate-plugin.mjs to enforce the new openclaw.release flags: check that package.json (or parsed plugin manifest) contains openclaw.release.publishToClawHub and openclaw.release.publishToNpm and that they are booleans; if missing or not boolean, throw or log an error and exit non‑zero so validation fails. Locate the existing validation flow (e.g. the validatePluginConfig / validateManifest function in scripts/validate-plugin.mjs) and insert a small check that reads manifest.openclaw?.release and asserts typeof publishToClawHub === "boolean" and typeof publishToNpm === "boolean", emitting a clear error message referencing openclaw.release.publishToClawHub / openclaw.release.publishToNpm when validation fails.nowledge-mem-openclaw-plugin/scripts/validate-plugin.mjs (1)
111-123: BroadenconfigSchemavalidation beyond three defaults.Current checks only protect
sessionContext,sessionDigest, andcorpusSupplement. Key/type/default/range drift in the remaining schema properties won’t be caught by this validator.Suggested direction
const configSchema = manifest.configSchema?.properties; if (!configSchema || typeof configSchema !== "object") { fail("openclaw.plugin.json configSchema.properties must exist"); } + const requiredConfigKeys = [ + "sessionContext", + "sessionDigest", + "digestMinInterval", + "maxContextResults", + "recallMinScore", + "maxThreadMessageChars", + "captureExclude", + "captureSkipMarker", + "corpusSupplement", + "corpusMaxResults", + "corpusMinScore", + "apiUrl", + "apiKey", + ]; + for (const key of requiredConfigKeys) { + if (!(key in configSchema)) { + fail(`configSchema.properties.${key} must exist`); + } + } if (configSchema.sessionContext?.default !== false) { fail("sessionContext must default to false"); }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@nowledge-mem-openclaw-plugin/scripts/validate-plugin.mjs` around lines 111 - 123, The validator currently only checks three defaults; update the logic around manifest.configSchema?.properties (configSchema) to validate the full expected schema set: ensure required property keys exist, their schema types match expectations, and their default values/ranges match a defined spec instead of only checking sessionContext, sessionDigest, and corpusSupplement; implement a small expectedSpec mapping (property -> {type, default, optional range}) and iterate over Object.entries(expectedSpec) to call fail(...) when a property is missing, has the wrong type, or the default/value is outside the allowed range, reusing the existing fail function for errors.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@nowledge-mem-cursor-plugin/hooks/session-start.mjs`:
- Around line 29-36: The readLegacyWorkingMemoryFile function reads legacyPath
unguarded causing the session-start hook to crash if readFileSync throws; wrap
the readFileSync call in a try/catch around the existing existsSync check so any
read errors (permissions/IO) are caught and the function returns an empty string
instead of throwing, and optionally log or debug the error via the same logger
used elsewhere in the module for visibility.
In `@nowledge-mem-openclaw-plugin/scripts/validate-plugin.mjs`:
- Around line 21-27: The readFile call inside assertNonEmpty can throw and
should be wrapped in a try/catch so validation errors are surfaced via fail(...)
instead of uncaught exceptions; modify assertNonEmpty (the function that calls
readFile(path.join(pluginRoot, relPath), "utf8")) to catch any error, call
fail(`Failed to read ${relPath}: ${err.message}`) (or similar friendly message
including relPath and the original error), and only proceed to trim/return text
if read succeeded.
- Around line 100-103: Add a third check that verifies CHANGELOG.md's newest
release header matches the same version as manifest.version and pkg.version:
read CHANGELOG.md, extract the topmost release version (e.g. via a regex
matching headers like /^##\s*\[?(\d+\.\d+\.\d+(?:[-+][\w.]+)?)\]?/m), assert it
exists, and compare it to manifest.version/pkg.version; if it differs call
fail("CHANGELOG.md version must match package.json and openclaw.plugin.json").
Insert this check alongside the existing assertString(manifest.version, ...) /
if (manifest.version !== pkg.version) block so all three sources are validated
and failures reference manifest.version and pkg.version.
---
Nitpick comments:
In `@nowledge-mem-openclaw-plugin/package.json`:
- Around line 39-42: Add validation in scripts/validate-plugin.mjs to enforce
the new openclaw.release flags: check that package.json (or parsed plugin
manifest) contains openclaw.release.publishToClawHub and
openclaw.release.publishToNpm and that they are booleans; if missing or not
boolean, throw or log an error and exit non‑zero so validation fails. Locate the
existing validation flow (e.g. the validatePluginConfig / validateManifest
function in scripts/validate-plugin.mjs) and insert a small check that reads
manifest.openclaw?.release and asserts typeof publishToClawHub === "boolean" and
typeof publishToNpm === "boolean", emitting a clear error message referencing
openclaw.release.publishToClawHub / openclaw.release.publishToNpm when
validation fails.
In `@nowledge-mem-openclaw-plugin/scripts/validate-plugin.mjs`:
- Around line 111-123: The validator currently only checks three defaults;
update the logic around manifest.configSchema?.properties (configSchema) to
validate the full expected schema set: ensure required property keys exist,
their schema types match expectations, and their default values/ranges match a
defined spec instead of only checking sessionContext, sessionDigest, and
corpusSupplement; implement a small expectedSpec mapping (property -> {type,
default, optional range}) and iterate over Object.entries(expectedSpec) to call
fail(...) when a property is missing, has the wrong type, or the default/value
is outside the allowed range, reusing the existing fail function for errors.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 06ab83ab-b7b9-4bf0-abaf-f383da678d29
⛔ Files ignored due to path filters (1)
nowledge-mem-openclaw-plugin/package-lock.jsonis excluded by!**/package-lock.json
📒 Files selected for processing (27)
README.mdintegrations.jsonnowledge-mem-claude-code-plugin/.claude-plugin/plugin.jsonnowledge-mem-claude-code-plugin/CHANGELOG.mdnowledge-mem-claude-code-plugin/hooks/hooks.jsonnowledge-mem-codex-prompts/AGENTS.mdnowledge-mem-cursor-plugin/.cursor-plugin/plugin.jsonnowledge-mem-cursor-plugin/CHANGELOG.mdnowledge-mem-cursor-plugin/README.mdnowledge-mem-cursor-plugin/RELEASING.mdnowledge-mem-cursor-plugin/hooks/hooks.jsonnowledge-mem-cursor-plugin/hooks/session-start.mjsnowledge-mem-cursor-plugin/mcp.jsonnowledge-mem-cursor-plugin/rules/nowledge-mem.mdcnowledge-mem-cursor-plugin/scripts/validate-plugin.mjsnowledge-mem-cursor-plugin/skills/read-working-memory/SKILL.mdnowledge-mem-hermes/CHANGELOG.mdnowledge-mem-hermes/README.mdnowledge-mem-hermes/RELEASING.mdnowledge-mem-hermes/plugin.yamlnowledge-mem-hermes/provider.pynowledge-mem-openclaw-plugin/CHANGELOG.mdnowledge-mem-openclaw-plugin/RELEASING.mdnowledge-mem-openclaw-plugin/openclaw.plugin.jsonnowledge-mem-openclaw-plugin/package.jsonnowledge-mem-openclaw-plugin/scripts/validate-plugin.mjsnowledge-mem-openclaw-plugin/src/hooks/behavioral.js
💤 Files with no reviewable changes (1)
- nowledge-mem-hermes/provider.py
|
bugbot run |
|
@codex please review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 8f90c5146d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
1 issue from previous review remains unresolved.
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit 8f90c51. Configure here.
|
bugbot run |
|
@codex please review |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
nowledge-mem-cursor-plugin/README.md (1)
49-57: Good separation of concerns, minor clarity suggestion.This section correctly distinguishes between:
- Cursor MCP settings (for plugin tool calls)
- Local
nmemclient config (for terminal-side bootstrap and handoffs)The
nmem config client setcommands are accurate and align with the learnings about remote Mem setup.✨ Minor clarity improvement for line 56
Consider rephrasing line 56 for better clarity:
-Cursor MCP settings cover the plugin's tool calls. The local `nmem` client config covers the terminal-side bootstrap and handoff behaviors. It is separate from server-side remote-access settings on the Mem host. +Cursor MCP settings cover the plugin's tool calls. The local `nmem` client config covers the terminal-side bootstrap and handoff behaviors. This client-side config is separate from the server-side configuration that governs remote access on the Mem host itself.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@nowledge-mem-cursor-plugin/README.md` around lines 49 - 57, Reword the sentence that starts "Cursor MCP settings cover the plugin's tool calls..." to make the separation clearer: state that Cursor MCP settings control only plugin tool calls (server/plugin-side), while the local `nmem` client config controls terminal-side bootstrap and handoff behaviors (client-side), and explicitly note that server-side remote-access settings live on the Mem host and are configured separately; reference the terms "Cursor MCP settings", "local `nmem` client config", "sessionStart hook", and "save-handoff skill" so the reader knows which behaviors each configuration affects.nowledge-mem-hermes/client.py (1)
177-199: Consider chaining FileNotFoundError withfrom None.The static analysis correctly flags that the
FileNotFoundErrorexception should useraise ... from Noneto avoid misleading exception chains. TheJSONDecodeErrorhandling at line 196-199 already does this correctly withfrom error.♻️ Proposed fix
except FileNotFoundError: - raise RuntimeError( + raise RuntimeError( "nmem CLI not found. Install: pip install nmem-cli, " "or enable CLI in Nowledge Mem: Settings > Developer Tools" - ) + ) from None🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@nowledge-mem-hermes/client.py` around lines 177 - 199, The FileNotFoundError except block handling the subprocess.run call should suppress the original exception chain; update the except FileNotFoundError branch that raises RuntimeError("nmem CLI not found...") to use exception chaining suppression by raising the RuntimeError from None (i.e., use "raise RuntimeError(...) from None") so the misleading FileNotFoundError is not shown; locate the block around the subprocess.run call that references self._timeout and modify that raise accordingly.nowledge-mem-hermes/provider.py (1)
380-404:_parse_csvand_normalize_id_listare nearly identical—consider consolidating.Both methods have the same implementation: handle
None, split strings by comma, handle iterables, and convert other types to string. Consider extracting a shared helper or having one call the other.♻️ Proposed consolidation
`@staticmethod` - def _parse_csv(value: Any) -> Optional[List[str]]: + def _normalize_list(value: Any) -> Optional[List[str]]: + """Normalize value to a list of trimmed strings, or None if empty.""" if value is None: return None if isinstance(value, str): return [item.strip() for item in value.split(",") if item.strip()] if isinstance(value, (list, tuple, set)): parsed = [str(item).strip() for item in value if str(item).strip()] return parsed or None - text = str(value).strip() return [text] if text else None + # Alias for semantic clarity in different contexts + _parse_csv = _normalize_list + _normalize_id_list = _normalize_list + - `@staticmethod` - def _normalize_id_list(value: Any) -> Optional[List[str]]: - if value is None: - return None - if isinstance(value, str): - return [item.strip() for item in value.split(",") if item.strip()] - if isinstance(value, (list, tuple, set)): - parsed = [str(item).strip() for item in value if str(item).strip()] - return parsed or None - - text = str(value).strip() - return [text] if text else None🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@nowledge-mem-hermes/provider.py` around lines 380 - 404, The two almost identical methods _parse_csv and _normalize_id_list should be consolidated: extract a single helper (e.g., _to_str_list or _parse_list_like) that encapsulates the logic of handling None, splitting strings on commas, normalizing iterables (list/tuple/set) by str().strip(), and converting other values to a single-item list or None, then have both _parse_csv and _normalize_id_list call that helper (or remove one and alias it) to avoid duplication and ensure consistent behavior across parse/normalize operations.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@nowledge-mem-hermes/provider.py`:
- Line 22: The import from tools.registry (tool_error, tool_result) is invalid;
remove that import and either add local helper functions or use existing error
handling utilities inside provider.py. Specifically, replace the line "from
tools.registry import tool_error, tool_result" with local definitions for
tool_error and tool_result (e.g., small functions that return consistent
dicts/objects or raise/call the module logger) and update any callers in
provider.py (e.g., in the functions that reference tool_error/tool_result) to
use these new local helpers so imports no longer fail. Ensure the new helpers
preserve the expected shape used elsewhere in provider.py.
In `@nowledge-mem-openclaw-plugin/SKILL.md`:
- Around line 108-112: The wording "default resolver path" is ambiguous; update
the SKILL.md section that shows the two install commands
(clawhub:`@nowledge/openclaw-nowledge-mem` and `@nowledge/openclaw-nowledge-mem`) to
either (a) clearly state when to use each form (e.g., explain that "clawhub:" is
needed when using the clawhub resolver and the plain `@nowledge/`... uses the
default resolver), or (b) remove the alternate example if both are equivalent;
specifically edit the paragraph containing the examples "openclaw plugins
install clawhub:`@nowledge/openclaw-nowledge-mem`" and "openclaw plugins install
`@nowledge/openclaw-nowledge-mem`" to include the chosen clarification or removal.
---
Nitpick comments:
In `@nowledge-mem-cursor-plugin/README.md`:
- Around line 49-57: Reword the sentence that starts "Cursor MCP settings cover
the plugin's tool calls..." to make the separation clearer: state that Cursor
MCP settings control only plugin tool calls (server/plugin-side), while the
local `nmem` client config controls terminal-side bootstrap and handoff
behaviors (client-side), and explicitly note that server-side remote-access
settings live on the Mem host and are configured separately; reference the terms
"Cursor MCP settings", "local `nmem` client config", "sessionStart hook", and
"save-handoff skill" so the reader knows which behaviors each configuration
affects.
In `@nowledge-mem-hermes/client.py`:
- Around line 177-199: The FileNotFoundError except block handling the
subprocess.run call should suppress the original exception chain; update the
except FileNotFoundError branch that raises RuntimeError("nmem CLI not
found...") to use exception chaining suppression by raising the RuntimeError
from None (i.e., use "raise RuntimeError(...) from None") so the misleading
FileNotFoundError is not shown; locate the block around the subprocess.run call
that references self._timeout and modify that raise accordingly.
In `@nowledge-mem-hermes/provider.py`:
- Around line 380-404: The two almost identical methods _parse_csv and
_normalize_id_list should be consolidated: extract a single helper (e.g.,
_to_str_list or _parse_list_like) that encapsulates the logic of handling None,
splitting strings on commas, normalizing iterables (list/tuple/set) by
str().strip(), and converting other values to a single-item list or None, then
have both _parse_csv and _normalize_id_list call that helper (or remove one and
alias it) to avoid duplication and ensure consistent behavior across
parse/normalize operations.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 5db3bdaf-c03a-45c0-9c4d-ed724da5a8d4
📒 Files selected for processing (26)
.cursor-plugin/marketplace.jsonREADME.mdintegrations.jsonnowledge-mem-claude-code-plugin/README.mdnowledge-mem-claude-code-plugin/commands/status.mdnowledge-mem-claude-code-plugin/skills/distill-memory/SKILL.mdnowledge-mem-claude-code-plugin/skills/read-working-memory/SKILL.mdnowledge-mem-claude-code-plugin/skills/save-thread/SKILL.mdnowledge-mem-claude-code-plugin/skills/search-memory/SKILL.mdnowledge-mem-cursor-plugin/.cursor-plugin/plugin.jsonnowledge-mem-cursor-plugin/CHANGELOG.mdnowledge-mem-cursor-plugin/README.mdnowledge-mem-cursor-plugin/RELEASING.mdnowledge-mem-cursor-plugin/hooks/session-start.mjsnowledge-mem-cursor-plugin/scripts/validate-plugin.mjsnowledge-mem-hermes/CHANGELOG.mdnowledge-mem-hermes/README.mdnowledge-mem-hermes/client.pynowledge-mem-hermes/plugin.yamlnowledge-mem-hermes/provider.pynowledge-mem-npx-skills/skills/check-integration/SKILL.mdnowledge-mem-openclaw-plugin/CHANGELOG.mdnowledge-mem-openclaw-plugin/README.mdnowledge-mem-openclaw-plugin/RELEASING.mdnowledge-mem-openclaw-plugin/SKILL.mdnowledge-mem-openclaw-plugin/scripts/validate-plugin.mjs
✅ Files skipped from review due to trivial changes (15)
- nowledge-mem-claude-code-plugin/skills/search-memory/SKILL.md
- nowledge-mem-claude-code-plugin/skills/read-working-memory/SKILL.md
- nowledge-mem-claude-code-plugin/commands/status.md
- nowledge-mem-claude-code-plugin/README.md
- nowledge-mem-hermes/plugin.yaml
- nowledge-mem-claude-code-plugin/skills/save-thread/SKILL.md
- .cursor-plugin/marketplace.json
- README.md
- nowledge-mem-npx-skills/skills/check-integration/SKILL.md
- nowledge-mem-openclaw-plugin/CHANGELOG.md
- nowledge-mem-hermes/CHANGELOG.md
- nowledge-mem-openclaw-plugin/RELEASING.md
- nowledge-mem-claude-code-plugin/skills/distill-memory/SKILL.md
- nowledge-mem-cursor-plugin/.cursor-plugin/plugin.json
- nowledge-mem-openclaw-plugin/README.md
🚧 Files skipped from review as they are similar to previous changes (7)
- nowledge-mem-hermes/README.md
- nowledge-mem-cursor-plugin/scripts/validate-plugin.mjs
- nowledge-mem-cursor-plugin/hooks/session-start.mjs
- nowledge-mem-openclaw-plugin/scripts/validate-plugin.mjs
- nowledge-mem-cursor-plugin/CHANGELOG.md
- nowledge-mem-cursor-plugin/RELEASING.md
- integrations.json
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 25086153ef
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
|
bugbot run |
|
@codex please review now |
There was a problem hiding this comment.
✅ Bugbot reviewed your changes and found no new issues!
Comment @cursor review or bugbot run to trigger another review on this PR
Reviewed by Cursor Bugbot for commit f821734. Configure here.
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f821734be8
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| from typing import Any, Dict, List, Optional | ||
|
|
||
| from agent.memory_provider import MemoryProvider | ||
| from tools.registry import tool_error, tool_result |
There was a problem hiding this comment.
Restore compatibility with released Hermes registry APIs
Importing tool_error and tool_result at module load time makes this provider fail to import on Hermes releases where tools.registry does not export those helpers (for example, upstream v2026.3.28 only exposes registry). That turns provider startup into an immediate ImportError, so the plugin cannot load at all despite the package claiming Hermes v0.7.0+ support. Please gate this import or fall back to local JSON serialization so older supported Hermes versions still work.
Useful? React with 👍 / 👎.

Summary
Prepares the Nowledge Mem community integrations for release and upstream review across three surfaces:
This PR also normalizes remote setup guidance so user-facing instructions point to
nmem config client ...instead of asking people to edit JSON files directly.What Changed
OpenClaw
package.json,openclaw.plugin.json, lockfile versioning, and repo registry metadataHermes
0.5.5hermesnmem config client ...Cursor
nowledge-mem-cursorto avoid collisions with the Claude-oriented packagemcp.jsonpackage shapesessionStarthook for Working Memory bootstrapsave-handoffonly, not transcript save/importRegistry / Repo Surface
integrations.jsonto match shipped package versionsWhy These Changes Belong Together
These integrations share one product contract:
nmemclient config path for local and remote accessShipping them together reduces drift between package contents, repo registry metadata, and the install paths users actually follow.
Validation
Passed locally:
git diff --checkAlso verified manually:
Notes
nowledge-labs-websiterepo.Summary by CodeRabbit
Release Notes
New Features
Bug Fixes
Documentation
nmem config clientcommandsChores