Skip to content

fix(codex): install skills in canonical agents directory - #1511

Merged
clay-good merged 8 commits into
mainfrom
codex/fix-1509-codex-skills-path
Aug 5, 2026
Merged

fix(codex): install skills in canonical agents directory#1511
clay-good merged 8 commits into
mainfrom
codex/fix-1509-codex-skills-path

Conversation

@clay-good

@clay-good clay-good commented Aug 4, 2026

Copy link
Copy Markdown
Collaborator

Status

LGTM.

What was wrong

openspec init and openspec update wrote Codex project skills to the legacy .codex/skills directory. Current Codex discovery uses .agents/skills, so setup could report success while Codex could not find the generated skills. The generic agents target on main established .agents/skills, but did not migrate Codex or reconcile repositories that had configured both targets.

How it was fixed

  • Write Codex skills to .agents/skills and keep Codex skills-only in every delivery mode.
  • Generate a single Codex-led shared tree with both $openspec-* and /openspec-* handoffs when Codex and generic agents share the directory.
  • Record and consistently honor the selected shared-tree owner, including commands-only configurations that intentionally generate no artifacts.
  • Infer pre-marker Codex and generic trees from managed skill content, and safely consolidate repositories that previously configured both targets.
  • Generate canonical replacements before migrating .codex skills. Remove only equivalent generated files while preserving material edits, custom skills, and sibling configuration.
  • Retry interrupted cleanup when legacy skills differ only by a valid generated version, allowlisted OpenSpec invocation syntax, BOM, or CRLF line endings; custom invocations and metadata remain material edits.
  • Keep dry-run and applied migration timing aligned, use canonical path comparison for aliases, and reject root or nested symlink escapes.
  • Require active Codex ownership and successful canonical generation before removing global Codex prompts; generic agents skills never authorize that cleanup.
  • Preserve global skill targets such as MiniMax Code while reconciling Codex and generic agents in the project-local shared root.
  • Document the shared target, ownership switching, migration, and troubleshooting behavior.

Replication / proof

On main, openspec init --tools codex writes skills under .codex/skills. A repository that selected both codex and agents can also retain two generated trees with incompatible invocation syntax.

With this change, Codex writes one canonical .agents/skills tree that remains usable by generic agents. Existing unmarked dual-target repositories consolidate automatically; materially edited legacy skills remain in place and are reported. Marker-only commands configurations remain stable across repeated updates.

Verification:

  • Full serialized suite on current main: 126 test files, 3,764 tests passed
  • Focused Codex/init/update/detection/drift plus global-skill integration suite: 404 tests passed
  • pnpm run build
  • pnpm run lint
  • git diff --check
  • Independent issue, implementation, and adversarial test reviews completed with no remaining blockers

Closes #1509

Notes / nits

  • Divergent legacy files are deliberately retained and reported for manual comparison.
  • The default parallel full-suite harness has a pre-existing shared-dist/ race between tests that launch builds; the final full run used --maxWorkers=1 and passed all 3,764 tests.
  • No changeset is included because this repository's changeset policy leaves dedicated release tracking to the maintainer or release owner.

@clay-good
clay-good requested a review from a team as a code owner August 4, 2026 23:20
@clay-good
clay-good requested review from alfred-openspec and removed request for a team August 4, 2026 23:20
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Aug 4, 2026

Copy link
Copy Markdown

Deploying openspec-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: ed0a220
Status: ✅  Deploy successful!
Preview URL: https://82592e08.openspec-docs.pages.dev
Branch Preview URL: https://codex-fix-1509-codex-skills.openspec-docs.pages.dev

View logs

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Codex now generates skills under .agents/skills, records shared-target ownership, migrates eligible legacy .codex/skills content after generation, preserves divergent files, and updates detection, drift checks, command references, tests, and documentation.

Changes

Codex shared skill migration

