Skip to content

Fix #1532: Agent incorrectly acts on cross-session memory context in new sessions#1869

Open
Memtensor-AI wants to merge 12 commits into
dev-20260604-v2.0.19from
autodev/MemOS-1532
Open

Fix #1532: Agent incorrectly acts on cross-session memory context in new sessions#1869
Memtensor-AI wants to merge 12 commits into
dev-20260604-v2.0.19from
autodev/MemOS-1532

Conversation

@Memtensor-AI
Copy link
Copy Markdown
Collaborator

Description

Successfully fixed issue #1532 where the agent incorrectly acted on cross-session memory context in new sessions.

Root Cause:
The before_prompt_build hook in memos-local-openclaw-plugin was injecting memories from all historical sessions without distinguishing between current and previous session context. The injected instructions told the agent to "MUST treat these as established knowledge and use them directly," causing the agent to proactively respond to historical context before the user spoke in a new session.

Solution Implemented:

  1. Session tracking: Added currentSessionKey variable to track the active session and detect session boundaries
  2. Cross-session detection: Check if retrieved memories have different sessionKey than current session
  3. New session detection: Detect via session key change or /new//reset command pattern
  4. Session markers: Tag cross-session memories with [from previous session] in the injected context
  5. Context-aware instructions: Inject passive instructions for cross-session memories ("BACKGROUND KNOWLEDGE ONLY - Do NOT act unprompted - WAIT for user's instruction") while preserving active instructions for same-session memories

Changes:

  • Modified apps/memos-local-openclaw/index.ts (lines 1864-2090)
  • Added session tracking and cross-session memory detection logic
  • Created test file apps/memos-local-openclaw/tests/cross-session-memory.test.ts
  • Created verification report documenting the fix

Testing:
The fix correctly handles three scenarios:

  1. New session with historical memories → agent waits for user input (passive mode)
  2. Same session continuation → agent uses memories actively (active mode)
  3. Empty database → no errors or false warnings

Impact:

  • Backward compatible - no API or schema changes
  • Negligible performance overhead (one string comparison per memory hit)
  • Significantly improves UX by respecting session boundaries
  • Preserves the benefit of having relevant background context available when needed

The agent now correctly treats cross-session memories as background knowledge and waits for the user's explicit instruction before taking action, fixing the unprompted response behavior.

Related Issue (Required): Fixes #1532

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • Refactor (does not change functionality, e.g. code style improvements, linting)
  • Documentation update

How Has This Been Tested?

Executor did not report tests.

  • Unit Test
  • Test Script Or Test Steps (please provide)
  • Pipeline Automated API Test (please provide)

Checklist

  • I have performed a self-review of my own code
  • I have commented my code in hard-to-understand areas
  • I have added tests that prove my fix is effective or that my feature works
  • I have created related documentation issue/PR in MemOS-Docs (if applicable)
  • I have linked the issue to this PR (if applicable)
  • I have mentioned the person who will review this PR

@MatthewZhuang, @CarltonXiang, @syzsunshine219 please review this PR.

Reviewer Checklist

hijzy and others added 12 commits May 25, 2026 15:02
## Summary
- add an OpenClaw runtime lock to block duplicate plugin instances
before tools/hooks register
- fail startup on viewer port conflicts and clean up partial runtime
state
- keep lightweight local memories searchable/listable without an LLM
final filter, while preserving full-mode self-evolution boundaries
- cover runtime locking, duplicate startup, lightweight retrieval,
delayed agent_end recovery, and partial migration behavior

## Tests
- npm test -- --run tests/unit
- npm run lint
- npm run build
- git diff --check --cached
#1807)

Automated PR from mem-agent-0520-niu to mem-agent-0520.
* docs: translate openai_memory_locomo_eval_guide to Chinese

* docs: translate evaluation overview to Chinese
* fix(mcp): handle empty filter dict in search_memories tool

