| name | openspec-context-loading |
| description | Loads project context, lists existing specs and changes, searches capabilities and requirements. Use when user asks about project state, existing specs, active changes, available capabilities, or needs context discovery. Triggers include "openspec context", "what specs exist", "show changes", "list capabilities", "project context", "find specs", "what's in the spec", "show me specs". |
Specification Context Loading
Discovers and loads project specifications, active changes, and requirements to provide context.
Quick Start
Context loading helps answer:
- What specs exist in this project?
- What changes are currently active?
- What requirements are defined?
- What capabilities does the system have?
- Where is a specific feature specified?
Basic pattern: Search → Read → Summarize
Discovery Commands
List All Specifications
find spec/specs -name "spec.md" -type f
find spec/specs -mindepth 1 -maxdepth 1 -type d
tree spec/specs/
ls -R spec/specs/
Output format:
spec/specs/
├── authentication/
│ └── spec.md
├── billing/
│ └── spec.md
└── notifications/
└── spec.md
List Active Changes
find spec/changes -maxdepth 1 -type d -not -path "spec/changes" -not -path "*/archive" | sort
find spec/changes -maxdepth 1 -type d -not -path "spec/changes" -not -path "*/archive" -exec ls -ld {} \;
find spec/changes -maxdepth 1 -type d -not -path "spec/changes" -not -path "*/archive" | wc -l
List Archived Changes
ls -1 spec/archive/
ls -la spec/archive/
find spec/archive/ -maxdepth 1 -type d -mtime -7
Search for Requirements
grep -r "### Requirement:" spec/specs/
grep "### Requirement:" spec/specs/authentication/spec.md
grep -h "### Requirement:" spec/specs/**/*.md | sed 's/### Requirement: //' | sort
Search for Scenarios
grep -r "#### Scenario:" spec/specs/
for spec in spec/specs/**/spec.md; do
count=$(grep -c "#### Scenario:" "$spec")
echo "$spec: $count scenarios"
done
Search by Keyword
grep -r -i "authentication" spec/specs/
grep -B 1 -A 5 -i "password" spec/specs/**/*.md | grep -A 5 "### Requirement:"
grep -B 1 -A 10 -i "error" spec/specs/**/*.md | grep -A 10 "#### Scenario:"
Common Queries
Query 1: "What specs exist?"
find spec/specs -mindepth 1 -maxdepth 1 -type d -exec basename {} \;
for cap in spec/specs/*/; do
name=$(basename "$cap")
count=$(grep -c "### Requirement:" "$cap/spec.md" 2>/dev/null || echo "0")
echo "$name: $count requirements"
done
Response format:
## Existing Specifications
The project has specifications for the following capabilities:
- **authentication**: 8 requirements
- **billing**: 12 requirements
- **notifications**: 5 requirements
Total: 3 capabilities, 25 requirements
Query 2: "What changes are active?"
for change in spec/changes/*/; do
if [ "$change" != "spec/changes/archive/" ]; then
id=$(basename "$change")
echo "=== $id ==="
head -n 20 "$change/proposal.md" | grep -A 3 "## Why"
fi
done
Response format:
## Active Changes
Currently active changes:
### add-user-auth
**Why**: Users need secure authentication...
### update-billing-api
**Why**: Payment processing requires v2 API...
Total: 2 active changes
Query 3: "Show me the authentication spec"
cat spec/specs/authentication/spec.md
echo "Requirements:"
grep "### Requirement:" spec/specs/authentication/spec.md
echo "\nScenarios:"
grep "#### Scenario:" spec/specs/authentication/spec.md
Response format:
## Authentication Specification
(Include full content of spec.md)
Summary:
- 8 requirements
- 16 scenarios
- Last modified: [date from git log]
Query 4: "Find specs about password"
grep -r -i "password" spec/specs/ -A 5
grep -r -i "password" spec/specs/ -l
Response format:
## Specs Mentioning "Password"
Found in:
- spec/specs/authentication/spec.md (3 requirements)
- spec/specs/security/spec.md (1 requirement)
Relevant requirements:
### Requirement: Password Validation
### Requirement: Password Reset
### Requirement: Password Strength
Query 5: "What's in change X?"
CHANGE_ID="add-user-auth"
echo "=== Proposal ==="
cat spec/changes/$CHANGE_ID/proposal.md
echo "\n=== Tasks ==="
cat spec/changes/$CHANGE_ID/tasks.md
echo "\n=== Spec Deltas ==="
find spec/changes/$CHANGE_ID/specs -name "*.md" -exec echo "File: {}" \; -exec cat {} \;
Dashboard View
Create a comprehensive project overview:
#!/bin/bash
echo "=== Specification Dashboard ==="
echo ""
echo "## Capabilities"
CAPS=$(find spec/specs -mindepth 1 -maxdepth 1 -type d | wc -l)
echo "Total capabilities: $CAPS"
for cap in spec/specs/*/; do
name=$(basename "$cap")
reqs=$(grep -c "### Requirement:" "$cap/spec.md" 2>/dev/null || echo "0")
echo " - $name: $reqs requirements"
done
echo ""
echo "## Requirements"
TOTAL_REQS=$(grep -r "### Requirement:" spec/specs/ | wc -l)
TOTAL_SCENARIOS=$(grep -r "#### Scenario:" spec/specs/ | wc -l)
echo "Total requirements: $TOTAL_REQS"
echo "Total scenarios: $TOTAL_SCENARIOS"
echo "Avg scenarios per requirement: $(echo "scale=1; $TOTAL_SCENARIOS/$TOTAL_REQS" | bc)"
echo ""
echo "## Changes"
ACTIVE=$(find spec/changes -maxdepth 1 -type d -not -path "spec/changes" -not -path "*/archive" | wc -l)
ARCHIVED=$(ls -1 spec/archive/ | wc -l)
echo "Active changes: $ACTIVE"
echo "Archived changes: $ARCHIVED"
echo ""
echo "## Recent Activity"
echo "Recently modified specs:"
find spec/specs -name "spec.md" -type f -exec ls -lt {} \; | head -5
Response format:
# Specification Dashboard
## Capabilities
Total capabilities: 3
- authentication: 8 requirements
- billing: 12 requirements
- notifications: 5 requirements
## Requirements
Total requirements: 25
Total scenarios: 52
Avg scenarios per requirement: 2.1
## Changes
Active changes: 2
Archived changes: 15
## Recent Activity
Recently modified specs:
- spec/specs/billing/spec.md (2 days ago)
- spec/specs/authentication/spec.md (1 week ago)
Advanced Queries
Find Related Requirements
grep -r "User Login" spec/specs/ -A 10 | grep "### Requirement:"
grep -r "See Requirement:" spec/specs/
Analyze Coverage
for spec in spec/specs/**/spec.md; do
awk '/### Requirement:/ {req=$0; getline; if ($0 !~ /#### Scenario:/) print req}' "$spec"
done
grep -A 5 "#### Scenario:" spec/specs/**/*.md | grep -v "GIVEN\|WHEN\|THEN"
Compare Active vs Archive
echo "Archive history:"
ls -1 spec/archive/ | head -10
echo "Recent archives (last 30 days):"
find spec/archive/ -maxdepth 1 -type d -mtime -30 -exec basename {} \;
Search Patterns
Pattern 1: Capability Discovery
User asks: "What can the system do?"
find spec/specs -mindepth 1 -maxdepth 1 -type d -exec basename {} \;
for cap in spec/specs/*/; do
echo "=== $(basename $cap) ==="
grep "### Requirement:" "$cap/spec.md" | head -3
done
Pattern 2: Feature Search
User asks: "Is there a spec for password reset?"
grep -r -i "password reset" spec/specs/ -B 1 -A 10
grep -B 1 -A 20 "Requirement:.*Password Reset" spec/specs/**/*.md
Pattern 3: Change Tracking
User asks: "What's being worked on?"
for change in spec/changes/*/; do
if [ "$change" != "spec/changes/archive/" ]; then
id=$(basename "$change")
echo "$id:"
test -f "$change/IMPLEMENTED" && echo " Status: Implemented" || echo " Status: In Progress"
echo " Tasks: $(grep -c "^[0-9]\+\." "$change/tasks.md")"
fi
done
Best Practices
Pattern 1: Provide Context Before Details
Good flow:
1. Show dashboard (high-level overview)
2. User asks about specific capability
3. Show that capability's requirements
4. User asks about specific requirement
5. Show full requirement with scenarios
Pattern 2: Use Grep Efficiently
grep -r "### Requirement:" spec/specs/ | grep -i "auth"
grep -B 2 -A 10 "#### Scenario:" spec/specs/authentication/spec.md
Pattern 3: Aggregate Information
Don't just dump file contents. Summarize:
**Bad**: (dump entire spec file)
**Good**:
"The authentication spec has 8 requirements covering:
- User login
- Password management
- Session handling
- Multi-factor authentication
Would you like details on any specific requirement?"
Anti-Patterns to Avoid
Don't:
- Read entire spec files without user request
- List every single requirement by default
- Show raw grep output without formatting
- Assume user knows capability names
Do:
- Start with high-level overview
- Ask which area user wants to explore
- Format output clearly
- Provide navigation hints
Reference Materials
Token budget: This SKILL.md is approximately 460 lines, under the 500-line recommended limit.