Layer / File(s) Summary
Shared target ownership
src/core/config.ts, src/core/shared-skill-target.ts, src/core/available-tools.ts, src/core/shared/tool-detection.ts, test/core/available-tools.test.ts, test/core/shared/tool-detection.test.ts
Defines supported skills and legacy roots. Reconciles shared codex and agents targets. Writes .openspec-target ownership markers.
Legacy migration and path safety
src/core/migration.ts, src/core/init.ts, src/core/update.ts, test/core/migration.test.ts, test/core/update.test.ts
Runs Codex migration after generation. Validates project-contained paths. Requires generated destinations and preserves unsupported or divergent content.
Detection and profile drift
src/core/shared/tool-detection.ts, src/core/profile-sync-drift.ts, test/core/profile-sync-drift.test.ts, test/core/shared/tool-detection.test.ts
Searches current and legacy skill roots. Filters inactive shared owners. Detects legacy delivery drift and handles canonical and symlinked paths.
Generation, update, and command references
src/core/init.ts, src/core/update.ts, src/utils/command-references.ts, test/core/init.test.ts, test/core/update.test.ts, test/utils/command-references.test.ts
Writes shared targets during initialization and update. Reruns legacy migration after generation. Emits Codex $openspec-* and other-agent /openspec-* references.
Skill equivalence
src/core/shared/skill-content-equivalence.ts, test/core/shared/skill-content-equivalence.test.ts
Normalizes generated metadata and invocation syntax when comparing legacy and current skill content.
Documentation
docs/how-commands-work.md, docs/migration-guide.md, docs/supported-tools.md, docs/troubleshooting.md
Updates Codex paths, coexistence rules, marker behavior, legacy reconciliation, and prompt cleanup guidance.

Estimated code review effort: 4 (Complex) | ~60 minutes

Possibly related PRs

Suggested reviewers: tabishb, alfred-openspec

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 39.13% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes satisfy issue #1509 by using .agents/skills, migrating legacy skills safely, reconciling shared ownership, and updating documentation.
Out of Scope Changes check ✅ Passed The changes remain within issue #1509 scope, including migration safety, shared-target reconciliation, documentation, and related validation tests.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the primary change: installing Codex skills in the canonical agents directory.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/fix-1509-codex-skills-path

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

🧹 Nitpick comments (5)
src/core/shared-skill-target.ts (1)

82-92: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

writeSharedSkillTarget creates the skills directory unconditionally.

Line 90 runs mkdirSync on <root>/skills before the marker write. Every caller in src/core/init.ts and src/core/update.ts line 287 runs inside a skills-generation branch, so the directory already exists there. The call at src/core/update.ts line 1055 runs outside the skills branch, so a commands-only run can create an empty .agents/skills/ tree holding only the marker. A guard keeps the marker tied to a real skill tree.

♻️ Optional guard
   const target = markerPath(projectPath, tool.skillsDir);
   FileSystemUtils.assertProjectArtifactPath(projectPath, target);
+  if (!fs.existsSync(path.dirname(target))) return;
   fs.mkdirSync(path.dirname(target), { recursive: true });
   fs.writeFileSync(target, `${toolId}\n`, 'utf-8');
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/core/shared-skill-target.ts` around lines 82 - 92, Update
writeSharedSkillTarget so it does not create the skills directory when no skills
tree exists. Before the mkdirSync call, verify the tool’s skills directory
already exists under projectPath and return early when it does not; preserve the
existing marker write behavior for existing shared skill trees.
docs/supported-tools.md (1)

145-149: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider documenting how an unmarked shared tree is resolved.

reconcileSharedSkillTargets in src/core/shared-skill-target.ts applies two more rules that a user can observe. An unmarked .agents/skills tree keeps the vendor-neutral meaning. An unmarked tree becomes Codex-owned when OpenSpec-managed skills still exist under .codex/skills. Adding one sentence here explains why an upgraded project can report either owner.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/supported-tools.md` around lines 145 - 149, Update the shared-tree
documentation near the `.openspec-target` marker description to explain the
unmarked-tree rules from reconcileSharedSkillTargets: an unmarked
`.agents/skills` remains vendor-neutral, but becomes Codex-owned when
OpenSpec-managed skills still exist under `.codex/skills`.
src/core/init.ts (2)

792-804: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicated legacy-migration reporting loop. Both files now repeat the same loop that calls migrateLegacyToolDirs, logs describeLegacyMigration, and reports keptInPlaceNotice. The shared root cause is the absence of one helper for this reporting. Four copies exist in total, including src/core/init.ts lines 209-218 and src/core/update.ts lines 339-348.

  • src/core/init.ts#L792-L804: replace this loop with a call to a new exported helper, for example reportLegacyMigrations(projectPath, [tool.value], 'after-generation') in src/core/migration.ts.
  • src/core/update.ts#L1075-L1084: replace this loop with the same helper call, keeping this.reportKeptInPlace behavior in the helper or passing a reporter callback.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/core/init.ts` around lines 792 - 804, Create an exported
