## **Why use Codex CLI?**
Most [people stick to the ChatGPT](https://carmelyne.com/ai-assisted-dev-letting-ai-code-while-i-do-qa/) app or web UI. But the **Codex CLI** has its own strengths:
If you’re working on AI‑powered projects daily, [Codex CLI](https://github.com/openai/codex)[1](#d0d15ffc-d7fa-4b5b-b75d-80fa5790bedc) feels less like “chatting with a bot” and more like adding a reliable command‑line tool to your stack.
### The Problem
That said, I kept running into little annoyances:
So here’s a small **Zsh wrapper** that fixes all three.
### **Codex CLI Wrapper** **Features**
###
**The Wrapper**
```zsh
unalias codex 2>/dev/null
codex() {
local logdate nodefaults
if [[ "$1" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
logdate="$1"; shift
else
logdate="$(date +%F)"
fi
local export_md="" export_json="" args=()
while (( $# )); do
case "$1" in
--export-md) export_md=1; shift ;;
--export-ndjson) export_json=1; shift ;;
--no-defaults) nodefaults=1; shift ;;
*) args+=("$1"); shift ;;
esac
done
mkdir -p .agent-codex 2>/dev/null
local model_default="${CODEX_MODEL:-gpt-5}"
local config_default='model_reasoning_effort="high"'
local have_model=0 have_fullauto=0 have_config=0 cleaned_args=()
for a in "${args[@]}"; do
[[ "$a" == "-m" || "$a" == "--model" ]] && have_model=1
[[ "$a" == "--full-auto" ]] && have_fullauto=1
[[ "$a" == "-c" ]] && have_config=1
cleaned_args+=("$a")
done
local final_args=()
if [[ -z "$nodefaults" ]]; then
[[ $have_fullauto -eq 0 ]] && final_args+=( --full-auto )
[[ $have_model -eq 0 ]] && final_args+=( -m "$model_default" )
[[ $have_config -eq 0 ]] && final_args+=( -c "$config_default" )
fi
final_args+=( "${cleaned_args[@]}" )
local run_id="$(date +%Y-%m-%d_%H-%M-%S)"
local roll_log=".agent-codex/session-${logdate}.log"
local tmp_out=".agent-codex/.tmp.${run_id}.out"
if command -v script > /dev/null 2>&1; then
script -q /dev/null codex "${final_args[@]}" \
| tee "$tmp_out" \
| perl -pe 's/\e\[[0-9;]*[A-Za-z]//g' >> "$roll_log"
else
command codex "${final_args[@]}" \
| tee "$tmp_out" \
| perl -pe 's/\e\[[0-9;]*[A-Za-z]//g' >> "$roll_log"
fi
rm -f "$tmp_out"
}
```
Usage:
```bash
codex "Explain this codebase" # runs with defaults
codex --no-defaults -m gpt-4.1 # bypass defaults
codex --export-md "Summarize…" # also saves a Markdown session file
```
Logs land in `.agent-codex/` automatically.
## **Why This Helps**
It’s a tiny change, but it makes Codex feel smoother:
✅ Copy this into your `~/.zshrc`, source `~/.zshrc`, and you’re good.
1. Codex CLI
[↩︎](#d0d15ffc-d7fa-4b5b-b75d-80fa5790bedc-link)
*Additional reading:* For a deeper dive into AI‑assisted CLI workflows, see our post on the **[AI Dev Workflow CLI](/the-ai-dev-workflow-cli/)**.
**END_OF_REPORT** 🌿✨