From 2b8c95a05c213bb9feb8254d62d181d87b7dad5d Mon Sep 17 00:00:00 2001 From: Tibsfox Date: Fri, 27 Mar 2026 17:41:03 -0700 Subject: [PATCH] fix(install): add .claude path replacement for Codex runtime MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit convertClaudeToCodexMarkdown() was missing path replacement — unlike Copilot/Gemini/Antigravity converters which all replace $HOME/.claude/ paths. This left hardcoded .claude references in Codex agent files, causing ENOENT when gsd-tools.cjs tried to load from ~/.claude/ on Codex installations. Closes #1430 Co-Authored-By: Claude Opus 4.6 (1M context) --- bin/install.js | 4 ++++ tests/codex-config.test.cjs | 15 +++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/bin/install.js b/bin/install.js index df69acc29..0b8ceac27 100755 --- a/bin/install.js +++ b/bin/install.js @@ -1006,6 +1006,10 @@ function convertSlashCommandsToCodexSkillMentions(content) { function convertClaudeToCodexMarkdown(content) { let converted = convertSlashCommandsToCodexSkillMentions(content); converted = converted.replace(/\$ARGUMENTS\b/g, '{{GSD_ARGS}}'); + // Path replacement: .claude → .codex (#1430) + converted = converted.replace(/\$HOME\/\.claude\//g, '$HOME/.codex/'); + converted = converted.replace(/~\/\.claude\//g, '~/.codex/'); + converted = converted.replace(/\.\/\.claude\//g, './.codex/'); // Runtime-neutral agent name replacement (#766) converted = neutralizeAgentReferences(converted, 'AGENTS.md'); return converted; diff --git a/tests/codex-config.test.cjs b/tests/codex-config.test.cjs index bcd314ee6..4908a1a38 100644 --- a/tests/codex-config.test.cjs +++ b/tests/codex-config.test.cjs @@ -169,6 +169,21 @@ Run /gsd:execute-phase to proceed.`; const result = convertClaudeAgentToCodexAgent(input); assert.strictEqual(result, input, 'returns input unchanged'); }); + + test('replaces .claude paths with .codex paths (#1430)', () => { + const input = `--- +name: gsd-debugger +description: Debugs issues +tools: Read, Bash +--- + +INIT=$(node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" state load) +node "$HOME/.claude/get-shit-done/bin/gsd-tools.cjs" commit "docs: resolve"`; + + const result = convertClaudeAgentToCodexAgent(input); + assert.ok(result.includes('$HOME/.codex/get-shit-done/bin/gsd-tools.cjs'), 'replaces $HOME/.claude/ with $HOME/.codex/'); + assert.ok(!result.includes('$HOME/.claude/'), 'no .claude paths remain'); + }); }); // ─── generateCodexAgentToml ─────────────────────────────────────────────────────