mirror of
https://github.com/qwibitai/nanoclaw.git
synced 2026-06-12 18:11:51 +08:00
00ddb3b169
Tell the compactor to include the <message to="name"> wrapping reminder verbatim at the END of the summary so it's the last thing the agent sees after compaction. Previously the instruction just asked to "preserve" routing info, which the compactor could place anywhere or summarize away. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
35 lines
1.5 KiB
TypeScript
35 lines
1.5 KiB
TypeScript
/**
|
|
* PreCompact hook script — outputs custom compaction instructions to stdout.
|
|
*
|
|
* Claude Code captures the stdout of PreCompact shell hooks and passes it
|
|
* as `customInstructions` to the compaction prompt. This ensures the
|
|
* compaction summary preserves message routing context that the agent needs
|
|
* to correctly address responses.
|
|
*
|
|
* Invoked by the PreCompact hook in .claude-shared/settings.json:
|
|
* "command": "bun /app/src/compact-instructions.ts"
|
|
*/
|
|
import { getAllDestinations } from './destinations.js';
|
|
|
|
const destinations = getAllDestinations();
|
|
const names = destinations.map((d) => d.name);
|
|
|
|
const instructions = [
|
|
'Preserve the following in the compaction summary:',
|
|
'',
|
|
'1. For recent messages, keep the full XML structure including all attributes:',
|
|
' - <message from="..." sender="..." time="..."> for chat messages',
|
|
' - <task from="..." time="..."> for scheduled tasks',
|
|
' - <webhook from="..." source="..." event="..."> for webhooks',
|
|
' The message content can be summarized if long, but the XML tags and attributes must remain.',
|
|
'',
|
|
'2. Preserve the chronological message/reply sequence of recent exchanges.',
|
|
' The agent needs to see: who said what, in what order, and from which destination.',
|
|
'',
|
|
'3. At the END of the compaction summary, include this verbatim reminder:',
|
|
' "You MUST wrap all responses in <message to="name">...</message> blocks.',
|
|
` Available destinations: ${names.length > 0 ? names.map((n) => `\`${n}\``).join(', ') : '(none)'}."`,
|
|
];
|
|
|
|
console.log(instructions.join('\n'));
|