Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

### Changed

- **Codex initialization**: `jumbo init`, repair, and `jumbo evolve --yes` now install Codex-managed skills to the documented repository skill location `.agents/skills` while keeping `.codex` limited to Codex hooks/configuration.

### Fixed

- **Codex managed artifact preservation**: Obsolete Jumbo-managed Codex skill copies under `.codex/skills` are removed only when byte-identical to the current managed templates, preserving customized skill content, user files, hook comments, unknown hook settings, and unrelated `.codex` configuration.

## [3.13.0] - 2026-07-07

### Removed
Expand Down
2 changes: 2 additions & 0 deletions docs/getting-started/what-jumbo-creates.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,8 @@ These hooks load the session router when an agent session begins and preserve wo

Jumbo copies workflow and maintenance skills from `assets/skills` into the selected agents' skill directories, including bootstrap/session use, lifecycle hooks, command discovery, context maintenance, and correction capture. Additive initialization does not overwrite existing managed skill directories; repair refreshes Jumbo-managed skills from assets while preserving user-created skills.

Codex skills are installed to `.agents/skills`. Jumbo may remove obsolete Codex skill copies from `.codex/skills` during repair or evolve, but only when the obsolete directory is byte-identical to the current managed template and contains no extra user files.

---

## How the event store works
Expand Down
2 changes: 1 addition & 1 deletion docs/reference/commands/maintenance.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,7 @@ Runs the complete installation update workflow in sequence:
7. Refresh managed harness and hook configuration
8. Rebuild database projections from the event store

The command is designed to be idempotent. Re-running it after a successful evolve should not create duplicate events or duplicate relations. Existing `.jumbo/settings.jsonc` files are upgraded additively: missing defaults are inserted, explicit values and unknown entries are preserved, and invalid JSONC fails instead of being partially rewritten.
The command is designed to be idempotent. Re-running it after a successful evolve should not create duplicate events or duplicate relations. Existing `.jumbo/settings.jsonc` files are upgraded additively: missing defaults are inserted, explicit values and unknown entries are preserved, and invalid JSONC fails instead of being partially rewritten. Codex skills are refreshed in `.agents/skills`; obsolete Jumbo-managed copies under `.codex/skills` are removed only when they exactly match the current managed templates.

### Examples

Expand Down
2 changes: 1 addition & 1 deletion docs/reference/commands/project.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jumbo project init --non-interactive --name <name> [options]
4. Always creates bootstrap-only `JUMBO.md` and reference-only `AGENTS.md`
5. In non-interactive mode, configures all supported agents

Managed agent markdown and JSON hook/settings fragments are loaded from `assets/agent-files`. Managed skills are copied from `assets/skills` to the selected agents' skill directories.
Managed agent markdown and JSON hook/settings fragments are loaded from `assets/agent-files`. Managed skills are copied from `assets/skills` to the selected agents' skill directories. Codex skills are installed to `.agents/skills`; `.codex` is used for Codex hooks/configuration.

### Examples

Expand Down
4 changes: 3 additions & 1 deletion docs/reference/project-initialization.md
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Jumbo configures hooks for popular AI coding assistants:
| Agent | Configuration |
|-------|---------------|
| **Claude Code** | `CLAUDE.md`, `.claude/settings.json`, and `.claude/skills` |
| **Codex** | `.codex/hooks.json` and `.codex/skills` |
| **Codex** | `.codex/hooks.json` and `.agents/skills` |
| **GitHub Copilot** | `.github/copilot-instructions.md`, `.github/hooks/hooks.json`, and `.agents/skills` |
| **Gemini CLI** | `GEMINI.md`, `.gemini/settings.json`, and `.gemini/skills` |
| **Cursor** | `.cursor/rules/jumbo.mdc` and `.cursor/hooks.json` |
Expand All @@ -100,6 +100,8 @@ Managed instruction files are bootstrap-only. `JUMBO.md` tells agents to follow

Jumbo-owned markdown files and JSON hook/settings fragments are loaded from `assets/agent-files`. Managed skills are copied from `assets/skills`, with additive initialization preserving existing user-created skills and repair refreshing Jumbo-managed skill directories.

For Codex, Jumbo uses the repository skill directory `.agents/skills` and keeps `.codex` for documented Codex hooks/configuration. During repair and evolve, obsolete Jumbo-managed skill copies under `.codex/skills` are removed only when they exactly match the current managed templates; customized skills and extra user files are preserved.

---

## Update project settings
Expand Down
23 changes: 12 additions & 11 deletions src/infrastructure/context/project/init/AgentFileProtocol.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,19 @@ const DEFAULT_TEMPLATE_SKILLS_ROOT = path.resolve(
"assets",
"skills"
);

export class AgentFileProtocol implements IAgentFileProtocol {
private readonly configurers: IConfigurer[] = [
new ClaudeConfigurer(),
new GeminiConfigurer(),
new CopilotConfigurer(),
new VibeConfigurer(),
new CodexConfigurer(),
new CursorConfigurer(),
];

constructor(private readonly templateSkillsRoot: string = DEFAULT_TEMPLATE_SKILLS_ROOT) {}
private readonly configurers: IConfigurer[];

constructor(private readonly templateSkillsRoot: string = DEFAULT_TEMPLATE_SKILLS_ROOT) {
this.configurers = [
new ClaudeConfigurer(),
new GeminiConfigurer(),
new CopilotConfigurer(),
new VibeConfigurer(),
new CodexConfigurer(templateSkillsRoot),
new CursorConfigurer(),
];
}

/**
* Ensure JUMBO.md exists with full Jumbo instructions
Expand Down
Loading
Loading