Skip to content
Back to skills

Prose Reader

ASecurity

Read and parse an OpenProse program file, extracting its contract (requires, ensures, strategies, errors, invariants) and services into a structured representation

  • 211 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 21, 2026
ai-agents

Works with

  • cli

Security analysis

A100/100

Scanned September 21, 2026

npx -y skills add jmagly/ai-writing-guide --skill prose-reader --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Prose Reader?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Prose Reader
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/jmagly-prose-reader-564d70f4/badge)](https://www.skillsdirectory.com/skills/jmagly-prose-reader-564d70f4)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
namespace: aiwg
name: prose-reader
description: Read and parse an OpenProse program file, extracting its contract (requires, ensures, strategies, errors, invariants) and services into a structured representation
version: 0.1.0
platforms: [all]

---

# Prose Reader Skill

You read and parse OpenProse program files (`.md` with contract semantics), extracting the full contract specification into a structured, human-readable summary.

## Triggers

- "read prose program" / "parse prose file"
- "what does [file] require and ensure"
- "show me the contract for [file]"
- "extract prose contract from [path]"
- "what are the inputs and outputs of [program]"

## Input

A path to a `.md` file that is an OpenProse program (has `requires:` and/or `ensures:` sections).

## Behavior

Given a path to an OpenProse program file:

### Step 0: Detect OpenProse Installation

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.
```

### Step 1: Read the File

Read the target file using the Read tool.

### Step 2: Parse Frontmatter

Extract YAML frontmatter fields:
- `name` — program name
- `kind` — `program`, `service`, `library`, or `test`
- `services` — list of service component names (multi-service programs only)
- `model` — preferred model if specified
- Any other frontmatter fields

### Step 3: Extract Contract Elements

Parse 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 |

### Step 4: Identify Services

If `kind: program` and `services:` is present in frontmatter:
- List each service name
- Check if corresponding `.md` file exists in the same directory
- Note any missing service files

### Step 5: Output Structured Summary

Format the extracted information as:

```markdown
## 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} |
```

## Edge Cases

- **No `requires:`**: Report as "No declared inputs (implicit)"
- **No `ensures:`**: Flag as warning — all valid programs should have ensures
- **Conditional ensures**: `ensures:` entries with `when` clauses — parse and display the condition
- **Nested services**: If a service itself has `services:`, note the nesting
- **Legacy `.prose` files**: Treat identically to `.md` files

## Model

This skill runs on **Sonnet** — parsing and extraction don't require complex reasoning.

## References

- @$AIWG_ROOT/${CLAUDE_PLUGIN_ROOT}/README.md — prose-integration addon overview
- @$AIWG_ROOT/agentic/code/addons/aiwg-utils/rules/research-before-decision.md — Run prose-detect before reading any program file
- @$AIWG_ROOT/agentic/code/addons/aiwg-utils/rules/instruction-comprehension.md — Extract all contract fields; do not skip optional sections
- @$AIWG_ROOT/docs/cli-reference.md — CLI reference for AIWG addon integration commands

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…