reportLegacyMigrations helper in src/core/migration.ts that performs the shared
migrateLegacyToolDirs iteration and migration logging, while supporting the
existing this.reportKeptInPlace behavior required by src/core/update.ts. Replace
the duplicated loops at src/core/init.ts:792-804 and
src/core/update.ts:1075-1084 with calls using projectPath, [tool.value], and
'after-generation'; preserve each caller’s kept-in-place reporting behavior.

603-607: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Shared-root policy is hard-coded here and duplicates reconcileSharedSkillTargets.

Lines 603-605 encode the Codex/agents pair by literal id. reconcileSharedSkillTargets already resolves overlapping roots generically by skillsDir. If another tool later adopts .agents, this branch will not cover it, and the two rules can disagree. Group the selection by skillsDir instead, and reuse the shared reconciliation for the tie-break.

The drop is also silent. The user asked for agents and receives no message that Codex now owns the tree. A one-line notice matches the documented behavior in docs/supported-tools.md lines 120-124.

♻️ Suggested notice
     const reconciledToolIds = toolIds.includes('codex') && toolIds.includes('agents')
       ? toolIds.filter((toolId) => toolId !== 'agents')
       : toolIds;
+    if (reconciledToolIds.length !== toolIds.length) {
+      console.log(
+        chalk.dim('Codex and the shared agents target use .agents/skills; keeping the Codex-rendered tree.')
+      );
+    }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/core/init.ts` around lines 603 - 607, Replace the literal
`codex`/`agents` filtering that produces `reconciledToolIds` with grouping by
each tool’s `skillsDir`, then reuse `reconcileSharedSkillTargets` to select the
owner for overlapping roots. Preserve non-overlapping tools, and emit a one-line
notice when `agents` is requested but Codex owns the shared tree, using the
existing logging or notice mechanism.
src/core/config.ts (1)

3-16: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Derive the OpesPEC skill names from WORKFLOW_TO_SKILL_DIR.

OPENSPEC_SKILL_NAMES duplicates the mapping already in src/core/profile-sync-drift.ts. hasLegacySkills() reads this list, so a workflow added to WORKFLOW_TO_SKILL_DIR and ALL_WORKFLOWS would not create legacy skill detection for shared roots like .codex/skills/. Import by value from profile-sync-drift if config.js must avoid the profile-sync-drift.js import cycle.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/core/config.ts` around lines 3 - 16, Replace the duplicated
OPENSPEC_SKILL_NAMES list in config.ts with a value derived from
WORKFLOW_TO_SKILL_DIR in profile-sync-drift.ts, ensuring hasLegacySkills()
automatically recognizes newly added workflows. Preserve the existing exported
constant contract, and use an import-by-value approach if needed to avoid the
config/profile-sync-drift dependency cycle.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/core/migration.ts`:
- Line 156: Update the timing filter in collectLegacyToolMigrations so
legacy.timing (defaulting to before-generation) is enforced regardless of apply
mode, ensuring dry-run results match apply behavior. Also derive the timing flag
consistently when findLegacyToolMigrations invokes migrateSkillDirs(), using the
same normalized legacy timing value.

In `@src/core/profile-sync-drift.ts`:
- Around line 86-87: Update the identity comparison in the profile-sync loop to
pass both legacySkill and currentSkill through
FileSystemUtils.canonicalizeExistingPath() before comparing them. Preserve the
existing continue behavior when the canonicalized paths match.
- Around line 89-90: Invert the comparison in the profile-sync drift check
around the legacySkill handling so equal contents return no drift and differing
contents report drift; preserve the existing same-file behavior. Add regressions
in profile-sync-drift tests covering distinct copied legacy files with equal and
different content.

In `@src/core/update.ts`:
- Line 1055: Move the writeSharedSkillTarget(projectPath, tool.value) call into
the skills-generation branch, alongside the code that writes skill files,
matching the existing patterns at the other call sites. Ensure tools using
delivery: 'commands' or otherwise skipping skill generation do not update the
shared ownership marker.

In `@test/core/update.test.ts`:
- Around line 492-523: Update the Codex symlink tests around the shown test and
the related cases at 525-554 to create directory links with the appropriate
directory type hint (such as 'dir') for Windows compatibility. Handle
environments where symlink creation is not permitted by skipping the affected
tests rather than failing, while preserving the existing assertions when setup
succeeds.

---

Nitpick comments:
In `@docs/supported-tools.md`:
- Around line 145-149: Update the shared-tree documentation near the
`.openspec-target` marker description to explain the unmarked-tree rules from
reconcileSharedSkillTargets: an unmarked `.agents/skills` remains
vendor-neutral, but becomes Codex-owned when OpenSpec-managed skills still exist
under `.codex/skills`.

In `@src/core/config.ts`:
- Around line 3-16: Replace the duplicated OPENSPEC_SKILL_NAMES list in
config.ts with a value derived from WORKFLOW_TO_SKILL_DIR in
profile-sync-drift.ts, ensuring hasLegacySkills() automatically recognizes newly
added workflows. Preserve the existing exported constant contract, and use an
import-by-value approach if needed to avoid the config/profile-sync-drift
dependency cycle.

In `@src/core/init.ts`:
- Around line 792-804: Create an exported reportLegacyMigrations helper in
src/core/migration.ts that performs the shared migrateLegacyToolDirs iteration
and migration logging, while supporting the existing this.reportKeptInPlace
behavior required by src/core/update.ts. Replace the duplicated loops at
src/core/init.ts:792-804 and src/core/update.ts:1075-1084 with calls using
projectPath, [tool.value], and 'after-generation'; preserve each caller’s
kept-in-place reporting behavior.
- Around line 603-607: Replace the literal `codex`/`agents` filtering that
produces `reconciledToolIds` with grouping by each tool’s `skillsDir`, then
reuse `reconcileSharedSkillTargets` to select the owner for overlapping roots.
Preserve non-overlapping tools, and emit a one-line notice when `agents` is
requested but Codex owns the shared tree, using the existing logging or notice
mechanism.

In `@src/core/shared-skill-target.ts`:
- Around line 82-92: Update writeSharedSkillTarget so it does not create the
skills directory when no skills tree exists. Before the mkdirSync call, verify
the tool’s skills directory already exists under projectPath and return early
when it does not; preserve the existing marker write behavior for existing
shared skill trees.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: e974bb39-86f8-446a-b51f-5b25e9b53708

📥 Commits

Reviewing files that changed from the base of the PR and between 02b124e and 47aff14.

📒 Files selected for processing (17)
  • docs/how-commands-work.md
  • docs/migration-guide.md
  • docs/supported-tools.md
  • docs/troubleshooting.md
  • src/core/available-tools.ts
  • src/core/config.ts
  • src/core/init.ts
  • src/core/migration.ts
  • src/core/profile-sync-drift.ts
  • src/core/shared-skill-target.ts
  • src/core/shared/tool-detection.ts
  • src/core/update.ts
  • test/core/available-tools.test.ts
  • test/core/init.test.ts
  • test/core/profile-sync-drift.test.ts
  • test/core/shared/tool-detection.test.ts
  • test/core/update.test.ts

Comment thread src/core/migration.ts Outdated
Comment thread src/core/profile-sync-drift.ts Outdated
Comment thread src/core/profile-sync-drift.ts Outdated
Comment thread src/core/update.ts Outdated
Comment thread test/core/update.test.ts

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/core/shared/skill-content-equivalence.ts`:
- Around line 8-16: Restrict the normalization logic in the skill-content
equivalence helper to the exact generated invocation and generatedBy locations
instead of replacing matching text throughout the document. Validate generatedBy
against the expected generated-version format, preserving custom invocation
examples and non-version values as differences. Add regression coverage for both
custom invocation text and non-version generatedBy values.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 5271c7f8-771f-4480-b84c-2177753f5884

