[{"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 and compact durable notes while protecting user content; with the Codex plugin, also prune recognized hook state artifacts\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.\u003Cbr>\n\u003Cbr>\n\u003C\u002Fp>\n\u003Cp>When no edit is necessary, the main agent may append the exact \u003Ccode class=\"hljs\">[\u003Cspan class=\"hljs-symbol\">\u002F\u002F\u003C\u002Fspan>]: \u003Cspan class=\"hljs-link\"># (&lt;NO_THOUGHTS&gt;)\u003C\u002Fspan>\u003C\u002Fcode> marker to prevent an unnecessary \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-literal\">Stop\u003C\u002Fspan>\u003C\u002Fcode> continuation. If the user opts out of thoughts for the conversation, the agent includes it in every final response and does not edit \u003Ccode class=\"hljs\">THOUGHTS.\u003Cspan class=\"hljs-built_in\">md\u003C\u002Fspan>\u003C\u002Fcode>. The marker must be on its own line with an empty line before and after it so Markdown keeps it invisible; the hook checks the exact case-sensitive marker but leaves correct placement to the agent.\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'>Visible final response.\n\n[\u003Cspan class=\"hljs-symbol\">\u002F\u002F\u003C\u002Fspan>]: \u003Cspan class=\"hljs-link\"># &quot;&lt;NO_THOUGHTS&gt;&quot;\u003C\u002Fspan>\n\n\u003C\u002Fcode>\u003C\u002Fpre>\n          \u003C\u002Fdiv>\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'>flowchart LR\n    A[\u003Cspan class=\"hljs-string\">&quot;Prompt + tool activity&quot;\u003C\u002Fspan>] --&gt; B{\u003Cspan class=\"hljs-string\">&quot;High-value signal ?&quot;\u003C\u002Fspan>}\n    B -- \u003Cspan class=\"hljs-string\">&quot;No&quot;\u003C\u002Fspan> --&gt; C[\u003Cspan class=\"hljs-string\">&quot;Finish normally&quot;\u003C\u002Fspan>]\n    B -- \u003Cspan class=\"hljs-string\">&quot;Yes&quot;\u003C\u002Fspan> --&gt; D[\u003Cspan class=\"hljs-string\">&quot;Stop continuation : $thoughts append&quot;\u003C\u002Fspan>]\n    D --&gt; E{\u003Cspan class=\"hljs-string\">&quot;Semantic write gate&quot;\u003C\u002Fspan>}\n    E -- \u003Cspan class=\"hljs-string\">&quot;Nothing durable&quot;\u003C\u002Fspan> --&gt; J[\u003Cspan class=\"hljs-string\">&quot;Optional hidden NO_THOUGHTS marker&quot;\u003C\u002Fspan>]\n    J --&gt; C\n    E -- \u003Cspan class=\"hljs-string\">&quot;Useful in a fresh thread&quot;\u003C\u002Fspan> --&gt; F[\u003Cspan class=\"hljs-string\">&quot;Main agent updates THOUGHTS.md&quot;\u003C\u002Fspan>]\n    G[\u003Cspan class=\"hljs-string\">&quot;PreCompact&quot;\u003C\u002Fspan>] --&gt; H[\u003Cspan class=\"hljs-string\">&quot;Store pending boolean only&quot;\u003C\u002Fspan>]\n    H --&gt; I[\u003Cspan class=\"hljs-string\">&quot;SessionStart : compact&quot;\u003C\u002Fspan>]\n    I --&gt; E\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, four mutations occur, ten supported tool events occur, large-scope work reaches five supported tool events, 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-title class_\">PostToolUse\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fstrong> : uses a \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-comment\">*\u003C\u002Fspan>\u003C\u002Fcode> matcher and counts canonical supported tool events. Tools called from Code Mode JavaScript arrive through the same nested hook path, so the plugin counts their real events rather than parsing the outer code.\u003C\u002Fli>\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>, an existing thoughts edit or the exact \u003Ccode class=\"hljs\">[\u003Cspan class=\"hljs-symbol\">\u002F\u002F\u003C\u002Fspan>]: \u003Cspan class=\"hljs-link\"># (&lt;NO_THOUGHTS&gt;)\u003C\u002Fspan>\u003C\u002Fcode> marker suppresses continuation.\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. Codex delivers this context to the immediate continuation after automatic mid-turn compaction; 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>\n\u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-meta\">\u003Cspan class=\"hljs-keyword\">$thoughts\u003C\u002Fspan> cleanup\u003C\u002Fspan>\u003C\u002Fcode> removes only immediate plugin-owned files matching the hashed session-state or orphan temporary-file shapes, then recreates the current session state. Unknown files and every directory are preserved. The standalone skill has no \u003Ccode class=\"hljs\">\u003Cspan class=\"hljs-attribute\">PLUGIN_DATA\u003C\u002Fspan>\u003C\u002Fcode> side effect.\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. Its current output can stop compaction or surface a UI warning, but cannot add model context, so this plugin deliberately recovers through \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> instead of blocking compaction.\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>Code Mode nested calls use normal supported tool hooks, but hosted tools and specialized paths that opt out of the local function-tool hook path remain unobservable.\u003C\u002Fli>\n\u003Cli>The hidden marker depends on the agent placing it between empty lines. The hook recognizes the exact token and does not validate Markdown rendering.\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 expanded classification, threshold boundaries, hidden-marker suppression, Code Mode nested event accounting, selective plugin-state cleanup, 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",1788996431446]