9.8 KiB
9.8 KiB
01 — CodexHelper — Proposal
Purpose: Implement a bash wrapper (CodexHelper) around codex-cli with “modes”, project scaffolding, and a clean CLI.
Summary of Agreed Direction
- Name/Install:
CodexHelper
script in this repo; users add it to PATH. Optionalbin/install.sh
to symlink into~/bin
. - CLI Style: Subcommands —
new-project
,new-mode
,run
. - Where to run: Outside this repo →
new-project
,run
. Inside this repo → onlynew-mode
. - Modes/Prompts: Global system (repo-wide) → optional mode system overlay → mode rules → project narrative.
- Config: YAML with
yq
. Precedence: CLI > env > project > mode > global defaults. - Binary discovery:
which codex
, thenwhich codex-cli
; override withCODEX_BIN
. No auto-install. - Safety/Outputs: Never overwrite without
--force
; nevergit push
in user projects; write runs to<project>/runs/<timestamp>/...
. - Licensing: Repo (wrapper, modes, prompts) AGPLv3; user artifacts are user-licensed.
- OS/Deps: Ubuntu/Debian, bash/zsh; deps: bash, git, yq.
CLI
CodexHelper new-project --mode <ModeName> --name <project-name> --path <dir> [--force] [--sandbox <mode>] [--full-auto] [--config <file>]
- Creates project structure in
<dir>/<project-name>
(or<dir>
if it exists):prompts/project.md
(narrative template), optionalprompts/style.md
prompts/_mode/
with copies of global/mode promptscodex.yaml
(mode + settings + MCP placeholders)codex.sh
(entrypoint wrapper that resolves config and callscodex
).gitignore
(includesruns/
)
- Creates project structure in
CodexHelper run [--mode <ModeName>] [--prompt-file <file>] [--config <file>] [--sandbox <mode>] [--full-auto] [--force]
- Must be run inside a project dir; composes prompts in correct order; writes logs to
runs/<timestamp>/...
. - Respects precedence: CLI > env > project > mode > global.
- Must be run inside a project dir; composes prompts in correct order; writes logs to
CodexHelper new-mode --name <ModeName>
(only in this repo root)- Scaffolds
modes/<ModeName>/mode.md
and optionalmodes/<ModeName>/system.md
, plusmodes/<ModeName>/defaults.yaml
. - Uses a markdown intake template for quick editing.
- Scaffolds
Repository Layout (this repo)
CodexHelper
(bash)bin/install.sh
(optional symlink helper)prompts/global/{system.md, system.llm.md}
(global system rules; human + LLM)modes/<ModeName>/mode.md
(mode rules)modes/<ModeName>/system.md
(optional mode-specific system overlay)modes/<ModeName>/defaults.yaml
(default codex settings, optional MCP placeholders)templates/project/<ModeName>/...
(project scaffolding templates copied onnew-project
)templates/project/_shared/AGENTS.md
(AGENTS template copied into projects)meta/{AGENTS.seed.md, AGENTS.seed.llm.md}
(seed AGENTS templates for bootstrap/reference)- Governance/Propagation: maintain global norms in
prompts/global/
and seed AGENTS templates; reflect such changes in proposal/plan for scaffolding. - TDD Governance: enforce test-driven development; require unit/integration tests for all features here and in generated projects.
- Zero Technical Debt: safety first; always production-ready; no deferring tests/docs/refactors; leverage sub-agents when needed.
- Planning/Architecture Governance: plan ahead via Questions→Proposal→Plan; keep a global architecture/module map; implement module-by-module; avoid refactors except when assumptions change and plans/docs are updated.
- Clean Root Governance: keep repo root minimal; organize assets under
docs/
,templates/
,collab/
,prompts/
,modes/
,scripts/
,meta/
. - CI/Containers Governance: use Gitea Actions with local parity via Docker Compose; do work inside containers; host for git/tea and Docker only; dependencies via Docker; explicit names and cleanup.
- .gitignore Governance: include and maintain
.gitignore
entries (e.g.,runs/
, OS files) across repos and generated projects. - Audits Governance: perform regular audits; prompt before releases; store reports under
docs/audits/
and enforce via CI step.
Project Layout (generated)
AGENTS.md
(fromtemplates/project/_shared/AGENTS.md
)prompts/project.md
(+ optionalprompts/style.md
)prompts/_mode/
(read-only copies from this repo)codex.yaml
(project config)codex.sh
(entrypoint wrapper around codex-cli)runs/
(created on first run; ignored by VCS).gitea/workflows/
for CI;docker/
for compose and Dockerfiles;scripts/
for docker orchestration (tests, ci)
Config Details
- Format: YAML (
yq
for merging/reading) - Precedence resolution: merge defaults in order — global defaults → mode defaults → project config → env vars → CLI flags.
- Key fields in
codex.yaml
:mode: <ModeName>
codex:
{ model, token_budget, reasoning_level, sandbox, full_auto, extra_args[] }
prompts:
{ project: prompts/project.md, mode_dir: prompts/_mode }
mcp:
placeholders (deferred per roadmap)
Prompt Composition
- Order: Global system → Mode system overlay (if any) → Mode rules → Project narrative.
- Implementation:
codex.sh
concatenates/feeds prompts tocodex
in that order (exact mechanism depends on codex-cli interface; we’ll use files/flags as supported). - Explicit:
prompts/global/
is present and used as the base of composition. - Governance/Propagation: non-project-specific rules are folded back into global/system and templates; changes logged.
- TDD: tests are written first and required for acceptance.
- Zero Debt: no pending TODOs/deferrals; docs updated alongside code; production-ready gate on each change.
- Planning/Architecture: architecture/module map documented; implementations follow plan without unplanned refactors.
Safety
- Guardrails:
- Refuse
run
andnew-project
inside this repo; allow onlynew-mode
here. - Refuse to overwrite files unless
--force
. - Never execute
git push
in user projects.
- Refuse
Crawl → Walk → Run
- Crawl (Phase 1 — initial MVP):
CodexHelper
with subcommands implemented.- Global system location and one example mode scaffolder.
- Project scaffold: prompts, codex.yaml, codex.sh, .gitignore (runs/).
- Config precedence implemented; sandbox/full-auto pass-through.
- Binary detection and friendly error messages.
- Minimal docs: README quickstart;
docs/wrapper.md
for usage.
- Walk (Phase 2):
--interactive
prompts for missing values.- Mode defaults (
defaults.yaml
) respected and merged. - Basic tests for key flows; improved logging in
runs/
. - Add
docs/ROADMAP.md
entries and initial MCP placeholders.
- Run (Phase 3):
- Mode/project wizards via markdown intake with validation.
- MCP integration options.
- Additional quality-of-life flags and templates.
Acceptance Criteria (Phase 1)
- Running
CodexHelper new-mode --name Demo
inside this repo createsmodes/Demo/{mode.md,defaults.yaml}
. - Running
CodexHelper new-project --mode Demo --name demo --path /tmp
creates a project with files listed above, without overwrites unless--force
. - Inside that project,
CodexHelper run --full-auto
composes prompts and calls the detectedcodex
binary. It writes artifacts underruns/<timestamp>/...
. - Precedence works: CLI options override env, which override project config, which override mode defaults.
- Running
CodexHelper run
in this repo prints an error guiding usage. - Project scaffold includes
AGENTS.md
copied fromtemplates/project/_shared/AGENTS.md
. prompts/global/{system.md, system.llm.md}
exist and are included in composition.- Governance/Propagation honored: when norms change, update
prompts/global/
and AGENTS templates; log in DevLog. - TDD honored: a test suite (bats) covers CLI flows and guardrails; tests pass.
- Zero Debt honored: code, tests, and docs complete; no debt items remain.
- Clean Root honored: only essential files at root; scaffolding places assets under subdirectories.
- CI/Containers honored: CI runs in Gitea and locally using the same Docker Compose; containers and networks use explicit names and are cleaned up.
- Project scaffold includes
.gitea/workflows/ci.yml
,docker/compose.yml
,docker/test/Dockerfile
, andscripts/test.docker.sh
copied from templates. - Audits honored: audit script present and executed in CI; reports are recorded when performed.
Open Items for Confirmation
- Template coverage: include
prompts/style.md
by default? (we’ll include as optional, empty file) - Exact prompt-passing flags to
codex-cli
(confirm once coding — will use pass-through and files as supported).
Next Step
- On approval, I will create a concrete implementation plan at
collab/plan/01-codexhelper.md
and proceed with the Crawl phase implementation.
Approval Checklist
Please answer inline. When all are approved, reply “Approved for Plan”.
- Subcommands: approve
new-project
,run
,new-mode
? Any renames? - Scope: inside this repo allow only
new-mode
; outside allownew-project
andrun
? - Prompts order: global system → mode system overlay (optional) → mode rules → project narrative?
- Config format/precedence: YAML with
yq
; CLI > env > project > mode > global? - Safety: require
--force
to overwrite; nevergit push
for user projects; outputs under<project>/runs/<timestamp>/...
? - Repo layout:
CodexHelper
,prompts/global/system.md
,modes/<Name>/{mode.md, system.md?, defaults.yaml}
,templates/project/<Name>/...
? - Project layout:
prompts/{project.md, style.md?}
,prompts/_mode/
(read-only copies),codex.yaml
,codex.sh
,.gitignore (runs/)
? - Include empty
prompts/style.md
by default? - Binary discovery: try
codex
thencodex-cli
; allow overrideCODEX_BIN
? - Pass-through flags:
--mode
,--prompt-file
,--config
,--sandbox
,--full-auto
to underlyingcodex
? - Block
run
andnew-project
inside this repo with a helpful error? - Phase 1 (Crawl) scope acceptable as listed?
- Roadmap: add
docs/ROADMAP.md
; defer MCP integration for now?