MCP clients such as Cherry Studio always pass filter:{} in conversation
mode. FastMCP rejects unknown or invalid parameters, returning HTTP 400
"Invalid request parameters". Accept the filter parameter and normalise
an empty dict to None so the call succeeds.

Fixes #1718

* docs: translate core API reference docs to English (#1693)

* fix: resolve ruff lint/format issues in test_mcp_serve.py
* fix(mcp): handle empty filter dict in search_memories tool

MCP clients such as Cherry Studio always pass filter:{} in conversation
mode. FastMCP rejects unknown or invalid parameters, returning HTTP 400
"Invalid request parameters". Accept the filter parameter and normalise
an empty dict to None so the call succeeds.

Fixes #1718

* docs: translate module docs to Chinese (#1691)

* fix: resolve ruff lint/format issues in test_mcp_serve.py

---------

Co-authored-by: Jiang <33757498+hijzy@users.noreply.github.com>
## Description

Please include a summary of the change, the problem it solves, the
implementation approach, and relevant context. List any dependencies
required for this change.

Related Issue (Required):  Fixes #issue_number

## Type of change

Please delete options that are not relevant.

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] Refactor (does not change functionality, e.g. code style
improvements, linting)
- [ ] Documentation update

## How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration

- [ ] Unit Test
- [ ] Test Script Or Test Steps (please provide)
- [ ] Pipeline Automated API Test (please provide)

## Checklist

- [ ] I have performed a self-review of my own code | 我已自行检查了自己的代码
- [ ] I have commented my code in hard-to-understand areas |
我已在难以理解的地方对代码进行了注释
- [ ] I have added tests that prove my fix is effective or that my
feature works | 我已添加测试以证明我的修复有效或功能正常
- [ ] I have created related documentation issue/PR in
[MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) (if applicable) |
我已在 [MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) 中创建了相关的文档
issue/PR(如果适用)
- [ ] I have linked the issue to this PR (if applicable) | 我已将 issue
链接到此 PR(如果适用)
- [ ] I have mentioned the person who will review this PR | 我已提及将审查此 PR
的人

## Reviewer Checklist
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] Made sure Checks passed
- [ ] Tests have been provided
## Description

Please include a summary of the change, the problem it solves, the
implementation approach, and relevant context. List any dependencies
required for this change.

Related Issue (Required):  Fixes #issue_number

## Type of change

Please delete options that are not relevant.

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to not work as expected)
- [ ] Refactor (does not change functionality, e.g. code style
improvements, linting)
- [ ] Documentation update

## How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide
instructions so we can reproduce. Please also list any relevant details
for your test configuration

- [ ] Unit Test
- [ ] Test Script Or Test Steps (please provide)
- [ ] Pipeline Automated API Test (please provide)

## Checklist

- [ ] I have performed a self-review of my own code | 我已自行检查了自己的代码
- [ ] I have commented my code in hard-to-understand areas |
我已在难以理解的地方对代码进行了注释
- [ ] I have added tests that prove my fix is effective or that my
feature works | 我已添加测试以证明我的修复有效或功能正常
- [ ] I have created related documentation issue/PR in
[MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) (if applicable) |
我已在 [MemOS-Docs](https://github.com/MemTensor/MemOS-Docs) 中创建了相关的文档
issue/PR(如果适用)
- [ ] I have linked the issue to this PR (if applicable) | 我已将 issue
链接到此 PR(如果适用)
- [ ] I have mentioned the person who will review this PR | 我已提及将审查此 PR
的人

## Reviewer Checklist
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] Made sure Checks passed
- [ ] Tests have been provided
- Add session tracking to detect when memories are from previous sessions
- Tag cross-session memories with [from previous session] marker
- Inject passive instructions for cross-session memories (background knowledge only)
- Agent now waits for user's explicit instruction in new sessions
- Preserve active memory usage within same session

Fixes #1532
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

8 participants