Exact rendered decision journaling
Skill ychampion/cskill-agents/agents/claude-code/skills/exact-rendered-decision-journaling
Journal each per-message tool result replacement so resume logic replays the exact preview the model saw.From its SKILL.md
npx -y skills add ychampion/cskill-agents --skill exact-rendered-decision-journalingAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
SKILL.md
2.5 KB, 499 tokens by cl100k_base, as published. Nobody here has run it
SKILL: Exact Rendered Decision Journaling
Domain: tool-orchestration
Trigger: Apply whenever per-message budgeting rewrites tool_result content so transcripts capture the preview string and resume logic can reapply the same decisions.
Source Pattern: Distilled from reviewed tool-loop and result-shaping patterns.
Core Method
After enforceToolResultBudget persists a candidate, produce a ToolResultReplacementRecord (kind: 'tool-result', toolUseId, replacement) that stores the literal preview returned by buildLargeToolResultMessage. Pass newlyReplaced to the writeToTranscript callback so every replacement is serialized in the conversation transcript; later, reconstructContentReplacementState(messages, records, inheritedReplacements) can rebuild the same seenIds/replacements map, and provisionContentReplacementState gates the feature flag (tengu_hawthorn_steeple) so journaling stays optional.
Key Rules
- Persist the exact preview string the model consumed—the replacement record must not approximate or trim the visible content, or prompt-cache alignment breaks.
- Include
toolUseIdwith each record so resume enforcement can quickly look up replacements without re-running persistence. - Forward
parentState.replacementsintoreconstructForSubagentResumewhen resuming forks so inherited decisions reapply exactly. - Guard
writeToTranscript; it may be undefined in ephemeral contexts, so only call it when provided. - When the flag is disabled,
provisionContentReplacementStateshould returnundefinedand journaling remains inert.
Example Application
In the query loop pass the transcript writer to applyToolResultBudget; the callback serializes newlyReplaced records, which are later replayed by provisionContentReplacementState(initialMessages, records) during resume so the budget enforces the same replacements it originally made.
Anti-Patterns (What NOT to do)
- Do not journal before
persistToolResultsucceeds and the preview is built—the replacement string must exist before you write it down. - Do not drop
kind: 'tool-result'or thetoolUseIdfields;reconstructContentReplacementStaterelies on them to filter and lookup. - Avoid journaling duplicates (e.g., from re-applied replacements); only persist what is new so transcripts stay minimal.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.