Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

LoadContext wraps SessionStart context in <system-reminder>, which Claude Code 2.1.292+ escapes, so the model sees a literal &lt;system-reminder> tag (LoadContext.hook.ts:547,552)

Open Beginner friendly
#2,299 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 6 days

Nobody has claimed this yet.

Assessment

Difficulty
2/5
Estimated time
1-3 hours
Newbie friendliness
76/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
typescript
Domain
tooling

Research direction

Start in LoadContext.hook.ts around lines 547 and 552, where the message string is wrapped in <system-reminder> tags, and check the header comment at line 26. Remove the wrapper so the block prints as plain text, then update the matching description in LIFEOS/DOCUMENTATION/Hooks/HookSystem.md near line 77. Done when no shipped hook emits the tag and a test that scans hook scripts for the tag passes.

Written by the indexing model from the issue text.

Description

Version

LifeOS 7.40.4, Claude Code 2.1.292 or newer (verified on 2.1.294). Same code on main today.

What is broken

Claude Code 2.1.292 changed how hook output is handled. The changelog says:

Improved hook output handling: <system-reminder> tags written in a hook's output are escaped before they reach Claude

LoadContext.hook.ts still wraps its SessionStart dynamic context in <system-reminder>…</system-reminder>. On 2.1.292+ the model gets the tag as escaped literal text (&lt;system-reminder>) around the block instead of a reminder frame. The content still arrives, because SessionStart stdout goes into the context as plain text either way, but every session now opens with a stray escaped tag.

Where (file:line)
  • LifeOS/install/hooks/LoadContext.hook.ts:547 and :552 open and close the wrapper around message.
  • LifeOS/install/hooks/LoadContext.hook.ts:26 header says "stdout: containing dynamic context".
  • LifeOS/install/LIFEOS/DOCUMENTATION/Hooks/HookSystem.md:77 describes the same output.

The other shipped files that mention the tag (PromptProcessing, SatisfactionCapture, VoiceCompletion, TranscriptParser, IntegrityMaintenance) only strip it with a regex, so they are unaffected.

Fix we run locally

Drop the wrapper and print the block as plain text:

const message = `LifeOS Dynamic Context (Auto-loaded at Session Start)
${relationshipContext ?? ''}${learningContext ? '\n---\n' + learningContext : ''}${advisoryContext ? '\n---\n' + advisoryContext : ''}
---
Dynamic context loaded. Constitutional rules are in the system prompt (LIFEOS/LIFEOS_SYSTEM_PROMPT.md). Operational procedures are in CLAUDE.md.`;

We also guard the class with a test: for every script a settings.json hook command runs, plus everything under hooks/, flag any line that contains <system-reminder> or </system-reminder>, skipping comments and regex literals (/<system-reminder>, /^<system-reminder>). On 7.40.4 it flags exactly LoadContext.hook.ts:547,552. Happy to open a PR with the fix and the test if useful.

Dominant language
TypeScript
Stars
19.3k
Forks
2.5k
PR merge metrics
No merged PRs in 30d

Getting set up

This project ships no dev container, Dockerfile or contributing guide, so setting up is up to you: start from its README, and see our first-contribution guide for the general steps.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from danielmiessler/LifeOS

All issues in danielmiessler/LifeOS

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.