222 lines
8.1 KiB
Markdown
222 lines
8.1 KiB
Markdown
# Codex Setup
|
|
|
|
Using planning-with-files with [OpenAI Codex](https://developers.openai.com/codex/).
|
|
|
|
---
|
|
|
|
## Overview
|
|
|
|
Codex discovers skills from `.codex/skills/` and hooks from `.codex/hooks.json` or `~/.codex/hooks.json`.
|
|
|
|
This integration includes both:
|
|
|
|
- `.codex/skills/planning-with-files/` for the skill itself
|
|
- `.codex/hooks.json` plus `.codex/hooks/` for lifecycle automation
|
|
|
|
The hook behavior reuses the same mature shell scripts as the Cursor integration, with a thin Codex adapter layer for the differences in hook protocol. On Windows those same scripts run through an auto-resolved Git Bash (see [Windows Support](#windows-support)).
|
|
|
|
> **Important:** Codex hooks require `hooks = true` in `~/.codex/config.toml`. The older `codex_hooks = true` still works as a deprecated alias.
|
|
|
|
---
|
|
|
|
## Installation
|
|
|
|
### Method 1: Workspace Installation (Recommended)
|
|
|
|
Share the skill and hooks with your whole team by committing `.codex/` to your repository:
|
|
|
|
```bash
|
|
# In your project repository
|
|
git clone https://github.com/OthmanAdi/planning-with-files.git /tmp/planning-with-files
|
|
|
|
# Copy the Codex integration to your repo
|
|
cp -r /tmp/planning-with-files/.codex .
|
|
|
|
# Commit to share with team
|
|
git add .codex/
|
|
git commit -m "Add planning-with-files skill for Codex"
|
|
git push
|
|
|
|
# Clean up
|
|
rm -rf /tmp/planning-with-files
|
|
```
|
|
|
|
### Method 2: Personal Installation
|
|
|
|
Install just for yourself:
|
|
|
|
```bash
|
|
# Clone the repo
|
|
git clone https://github.com/OthmanAdi/planning-with-files.git /tmp/planning-with-files
|
|
|
|
# Copy the skill
|
|
mkdir -p ~/.codex/skills
|
|
cp -r /tmp/planning-with-files/.codex/skills/planning-with-files ~/.codex/skills/
|
|
|
|
# Copy the hook scripts
|
|
mkdir -p ~/.codex/hooks
|
|
cp -r /tmp/planning-with-files/.codex/hooks/* ~/.codex/hooks/
|
|
|
|
# Copy hooks.json
|
|
# If you already have ~/.codex/hooks.json, merge the planning-with-files entries manually
|
|
cp /tmp/planning-with-files/.codex/hooks.json ~/.codex/hooks.json
|
|
|
|
# Clean up
|
|
rm -rf /tmp/planning-with-files
|
|
```
|
|
|
|
> **Note:** If you already have a `~/.codex/hooks.json`, do not overwrite it blindly. Merge the `SessionStart`, `UserPromptSubmit`, `PreToolUse`, `PostToolUse`, and `Stop` entries into your existing file.
|
|
|
|
### Enable Hooks in `config.toml`
|
|
|
|
Ensure your `~/.codex/config.toml` contains:
|
|
|
|
```toml
|
|
[features]
|
|
hooks = true
|
|
```
|
|
|
|
If you already have a `[features]` section, add `hooks = true` under it instead of creating a duplicate section. `codex_hooks = true` is still accepted as a deprecated alias for users on older configs.
|
|
|
|
### Verification
|
|
|
|
```bash
|
|
codex --version
|
|
codex features list | rg '^(hooks|codex_hooks)\s'
|
|
ls -la ~/.codex/skills/planning-with-files/SKILL.md
|
|
ls -la ~/.codex/hooks.json ~/.codex/hooks/
|
|
```
|
|
|
|
If neither `hooks` nor the deprecated alias `codex_hooks` appears in `codex features list`, upgrade Codex before troubleshooting the skill.
|
|
|
|
---
|
|
|
|
## How It Works
|
|
|
|
### Hooks
|
|
|
|
Codex reads hooks from:
|
|
|
|
1. `.codex/hooks.json` in your project root
|
|
2. `~/.codex/hooks.json` for your global install
|
|
|
|
This integration includes the Codex lifecycle hooks used by the adapter:
|
|
|
|
| Hook | What It Does |
|
|
|------|--------------|
|
|
| **SessionStart** | Runs `session-catchup.py`, then injects active plan context |
|
|
| **UserPromptSubmit** | Re-injects plan and recent progress on every user message |
|
|
| **PreToolUse** | Re-reads the first 30 lines of `task_plan.md` before Bash |
|
|
| **PostToolUse** | Reminds the agent to update `progress.md` after Bash activity |
|
|
| **PreCompact** | Reminds the agent to flush `progress.md` and `task_plan.md` before compaction |
|
|
| **Stop** | Emits an advisory progress-sync reminder when phases are incomplete (non-blocking since v3.1.0) |
|
|
|
|
### The Three Files
|
|
|
|
Once activated, the skill creates and maintains:
|
|
|
|
| File | Purpose | Location |
|
|
|------|---------|----------|
|
|
| `task_plan.md` | Phases, progress, decisions | Your project root |
|
|
| `findings.md` | Research, discoveries | Your project root |
|
|
| `progress.md` | Session log, test results | Your project root |
|
|
|
|
### Opting out for one-shot runs (CI, `codex exec`)
|
|
|
|
A one-shot session that shares a working directory with an active plan gets the
|
|
plan context injected even though it never opted in: a CI review bot, a
|
|
read-only research agent, or a nested orchestrator can end up "reconciling the
|
|
plan" instead of doing its own job, and may mutate `task_plan.md` and
|
|
`progress.md` that belong to another session (issue #195).
|
|
|
|
Set `PLANNING_DISABLED=1` to disable all planning-with-files hooks for that
|
|
invocation only:
|
|
|
|
```bash
|
|
PLANNING_DISABLED=1 codex exec -o review.md '$code-review review this branch'
|
|
PLANNING_DISABLED=1 codex exec -C <repo> -s read-only '<research prompt>'
|
|
```
|
|
|
|
With the variable set, every hook (SessionStart, UserPromptSubmit, PreToolUse,
|
|
PostToolUse, PreCompact, Stop) exits before reading the plan: no context
|
|
injection, no follow-up messages, no plan-file writes. PreToolUse still emits
|
|
its `allow` decision so tool calls proceed normally. Interactive sessions in
|
|
the same directory are unaffected. The same variable is honored by the
|
|
canonical Claude Code dispatchers (`inject-plan.sh`, `gate-stop.sh`,
|
|
`check-complete.sh`/`.ps1`), so it works for CI automation on any platform
|
|
whose hooks route through those scripts.
|
|
|
|
---
|
|
|
|
## Team Workflow
|
|
|
|
### Workspace Installation
|
|
|
|
With workspace installation (`.codex/` committed to your repo):
|
|
|
|
- Everyone on the team gets the same skill and hooks
|
|
- The Codex setup is version controlled with the project
|
|
- Updates ship through normal git review
|
|
|
|
### Personal Installation
|
|
|
|
With personal installation (`~/.codex/`):
|
|
|
|
- You can use the skill across all projects
|
|
- You keep your setup even if you change repositories
|
|
- Existing global hooks may need manual merging
|
|
|
|
---
|
|
|
|
## Troubleshooting
|
|
|
|
### Hooks Not Running?
|
|
|
|
1. Check that `hooks = true` (or the deprecated alias `codex_hooks = true`) is present in `~/.codex/config.toml`
|
|
2. Verify `.codex/hooks.json` or `~/.codex/hooks.json` exists
|
|
3. Restart Codex after adding or changing hooks
|
|
4. Run `codex features list | rg '^(hooks|codex_hooks)\s'`
|
|
|
|
### Already Using Other Global Hooks?
|
|
|
|
That is fine, but do not overwrite your existing `~/.codex/hooks.json`. Merge the planning-with-files entries instead.
|
|
|
|
### Seeing Duplicate Hook Messages?
|
|
|
|
Avoid installing the same planning-with-files hooks in both places at once:
|
|
|
|
- workspace `.codex/hooks.json`
|
|
- global `~/.codex/hooks.json`
|
|
|
|
If you enable both, Codex may run both sets of hooks and duplicate the reminders.
|
|
|
|
### Windows Support
|
|
|
|
Hooks run on Windows. Codex reads a per-hook `commandWindows` override from `.codex/hooks.json` on Windows and the POSIX `command` everywhere else, so macOS and Linux are unchanged.
|
|
|
|
On Windows every hook routes through `.codex\hooks\pwf-hook.cmd`, which finds a real Python (`py -3`, falling back to `python`) and never the Microsoft Store `python3` alias. The four Python hooks run their `.py` entry point directly. The three shell hooks (SessionStart, UserPromptSubmit, PreCompact) route through `run_sh.py`, which locates the Git for Windows `sh.exe` and runs the same shell scripts the macOS/Linux hooks use.
|
|
|
|
Requirements on Windows:
|
|
|
|
- `hooks = true` in `~/.codex/config.toml` (same as every platform).
|
|
- Python reachable through the `py` launcher (installed by the python.org installer) or on PATH as `python`. If you only have `python`, the launcher falls back to it automatically. The Microsoft Store `python3` alias is skipped on purpose.
|
|
- Git for Windows installed, for the three shell-backed hooks. The launcher finds `sh.exe` even when Git's `usr\bin` is not on your PATH, which is the default install layout. Without Git for Windows those three hooks stay silent and the four Python hooks still work.
|
|
|
|
Use the workspace install (Method 1) on Windows: the `commandWindows` entries use relative `.codex\...` paths resolved against your project directory. A global `~/.codex` install needs absolute paths in `commandWindows`.
|
|
|
|
---
|
|
|
|
## Learn More
|
|
|
|
- [Installation Guide](installation.md)
|
|
- [Quick Start](quickstart.md)
|
|
- [Workflow Diagram](workflow.md)
|
|
|
|
---
|
|
|
|
## Support
|
|
|
|
- **GitHub Issues:** https://github.com/OthmanAdi/planning-with-files/issues
|
|
- **OpenAI Codex Hooks Docs:** https://developers.openai.com/codex/hooks
|
|
- **OpenAI Codex Skills Docs:** https://developers.openai.com/codex/skills
|