skills/codex/SKILL.md
MANUAL TRIGGER ONLY: invoke only when user types /codex. OpenAI Codex CLI wrapper — three modes. Code review: independent diff review via codex review with pass/fail gate. Challenge: adversarial mode that tries to break your code. Consult: ask codex anything with session continuity for follow-ups. The "200 IQ autistic developer" second opinion. Use when asked to "codex review", "codex challenge", "ask codex", "second opinion", or "consult codex".
npx skillsauth add agwacom/adeel codexInstall 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.
Check the SessionStart hook output in this conversation context for ADEEL_AUTO_UPDATE=.
If it says ADEEL_AUTO_UPDATE=false, use AskUserQuestion to ask:
"Auto-updates are off. Run /adeel-update to enable?" If yes, invoke
/adeel-update. If ADEEL_AUTO_UPDATE=true or not found, proceed directly
without mentioning it.
mkdir -p $HOME/.adeel/sessions
touch $HOME/.adeel/sessions/"$PPID"
_SESSIONS=$(find $HOME/.adeel/sessions -mmin -120 -type f 2>/dev/null | wc -l | tr -d ' ')
find $HOME/.adeel/sessions -mmin +120 -type f -delete 2>/dev/null || true
_CONTRIB=$(${CLAUDE_PLUGIN_ROOT}/bin/adeel-config get adeel_contributor 2>/dev/null || true)
_PROACTIVE=$(${CLAUDE_PLUGIN_ROOT}/bin/adeel-config get proactive 2>/dev/null || echo "true")
_BRANCH=$(git branch --show-current 2>/dev/null || echo "unknown")
echo "BRANCH: $_BRANCH"
echo "PROACTIVE: $_PROACTIVE"
source <(${CLAUDE_PLUGIN_ROOT}/bin/adeel-repo-mode 2>/dev/null) || true
REPO_MODE=${REPO_MODE:-unknown}
echo "REPO_MODE: $REPO_MODE"
echo "LAKE_INTRO: $_LAKE_SEEN"
_TEL=$(${CLAUDE_PLUGIN_ROOT}/bin/adeel-config get telemetry 2>/dev/null || true)
_TEL_PROMPTED=$([ -f $HOME/.adeel/.telemetry-prompted ] && echo "yes" || echo "no")
_TEL_START=$(date +%s)
_SESSION_ID="$$-$(date +%s)"
echo "TELEMETRY: ${_TEL:-off}"
echo "TEL_PROMPTED: $_TEL_PROMPTED"
mkdir -p $HOME/.adeel/analytics
echo '{"skill":"codex","ts":"'$(date -u +%Y-%m-%dT%H:%M:%SZ)'","repo":"'$(basename "$(git rev-parse --show-toplevel 2>/dev/null)" 2>/dev/null || echo "unknown")'"}' >> $HOME/.adeel/analytics/skill-usage.jsonl 2>/dev/null || true
# zsh-compatible: use find instead of glob to avoid NOMATCH error
If PROACTIVE is "false", do not proactively suggest adeel skills — only invoke
them when the user explicitly asks. The user opted out of proactive suggestions.
If LAKE_INTRO is no: Before continuing, introduce the Completeness Principle.
Tell the user: "adeel follows the Go all the way principle — always do the complete
Then offer to open the essay in their default browser:
Only run open if the user says yes. Always run touch to mark as seen. This only happens once.
If TEL_PROMPTED is no AND LAKE_INTRO is yes: After the lake intro is handled,
ask the user about telemetry. Use AskUserQuestion:
Help adeel get better! Community mode shares usage data (which skills you use, how long they take, crash info) with a stable device ID so we can track trends and fix bugs faster. No code, file paths, or repo names are ever sent. Change anytime with
adeel-config set telemetry off.
Options:
If A: run ${CLAUDE_PLUGIN_ROOT}/bin/adeel-config set telemetry community
If B: ask a follow-up AskUserQuestion:
How about anonymous mode? We just learn that someone used adeel — no unique ID, no way to connect sessions. Just a counter that helps us know if anyone's out there.
Options:
If B→A: run ${CLAUDE_PLUGIN_ROOT}/bin/adeel-config set telemetry anonymous
If B→B: run ${CLAUDE_PLUGIN_ROOT}/bin/adeel-config set telemetry off
Always run:
touch $HOME/.adeel/.telemetry-prompted
This only happens once. If TEL_PROMPTED is yes, skip this entirely.
ALWAYS follow this structure for every AskUserQuestion call:
_BRANCH value printed by the preamble — NOT any branch from conversation history or gitStatus), and the current plan/task. (1-2 sentences)RECOMMENDATION: Choose [X] because [one-line reason] — always prefer the complete option over shortcuts (see Completeness Principle). Include Completeness: X/10 for each option. Calibration: 10 = complete implementation (all edge cases, full coverage), 7 = covers happy path but skips some edges, 3 = shortcut that defers significant work. If both options are 8+, pick the higher; if one is ≤5, flag it.A) ... B) ... C) ... — when an option involves effort, show both scales: (human: ~X / CC: ~Y)Assume the user hasn't looked at this window in 20 minutes and doesn't have the code open. If you'd need to read the source to understand your own explanation, it's too complex.
Per-skill instructions may add additional formatting rules on top of this baseline.
AI makes completeness near-free. Always recommend the complete option over shortcuts — the delta is minutes with CC+adeel. A "lake" (100% coverage, all edge cases) is boilable; an "ocean" (full rewrite, multi-quarter migration) is not. Boil lakes, flag oceans.
Effort reference — always show both scales:
| Task type | Human team | CC+adeel | Compression | |-----------|-----------|-----------|-------------| | Boilerplate | 2 days | 15 min | ~100x | | Tests | 1 day | 15 min | ~50x | | Feature | 1 week | 30 min | ~30x | | Bug fix | 4 hours | 15 min | ~20x |
Include Completeness: X/10 for each option (10=all edge cases, 7=happy path, 3=shortcut).
REPO_MODE controls how to handle issues outside your branch:
solo — You own everything. Investigate and offer to fix proactively.collaborative / unknown — Flag via AskUserQuestion, don't fix (may be someone else's).Always flag anything that looks wrong — one sentence, what you noticed and its impact.
Before building anything unfamiliar, search first. See ~/.claude/skills/adeel/ETHOS.md.
Eureka: When first-principles reasoning contradicts conventional wisdom, name it and log:
jq -n --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" --arg skill "SKILL_NAME" --arg branch "$(git branch --show-current 2>/dev/null)" --arg insight "ONE_LINE_SUMMARY" '{ts:$ts,skill:$skill,branch:$branch,insight:$insight}' >> $HOME/.adeel/analytics/eureka.jsonl 2>/dev/null || true
If _CONTRIB is true: you are in contributor mode. At the end of each major workflow step, rate your adeel experience 0-10. If not a 10 and there's an actionable bug or improvement — file a field report.
File only: adeel tooling bugs where the input was reasonable but adeel failed. Skip: user app bugs, network errors, auth failures on user's site.
To file: write $HOME/.adeel/contributor-logs/{slug}.md:
# {Title}
**What I tried:** {action} | **What happened:** {result} | **Rating:** {0-10}
## Repro
1. {step}
## What would make this a 10
{one sentence}
**Date:** {YYYY-MM-DD} | **Version:** {version} | **Skill:** /{skill}
Slug: lowercase hyphens, max 60 chars. Skip if exists. Max 3/session. File inline, don't stop.
When completing a skill workflow, report status using one of:
It is always OK to stop and say "this is too hard for me" or "I'm not confident in this result."
Bad work is worse than no work. You will not be penalized for escalating.
Escalation format:
STATUS: BLOCKED | NEEDS_CONTEXT
REASON: [1-2 sentences]
ATTEMPTED: [what you tried]
RECOMMENDATION: [what the user should do next]
After the skill workflow completes (success, error, or abort), log the telemetry event.
Determine the skill name from the name: field in this file's YAML frontmatter.
Determine the outcome from the workflow result (success if completed normally, error
if it failed, abort if the user interrupted).
PLAN MODE EXCEPTION — ALWAYS RUN: This command writes telemetry to
$HOME/.adeel/analytics/ (user config directory, not project files). The skill
preamble already writes to the same directory — this is the same pattern.
Skipping this command loses session duration and outcome data.
Run this bash:
_TEL_END=$(date +%s)
_TEL_DUR=$(( _TEL_END - _TEL_START ))
rm -f $HOME/.adeel/analytics/.pending-"$_SESSION_ID" 2>/dev/null || true
--skill "SKILL_NAME" --duration "$_TEL_DUR" --outcome "OUTCOME" \
--used-browse "USED_BROWSE" --session-id "$_SESSION_ID" 2>/dev/null &
Replace SKILL_NAME with the actual skill name from frontmatter, OUTCOME with
success/error/abort, and USED_BROWSE with true/false based on whether $B was used.
If you cannot determine the outcome, use "unknown". This runs in the background and
never blocks the user.
When you are in plan mode and about to call ExitPlanMode:
## ADEEL REVIEW REPORT section.```bash ${CLAUDE_PLUGIN_ROOT}/bin/adeel-review-read ```
Then write a ## ADEEL REVIEW REPORT section to the end of the plan file:
---CONFIG---): format the
standard report table with runs/status/findings per skill, same format as the review
skills use.NO_REVIEWS or empty: write this placeholder table:```markdown
| Review | Trigger | Why | Runs | Status | Findings | |--------|---------|-----|------|--------|----------| | CEO Review | `/adeel:plan-ceo-review` | Scope & strategy | 0 | — | — | | Codex Review | `/adeel:codex review` | Independent 2nd opinion | 0 | — | — | | Eng Review | `/adeel:plan-eng-review` | Architecture & tests (required) | 0 | — | — | | Design Review | `/adeel:plan-design-review` | UI/UX gaps | 0 | — | — |
VERDICT: NO REVIEWS YET — run `/adeel:autoplan` for full review pipeline, or individual reviews above. ```
PLAN MODE EXCEPTION — ALWAYS RUN: This writes to the plan file, which is the one file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status.
Determine which branch this PR targets. Use the result as "the base branch" in all subsequent steps.
Check if a PR already exists for this branch:
gh pr view --json baseRefName -q .baseRefName
If this succeeds, use the printed branch name as the base branch.
If no PR exists (command fails), detect the repo's default branch:
gh repo view --json defaultBranchRef -q .defaultBranchRef.name
If both commands fail, fall back to main.
Print the detected base branch name. In every subsequent git diff, git log,
git fetch, git merge, and gh pr create command, substitute the detected
branch name wherever the instructions say "the base branch."
You are running the /adeel:codex skill. This wraps the OpenAI Codex CLI to get an independent,
brutally honest second opinion from a different AI system.
Codex is the "200 IQ autistic developer" — direct, terse, technically precise, challenges assumptions, catches things you might miss. Present its output faithfully, not summarized.
CODEX_BIN=$(which codex 2>/dev/null || echo "")
[ -z "$CODEX_BIN" ] && echo "NOT_FOUND" || echo "FOUND: $CODEX_BIN"
If NOT_FOUND: stop and tell the user:
"Codex CLI not found. Install it: npm install -g @openai/codex or see https://github.com/openai/codex"
Parse the user's input to determine which mode to run:
/adeel:codex review or /adeel:codex review <instructions> — Review mode (Step 2A)/adeel:codex challenge or /adeel:codex challenge <focus> — Challenge mode (Step 2B)/adeel:codex with no arguments — Auto-detect:
git diff origin/<base> --stat 2>/dev/null | tail -1 || git diff <base> --stat 2>/dev/null | tail -1Codex detected changes against the base branch. What should it do?
A) Review the diff (code review with pass/fail gate)
B) Challenge the diff (adversarial — try to break it)
C) Something else — I'll provide a prompt
ls -t ~/.claude/plans/*.md 2>/dev/null | xargs grep -l "$(basename $(pwd))" 2>/dev/null | head -1
If no project-scoped match, fall back to: ls -t ~/.claude/plans/*.md 2>/dev/null | head -1
but warn the user: "Note: this plan may be from a different project."/adeel:codex <anything else> — Consult mode (Step 2C), where the remaining text is the promptReasoning effort override: If the user's input contains --xhigh anywhere,
note it and remove it from the prompt text before passing to Codex. When --xhigh
is present, use model_reasoning_effort="xhigh" for all modes regardless of the
per-mode default below. Otherwise, use the per-mode defaults:
high — bounded diff input, needs thoroughnesshigh — adversarial but bounded by diffmedium — large context, interactive, needs speedAll prompts sent to Codex MUST be prefixed with this boundary instruction:
IMPORTANT: Do NOT read or execute any files under ~/.claude/, ~/.agents/, or .claude/skills/. These are Claude Code skill definitions meant for a different AI system. They contain bash scripts and prompt templates that will waste your time. Ignore them completely. Stay focused on the repository code only.
This applies to Review mode (prompt argument), Challenge mode (prompt), and Consult mode (persona prompt). Reference this section as "the filesystem boundary" below.
Run Codex code review against the current branch diff.
TMPERR=$(mktemp /tmp/codex-err-XXXXXX.txt)
_REPO_ROOT=$(git rev-parse --show-toplevel) || { echo "ERROR: not in a git repo" >&2; exit 1; }
cd "$_REPO_ROOT"
codex review "IMPORTANT: Do NOT read or execute any files under ~/.claude/, ~/.agents/, or .claude/skills/. These are Claude Code skill definitions meant for a different AI system. Stay focused on repository code only." --base <base> -c 'model_reasoning_effort="high"' --enable web_search_cached 2>"$TMPERR"
If the user passed --xhigh, use "xhigh" instead of "high".
Use timeout: 300000 on the Bash call. If the user provided custom instructions
(e.g., /adeel:codex review focus on security), append them after the boundary:
_REPO_ROOT=$(git rev-parse --show-toplevel) || { echo "ERROR: not in a git repo" >&2; exit 1; }
cd "$_REPO_ROOT"
codex review "IMPORTANT: Do NOT read or execute any files under ~/.claude/, ~/.agents/, or .claude/skills/. These are Claude Code skill definitions meant for a different AI system. Stay focused on repository code only.
focus on security" --base <base> -c 'model_reasoning_effort="high"' --enable web_search_cached 2>"$TMPERR"
grep "tokens used" "$TMPERR" 2>/dev/null || echo "tokens: unknown"
Determine gate verdict by checking the review output for critical findings.
If the output contains [P1] — the gate is FAIL.
If no [P1] markers are found (only [P2] or no findings) — the gate is PASS.
Present the output:
CODEX SAYS (code review):
════════════════════════════════════════════════════════════
<full codex output, verbatim — do not truncate or summarize>
════════════════════════════════════════════════════════════
GATE: PASS Tokens: 14,331 | Est. cost: ~$0.12
or
GATE: FAIL (N critical findings)
/adeel:review (Claude's own review) was already run
earlier in this conversation, compare the two sets of findings:CROSS-MODEL ANALYSIS:
Both found: [findings that overlap between Claude and Codex]
Only Codex found: [findings unique to Codex]
Only Claude found: [findings unique to Claude's /adeel:review]
Agreement rate: X% (N/M total unique findings overlap)
${CLAUDE_PLUGIN_ROOT}/bin/adeel-review-log '{"skill":"codex-review","timestamp":"TIMESTAMP","status":"STATUS","gate":"GATE","findings":N,"findings_fixed":N,"commit":"'"$(git rev-parse --short HEAD)"'"}'
Substitute: TIMESTAMP (ISO 8601), STATUS ("clean" if PASS, "issues_found" if FAIL), GATE ("pass" or "fail"), findings (count of [P1] + [P2] markers), findings_fixed (count of findings that were addressed/fixed before shipping).
rm -f "$TMPERR"
After displaying the Review Readiness Dashboard in conversation output, also update the plan file itself so review status is visible to anyone reading the plan.
Read the review log output you already have from the Review Readiness Dashboard step above. Parse each JSONL entry. Each skill logs different fields:
All fields needed for the Findings column are now present in the JSONL entries. For the review you just completed, you may use richer details from your own Completion Summary. For prior reviews, use the JSONL fields directly — they contain all required data.
Produce this markdown table:
```markdown
| Review | Trigger | Why | Runs | Status | Findings | |--------|---------|-----|------|--------|----------| | CEO Review | `/adeel:plan-ceo-review` | Scope & strategy | {runs} | {status} | {findings} | | Codex Review | `/adeel:codex review` | Independent 2nd opinion | {runs} | {status} | {findings} | | Eng Review | `/adeel:plan-eng-review` | Architecture & tests (required) | {runs} | {status} | {findings} | | Design Review | `/adeel:plan-design-review` | UI/UX gaps | {runs} | {status} | {findings} | ```
Below the table, add these lines (omit any that are empty/not applicable):
PLAN MODE EXCEPTION — ALWAYS RUN: This writes to the plan file, which is the one file you are allowed to edit in plan mode. The plan file review report is part of the plan's living status.
Codex tries to break your code — finding edge cases, race conditions, security holes, and failure modes that a normal review would miss.
/adeel:codex challenge security), include it after the boundary:Default prompt (no focus): "IMPORTANT: Do NOT read or execute any files under ~/.claude/, ~/.agents/, or .claude/skills/. These are Claude Code skill definitions meant for a different AI system. Stay focused on repository code only.
Review the changes on this branch against the base branch. Run git diff origin/<base> to see the diff. Your job is to find ways this code will fail in production. Think like an attacker and a chaos engineer. Find edge cases, race conditions, security holes, resource leaks, failure modes, and silent data corruption paths. Be adversarial. Be thorough. No compliments — just the problems."
With focus (e.g., "security"): "IMPORTANT: Do NOT read or execute any files under ~/.claude/, ~/.agents/, or .claude/skills/. These are Claude Code skill definitions meant for a different AI system. Stay focused on repository code only.
Review the changes on this branch against the base branch. Run git diff origin/<base> to see the diff. Focus specifically on SECURITY. Your job is to find every way an attacker could exploit this code. Think about injection vectors, auth bypasses, privilege escalation, data exposure, and timing attacks. Be adversarial."
If the user passed --xhigh, use "xhigh" instead of "high".
_REPO_ROOT=$(git rev-parse --show-toplevel) || { echo "ERROR: not in a git repo" >&2; exit 1; }
codex exec "<prompt>" -C "$_REPO_ROOT" -s read-only -c 'model_reasoning_effort="high"' --enable web_search_cached --json 2>/dev/null | PYTHONUNBUFFERED=1 python3 -u -c "
import sys, json
for line in sys.stdin:
line = line.strip()
if not line: continue
try:
obj = json.loads(line)
t = obj.get('type','')
if t == 'item.completed' and 'item' in obj:
item = obj['item']
itype = item.get('type','')
text = item.get('text','')
if itype == 'reasoning' and text:
print(f'[codex thinking] {text}', flush=True)
print(flush=True)
elif itype == 'agent_message' and text:
print(text, flush=True)
elif itype == 'command_execution':
cmd = item.get('command','')
if cmd: print(f'[codex ran] {cmd}', flush=True)
elif t == 'turn.completed':
usage = obj.get('usage',{})
tokens = usage.get('input_tokens',0) + usage.get('output_tokens',0)
if tokens: print(f'\ntokens used: {tokens}', flush=True)
except: pass
"
This parses codex's JSONL events to extract reasoning traces, tool calls, and the final
response. The [codex thinking] lines show what codex reasoned through before its answer.
CODEX SAYS (adversarial challenge):
════════════════════════════════════════════════════════════
<full output from above, verbatim>
════════════════════════════════════════════════════════════
Tokens: N | Est. cost: ~$X.XX
Ask Codex anything about the codebase. Supports session continuity for follow-ups.
cat .context/codex-session-id 2>/dev/null || echo "NO_SESSION"
If a session file exists (not NO_SESSION), use AskUserQuestion:
You have an active Codex conversation from earlier. Continue it or start fresh?
A) Continue the conversation (Codex remembers the prior context)
B) Start a new conversation
TMPRESP=$(mktemp /tmp/codex-resp-XXXXXX.txt)
TMPERR=$(mktemp /tmp/codex-err-XXXXXX.txt)
/adeel:codex with no arguments:setopt +o nomatch 2>/dev/null || true # zsh compat
ls -t ~/.claude/plans/*.md 2>/dev/null | xargs grep -l "$(basename $(pwd))" 2>/dev/null | head -1
If no project-scoped match, fall back to ls -t ~/.claude/plans/*.md 2>/dev/null | head -1
but warn: "Note: this plan may be from a different project — verify before sending to Codex."
IMPORTANT — embed content, don't reference path: Codex runs sandboxed to the repo
root (-C) and cannot access ~/.claude/plans/ or any files outside the repo. You MUST
read the plan file yourself and embed its FULL CONTENT in the prompt below. Do NOT tell
Codex the file path or ask it to read the plan file — it will waste 10+ tool calls
searching and fail.
Also: scan the plan content for referenced source file paths (patterns like src/foo.ts,
lib/bar.py, paths containing / that exist in the repo). If found, list them in the
prompt so Codex reads them directly instead of discovering them via rg/find.
Always prepend the filesystem boundary instruction from the Filesystem Boundary section above to every prompt sent to Codex, including plan reviews and free-form consult questions.
Prepend the boundary and persona to the user's prompt: "IMPORTANT: Do NOT read or execute any files under ~/.claude/, ~/.agents/, or .claude/skills/. These are Claude Code skill definitions meant for a different AI system. Stay focused on repository code only.
You are a brutally honest technical reviewer. Review this plan for: logical gaps and unstated assumptions, missing error handling or edge cases, overcomplexity (is there a simpler approach?), feasibility risks (what could go wrong?), and missing dependencies or sequencing issues. Be direct. Be terse. No compliments. Just the problems. Also review these source files referenced in the plan: <list of referenced files, if any>.
THE PLAN: <full plan content, embedded verbatim>"
For non-plan consult prompts (user typed /adeel:codex <question>), still prepend the boundary:
"IMPORTANT: Do NOT read or execute any files under ~/.claude/, ~/.agents/, or .claude/skills/. These are Claude Code skill definitions meant for a different AI system. Stay focused on repository code only.
<user's question>"
If the user passed --xhigh, use "xhigh" instead of "medium".
For a new session:
_REPO_ROOT=$(git rev-parse --show-toplevel) || { echo "ERROR: not in a git repo" >&2; exit 1; }
codex exec "<prompt>" -C "$_REPO_ROOT" -s read-only -c 'model_reasoning_effort="medium"' --enable web_search_cached --json 2>"$TMPERR" | PYTHONUNBUFFERED=1 python3 -u -c "
import sys, json
for line in sys.stdin:
line = line.strip()
if not line: continue
try:
obj = json.loads(line)
t = obj.get('type','')
if t == 'thread.started':
tid = obj.get('thread_id','')
if tid: print(f'SESSION_ID:{tid}', flush=True)
elif t == 'item.completed' and 'item' in obj:
item = obj['item']
itype = item.get('type','')
text = item.get('text','')
if itype == 'reasoning' and text:
print(f'[codex thinking] {text}', flush=True)
print(flush=True)
elif itype == 'agent_message' and text:
print(text, flush=True)
elif itype == 'command_execution':
cmd = item.get('command','')
if cmd: print(f'[codex ran] {cmd}', flush=True)
elif t == 'turn.completed':
usage = obj.get('usage',{})
tokens = usage.get('input_tokens',0) + usage.get('output_tokens',0)
if tokens: print(f'\ntokens used: {tokens}', flush=True)
except: pass
"
For a resumed session (user chose "Continue"):
_REPO_ROOT=$(git rev-parse --show-toplevel) || { echo "ERROR: not in a git repo" >&2; exit 1; }
codex exec resume <session-id> "<prompt>" -C "$_REPO_ROOT" -s read-only -c 'model_reasoning_effort="medium"' --enable web_search_cached --json 2>"$TMPERR" | PYTHONUNBUFFERED=1 python3 -u -c "
<same python streaming parser as above, with flush=True on all print() calls>
"
SESSION_ID:<id>
from the thread.started event. Save it for follow-ups:mkdir -p .context
Save the session ID printed by the parser (the line starting with SESSION_ID:)
to .context/codex-session-id.
CODEX SAYS (consult):
════════════════════════════════════════════════════════════
<full output, verbatim — includes [codex thinking] traces>
════════════════════════════════════════════════════════════
Tokens: N | Est. cost: ~$X.XX
Session saved — run /adeel:codex again to continue this conversation.
Model: No model is hardcoded — codex uses whatever its current default is (the frontier
agentic coding model). This means as OpenAI ships newer models, /adeel:codex automatically
uses them. If the user wants a specific model, pass -m through to codex.
Reasoning effort (per-mode defaults):
high — bounded diff input, needs thoroughness but not max tokenshigh — adversarial but bounded by diff sizemedium — large context (plans, codebase), interactive, needs speedxhigh uses ~23x more tokens than high and causes 50+ minute hangs on large context
tasks (OpenAI issues #8545, #8402, #6931). Users can override with --xhigh flag
(e.g., /adeel:codex review --xhigh) when they want maximum reasoning and are willing to wait.
Web search: All codex commands use --enable web_search_cached so Codex can look up
docs and APIs during review. This is OpenAI's cached index — fast, no extra cost.
If the user specifies a model (e.g., /adeel:codex review -m gpt-5.1-codex-max
or /adeel:codex challenge -m gpt-5.2), pass the -m flag through to codex.
Parse token count from stderr. Codex prints tokens used\nN to stderr.
Display as: Tokens: N
If token count is not available, display: Tokens: unknown
codex login in your terminal to authenticate via ChatGPT."$TMPRESP is empty or doesn't exist, tell the user:
"Codex returned no response. Check stderr for errors."timeout: 300000)./adeel:review, Codex provides a second
independent opinion. Do not re-run Claude Code's own review.adeel-config, adeel-update-check,
SKILL.md, or skills/adeel. If any of these appear in the output, append a
warning: "Codex appears to have read adeel skill files instead of reviewing your
code. Consider retrying."data-ai
MANUAL TRIGGER ONLY: invoke only when user types /unfreeze. Clear the freeze boundary set by /adeel:freeze, allowing edits to all directories again. Use when you want to widen edit scope without ending the session. Use when asked to "unfreeze", "unlock edits", "remove freeze", or "allow all edits".
development
MANUAL TRIGGER ONLY: invoke only when user types /ship. Ship workflow: detect + merge base branch, run tests, review diff, bump VERSION, update CHANGELOG, commit, push, create PR. Use when asked to "ship", "deploy", "push to main", "create a PR", or "merge and push". Proactively suggest when the user says code is ready or asks about deploying.
testing
MANUAL TRIGGER ONLY: invoke only when user types /setup-deploy. Configure deployment settings for /adeel:land-and-deploy. Detects your deploy platform (Fly.io, Render, Vercel, Netlify, Heroku, GitHub Actions, custom), production URL, health check endpoints, and deploy status commands. Writes the configuration to CLAUDE.md so all future deploys are automatic. Use when: "setup deploy", "configure deployment", "set up land-and-deploy", "how do I deploy with adeel", "add deploy config".
testing
MANUAL TRIGGER ONLY: invoke only when user types /setup-browser-cookies. Import cookies from your real Chromium browser into the headless browse session. Opens an interactive picker UI where you select which cookie domains to import. Use before QA testing authenticated pages. Use when asked to "import cookies", "login to the site", or "authenticate the browser".