---
name: openspec-constitution-guard
description: This skill composes project AGENTS.md constitution files into openspec/config.yaml to inject quality validation gates into OpenSpec workflows. Use this skill when initializing openspec for the first time in a project or when AGENTS.md files are updated. The skill ensures openspec artifacts are validated against project-specific quality criteria from constitutions.
metadata:
author: cyberelf
version: "1.0"
---
# OpenSpec Constitution Guard
This skill ensures OpenSpec workflows enforce project-specific quality assurance criteria derived from AGENTS.md constitution files by injecting them into `openspec/config.yaml`.
## Purpose
OpenSpec workflows (`/opsx:apply`, `/opsx:verify`, `/opsx:archive`, etc.) include generic validation. This skill enriches them with **project-specific quality gates** extracted from AGENTS.md files across the workspace, ensuring all artifacts pass the project's defined testing and QA criteria before handoff.
## When to Use
Trigger this skill when:
- Initializing openspec for the first time in a project (`openspec init`)
- An AGENTS.md file is created, modified, or deleted in the project
- User explicitly requests to sync constitution quality gates with openspec config
- Validating that openspec configuration is up-to-date with constitution requirements
## Detection: When to Run
To detect if guards need composition:
1. Check if `openspec/config.yaml` exists
2. Look for `
# Context injected into ALL artifacts
context: |
[PROJECT-WIDE CONTEXT]
# Per-artifact validation rules
rules:
proposal:
- [PROPOSAL-SPECIFIC RULES]
specs:
- [SPECS-SPECIFIC RULES]
design:
- [DESIGN-SPECIFIC RULES]
tasks:
- [TASKS-SPECIFIC RULES]
# Constitution metadata
# Source Constitutions:
# - [List each AGENTS.md file path]
# Last Updated: [YYYY-MM-DD]
#
```
### Step 5: Update Configuration File
1. Check if `openspec/config.yaml` exists
- If not, create it with initial configuration
- If yes, read current content
2. Locate the `
# Context injected into ALL artifacts
context: |
Tech stack: Python (FastAPI, Pydantic), TypeScript (React, Node.js), PostgreSQL
Architecture: Service layer pattern - business logic in services/, API routes are thin
Type safety: Strict typing required (no Any/any types)
API style: RESTful with OpenAPI docs
Testing: pytest + React Testing Library
We value backwards compatibility for all public APIs
# Per-artifact validation rules
rules:
proposal:
- Include rollback plan for breaking changes
- Mark breaking changes with **BREAKING** prefix
- Identify affected teams/systems
- Verify alignment with service layer architecture
specs:
- Use Given/When/Then format for scenarios
- Document all edge cases and error conditions
- Reference existing patterns before proposing new ones
- Include API contract changes if applicable
design:
- Maintain service layer separation (logic in services/, not api/)
- Use Pydantic models for all new data structures
- Ensure strict typing (no Any types in Python/TypeScript)
- Document integration points with existing services
tasks:
- Include unit test tasks for all new service logic
- Include integration test tasks for API changes
- Add type checking verification tasks
- Include documentation update tasks
# Source Constitutions:
# - AGENTS.md
# - backend/AGENTS.md
# - frontend/AGENTS.md
# Last Updated: 2026-02-09
#
```
### Example: With Automated Check Commands
After reading constitutions with specific test commands:
```yaml
# openspec/config.yaml
schema: spec-driven
#
context: |
Tech stack: Python (uv, FastAPI), TypeScript (Vite, React), PostgreSQL
Automated checks required before completion:
- Python: uv run pytest, uv run ruff check ., uv run pyright .
- TypeScript: npm run lint, npm run tsc, npx playwright test
Architecture: Microservices with event-driven communication
All services must be independently deployable
rules:
proposal:
- Identify service boundaries affected
- Document event schema changes
- Include deployment strategy
- Consider backwards compatibility for events
specs:
- Document event payloads in Given/When/Then scenarios
- Include failure/retry scenarios
- Specify service dependencies
design:
- Show event flow diagrams for cross-service changes
- Use async/await patterns for I/O operations
- Maintain service independence
tasks:
- Before marking complete, run: uv run pytest (Python)
- Before marking complete, run: npm run lint && npm run tsc (TypeScript)
- Include E2E test tasks for cross-service scenarios
- Add event contract validation tasks
# Source Constitutions:
# - AGENTS.md
# - services/user/AGENTS.md
# - services/order/AGENTS.md
# Last Updated: 2026-02-09
#
```
### Example: Complex Multi-Stack Project
After reading constitutions from root, backend (Python), frontend (React), and mobile (Swift):
```yaml
# openspec/config.yaml
schema: spec-driven
#
context: |
Multi-platform project with shared API
Backend (Python):
- FastAPI + SQLAlchemy + Alembic
- Service layer required for all business logic
- Commands: uv run pytest, uv run ruff check ., uv run mypy .
Web Frontend (TypeScript/React):
- Vite + React + TanStack Query
- Commands: npm run lint, npm run type-check, npm test
Mobile (Swift):
- SwiftUI + Combine
- Commands: swift test, swiftlint
Shared API contracts documented in docs/api/
Zero tolerance for breaking changes without migration plan
rules:
proposal:
- Mark platform scope (backend/web/mobile/api)
- For API changes, document impact on all clients
- Include migration strategy for breaking changes
- Specify API versioning approach if needed
specs:
- Use platform-specific scenario tags: [Backend], [Web], [Mobile]
- Document API contract changes in OpenAPI format
- Include backwards compatibility scenarios
- Reference existing patterns from project codebase
design:
- Show component/service interaction diagrams
- Maintain service layer in backend (no logic in routes)
- Use proper state management patterns per platform
- Document data flow for cross-platform features
tasks:
- Group tasks by platform with clear labels
- Backend: Include pytest, ruff, mypy verification
- Web: Include lint, type-check, unit test tasks
- Mobile: Include SwiftLint and unit test tasks
- For API changes, include contract validation task
- Include platform-specific E2E test tasks
# Source Constitutions:
# - AGENTS.md
# - backend/AGENTS.md
# - frontend/AGENTS.md
# - mobile/AGENTS.md
# Last Updated: 2026-02-09
#
```
## Interpretation Guidelines
When reading AGENTS.md files with varying structures:
1. **Look for imperative language**: "MUST", "SHALL", "required", "always"
2. **Identify command patterns**: Anything in backticks that looks like a shell command
3. **Find success criteria**: Phrases like "zero errors", "all pass", "no warnings"
4. **Recognize stack indicators**: Framework names, file extensions, folder names
5. **Extract checklists**: Bullet points with checkboxes or numbered items
### Categorizing Extracted Information
**For Context (applies to all artifacts):**
- Technology stack descriptions
- Architectural principles
- Naming conventions
- Team practices
- Backwards compatibility requirements
- General coding standards
**For Rules (specific to artifacts):**
- Specific format requirements (e.g., "Use Given/When/Then")
- Required sections in artifacts
- Validation commands to run
- Architecture patterns to enforce
- Testing requirements
- Documentation standards
If a constitution section is ambiguous, interpret conservatively—include the check rather than omit it.
All constitution items should be derived from project AGENTS.md files only, **DO NOT** include OpenSpec's own AGENTS.md or any common sense or best practices from other materials.
## How OpenSpec Uses the Configuration
When an OpenSpec command generates or works with an artifact, your configuration is automatically injected:
### Context Injection (ALL artifacts)
```
Tech stack: Python (FastAPI, Pydantic), TypeScript (React, Node.js), PostgreSQL
Architecture: Service layer pattern - business logic in services/, API routes are thin
Type safety: Strict typing required (no Any/any types)
...
[Schema's built-in template for this artifact]
```
### Rules Injection (matching artifact only)
For `/opsx:continue proposal` or when generating a proposal:
```
- Include rollback plan for breaking changes
- Mark breaking changes with **BREAKING** prefix
- Identify affected teams/systems
- Verify alignment with service layer architecture
```
This ensures every artifact is generated with your project's specific requirements in mind.
## Related OpenSpec Commands
Understanding which commands work with which artifacts:
| Command | Purpose | Affected Artifacts |
|---------|---------|-------------------|
| `/opsx:new` | Start a change | Creates change directory |
| `/opsx:continue` | Create next artifact | proposal → specs → design → tasks |
| `/opsx:ff` | Fast-forward (create all planning) | proposal, specs, design, tasks |
| `/opsx:apply` | Implement tasks | Works from tasks.md |
| `/opsx:verify` | Validate implementation | Checks against all artifacts |
| `/opsx:sync` | Merge specs to main | Updates openspec/specs/ |
| `/opsx:archive` | Complete change | Finalizes and archives |
Your constitution rules in config.yaml affect the quality and validation of artifacts throughout this workflow.
## Maintenance
When updating guards:
1. Re-read all AGENTS.md files
2. Extract updated quality criteria
3. Locate the `