| namespace | aiwg |
| name | prose-detect |
| description | Locate an existing OpenProse installation via env var, AIWG config, local install, plugin manifest, or global CLI. Returns PROSE_ROOT; triggers prose-install if not found. |
| version | 0.1.0 |
| platforms | ["all"] |
| requires | ["nothing: prose-detect is self-contained — reads environment and filesystem only"] |
| ensures | [{"PROSE_ROOT":"resolved path to OpenProse skills/open-prose/ directory, validated to contain prose.md and forme.md"},{"detection-source":"which signal resolved the path (env | aiwg-config | aiwg-local | plugin-manifest | user-home | cli)"},{"config-updated":".aiwg/config.json updated with resolved path for future calls"},"if not found: clear instructions to run /prose-install with suggested install path"] |
| errors | [{"not-found":"no valid OpenProse installation detected via any of the 7 signals"}] |
| invariants | ["never installs OpenProse silently — detection only; installation requires user confirmation via /prose-install","always validates prose.md and forme.md exist at the resolved path before accepting it","stale cached paths that fail validation are skipped and detection continues to next signal"] |
Prose Detect Skill
You locate an existing OpenProse installation by checking a priority-ordered list of signals. You return the resolved PROSE_ROOT path (pointing to skills/open-prose/ inside the OpenProse repo), or report that no installation was found and suggest running /prose-setup.
All other prose-integration skills call this skill before operating — detection is centralized here so each skill doesn't re-implement discovery independently.
Triggers
- "detect prose" / "find prose" / "locate openprose"
- "where is prose installed"
- "check if prose is available"
- "prose-detect" (direct invocation from other skills)
- Called automatically by prose-run, prose-reader, prose-validate, forme-manifest before execution
Detection Protocol
Work through the following signals in order. Use the first one that resolves to a valid installation.
Signal 1: Environment Variable
echo "$PROSE_ROOT"
echo "$AIWG_PROSE_ROOT"
If set, validate that $PROSE_ROOT/prose.md exists. If valid, use this path.
Signal 2: AIWG Config File
cat .aiwg/config.json 2>/dev/null | python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('prose',{}).get('path',''))" 2>/dev/null
If prose.path is set and {prose.path}/prose.md exists, use this path.
Signal 3: AIWG-Local Install
ls ~/.aiwg/prose/skills/open-prose/prose.md 2>/dev/null
If exists, PROSE_ROOT = ~/.aiwg/prose/skills/open-prose.
Signal 4: Project Plugin Manifest
Walk CWD upward looking for .claude-plugin/plugin.json with OpenProse entry:
=
[ != ];
[ -f ];
python3 -c 2>/dev/null
=