agentic/code/addons/prose-integration/skills/prose-detect/SKILL.md
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.
npx skillsauth add jmagly/aiwg prose-detectInstall 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.
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.
Work through the following signals in order. Use the first one that resolves to a valid installation.
# Check PROSE_ROOT or AIWG_PROSE_ROOT
echo "$PROSE_ROOT"
echo "$AIWG_PROSE_ROOT"
If set, validate that $PROSE_ROOT/prose.md exists. If valid, use this path.
# Check .aiwg/config.json for saved prose path
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.
# Check if AIWG installed Prose locally
ls ~/.aiwg/prose/skills/open-prose/prose.md 2>/dev/null
If exists, PROSE_ROOT = ~/.aiwg/prose/skills/open-prose.
Walk CWD upward looking for .claude-plugin/plugin.json with OpenProse entry:
# Search CWD and ancestors for .claude-plugin/plugin.json
dir="$(pwd)"
while [ "$dir" != "/" ]; do
if [ -f "$dir/.claude-plugin/plugin.json" ]; then
# Check if it references open-prose
python3 -c "
import json, sys
with open('$dir/.claude-plugin/plugin.json') as f:
d = json.load(f)
# Plugin root is the directory containing .claude-plugin/
if d.get('name') == 'open-prose':
print('$dir/skills/open-prose')
" 2>/dev/null
break
fi
dir="$(dirname "$dir")"
done
If found, use the resolved path.
# Check if user has previously run Prose
ls ~/.prose/agents/ 2>/dev/null
If ~/.prose/agents/ exists, PROSE_ROOT is likely nearby. Check:
ls ~/.prose/skills/open-prose/prose.md 2>/dev/null
# Check for global CLI install
which prose 2>/dev/null
If found, use prose --root or prose info to resolve the installation path.
If no signal resolves to a valid PROSE_ROOT, output:
## OpenProse Not Found
No OpenProse installation was detected. Checked:
- $PROSE_ROOT / $AIWG_PROSE_ROOT environment variables
- .aiwg/config.json prose.path
- ~/.aiwg/prose/ (AIWG-local install)
- .claude-plugin/plugin.json in CWD and ancestors
- ~/.prose/ (user home)
- `prose` CLI on PATH
To install OpenProse, run:
```bash
/prose-setup
Or provide a custom path:
# Set env var
export PROSE_ROOT=/path/to/prose/skills/open-prose
# Or configure in .aiwg/config.json
{"prose": {"path": "/path/to/prose/skills/open-prose"}}
Do NOT install silently. Always confirm with the user before running `/prose-setup`.
## Validation
After resolving a candidate path, validate it by checking for required files:
```bash
# Minimum required files
ls "$PROSE_ROOT/prose.md"
ls "$PROSE_ROOT/forme.md"
If either file is missing, the path is invalid — continue to the next signal.
On success, output:
## OpenProse Located
**PROSE_ROOT**: /path/to/prose/skills/open-prose
**Detected via**: [signal name — env var | aiwg-config | aiwg-local | plugin-manifest | user-home | cli]
**prose.md**: present
**forme.md**: present
Prose integration skills are ready to use.
Also set PROSE_ROOT in the session environment if the platform supports it.
Once detected, save the resolved path to .aiwg/config.json so Signal 2 succeeds on future calls:
{
"prose": {
"path": "/resolved/path/to/skills/open-prose",
"detectedVia": "aiwg-local",
"lastVerified": "2026-04-02T00:00:00Z"
}
}
Only write the cache if the detection succeeds and the path is validated.
This skill runs on Haiku — it's pure file-system checks and shell commands. No reasoning needed.
All prose-integration skills call prose-detect as their first step:
/prose-reader/prose-run/prose-validate/forme-manifestdata-ai
Report which research-corpus radar sidecars are overdue for refresh. Computes staleness (days since last refresh vs the cadence window) for every radar, sorted most-overdue-first. Runs via `aiwg corpus radar-status`.
data-ai
Aggregate research-corpus radar sidecars into a corpus or per-cluster freshness report — totals, overdue count, per-cluster / per-GRADE / per-trajectory breakdowns, an overdue table, and per-radar rationale snippets. Runs via `aiwg corpus radar-report`.
testing
Scaffold radar/freshness sidecars for research-corpus REFs. Pulls title/authors from the citation sidecar and GRADE from the analysis doc, defaults the refresh cadence from GRADE and the cluster from a corpus-local map, and stamps documentation/radar/REF-XXX-radar.md. Runs via `aiwg corpus radar-init`.
data-ai
Compute an entity's publication trajectory — per-year paper counts, topic drift, hot-streak detection (≥3 consecutive A-grade years), and career phase. Runs via `aiwg corpus profile-temporal`.