Agent skill
openspec-daem0n-bridge
Bridges OpenSpec (spec-driven development) with Daem0n-MCP memory - auto-imports specs, informs proposals with past outcomes, converts archived changes to learnings
Install this agent skill to your Project
npx add-skill https://github.com/aiskillstore/marketplace/tree/main/skills/dasblueyeddevil/openspec-daem0n-bridge
SKILL.md
OpenSpec-Daem0n Bridge
Overview
This skill creates a bidirectional bridge between:
- OpenSpec: Spec-driven development with formal change proposals
- Daem0n-MCP: AI memory system with semantic search and outcome tracking
The feedback loop:
OpenSpec specs ──────► Daem0n patterns/rules
▲ │
│ ▼
Future specs ◄────── Past outcomes/failures
Auto-Detection
On session start, after get_briefing():
Check if openspec/ directory exists in the project root:
ls openspec/specs/ 2>/dev/null
If OpenSpec detected AND specs not yet imported:
- Announce: "OpenSpec detected. Syncing specs to Daem0n memory..."
- Execute Workflow 1 (Import) automatically
- Report summary of imported specs and rules
How to check if already imported:
recall(topic="openspec", tags=["spec"], limit=1)
If results exist with recent timestamps, skip import.
Workflow 1: Import Specs to Memory
Triggers:
- Auto: OpenSpec directory detected on first session
- Manual: "sync specs to memory", "import openspec", "refresh openspec"
Steps
-
List all spec directories
bashls openspec/specs/ -
For each spec, read the spec.md file
bashcat openspec/specs/[name]/spec.md -
Parse requirements using these patterns:
Pattern Extract As MUST,SHALL,REQUIREDrule.must_do MUST NOT,SHALL NOT,PROHIBITEDrule.must_not SHOULD,RECOMMENDEDpattern SHOULD NOT,NOT RECOMMENDEDwarning ## Purposesectionpattern (overview) -
Create memories via remember_batch
mcp__daem0nmcp__remember_batch(memories=[ { "category": "pattern", "content": "[spec-name]: [overview/purpose summary]", "rationale": "OpenSpec specification - source of truth", "tags": ["openspec", "spec", "[spec-name]"], "file_path": "openspec/specs/[spec-name]/spec.md", "context": { "openspec_type": "spec", "imported_at": "[ISO timestamp]" } } // ... one per spec ]) -
Create rules from MUST/MUST NOT
mcp__daem0nmcp__add_rule( trigger="implementing [spec-name] feature", must_do=["[extracted MUST items]"], must_not=["[extracted MUST NOT items]"], ask_first=["Does this align with the spec?"] ) -
Report summary
Imported [N] specs as patterns Created [M] rules with [X] must_do and [Y] must_not constraints Use recall("openspec") to query
Memory Mapping Reference
| OpenSpec Element | Daem0n Category | Tags |
|---|---|---|
| spec.md overview | pattern | openspec, spec, [name] |
| MUST requirements | rule.must_do | (in rule, not memory) |
| MUST NOT constraints | rule.must_not | (in rule, not memory) |
| Known limitations | warning | openspec, limitation, [name] |
| Design rationale | learning | openspec, rationale, [name] |
Workflow 2: Inform Proposal Creation
Triggers:
- "prepare proposal for [feature]"
- "check before proposing [feature]"
- "what do I need to know before proposing [feature]"
Steps
-
Recall relevant memories
mcp__daem0nmcp__recall( topic="[feature description]", categories=["pattern", "warning", "decision"] ) -
Check applicable rules
mcp__daem0nmcp__check_rules( action="proposing change for [feature]" ) -
Recall OpenSpec-specific context
mcp__daem0nmcp__recall( topic="openspec [feature]", tags=["openspec"] ) -
If specific files are affected, check them
mcp__daem0nmcp__recall_for_file( file_path="openspec/specs/[affected-spec]/spec.md" ) -
Present findings to user in this format:
markdown# Memory Context for Proposal: [feature] ## Relevant Specs - [spec-name]: [summary] ## Patterns to Follow - [pattern 1] - [pattern 2] ## Warnings to Consider - [warning 1] (from past failure) ## Past Decisions That May Apply - [decision] - worked: [true/false] ## Rules to Follow When implementing this: - MUST: [list] - MUST NOT: [list] - ASK FIRST: [list] -
If user proceeds, record the intent
mcp__daem0nmcp__remember( category="decision", content="Creating OpenSpec proposal for [feature]: [brief description]", rationale="[user's stated rationale]", tags=["openspec", "proposal", "pending"], context={ "openspec_type": "proposal", "feature": "[feature]", "change_id": "[generated-id or TBD]" } )SAVE THE MEMORY ID - needed for Workflow 3.
Workflow 3: Archive to Learnings
Triggers:
- After
openspec archive [id]completes - "record outcome for [change-id]"
- "convert archived change [id] to learnings"
Steps
-
Read the archived change
bashcat openspec/changes/archive/[id]/proposal.md cat openspec/changes/archive/[id]/tasks.md ls openspec/changes/archive/[id]/specs/ -
Find the original decision memory
mcp__daem0nmcp__search_memories( query="OpenSpec proposal [id]" )Or search by feature name if ID wasn't recorded.
-
Record the outcome
mcp__daem0nmcp__record_outcome( memory_id=[found decision id], outcome="Completed and archived. [summary of what was implemented]", worked=true // or false if there were issues ) -
Create learnings from the completed work
mcp__daem0nmcp__remember_batch(memories=[ { "category": "learning", "content": "[change-id]: [key lesson from implementation]", "rationale": "Extracted from completed OpenSpec change", "tags": ["openspec", "completed", "[feature-name]"], "context": { "openspec_type": "archived_change", "change_id": "[id]", "archived_at": "[timestamp]" } } // ... one learning per significant insight ]) -
Link the memories to create causal chain
mcp__daem0nmcp__link_memories( source_id=[proposal decision id], target_id=[learning id], relationship="led_to", description="Proposal implementation led to these learnings" ) -
If spec deltas were applied, update spec memories
For each delta in
openspec/changes/archive/[id]/specs/:- ADDED requirements: Create new pattern memories
- MODIFIED requirements: Update or supersede existing
- REMOVED requirements: Create warning memories noting removal
Tags Convention
| Tag | Meaning | When Used |
|---|---|---|
openspec |
Memory from OpenSpec integration | All OpenSpec memories |
spec |
From spec.md source of truth | Workflow 1 |
proposal |
From change proposal | Workflow 2 |
pending |
Proposal not yet archived | Workflow 2 |
completed |
From archived change | Workflow 3 |
limitation |
Known constraint | Workflow 1 |
rationale |
Design reasoning | Workflow 1 |
Integration with Sacred Covenant
This skill respects the Daem0n's Sacred Covenant:
- COMMUNE -
get_briefing()must be called first (auto-detection happens after) - SEEK COUNSEL - Workflow 2 IS the counsel-seeking step for proposals
- INSCRIBE -
remember()records proposal decisions - SEAL -
record_outcome()closes the loop when changes are archived
Enforcement:
- Workflow 1 (Import) requires communion (get_briefing called)
- Workflow 2 (Inform) calls context_check internally
- Workflow 3 (Archive) requires the original decision memory to exist
Parsing OpenSpec Spec Files
Spec Format Reference
# [Spec Title]
## Purpose
[Description - extract as pattern overview]
## Requirements
### Requirement: [Name]
[Text containing MUST/MUST NOT/SHOULD]
#### Scenario: [Description]
- **GIVEN** [condition]
- **WHEN** [action]
- **THEN** [result]
Extraction Regex Patterns
MUST requirements: /(?:MUST|SHALL|REQUIRED):\s*(.+)/gi
MUST NOT constraints: /(?:MUST NOT|SHALL NOT|PROHIBITED):\s*(.+)/gi
SHOULD patterns: /(?:SHOULD|RECOMMENDED):\s*(.+)/gi
SHOULD NOT warnings: /(?:SHOULD NOT|NOT RECOMMENDED):\s*(.+)/gi
Spec Delta Format
## ADDED
### Requirement: [New requirement]
## MODIFIED
### Requirement: [Changed requirement]
## REMOVED
- Requirement: [Removed name]
## RENAMED
FROM: ### Requirement: OldName
TO: ### Requirement: NewName
Example Session
[Session starts]
User: Let's work on the authentication feature
Claude: [Calls get_briefing()]
[Detects openspec/ directory]
OpenSpec detected. Syncing specs to Daem0n memory...
Imported 5 specs as patterns:
- authentication (3 MUST, 2 MUST NOT)
- api-endpoints (5 MUST, 1 MUST NOT)
- error-handling (2 MUST)
- ...
Created 5 rules for spec enforcement.
User: I want to propose adding OAuth support
Claude: [Workflow 2: Inform]
Querying memory before proposal...
# Memory Context for Proposal: OAuth support
## Relevant Specs
- authentication: "All auth must be stateless for scaling"
## Warnings
- Previous session-based auth was rejected (worked=false)
## Rules
MUST: Use JWT tokens, Support token refresh
MUST NOT: Store sessions server-side
Shall I proceed with recording this proposal intent?
User: Yes, proceed
Claude: [Records decision with openspec/proposal/pending tags]
Recorded. Memory ID: 1847
Now create your proposal at openspec/changes/add-oauth-support/
[Later, after implementation]
User: I've archived the OAuth change, record it
Claude: [Workflow 3: Archive]
Reading openspec/changes/archive/add-oauth-support/...
Recording outcome for decision #1847...
- Outcome: Completed successfully with OAuth2 + PKCE
- Worked: true
Created 2 learnings:
- OAuth2 PKCE flow works well for SPAs
- Token refresh needs 5-minute buffer
Linked proposal -> learnings via "led_to"
The Daem0n will remember this for future auth work.
Troubleshooting
"No OpenSpec specs found"
Check that openspec/specs/ directory exists and contains spec directories.
"Already imported" but specs are stale
Use "refresh openspec" to force re-import. Old memories will be superseded.
"Can't find proposal decision"
Search with broader terms:
mcp__daem0nmcp__search_memories(query="[feature keywords]", tags=["openspec"])
Rules not matching
Check rule triggers match your action descriptions:
mcp__daem0nmcp__list_rules()
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
perigon-backend
Perigon ASP.NET Core + EF Core + Aspire conventions
perigon-agent
Pointers for Copilot/agents to apply Perigon conventions
perigon-angular
Angular 21+ standalone/Material/signal conventions for Perigon WebApp
fastapi-mastery
Comprehensive FastAPI development skill covering REST API creation, routing, request/response handling, validation, authentication, database integration, middleware, and deployment. Use when working with FastAPI projects, building APIs, implementing CRUD operations, setting up authentication/authorization, integrating databases (SQL/NoSQL), adding middleware, handling WebSockets, or deploying FastAPI applications. Triggered by requests involving .py files with FastAPI code, API endpoint creation, Pydantic models, or FastAPI-specific features.
context7-efficient
Token-efficient library documentation fetcher using Context7 MCP with 86.8% token savings through intelligent shell pipeline filtering. Fetches code examples, API references, and best practices for JavaScript, Python, Go, Rust, and other libraries. Use when users ask about library documentation, need code examples, want API usage patterns, are learning a new framework, need syntax reference, or troubleshooting with library-specific information. Triggers include questions like "Show me React hooks", "How do I use Prisma", "What's the Next.js routing syntax", or any request for library/framework documentation.
browser-use
Browser automation using Playwright MCP. Navigate websites, fill forms, click elements, take screenshots, and extract data. Use when tasks require web browsing, form submission, web scraping, UI testing, or any browser interaction.
Didn't find tool you were looking for?