Agent skill
streaming-output
Stream long-form content to markdown files with resume capability. Writes content incrementally with section markers, enabling recovery if context limits are hit. Use when generating long documents (over 1000 lines), B-SPEC or specification writing, multi-section reports, any task where context compaction may occur mid-generation, or when user explicitly requests streaming output. Commands: init, write, status, resume, finalize, repair.
Install this agent skill to your Project
npx add-skill https://github.com/ddunnock/claude-plugins/tree/main/skills/streaming-output
SKILL.md
Streaming Output
Write long-form content incrementally to markdown files with automatic resume capability. If context limits are hit mid-generation, work persists and can be continued.
⚠️ MANDATORY USE CASES
ALWAYS use this skill when:
- Generating B-SPEC documents (typically 1,500-4,000 lines)
- Writing any document expected to exceed 1,000 lines
- Creating multi-section specifications or reports
- Context compaction has already occurred in the conversation
- The continuation prompt mentions streaming-output
DO NOT use manual heredoc appends (cat >> file << 'EOF') for long documents. This pattern fails silently when context compaction occurs mid-write, causing content corruption that is difficult to detect and repair.
Commands
| Command | Purpose |
|---|---|
/stream.init |
Initialize output file with section plan |
/stream.write |
Write next section to file |
/stream.status |
Show progress, detect resume point, check integrity |
/stream.resume |
Continue from last completed section |
/stream.repair |
Fix corrupted/partial sections |
/stream.finalize |
Strip markers, validate completeness |
Quick Start
# 1. Initialize with a plan
/stream.init report.md --sections "intro,methodology,findings,conclusion"
# 2. Write sections (repeat for each)
/stream.write intro
/stream.write methodology
# ... if interrupted, resume later with:
/stream.resume
# 3. Finalize when complete
/stream.finalize
/stream.init
Initialize an output file with a section plan.
Usage: /stream.init <filepath> --sections "<comma-separated-list>" [--template <template-name>]
Workflow:
- Create output file (or detect existing)
- Write header with section plan as YAML frontmatter
- Generate content hash placeholder for integrity checking
- Present checklist for tracking
Templates (optional):
bspec- 15-section B-SPEC structurereport- Standard report structurespec- Generic specification structure
Example:
# Standard initialization
python scripts/stream_write.py init report.md \
--sections "introduction,background,analysis,recommendations,conclusion"
# B-SPEC template (pre-defined 15 sections)
python scripts/stream_write.py init b-spec-010.md --template bspec
Output file structure:
---
stream_plan:
version: "2.0"
sections:
- id: introduction
status: pending
hash: null
- id: background
status: pending
hash: null
- id: analysis
status: pending
hash: null
created: 2024-01-15T10:30:00
last_modified: null
integrity_check: true
---
# Report
<!-- Content will be streamed below -->
/stream.write
Write a single section to the file with markers and integrity verification.
Usage: /stream.write <section-id>
Workflow:
- Check section exists in plan and is pending
- Generate content for section
- Compute content hash
- Write to temporary location first
- Validate write completed (check for SECTION_END marker)
- Append to main file with
SECTION_STARTandSECTION_ENDmarkers - Update section status to
completedwith hash
Script:
python scripts/stream_write.py write report.md introduction "Your content here..."
Markers in file:
<!-- SECTION_START: introduction | hash:a1b2c3d4 -->
## Introduction
Your introduction content here...
<!-- SECTION_END: introduction | hash:a1b2c3d4 -->
Important:
- Write ONE section at a time
- Verify success before proceeding
- Hash in START and END markers must match (integrity check)
Write Verification
After each write, the skill automatically verifies:
SECTION_STARTmarker existsSECTION_ENDmarker exists- Hashes in both markers match
- Content between markers is non-empty
If verification fails, the write is flagged and /stream.repair is recommended.
/stream.status
Show current progress, identify resume point, and check integrity.
Usage: /stream.status <filepath> [--verify]
Script:
python scripts/stream_status.py report.md
python scripts/stream_status.py report.md --verify # Full integrity check
Standard Output:
Stream Status: report.md
Sections:
[x] introduction (completed) ✓
[x] background (completed) ✓
[ ] analysis (pending) <- RESUME HERE
[ ] recommendations (pending)
[ ] conclusion (pending)
Progress: 2/5 sections (40%)
Next section: analysis
With --verify flag (integrity check):
Stream Status: report.md
Integrity Check:
[x] introduction - hash:a1b2c3d4 ✓ valid
[x] background - hash:e5f6g7h8 ✓ valid
[!] analysis - CORRUPTED (START without END)
[ ] recommendations - pending
[ ] conclusion - pending
⚠️ CORRUPTION DETECTED in section: analysis
Run `/stream.repair analysis` to fix
Progress: 2/5 sections (40%)
Next section: analysis (requires repair)
Corruption Detection
The status command detects:
- Orphaned START:
SECTION_STARTexists without matchingSECTION_END - Hash mismatch: START and END marker hashes don't match
- Empty section: Markers exist but no content between them
- Duplicate sections: Same section ID appears multiple times
/stream.resume
Continue writing from the last incomplete section.
Usage: /stream.resume <filepath>
Workflow:
- Run status with verification to find resume point
- Check for corrupted sections (repair if needed)
- Read existing content for context
- Continue with
/stream.writefor next pending section
Script:
python scripts/stream_status.py report.md --resume
Output:
Resume Point: report.md
Last completed: background
Next pending: analysis
Context from previous sections loaded (2,450 tokens)
Ready to write: analysis
Command: /stream.write analysis
If corruption is detected:
Resume Point: report.md
⚠️ CORRUPTION DETECTED
Section 'analysis' has incomplete markers.
Recommended action:
1. Run `/stream.repair analysis` to remove partial content
2. Then run `/stream.write analysis` to regenerate
Command: /stream.repair analysis
/stream.repair
Fix corrupted or partial sections.
Usage: /stream.repair <filepath> <section-id> [--strategy <strategy>]
Strategies:
remove(default): Remove partial content, reset section to pendingcomplete: Attempt to add missing END marker (use with caution)backup: Create backup before repair
Workflow:
- Create backup of current file (if --strategy backup)
- Locate corrupted section
- Remove content from
SECTION_STARTto end of partial content - Update section status to
pending - Report repair results
Script:
python scripts/stream_repair.py report.md analysis --strategy remove
Output:
Repair Report: report.md
Section: analysis
Issue: Orphaned SECTION_START (no SECTION_END found)
Strategy: remove
Action: Removed 847 characters of partial content
Before:
<!-- SECTION_START: analysis | hash:null -->
## Analysis
Partial content here...
[truncated]
After:
Section 'analysis' reset to pending status
Backup created: report.md.backup.20240115-103045
Ready to regenerate: /stream.write analysis
/stream.finalize
Strip markers and validate completeness.
Usage: /stream.finalize <filepath> [--output <output-filepath>]
Workflow:
- Run full integrity check
- Verify all sections completed
- Verify all hashes valid
- Remove
SECTION_STARTandSECTION_ENDmarkers - Remove YAML frontmatter stream metadata
- Validate no incomplete markers remain
- Write to output file (or overwrite in place)
Script:
python scripts/stream_cleanup.py report.md --output final_report.md
Pre-finalize validation:
Finalize Check: report.md
Sections:
[x] introduction ✓
[x] background ✓
[x] analysis ✓
[x] recommendations ✓
[x] conclusion ✓
All sections complete: YES
All hashes valid: YES
Ready to finalize: YES
Finalizing...
Output written to: final_report.md
Markers removed: 10
Lines in final document: 1,247
If validation fails:
Finalize Check: report.md
⚠️ CANNOT FINALIZE - Issues detected:
[ ] recommendations - PENDING (not written)
[!] conclusion - CORRUPTED (hash mismatch)
Fix required before finalization:
1. /stream.write recommendations
2. /stream.repair conclusion
Recovery Scenarios
Scenario 1: Context limit hit mid-section
The section has SECTION_START but no SECTION_END:
<!-- SECTION_START: analysis | hash:null -->
## Analysis
Partial content here...
[truncated - no SECTION_END]
Recovery:
/stream.status --verifydetects incomplete section/stream.repair analysisremoves partial content and preserves it as context/stream.statusshows the preserved context file with preview/stream.write analysiscontinues from where interrupted (don't restart!)
Context Preservation:
When repair runs, incomplete content is saved to a .context file:
report.analysis.context # Contains the incomplete content
This allows Claude to:
- Review what was being written
- Continue coherently from where interrupted
- Not waste tokens regenerating already-written content
Scenario 2: Session ended between sections
All written sections have both markers:
<!-- SECTION_END: background | hash:e5f6g7h8 -->
Recovery:
/stream.resumefinds next pending section- Continue with
/stream.write
Scenario 3: Hash mismatch detected
START and END hashes don't match (content corrupted during write):
<!-- SECTION_START: analysis | hash:a1b2c3d4 -->
...
<!-- SECTION_END: analysis | hash:x9y8z7w6 -->
Recovery:
/stream.status --verifyflags hash mismatch/stream.repair analysis --strategy remove/stream.write analysisregenerates
Scenario 4: Context compaction during heredoc append (what to avoid)
Problem: Using cat >> file << 'EOF' without streaming-output markers:
# DON'T DO THIS for long documents
cat >> spec.md << 'EOF'
## Section 12
Content...
EOF
If context compaction occurs, the heredoc may be split, causing:
- Partial content written
- No markers to detect corruption
- No way to identify resume point
Prevention: Always use streaming-output for documents >1000 lines.
B-SPEC Template
For B-SPEC documents, use the built-in template:
/stream.init b-spec-010-llm-integration.md --template bspec
This creates the standard 15-section structure:
stream_plan:
version: "2.0"
template: bspec
sections:
- id: overview
status: pending
hash: null
- id: architecture
status: pending
hash: null
- id: section-03 # Domain-specific
status: pending
hash: null
- id: section-04
status: pending
hash: null
- id: section-05
status: pending
hash: null
- id: section-06
status: pending
hash: null
- id: section-07
status: pending
hash: null
- id: section-08
status: pending
hash: null
- id: section-09
status: pending
hash: null
- id: section-10
status: pending
hash: null
- id: section-11
status: pending
hash: null
- id: database-schema
status: pending
hash: null
- id: api-specification
status: pending
hash: null
- id: implementation-guide
status: pending
hash: null
- id: appendices
status: pending
hash: null
Workflow Checklist
Copy and track progress:
Stream Progress: [document-name]
- [ ] Initialize file with section plan
- [ ] Write each section (one at a time):
- [ ] Section 1: ___________
- [ ] Section 2: ___________
- [ ] Section 3: ___________
- [ ] ...
- [ ] Run status --verify to check integrity
- [ ] Repair any corrupted sections
- [ ] Finalize to strip markers
Context-Aware Resume
When context compaction interrupts a section write, the system preserves your work:
Automatic Context Preservation
- During repair: Incomplete content is saved to
<file>.<section>.context - On status check: Context files are detected and previewed
- When resuming: Review the context file to continue coherently
Resume Workflow
# 1. Check status and see context
python scripts/stream_status.py report.md
# Output includes:
# 📝 Context files (from previous incomplete writes):
# analysis: report.analysis.context (2847 bytes)
# Preview (last 500 chars):
# | The normalization formula uses...
# | This ensures that all criteria...
# 2. Read the full context if needed
cat report.analysis.context
# 3. Continue writing (DON'T restart from scratch)
# Your content should pick up where the context file ended
Important: Continue, Don't Restart
When a context file exists:
- DO: Read it, understand where you left off, continue from that point
- DON'T: Ignore it and regenerate the entire section from scratch
This saves significant tokens and maintains coherence.
Best Practices
- Plan sections upfront: Define all sections before starting
- One section at a time: Write, verify, then proceed
- Check status often: Especially after interruptions or compaction
- Keep sections reasonable: 500-2000 words per section works well
- Save context: Don't hold generated content in memory; write immediately
- Use --verify flag: Run
/stream.status --verifyafter resuming - Never skip repair: If corruption is detected, repair before continuing
- Use templates: For known document types like B-SPECs, use built-in templates
- Review context files: When resuming, always check for and use
.contextfiles
Anti-Patterns to Avoid
| Anti-Pattern | Problem | Solution |
|---|---|---|
| Manual heredoc appends | No corruption detection | Use streaming-output |
| Skipping status checks | Miss corruption | Run status after each write |
| Ignoring hash mismatches | Propagate bad content | Repair immediately |
| Writing multiple sections at once | Can't identify failure point | One section at a time |
| Not using templates | Inconsistent structure | Use bspec template |
| Finalizing without verify | May include corrupted content | Always --verify first |
Integration with Continuation Prompts
When creating continuation prompts for long document generation:
- Explicitly state: "Use streaming-output skill for all document generation"
- Include status command: "Run
/stream.status <file> --verifyto check progress" - Document section plan: List all sections and their status
- Specify resume point: "Resume from section: X"
Example continuation prompt snippet:
## Document Generation Status
Using streaming-output skill for B-SPEC-010.
Current status:
- Sections 1-5: Complete ✓
- Section 6: Pending (resume here)
- Sections 7-15: Pending
Resume command: `/stream.resume b-spec-010.md`
Scripts Reference
| Script | Purpose | Usage |
|---|---|---|
stream_write.py |
Init and write operations | python scripts/stream_write.py <command> <args> |
stream_status.py |
Progress, verification, and resume detection | python scripts/stream_status.py <filepath> [--verify] [--resume] |
stream_repair.py |
Fix corrupted sections | python scripts/stream_repair.py <filepath> <section> [--strategy] |
stream_cleanup.py |
Finalize and strip markers | python scripts/stream_cleanup.py <filepath> [--output] |
Run any script with --help for detailed options.
Changelog
v2.1 (2026-01-03)
- Context preservation on repair: Incomplete content now saved to
.contextfiles - Context-aware status: Status command shows context files with previews
- Resume guidance: Clear instructions to continue from context, not restart
- Added "Context-Aware Resume" section with workflow guidance
- Updated recovery scenarios to emphasize context preservation
v2.0 (2026-01-03)
- Added
/stream.repaircommand for fixing corrupted sections - Added hash-based integrity checking for section markers
- Added
--verifyflag to status command - Added B-SPEC template (
--template bspec) - Added corruption detection (orphaned START, hash mismatch, empty sections)
- Added "Mandatory Use Cases" section
- Added "Anti-Patterns to Avoid" section
- Added "Integration with Continuation Prompts" guidance
- Improved recovery scenarios with specific commands
- Enhanced status output with integrity indicators
v1.0 (Original)
- Initial streaming output implementation
- Basic section markers
- Status and finalize commands
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
fishbone-diagram
Create comprehensive Fishbone (Ishikawa/Cause-and-Effect) diagrams for structured root cause brainstorming. Guides teams through problem definition, category selection (6Ms, 8Ps, 4Ss, or custom), cause identification, sub-cause drilling, prioritization via multi-voting, and 5 Whys integration. Generates visual SVG diagrams and professional HTML reports. Use when brainstorming potential causes, conducting root cause analysis, facilitating quality improvement sessions, analyzing defects or failures, structuring team problem-solving, or when user mentions "fishbone", "Ishikawa", "cause and effect diagram", "6Ms", "cause analysis", or "brainstorming causes".
streaming-output-mcp
Stream structured content to persistent SQLite storage with automatic session break recovery. Core principle: The content IS the state. Every stream_write is automatically persistent. Supports multi-format export (Markdown, HTML, JSON, YAML, CSV, Text) and 7 document templates. Commands: /stream-init, /stream-status, /stream-read, /stream-write, /stream-export. ALWAYS call stream_status after session breaks to check for resume_from and preserved_context.
fmea-analysis
Conduct Failure Mode and Effects Analysis (FMEA) for systematic identification and risk assessment of potential failures in designs, processes, or systems. Supports DFMEA (Design), PFMEA (Process), and FMEA-MSR (Monitoring & System Response). Uses AIAG-VDA 7-step methodology with Action Priority (AP) risk assessment replacing traditional RPN. Use when analyzing product designs for potential failures, evaluating manufacturing process risks, conducting proactive risk assessment, preparing for APQP/PPAP submissions, investigating field failures, or when user mentions "FMEA", "failure mode", "DFMEA", "PFMEA", "severity occurrence detection", "RPN", "Action Priority", "design risk analysis", or needs to identify and prioritize potential failure modes with their causes and effects.
problem-definition
Guide RCCA/8D problem definition using 5W2H and IS/IS NOT analysis. Transforms scattered failure data into precise, measurable problem statements that bound investigation scope without embedding cause or solution. Use when defining problems for root cause analysis, writing D2 sections of 8D reports, analyzing nonconformances, investigating failures, or when user mentions problem definition, problem statement, RCCA, 8D, failure analysis, or corrective action.
kepner-tregoe-analysis
Conduct Kepner-Tregoe (KT) Problem Solving and Decision Making (PSDM) analysis using the four rational processes - Situation Appraisal, Problem Analysis, Decision Analysis, and Potential Problem Analysis. Use when performing structured root cause analysis, making complex decisions, evaluating alternatives with weighted criteria, conducting IS/IS NOT specification analysis, anticipating implementation risks, troubleshooting complex issues, or when user mentions "Kepner-Tregoe", "KT method", "IS/IS NOT", "situation appraisal", "decision analysis", "MUSTS and WANTS", "potential problem analysis", or needs systematic problem-solving methodology. Includes specification matrices, decision scoring, quality rubrics, and professional report generation.
requirements-dev
This skill should be used when the user asks to "develop requirements", "formalize needs", "write requirements", "create a specification", "build traceability", "quality check requirements", "INCOSE requirements", "requirements development", "reqdev", or mentions requirements engineering, needs formalization, verification planning, traceability matrix, or systems engineering requirements. Even for casual phrases like "I need to write some reqs" or "let's formalize the needs", trigger this skill.
Didn't find tool you were looking for?