Releases: Digital-Process-Tools/claude-remember
v0.8.1 — Handoff survives context-preview truncation
[0.8.1] — Handoff survives context-preview truncation
Fixed
- Last-session handoff was lost on every session start — the session-start hook emits a large block (identity + tiered memory + handoff), but the harness may deliver only a leading preview to the agent. The handoff was dumped inside the memory loop, landing well past the preview cutoff, so it never reached the model. The previous session's handoff is now emitted first, before identity/memory, under a
=== LAST HANDOFF ===header, so it always lands in context. Read-once-then-clear semantics are preserved (the file is truncated immediately after emission).
v0.8.0 — CC 2.x save fix, Windows reliability, unified Haiku call
[0.8.0] — CC 2.x save fix, Windows reliability, unified Haiku call
Added
REMEMBER_BRANCHenv var override —scripts/save-session.shnow honors$REMEMBER_BRANCHwhen computing the## HH:MM | <branch>identity slot of each daily-log entry. Falls back to the existinggit branch --show-currentlookup, then the literal"unknown"if no git repo is present. Use case: running Claude Code from$HOME(or any non-git directory) collapses the identity slot tounknownon every entry, which makes log entries indistinguishable across instances. ExportREMEMBER_BRANCH=laptop/cloud/staging/$HOSTNAMEin your shell rc and the slot becomes a useful per-instance tag. Documented inREADME.mdConfiguration → Environment variables.
Fixed
-
--max-turns 1broke the save on Claude Code 2.1.x (#98, #100) — CC 2.x counts prompt-delivery as turn 1, so the nestedclaude -psummarizer exitederror_max_turnsbefore the model replied;save-session.shtreated the non-zero exit as fatal and never wrote memory (and re-fired on nearly every tool call).--max-turnsis now configurable viaREMEMBER_MAX_TURNS(default 4, validated to[1, 20]); a user Stop hook eats an extra turn, hence the margin. Reported by @davidomisi and @NORSAIN-AI. -
Single
claude -pcall site (#94) — the summarizer invocation lived in two drifted places (save-session.shinlined it twice;pipeline/haiku.pyhadcall_haiku). Unified onpipeline/haiku.pyvia a newpipeline.shell call-haikusubcommand;save-session.shdelegates both calls. Closes the drift wherehaiku.pywas missing--mcp-config/--strict-mcp-config. -
Summarizer subprocess flooded
~/.claude/projects/(#87) — the nestedclaude -pnow runs with--no-session-persistenceand--exclude-dynamic-system-prompt-sections, so it no longer writes a resumable session record per call (hundreds/day on busy sessions). Community contribution by @sergeclaesen. -
Consolidation wrote conversational replies as memory (#89) — a SKIP or non-conforming Haiku response is now rejected (
ConsolidationSkipped) instead of being written torecent.md/archive.mdand irreversibly retiring the staging files. Community contribution by @Buzzwoo-Ecom-Team. -
Empty timezone resolved to UTC instead of system-local (#99) — date calls now route through the
_remember_datehelper, so an unsetREMEMBER_TZfalls back to system-local rather than a bareTZ=""(UTC) for users west of UTC. Community contribution by @kristian-presso. -
Windows: mojibake and lone-surrogate save crash (#91, #97) — the stdin pipe and the
claudesubprocess decoded with the locale codec (cp1252) instead of UTF-8, corrupting→/—into mojibake and crashing every autosave on lone surrogates. Audited every byte↔str boundary: explicitencoding="utf-8"on the stdin pipe and subprocess;errors="replace"on text writes and user-editable memory-file/transcript reads (never crash a save on a hand-edited byte);surrogatepasson the staging-paths filename encode; machine-written JSON (last-save.json) kept strict. Reported by @marketechniks and @DogmaLabsTech. -
Windows external-mode
data_dirpath doubling (#79) —lib-memory-dir.shonly recognized/…and~…as absolute when resolvingREMEMBER_DIRfrom adata_dir, so a Windows drive path (C:/Users/…/mem/{slug}) fell through to the relative branch and was prepended toPROJECT_DIR—REMEMBER_DIRbecame…/proj/C:/…and{slug}was never substituted (substitution lives only in the absolute branch). Drive-letter forms (C:/…andC:\…) are now recognized as absolute. Surfaced by re-enabling the Windows shell tests (#79).
Security
- Nested
claude -pleaked the parent Claude Code session env (#95) — the subprocess stripped onlyCLAUDECODE, soCLAUDE_JOB_DIRand theCLAUDE_CODE_*family (e.g.CLAUDE_CODE_SESSION_ID) were inherited, making the child look like the parent's resumable session to anything keying off those vars._child_env()now stripsCLAUDECODE,CLAUDE_JOB_DIR, and allCLAUDE_CODE_*. Reported by @FrankLedo.
Tests
- New
tests/test_save_session_branch_override.py— pins the four-case truth table for theBRANCH=line insave-session.sh: env-set + git-repo (env wins), env-unset + git-repo (git wins), env-unset + no-git (unknownfallback), env-set-to-empty + no-git (:-treats empty as unset, falls back tounknown). Snapshots the line out of the livesave-session.shrather than re-asserting a copy, so the test fails loudly if the line is ever edited without updating the test. - New
tests/test_encoding_boundaries.py— exercises the real byte↔str boundaries under a forced non-UTF-8 locale (PYTHONUTF8=0 PYTHONCOERCECLOCALE=0 LC_ALL=C) so the mojibake/surrogate bugs reproduce on the Linux/macOS CI legs too — the boundary-blindness (every test mockedStringIOstdin /MagicMocksubprocess) is why the green Windows matrix never caught them. - Re-enabled Windows shell-subprocess coverage (#79) —
test_log_sh,test_migration, andtest_security_fixeswereskipif(win32). Three layers: (1) tests invoke bash by its explicit Git-for-Windows path —subprocess.run(["bash", …])on Windows hitsSystem32\bash.exe(the WSL launcher) first becauseCreateProcesssearches System32 before PATH, so no PATH trick works; (2) Windows paths injected into bash scripts are normalized to forward-slash drive form (C:\x→C:/x) and quoted — forward-slash works for both Git Bash and the Windowspython3the scripts invoke, where the MSYS/c/xform does not; (3) the real bug those tests caught (see Fixed →lib-memory-dir.sh).TestDispatchOwnershipChecksstays skipped on Windows (POSIX ownership/world-writable bits don't map to NTFS).
v0.7.2 — /remember Read+Write fix
Fixes
- #51 —
/rememberskill failed on every save after the first because frontmatter declaredallowed-tools: Writeonly. The Write tool's read-before-write check rejected overwrites without a priorRead. Frontmatter now declaresRead, Writeand the skill prompts an upfrontRead. (thanks @bglong11)
Already fixed in main between v0.5.0 and v0.7.1 (closed as resolved)
- #50, #52 —
hooks.json2>>stderr redirect to.remember/logs/hook-errors.logfailed on first run before the directory existed. The redirect was dropped entirely in a previous release. (thanks @Sbavo, @skellenb, @ossaidqadri)
Marketplace
For more of our Claude Code tooling: https://github.com/Digital-Process-Tools/claude-marketplace (dpt-plugins).