skills/codex-plusplus-tweak-system/SKILL.md
Expert knowledge for using codex-plusplus to inject tweaks, patch Codex desktop app, and write custom ESM tweak modules with lifecycle APIs.
npx skillsauth add aradotso/trending-skills codex-plusplus-tweak-systemInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Skill by ara.so — Daily 2026 Skills collection.
codex-plusplus is a tweak injection system for the Codex desktop app (Electron-based). It patches app.asar, injects a loader stub, and runs a hot-reloadable runtime from the user directory. Tweaks are small ESM modules with a manifest and start/stop lifecycle — no app rebuild required.
brew install b-nnett/codex-plusplus/codexplusplus
codexplusplus install
bun install -g github:b-nnett/codex-plusplus
codexplusplus install
curl -fsSL https://raw.githubusercontent.com/b-nnett/codex-plusplus/main/install.sh | bash
irm https://raw.githubusercontent.com/b-nnett/codex-plusplus/main/install.ps1 | iex
The installer:
Codex.app (or Windows equivalent)~/.codex-plusplus/backup/app.asar to require the loaderInfo.plistEnableEmbeddedAsarIntegrityValidation in the Electron Framework binarycodesign --force --deep --sign -)--no-default-tweaks is passedcodexplusplus install # Patch Codex and install runtime
codexplusplus install --no-default-tweaks # Skip default tweak set
codexplusplus status # Show patch status and runtime version
codexplusplus doctor # Diagnose issues (integrity, signing, etc.)
codexplusplus repair # Re-apply patch (e.g. after Codex update)
codexplusplus repair --quiet # Silent repair (used by watcher/launch agent)
codexplusplus update # Pull latest codex-plusplus source, rebuild, repair
codexplusplus update-codex # Restore official-signed Codex for Sparkle updater
codexplusplus uninstall # Revert all patches, restore backup
codexplusplus tweaks list # List installed tweaks and enabled state
codexplusplus tweaks open # Open user tweaks directory in Finder/Explorer
| Artifact | Path |
|---|---|
| Loader stub | Codex.app/Contents/Resources/app.asar |
| Runtime | <user-data-dir>/runtime/ |
| Tweaks | <user-data-dir>/tweaks/ |
| Config | <user-data-dir>/config.json |
| Backup | <user-data-dir>/backup/ |
<user-data-dir> per OS:
~/Library/Application Support/codex-plusplus/$XDG_DATA_HOME/codex-plusplus/ (default ~/.local/share/codex-plusplus/)%APPDATA%/codex-plusplus/<user-data-dir>/tweaks/my-tweak/
├── manifest.json
└── index.ts # or .js / .mjs
{
"id": "com.yourname.my-tweak",
"name": "My Tweak",
"version": "0.1.0",
"githubRepo": "yourname/my-tweak",
"author": "yourname",
"description": "Short description of what this tweak does.",
"minRuntime": "0.1.0"
}
Required fields: id (reverse-domain), name, version, githubRepo (for update checks), author, description, minRuntime.
import type { Tweak } from "@codex-plusplus/sdk";
export default {
start(api) {
api.log.info("My tweak started");
},
stop() {
// Cleanup: remove event listeners, DOM nodes, etc.
},
} satisfies Tweak;
import type { Tweak } from "@codex-plusplus/sdk";
export default {
start(api) {
api.settings.register({
id: "my-tweak",
title: "My Tweak",
render(root) {
root.innerHTML = `
<div style="padding: 16px;">
<h2>My Tweak Settings</h2>
<label>
<input type="checkbox" id="my-tweak-toggle" />
Enable feature
</label>
</div>
`;
const toggle = root.querySelector<HTMLInputElement>("#my-tweak-toggle")!;
toggle.checked = api.storage.get("enabled") ?? false;
toggle.addEventListener("change", () => {
api.storage.set("enabled", toggle.checked);
});
},
});
},
stop() {},
} satisfies Tweak;
import type { Tweak } from "@codex-plusplus/sdk";
let cleanup: (() => void) | null = null;
export default {
start(api) {
// Wait for DOM element to appear
const unobserve = api.dom.waitFor(".codex-toolbar", (toolbar) => {
const btn = document.createElement("button");
btn.textContent = "My Action";
btn.className = "codex-plusplus-btn";
btn.addEventListener("click", () => {
api.log.info("Button clicked");
});
toolbar.appendChild(btn);
cleanup = () => btn.remove();
});
api.onStop(() => {
unobserve();
cleanup?.();
});
},
stop() {},
} satisfies Tweak;
import type { Tweak } from "@codex-plusplus/sdk";
export default {
start(api) {
const handler = (e: KeyboardEvent) => {
if ((e.metaKey || e.ctrlKey) && e.shiftKey && e.key === "k") {
e.preventDefault();
api.log.info("Shortcut triggered: Cmd/Ctrl+Shift+K");
// your action here
}
};
document.addEventListener("keydown", handler);
api.onStop(() => document.removeEventListener("keydown", handler));
},
stop() {},
} satisfies Tweak;
api object in start)| API | Description |
|---|---|
| api.log.info(msg) | Log to Codex++ console |
| api.log.warn(msg) | Warning log |
| api.log.error(msg) | Error log |
| api.settings.register({ id, title, render }) | Add a panel under Settings → Tweaks |
| api.storage.get(key) | Read persisted value for this tweak |
| api.storage.set(key, value) | Persist value (JSON-serializable) |
| api.dom.waitFor(selector, cb) | Watch for a DOM element; returns unobserve fn |
| api.onStop(fn) | Register a cleanup callback called on stop() |
config.json){
"autoRepair": true,
"autoUpdateRuntime": true,
"tweaks": {
"com.yourname.my-tweak": {
"enabled": true
}
}
}
autoRepair — watcher re-patches after Codex updates (default true)autoUpdateRuntime — daily runtime refresh from CLI (default true); disable in Settings → Codex Plus Plus → ConfigEvery tweak with githubRepo set is checked against GitHub Releases once per day. Codex++ compares the latest release tag (semver) to the local manifest.json version.
v0.2.0) and attach the tweak folder as a zip.Installed on first run (skip with --no-default-tweaks):
| ID | Repo |
|---|---|
| co.bennett.custom-keyboard-shortcuts | b-nnett/codex-plusplus-keyboard-shortcuts |
| co.bennett.ui-improvements | b-nnett/codex-plusplus-bennett-ui |
Codex++ ad-hoc signs the app, breaking Sparkle's integrity check. Use:
codexplusplus update-codex
This restores an official Developer ID–signed build for the updater. After Codex updates and restarts, the launch agent watcher re-applies Codex++ automatically.
codexplusplus uninstall
Restores the backed-up original app.asar, removes the launch agent, and removes <user-data-dir>. Tweaks you wrote remain on disk unless you delete them manually.
The ad-hoc signature isn't trusted on first launch. Run:
xattr -cr /Applications/Codex.app
Then open the app again.
The launch agent should re-run repair automatically. Check status:
codexplusplus status
codexplusplus doctor
If the launch agent isn't running, reinstall:
codexplusplus uninstall && codexplusplus install
manifest.json has all required fields (id, name, version, githubRepo, author, description, minRuntime).index.js / index.ts exports a default object with start and stop.api.log.error output appears in Codex DevTools console.codexplusplus doctor for runtime integrity checks.codexplusplus repair # refreshes runtime from CLI
codexplusplus tweaks open # opens in Finder/Explorer
githubRepo is only used for version checks via the GitHub Releases API, not for auto-downloading code.SECURITY.md for the full policy and vulnerability reporting process.#tweak-dev channel for tweak authorsdocs/WRITING-TWEAKS.md and docs/ARCHITECTURE.mddevelopment
```markdown --- name: compose-performance-skills description: Install and use the skydoves/compose-performance-skills agent skill library to diagnose and fix Jetpack Compose performance issues including stability, recomposition, lazy layouts, modifiers, side effects, and build configuration. triggers: - "my composable recomposes too often" - "LazyColumn drops frames during scroll" - "diagnose Compose stability issues" - "fix unnecessary recomposition in Jetpack Compose" - "optimize Com
development
Headless iOS Simulator manager with host-side HID input injection, 60fps streaming, and device farm web UI for iOS 26
development
```markdown --- name: claude-code-game-studios description: Turn Claude Code into a full 49-agent game dev studio with 72 workflow skills, automated hooks, and a real studio hierarchy for Godot, Unity, and Unreal projects. triggers: - "set up claude code game studios" - "use ai agents for game development" - "set up game dev studio with claude" - "add game studio agents to my project" - "how do I use claude code for game dev" - "set up godot unity unreal ai workflow" - "49 agents g
development
```markdown --- name: xq-py-quantum-vm description: Python implementation of the Quip Network's quantum virtual machine (xqvm) triggers: - quantum virtual machine python - xqvm quip network - quantum circuit simulation python - xq-py quantum vm - quip network quantum python - simulate quantum gates python - quantum vm xqvm - xqvm-py quantum circuit --- # xq-py Quantum Virtual Machine > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. `xqvm-py` is a Python impl