agentic/code/addons/prose-integration/skills/prose-reader/SKILL.md
Read and parse an OpenProse program file, extracting its contract (requires, ensures, strategies, errors, invariants) and services into a structured representation
npx skillsauth add jmagly/aiwg prose-readerInstall 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 read and parse OpenProse program files (.md with contract semantics), extracting the full contract specification into a structured, human-readable summary.
A path to a .md file that is an OpenProse program (has requires: and/or ensures: sections).
Given a path to an OpenProse program file:
Before any operation, run /prose-detect to locate the OpenProse installation and resolve PROSE_ROOT. /prose-detect handles the full detection chain (env var, AIWG config, AIWG-local install, project plugin manifest, user home, global CLI).
If /prose-detect reports no installation found, do NOT auto-clone. Inform the user:
OpenProse not found. Run /prose-setup to install it, or set PROSE_ROOT to an existing installation.
Read the target file using the Read tool.
Extract YAML frontmatter fields:
name — program namekind — program, service, library, or testservices — list of service component names (multi-service programs only)model — preferred model if specifiedParse the markdown body for contract sections. Each section uses a specific keyword followed by a colon and a list:
| Section | Keyword | Format | Meaning |
|---------|---------|--------|---------|
| Inputs | requires: | - name: description | What the program needs to run |
| Outputs | ensures: | - name: description | What the program commits to produce (obligation) |
| Conditional behavior | strategies: | - when condition: action | How to handle specific situations |
| Failure channels | errors: | - condition description | When the program cannot proceed |
| Invariants | invariants: | - property description | Properties that always hold |
If kind: program and services: is present in frontmatter:
.md file exists in the same directoryFormat the extracted information as:
## Program: {name}
**Kind**: {kind}
**Services**: {services list or "single-component"}
**Model**: {model or "not specified"}
### Requires (Inputs)
| Name | Description |
|------|-------------|
| {name} | {description} |
### Ensures (Outputs — Obligations)
| Name | Description |
|------|-------------|
| {name} | {description} |
### Strategies
- when {condition}: {action}
### Errors
- {error condition}
### Invariants
- {invariant property}
### Services
| Service | File | Exists |
|---------|------|--------|
| {name} | {name}.md | {yes/no} |
requires:: Report as "No declared inputs (implicit)"ensures:: Flag as warning — all valid programs should have ensuresensures: entries with when clauses — parse and display the conditionservices:, note the nesting.prose files: Treat identically to .md filesThis skill runs on Sonnet — parsing and extraction don't require complex reasoning.
data-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`.