Skip to content

wazionapps/nexo

v6.0.5 Feature

This release adds 2 notable features for engineering teams evaluating rollout.

Published 1mo MCP Developer Tools
✓ No known CVEs patched
Read the diff → Tool health → What is this tool? →

✓ No known CVEs patched in this version

Topics

ai-memory atkinson-shiffrin autonomous-agent claude-code claude-code-plugin codex
+14 more
cognitive-architecture knowledge-graph local-first mcp mcp-server memory metacognition model-context-protocol natural-forgetting llm semantic-search shared-brain trust-scoring vector-db

Affected surfaces

auth breaking_upgrade

Summary

AI summary

Fixed strict guardrail blocking edits when session_id omitted and added pytest CI gate.

Full changelog

[6.0.5] - 2026-04-17

Fixed

  • Pre-tool strict guardrail blocked every Edit/Write with "unknown target" when Claude Code's PreToolUse payload omitted session_id. The process_pre_tool_event resolver consulted only payload["session_id"]. Several Claude Code versions deliver PreToolUse without that field, so _resolve_nexo_sid returned "", the strict branch recorded a strict_protocol_write_without_startup debt, and the formatter emitted "NEXO STRICT MODE BLOCKED THIS EDIT — Start the shared-brain session first: call nexo_startup, then nexo_task_open, before editing (unknown target)" even when the user already had an open task, an acknowledged guard, and a tracked file. Tracked as learning #411. A partial fix shipped in 6.0.3 (handle_guard_check persists session_id) but it did not cover the missing-payload case for edits.
  • Two tests/test_hook_guardrails.py pre-tool cases silently regressed in 6.0.2+ and no CI job ran pytest to catch it. test_process_pre_tool_event_allows_public_contribution_checkout and test_process_pre_tool_event_does_not_treat_runtime_home_as_live_repo_when_not_git_checkout asserted result["skipped"] is True, result["reason"] == "lenient mode", which stopped being the correct assertion once public-contribution mode began preserving strict discipline and only relaxing the live-repo guard. Both tests now assert the specific property they were designed to guard (no automation_live_repo_write_blocked debt, no automation_live_repo reason code) and create the protocol task the strict path expects.
  • test_non_tty_returns_lenient inherited NEXO_INTERACTIVE=1 from the parent shell (NEXO Desktop / claude terminal) and read strict instead of lenient. _force_tty now clears NEXO_INTERACTIVE via monkeypatch so the TTY signal is the only thing steering strictness. Without the cleanup the test masked regressions for any contributor running pytest from inside an interactive NEXO client.

Added

  • .github/workflows/tests.yml. CI now runs pytest tests/ -q --maxfail=5 on every PR and push to main. Up to v6.0.4 CI only executed ruff, bandit, verify_release_readiness, and verify_client_parity, so three pre-tool test failures shipped unnoticed. Release discipline gains pytest as a blocking gate.
  • src/hook_guardrails.py::_read_claude_session_id_from_coordination(). Fallback helper used by process_pre_tool_event when payload["session_id"] is absent. Reads $NEXO_HOME/coordination/.claude-session-id (written on SessionStart by the NEXO hook) and falls through to ~/.nexo/coordination/.claude-session-id. Fail-closed semantics preserved: when neither source yields a session id the guardrail still blocks with missing_startup.
  • tests/test_hook_guardrails.py gains two new cases covering both the happy path (payload omits session_id but coordination file is present) and the fail-closed path (both payload and coordination file empty → still blocks).

Changed

  • src/hook_guardrails.py::process_pre_tool_event. Resolution now walks payload → coordination file → empty. No behavioural change for callers that already supply session_id.

Housekeeping

  • NF-TEST-PROTOCOL-API-REFACTOR followup captures two tests/test_protocol.py cases (test_task_close_opens_protocol_debt_when_done_without_evidence, test_task_open_previews_anticipatory_warnings_without_firing_trigger) that assert API shape that no longer exists. Marked xfail(strict=False) in this release so the new tests.yml gate stays green; both will be revisited with the handle_task_close / cognitive-trigger refactor landing in a subsequent patch.

Merged from branch fix/purge-legacy-python-claude-hooks (PR #208)

  • Purge legacy Python Claude hooks on sync (commit 9e42b03).
  • Harden macOS test/runtime isolation (commit 6005288). Smoke installs on macOS no longer touch launchd real; tests run in an isolated launchd namespace so nexo install on a developer laptop can never clobber the user's live LaunchAgents.

What's Changed

  • v6.0.5 — Fix strict hook unknown-target + pytest CI + macOS isolation + legacy hooks purge by @wazionapps in https://github.com/wazionapps/nexo/pull/208

Full Changelog: https://github.com/wazionapps/nexo/compare/v6.0.4...v6.0.5

Weekly OSS security release digest.

The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.

No spam, unsubscribe anytime.

Share this release

Track wazionapps/nexo

Get notified when new releases ship.

Sign up free

About wazionapps/nexo

Cognitive memory for AI agents with Atkinson-Shiffrin memory model (STM/LTM/sensory register), semantic RAG, Ebbinghaus decay, trust scoring, and 76+ MCP tools.

All releases →

Beta — feedback welcome: [email protected]