[{"data":1,"prerenderedAt":4},["ShallowReactive",2],{"readme-html:EDM115\u002FTHOUGHTS:master":3},"\u003Cdiv align=\"center\">\n \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002FEDM115\u002FTHOUGHTS\u002Fmaster\u002Fassets\u002Flogo.webp\" alt=\"THOUGHTS logo : multiple reasoning traces compressed into one durable thought\" width=\"260\"> \n\u003Ch1 id=\"thoughts\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"thoughts\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#thoughts\">THOUGHTS\u003C\u002Fa>\u003C\u002Fh1>\n\u003Ch2 id=\"things-heard-observed-unclear-guessed-hacked-tracked-or-suspected-a-living-document-about-non-trivial-details\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"things-heard-observed-unclear-guessed-hacked-tracked-or-suspected-a-living-document-about-non-trivial-details\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#things-heard-observed-unclear-guessed-hacked-tracked-or-suspected-a-living-document-about-non-trivial-details\">Things Heard, Observed, Unclear, Guessed, Hacked, Tracked, or Suspected : A living document about non-trivial details\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Cstrong>Keep what context forgets\u003C\u002Fstrong>\u003Cbr>\n\u003Cbr>\n\u003C\u002Fp>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FEDM115\u002Fthoughts\u002Factions\u002Fworkflows\u002Fci.yml\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Cimg src=\"https:\u002F\u002Fgithub.com\u002FEDM115\u002Fthoughts\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg\" alt=\"CI\" loading=\"lazy\">\u003C\u002Fa>\u003Cbr>\n\u003Ca href=\"https:\u002F\u002Fskills.sh\u002FEDM115\u002Fthoughts\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Cimg src=\"https:\u002F\u002Fskills.sh\u002Fb\u002FEDM115\u002Fthoughts\" alt=\"skills.sh\" loading=\"lazy\">\u003C\u002Fa>\u003Cbr>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FEDM115\u002FTHOUGHTS\u002Fblob\u002Fmaster\u002FLICENSE\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue.svg\" alt=\"MIT License\" loading=\"lazy\">\u003C\u002Fa>\u003Cbr>\n\u003Ca href=\"https:\u002F\u002Fagentskills.io\u002F\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAgent%20Skills-compatible-00040e.svg\" alt=\"Agent Skills\" loading=\"lazy\">\u003C\u002Fa>\u003C\u002Fp>\n\u003C\u002Fdiv>\n\u003Cp>Long agent sessions produce valuable details that rarely belong in polished documentation yet : undocumented constraints, failed approaches, implementation tradeoffs, unresolved risks and the one strange fact that will save an hour tomorrow. Context compaction, a new thread, or a different agent can erase them.\u003Cbr>\nSaving every transcript is not the answer. It retains noise, may retain sensitive data and leaves the next agent to rediscover what mattered. \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-attribute\">thoughts\u003C\u002Fspan>\u003C\u002Fcode> maintains a deliberately selective \u003Ccode class=\"hljs\">THOUGHTS.\u003Cspan class=\"hljs-built_in\">md\u003C\u002Fspan>\u003C\u002Fcode> : a searchable scratchpad for non-obvious project knowledge that is not already authoritative elsewhere.\u003Cbr>\nThe project has two layers :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Portable agent skill\u003C\u002Fstrong> : decides what deserves to be written, supports explicit maintenance commands and works in agent skills-compatible harnesses\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Optional Codex plugin\u003C\u002Fstrong> : watches lifecycle signals and asks the main model to run the skill after high-value turns or after compaction. The hook never writes project thoughts itself\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"what-gets-preserved\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"what-gets-preserved\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#what-gets-preserved\">What gets preserved\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>A candidate passes the write gate only when a capable agent starting a fresh thread would otherwise make a worse decision or repeat costly work. Good entries capture a durable constraint and why it matters :\u003C\u002Fp>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>md\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs md'>\u003Cspan class=\"hljs-section\">## 2026-07-22 — GPT-5.6 Sol Ultra — Codex — &quot;Build selective project memory&quot;\u003C\u002Fspan>\n\n\u003Cspan class=\"hljs-bullet\">-\u003C\u002Fspan> \u003Cspan class=\"hljs-code\">`PreCompact`\u003C\u002Fspan> command hooks cannot invoke the model. Recovery must set a signal and inject \u003Cspan class=\"hljs-code\">`$thoughts append`\u003C\u002Fspan> through \u003Cspan class=\"hljs-code\">`SessionStart(source=compact)`\u003C\u002Fspan> after compaction.\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>Routine actions, status narration, simple answers and facts already present in README, AGENTS, plans, code, comments, tests, or issues stay out.\u003Cbr>\n\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-attribute\">thoughts\u003C\u002Fspan>\u003C\u002Fcode> preserves conclusions and useful reasoning artifacts, it does \u003Cstrong>not\u003C\u002Fstrong> request or store hidden chain-of-thought.\u003C\u002Fp>\n\u003Ch2 id=\"installation\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"installation\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#installation\">Installation\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ch3 id=\"standalone-skill\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"standalone-skill\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#standalone-skill\">Standalone skill\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Install the portable skill with the skills CLI :\u003C\u002Fp>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>pwsh\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs pwsh'>npx skills add EDM115\u002Fthoughts\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>You can then invoke \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-meta\">\u003Cspan class=\"hljs-keyword\">$thoughts\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode> explicitly. Harnesses that support implicit skill selection may also load it on high-value turns based on its description.\u003C\u002Fp>\n\u003Ch3 id=\"codex-plugin\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"codex-plugin\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#codex-plugin\">Codex plugin\u003C\u002Fa>\u003C\u002Fh3>\n\u003Cp>Add the marketplace and plugin to your Codex installation :\u003C\u002Fp>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>pwsh\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs pwsh'>codex plugin marketplace add EDM115\u002Fthoughts\ncodex plugin add thoughts@edm115\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>Then open the Codex App -&gt; Settings -&gt; Hooks -&gt; thoughts and click on Trust for each of the 6 hook types.\u003Cbr>\nThe plugin hooks require Node.js 20 or newer. The standalone skill does not. Node.js from the bundled runtime should be sufficient.\u003C\u002Fp>\n\u003Ch2 id=\"commands\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"commands\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#commands\">Commands\u003C\u002Fa>\u003C\u002Fh2>\n\u003Ctable>\n\u003Cthead>\n\u003Ctr>\n\u003Cth>Command\u003C\u002Fth>\n\u003Cth>Behavior\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-meta\">\u003Cspan class=\"hljs-keyword\">$thoughts\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Same as \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-built_in\">append\u003C\u002Fspan>\u003C\u002Fcode> : run the semantic write gate and write only if something qualifies\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-meta\">\u003Cspan class=\"hljs-keyword\">$thoughts\u003C\u002Fspan> append\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Read only the resolved \u003Ccode class=\"hljs\">THOUGHTS.\u003Cspan class=\"hljs-built_in\">md\u003C\u002Fspan>\u003C\u002Fcode>, use current context to add or refine the current agent’s entry\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-meta\">\u003Cspan class=\"hljs-keyword\">$thoughts\u003C\u002Fspan> init\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Scan the repository and create a useful initial scratchpad from verified, non-obvious facts\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-meta\">\u003Cspan class=\"hljs-keyword\">$thoughts\u003C\u002Fspan> cleanup\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Ftd>\n\u003Ctd>Rescan, remove obsolete agent facts, merge duplicates and compress wording while protecting user-authored notes\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\u003Cp>Explicit invocation forces a check, not a mutation. A clean no-op is a valid result.\u003C\u002Fp>\n\u003Ch2 id=\"file-location-and-ownership\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"file-location-and-ownership\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#file-location-and-ownership\">File location and ownership\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The skill resolves one canonical location :\u003C\u002Fp>\n\u003Col>\n\u003Cli>Reuse the sole existing \u003Ccode class=\"hljs\">THOUGHTS.\u003Cspan class=\"hljs-built_in\">md\u003C\u002Fspan>\u003C\u002Fcode> at the repository root or established developer-documentation home\u003C\u002Fli>\n\u003Cli>Stop if multiple candidates exist, never merge or choose silently\u003C\u002Fli>\n\u003Cli>Otherwise use an established developer-documentation directory such as \u003Ccode class=\"hljs\">docs\u002F\u003C\u002Fcode>, \u003Ccode class=\"hljs\">documentation\u002F\u003C\u002Fcode>, or \u003Ccode class=\"hljs\">developer-docs\u002F\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Fall back to the repository root, never create \u003Ccode class=\"hljs\">docs\u002F\u003C\u002Fcode> solely for this file\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>During ordinary work, only the main orchestrator edits the file. Exploration and review subagents never write it. A subagent owning substantial delegated work may return a concise \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-title class_\">Thought\u003C\u002Fspan> candidates\u003C\u002Fcode> section for the parent to vet.\u003Cbr>\nAgent entries are scoped by date, exposed model\u002Freasoning level, harness and conversation. User entries use \u003Ccode class=\"hljs\">YYYY-MM-DD — \u003Cspan class=\"hljs-keyword\">User\u003C\u002Fspan> \u003Cspan class=\"hljs-title\">— &quot;Thought\u003C\u002Fspan> recap\u003Cspan class=\"hljs-string\">&quot;\u003C\u002Fspan>\u003C\u002Fcode>, ordinary append never edits them and cleanup reports substantial proposed rewrites instead of applying them automatically.\u003Cbr>\nEvery new file starts with the exact template in \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FEDM115\u002FTHOUGHTS\u002Fblob\u002Fmaster\u002Fskills\u002Fthoughts\u002Fassets\u002FTHOUGHTS.md\" target=\"_blank\" rel=\"noopener noreferrer\">\u003Ccode class=\"hljs\">skills\u003Cspan class=\"hljs-regexp\">\u002Fthoughts\u002F\u003C\u002Fspan>assets\u002FTHOUGHTS.md\u003C\u002Fcode>\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"how-the-codex-lifecycle-works\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"how-the-codex-lifecycle-works\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#how-the-codex-lifecycle-works\">How the Codex lifecycle works\u003C\u002Fa>\u003C\u002Fh2>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>mermaid\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs mermaid'>\u003Cspan class=\"hljs-variable\">flowchart\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">LR\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-variable\">A\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">[\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;Prompt + tool activity&quot;\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">]\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--&gt;\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">B\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">{\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;High-value signal ?&quot;\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">}\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-variable\">B\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">&quot;No&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--&gt;\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">C\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">[\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;Finish normally&quot;\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">]\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-variable\">B\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">&quot;Yes&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--&gt;\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">D\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">[\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;Stop continuation : $thoughts append&quot;\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">]\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-built_in\">D\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--&gt;\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">E\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">{\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;Semantic write gate&quot;\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">}\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-built_in\">E\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">&quot;Nothing durable&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--&gt;\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">C\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-built_in\">E\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--\u003C\u002Fspan> \u003Cspan class=\"hljs-string\">&quot;Useful in a fresh thread&quot;\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--&gt;\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">F\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">[\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;Main agent updates THOUGHTS.md&quot;\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">]\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-variable\">G\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">[\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;PreCompact&quot;\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">]\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--&gt;\u003C\u002Fspan> \u003Cspan class=\"hljs-variable\">H\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">[\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;Store pending boolean only&quot;\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">]\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-variable\">H\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--&gt;\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">I\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">[\u003C\u002Fspan>\u003Cspan class=\"hljs-string\">&quot;SessionStart : compact&quot;\u003C\u002Fspan>\u003Cspan class=\"hljs-punctuation\">]\u003C\u002Fspan>\n    \u003Cspan class=\"hljs-built_in\">I\u003C\u002Fspan> \u003Cspan class=\"hljs-operator\">--&gt;\u003C\u002Fspan> \u003Cspan class=\"hljs-built_in\">E\u003C\u002Fspan>\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>The hook uses deterministic signals to request a check when a prompt explicitly asks for thoughts persistence, large-scope work uses tools, two mutations occur, eight tool calls occur, delegation starts, or compaction recovery is pending. These thresholds do not force a write, the skill’s semantic gate remains authoritative.\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-literal\">Stop\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fstrong> : returns a one-time continuation prompt that behaves like a new user prompt. \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-attribute\">stop_hook_active\u003C\u002Fspan>\u003C\u002Fcode> prevents a continuation loop.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-title class_\">PreCompact\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fstrong> : stores a pending boolean and allows compaction to continue. Command hooks cannot call the model here.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-function\">\u003Cspan class=\"hljs-title\">SessionStart\u003C\u002Fspan>\u003Cspan class=\"hljs-params\">(source=compact)\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fstrong> : injects developer context once after compaction, then clears the marker. A short unrelated prompt still produces no write.\u003C\u002Fli>\n\u003Cli>\u003Cstrong>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-title class_\">SubagentStart\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fstrong> : tells subagents not to edit \u003Ccode class=\"hljs\">THOUGHTS.\u003Cspan class=\"hljs-built_in\">md\u003C\u002Fspan>\u003C\u002Fcode> and allows candidate reporting for substantial work.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The behavior follows OpenAI’s current \u003Ca href=\"https:\u002F\u002Flearn.chatgpt.com\u002Fdocs\u002Fhooks\" target=\"_blank\" rel=\"noopener noreferrer\">Codex hooks contract\u003C\u002Fa>.\u003C\u002Fp>\n\u003Ch2 id=\"privacy\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"privacy\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#privacy\">Privacy\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>Hook state lives under Codex’s \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-attribute\">PLUGIN_DATA\u003C\u002Fspan>\u003C\u002Fcode> directory in a file named from a SHA-256 hash of the session ID. It contains only :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>turn ID\u003C\u002Fli>\n\u003Cli>explicit and large-scope booleans\u003C\u002Fli>\n\u003Cli>tool and mutation counts\u003C\u002Fli>\n\u003Cli>delegation and thoughts-touched booleans\u003C\u002Fli>\n\u003Cli>a compaction-pending boolean\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Prompts, assistant messages, tool inputs and outputs, source paths, transcripts, source code and \u003Ccode class=\"hljs\">THOUGHTS.\u003Cspan class=\"hljs-built_in\">md\u003C\u002Fspan>\u003C\u002Fcode> contents are never persisted. Corrupt or unavailable state fails open so Codex can continue. Writes use a temporary sibling file followed by rename to avoid partial JSON.\u003Cbr>\nPlugin-bundled command hooks are executable code. Codex therefore requires users to review and trust the exact hook definition before it runs and changed hooks require review again.\u003C\u002Fp>\n\u003Ch2 id=\"limitations\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"limitations\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#limitations\">Limitations\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>Implicit skill selection is model-controlled. Explicit \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-meta\">\u003Cspan class=\"hljs-keyword\">$thoughts\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode> invocation is the portable reliable path, the Codex plugin adds lifecycle enforcement where hooks are supported.\u003C\u002Fli>\n\u003Cli>\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-title class_\">PreCompact\u003C\u002Fspan>\u003C\u002Fcode> cannot send a model prompt. It can only run deterministic code, stop compaction, or set state, this plugin deliberately recovers after compaction instead of blocking it.\u003C\u002Fli>\n\u003Cli>Mechanical thresholds are heuristics. They may request a semantic check after work that ultimately produces no entry.\u003C\u002Fli>\n\u003Cli>Tool hooks cover supported local function-tool paths, not every possible hosted or specialized tool.\u003C\u002Fli>\n\u003Cli>Conversation titles, model names and reasoning levels depend on what the harness exposes, the skill never invents missing metadata.\u003C\u002Fli>\n\u003Cli>Lifecycle automation is Codex-specific. The standalone skill remains usable elsewhere.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2 id=\"development\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"development\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#development\">Development\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>The hook, tests and validator use Node built-ins only and have no third-party runtime or development dependencies.\u003C\u002Fp>\n\n          \u003Cdiv class='code-block'>\n            \u003Cdiv class='code-block-header'>\n              \u003Cspan class='code-block-lang'>pwsh\u003C\u002Fspan>\n              \u003Cbutton class='copy-code-button' type='button'>\n                Copy\n              \u003C\u002Fbutton>\n            \u003C\u002Fdiv>\n            \u003Cpre>\u003Ccode class='hljs pwsh'>pnpm test\npnpm validate\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\n        \u003Cp>CI runs both commands on Node.js 20 and 22. Tests cover classification, thresholds, trivial-turn skipping, thoughts-touch suppression, stop-loop prevention, compaction recovery, state corruption, privacy, subagent context, the command entrypoint and package structure.\u003Cbr>\nFocused bug reports and pull requests are welcome. Please keep new persistence behavior selective and include regression coverage.\u003C\u002Fp>\n\u003Ch2 id=\"license\" tabindex=\"-1\">\u003Cspan\n                class=\"header-copy-icon\"\n                role=\"button\"\n                data-slug=\"license\"\n              >\n                \u003Csvg>\u003Cpath fill=\"currentColor\" d=\"M10.59 13.41c.41.39.41 1.03 0 1.42c-.39.39-1.03.39-1.42 0a5.003 5.003 0 0 1 0-7.07l3.54-3.54a5.003 5.003 0 0 1 7.07 0a5.003 5.003 0 0 1 0 7.07l-1.49 1.49c.01-.82-.12-1.64-.4-2.42l.47-.48a2.98 2.98 0 0 0 0-4.24a2.98 2.98 0 0 0-4.24 0l-3.53 3.53a2.98 2.98 0 0 0 0 4.24m2.82-4.24c.39-.39 1.03-.39 1.42 0a5.003 5.003 0 0 1 0 7.07l-3.54 3.54a5.003 5.003 0 0 1-7.07 0a5.003 5.003 0 0 1 0-7.07l1.49-1.49c-.01.82.12 1.64.4 2.43l-.47.47a2.98 2.98 0 0 0 0 4.24a2.98 2.98 0 0 0 4.24 0l3.53-3.53a2.98 2.98 0 0 0 0-4.24a.973.973 0 0 1 0-1.42\"\u002F>\u003C\u002Fsvg>\n              \u003C\u002Fspan>\u003Ca class=\"header-anchor\" href=\"#license\">License\u003C\u002Fa>\u003C\u002Fh2>\n\u003Cp>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FEDM115\u002FTHOUGHTS\u002Fblob\u002Fmaster\u002FLICENSE\" target=\"_blank\" rel=\"noopener noreferrer\">MIT\u003C\u002Fa> © EDM115\u003C\u002Fp>\n",1786753080230]