📥 Commits

Reviewing files that changed from the base of the PR and between e45f7f2 and 433755d.

📒 Files selected for processing (12)
  • docs/supported-tools.md
  • src/core/migration.ts
  • src/core/profile-sync-drift.ts
  • src/core/shared-skill-target.ts
  • src/core/shared/skill-content-equivalence.ts
  • src/core/shared/tool-detection.ts
  • test/core/available-tools.test.ts
  • test/core/init.test.ts
  • test/core/migration.test.ts
  • test/core/profile-sync-drift.test.ts
  • test/core/shared/tool-detection.test.ts
  • test/core/update.test.ts
🚧 Files skipped from review as they are similar to previous changes (5)
  • test/core/shared/tool-detection.test.ts
  • test/core/migration.test.ts
  • docs/supported-tools.md
  • src/core/shared/tool-detection.ts
  • src/core/migration.ts

Comment thread src/core/shared/skill-content-equivalence.ts Outdated

@alfred-openspec alfred-openspec left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One blocker at current head 433755d: normalizeGeneratedSkill() rewrites any generatedBy value and matching invocation text anywhere in the document, so a customized legacy skill such as generatedBy: "my-private-fork" can compare equal to the generated replacement and be deleted. Please restrict equivalence to known generated metadata/reference shapes and add regressions showing custom generatedBy values and hand-authored invocation examples remain divergent.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/core/shared/skill-content-equivalence.ts`:
- Around line 3-4: Update GENERATED_VERSION in the version-equivalence logic to
require non-empty prerelease and build identifiers, so malformed values such as
trailing-dot versions are rejected before normalization. Add a regression test
covering malformed version-like generatedBy values and assert that the
comparator returns false, preserving distinct custom values and preventing
classifyManagedFile from treating them as equivalent.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: 22c103d8-d9b0-4f8a-bcf0-13f970875785

📥 Commits

Reviewing files that changed from the base of the PR and between 433755d and 9d02d8f.

📒 Files selected for processing (4)
  • src/core/migration.ts
  • src/core/profile-sync-drift.ts
  • src/core/shared/skill-content-equivalence.ts
  • test/core/shared/skill-content-equivalence.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/core/migration.ts

Comment thread src/core/shared/skill-content-equivalence.ts Outdated
alfred-openspec
alfred-openspec previously approved these changes Aug 5, 2026

@alfred-openspec alfred-openspec left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed the exact rebased head. The prior deletion blocker is fixed: equivalence now normalizes only valid semver metadata in YAML frontmatter and allowlisted generated OpenSpec dual references, while custom generatedBy values, malformed versions, and hand-authored invocation examples remain divergent and preserved. The canonical .agents/skills ownership, after-generation .codex migration, user-sibling preservation, and symlink/junction containment paths are covered. Fresh build, lint, diff checks, and 364 focused tests pass; the full hosted matrix including Windows and CodeQL is green.

…skills-path

# Conflicts:
#	src/core/available-tools.ts
#	src/core/config.ts
#	src/core/init.ts
#	src/core/migration.ts
#	src/core/profile-sync-drift.ts
#	src/core/shared/tool-detection.ts
#	src/core/update.ts

@alfred-openspec alfred-openspec left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-reviewed the exact current head after the MiniMax/global-skills merge. The conflict resolution preserves both sides: Codex shared-root ownership, legacy .codex migration, and custom-file safety remain intact, while global skill targets stay independently detected, scanned, updated, and protected from project-local cleanup. Fresh frozen build, lint, diff checks, and 379 combined Codex/global-skill tests pass; the full hosted Linux/macOS/Windows, security, CodeQL, and CodeRabbit matrix is green.

@clay-good
clay-good added this pull request to the merge queue Aug 5, 2026
@github-merge-queue
github-merge-queue Bot removed this pull request from the merge queue due to failed status checks Aug 5, 2026
@clay-good
clay-good added this pull request to the merge queue Aug 5, 2026
Merged via the queue into main with commit 59bfb27 Aug 5, 2026
18 checks passed
@clay-good
clay-good deleted the codex/fix-1509-codex-skills-path branch August 5, 2026 01:51
pull Bot pushed a commit to Little-Star888/OpenSpec that referenced this pull request Aug 5, 2026
…ission-AI#1518)

* chore(release): add catch-up changeset for Rovo, Codex dir, status

Cover three user-facing PRs that merged without changesets so they
appear in the v1.8.0 CHANGELOG:

- Fission-AI#1516 Atlassian Rovo Dev CLI (new tool)
- Fission-AI#1511 Codex skills move to shared .agents directory
- Fission-AI#1505 openspec status separates planning from implementation

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* chore(release): correct isPlanningComplete wording in changeset

Skipped planning artifacts count as satisfied without being written; say
"every non-skipped planning artifact exists" to match the CLI and
agent-contract docs (alfred/CodeRabbit review).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

OpenSpec installs Codex skills into the legacy .codex/skills

2 participants