- name
- eou-foundry-init
- description
- Use when the user asks to initialize, scaffold, or create a new EOU-governed application. Creates a sibling directory with foundry/, instance copies of plugin templates, a starter constitution, and an initial git repo. Refuses to overwrite an existing directory.
- metadata
- {"short-description":"Scaffold a new EOU-governed app"}
# Initialize EOU-Governed Application
You are scaffolding a new EOU-governed application. The user is invoking this from a workspace directory and should supply an app name.
## 1. Get the app name
If the user supplied an app name in their request, use it. Otherwise ask: "What is the application's slug name? (lowercase, alphanumeric + hyphen)"
Optional inputs:
- A one-line description of what the application does (defaults to the slug)
- `NO_GIT=1` — set this environment variable before the command to skip `git init` in the new directory (default: initialize git)
Validate the slug. Reject names containing `/`, `\`, `..`, a leading `.`, or any character outside `[a-z0-9-]`. Refuse to overwrite an existing directory.
## 2. Run init script
> `${PLUGIN_ROOT}` is the Codex runtime env var for the plugin root. The Claude Code equivalent is `${CLAUDE_PLUGIN_ROOT}`. Both resolve to the same directory — the name differs by runtime.
Run `bash "${PLUGIN_ROOT}/scripts/init_app.sh" "$APP_NAME" "$DESCRIPTION" $([ "$NO_GIT" = "1" ] && echo "--no-git")` and let the script handle the existence check and scaffolding atomically. Report what it produced.
## 3. What the script does (for reference)
`scripts/init_app.sh` is idempotent in the sense of "refuse to clobber":
- Refuses if `./<app-name>/` already exists.
- Creates `./<app-name>/` and inside it:
- `foundry/constitution.yml` and `foundry/registry.yml` (empty), filled from
`templates/`. Nothing else is copied: governance,
the failure taxonomy, the maturity model, refactoring patterns, the
runtime contract and the meta-EOUs stay in `engine/`
and are inherited. An app shadows one by adding `foundry/overrides/<file>.yml`.
- Empty `foundry/eous/`, `foundry/incidents/`, `foundry/audits/no-trace/`,
`foundry/runs/`, `foundry/overrides/` and
`foundry/self-evolution/{ecp/{proposed,approved,implemented,rejected},regression/{cases,fixtures},upstream/{proposed-to-plugin,landed}}/`.
- `AGENTS.md`, plus `CLAUDE.md` and `GEMINI.md` that import it.
- `.claude/settings.json` and a `.claude/hooks/foundry_guard.py` hook that runs the validator on edited foundry files.
- `.gitignore` with the standard AI-tool ignores.
- `README.md` one-paragraph application overview.
- Substitutes `{{APP_NAME}}` and `{{DESCRIPTION}}` placeholders in the
two template files.
- Unless `--no-git`, runs `git init` and makes a single initial commit.
- Runs `validate_foundry.py` against the new app to confirm the scaffold
passes the schema check.
## 4. Report
If the script returns exit code 0, surface a summary of what was created:
```
App initialized:
✓ <app-name>/ created with foundry/, .claude/, AGENTS.md, README.md
✓ foundry/constitution.yml from template, customized for <app-name>
✓ foundry/registry.yml empty (entries: [])
✓ git repo initialized (or "skipped: NO_GIT=1")
✓ validate_foundry.py OK
Next steps:
cd <app-name>
edit AGENTS.md # the application's instructions
edit foundry/constitution.yml # tailor invariants to this app's domain
$generate-eou-candidates # produce candidate EOUs for the workflow
```
## 5. Constraints
- Do not create an app directory interactively — require the slug as input before proceeding.
- Do not overwrite an existing directory — delegate the check to `init_app.sh` and report the exit code 2 error.
- Do not run `git init` or `validate_foundry.py` manually — the script handles both atomically.
- Do not modify template files or the plugin's own foundry during initialization.
- Do not proceed past Step 2 if the slug fails validation — report the error immediately.
## 6. Errors
If `init_app.sh` fails:
- Exit code 2 (existing directory): report "Directory `<app-name>/` already exists; refusing to overwrite. Pick a different name or move it aside."
- Exit code 3 (invalid slug): report "Invalid app name. Use lowercase alphanumeric + hyphen only."
- Exit code 4 (validate_foundry failed): show the validator output, then say "Scaffold completed but validation found issues. Inspect `<app-name>/foundry/` and fix before continuing."
- Any other non-zero: show the script's stderr verbatim.
View on GitHub