skills/sdd-propose/SKILL.md
Creates a change proposal with clear intent, defined scope, and technical approach. Trigger: /sdd-propose <change-name>, create proposal, define change scope, sdd proposal.
npx skillsauth add fearovex/claude-config sdd-proposeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Creates a change proposal with clear intent, defined scope, and technical approach.
Triggers: /sdd-propose <change-name>, create proposal, define change, sdd proposal
The proposal defines the WHAT and WHY before entering into technical details. It is the scope contract of the change. Without an approved proposal, there are no specs or design.
For substantial proposals (cross-team scope, multiple stakeholders, or
user-facing product changes), optionally pair the proposal with a PRD using
docs/templates/prd-template.md. The
PRD captures problem statement, target users, user stories, NFRs, and
acceptance criteria — feeding directly into the sdd-spec phase. Skip the
PRD for internal refactors or single-stakeholder changes.
When the orchestrator launches this sub-agent, it resolves the skill path using:
1. .claude/skills/sdd-propose/SKILL.md (project-local — highest priority)
2. ~/.claude/skills/sdd-propose/SKILL.md (global catalog — fallback)
Project-local skills override the global catalog. See docs/SKILL-RESOLUTION.md for the full algorithm.
Follow skills/_shared/sdd-phase-common.md Section F (Project Context Load). Non-blocking.
This step is non-blocking: any failure (missing directory, unreadable file, no match) MUST produce at most an INFO-level note in the output. This step MUST NOT produce status: blocked or status: failed on its own.
List candidate files: list all .md files in ai-context/features/. Exclude _template.md and any file whose name begins with an underscore (_). If the directory does not exist or is empty after exclusions, skip this step silently and proceed to Step 1.
Apply the filename-stem matching heuristic:
<change-name> on hyphens (-) to obtain stems..md).<change-name> OR any change-name stem appears anywhere in the domain slug (case-insensitive comparison).Load matching files: for each file that matches, read its full contents and treat them as enrichment context for proposal authoring. If multiple files match, load all of them. If a file cannot be read (e.g. permissions issue), log an INFO note and continue — do not block.
If no file matches: skip silently. Proceed to Step 1 without error or warning.
When files are loaded: note the loaded paths in the Step 6 output summary and include them in the artifacts list (marked as read, not written).
Algorithm reference:
stems = change_name.split("-").filter(s => s.length > 1)
for each feature_file in ai-context/features/ (excluding _ prefix files):
domain = feature_file.stem (filename without .md)
if domain in change_name OR any stem in domain -> match
Examples:
add-payments-gateway -> stems [add, payments, gateway] -> matches features/payments.mdauth-token-refresh -> stems [auth, token, refresh] -> matches features/auth.mdimprove-project-audit -> stems [improve, project, audit] -> no match -> skip silentlyFollow skills/_shared/sdd-phase-common.md Section G (Spec Context Preload). Non-blocking.
I load the exploration artifact from engram:
mem_search(query: "sdd/{change-name}/explore") → mem_get_observation(id) for full content.If ai-context/architecture.md exists, I consult it for coherence.
If the request is ambiguous, I ask:
Before writing the proposal, I scan for replacement/removal intent:
## Branch Diff, ## Prior Attempts, and ## Contradiction Analysis sections:
mem_search(query: "sdd/{change-name}/explore") → mem_get_observation(id).## Context Notes in the proposal for patterns: "remove X", "no longer X", "delete X", "replace X with Y".## Supersedes section:
"None — this is a purely additive change."### REMOVED, ### REPLACED, or ### CONTRADICTED subsections as appropriate.MUST_RESOLVE warning and pause for user confirmation.I persist the proposal artifact to engram:
Call mem_save with topic_key: sdd/{change-name}/proposal, type: architecture, project: {project}, content = full proposal markdown. Do NOT write any file.
If Engram MCP is not reachable: skip persistence. Return proposal content inline only.
Content format:
# Proposal: [change-name]
Date: [YYYY-MM-DD]
Status: Draft
## Intent
[One clear sentence: what problem it solves or what need it covers]
## Motivation
[Why this is necessary now. Business or technical context.]
## Supersedes
[ALWAYS present — even if nothing is superseded. If purely additive: "None — this is a purely additive change."]
### REMOVED (if applicable)
- **[Feature or component name]** (`path/to/file`)
Reason: [why it is being removed]
### REPLACED (if applicable)
| Old | New | Reason |
|-----|-----|--------|
| [old feature] | [new feature] | [why] |
### CONTRADICTED (if applicable)
- **[Feature or behavior]**: prior context says "[X]", this proposal says "[NOT X]"
Resolution: [contract superseded / breaking change / deprecation period / stakeholder coordination required]
## Scope
### Included
- [deliverable 1]
- [deliverable 2]
- [deliverable 3]
### Excluded (explicitly out of scope)
- [what will NOT be done and why]
## Proposed Approach
[High-level description of the technical solution.
Does not go into implementation detail — that is the design's job.
Explains the "how" at a conceptual level.]
## Affected Areas
| Area/Module | Type of Change | Impact |
| ----------- | -------------------- | --------------- |
| [area] | New/Modified/Removed | Low/Medium/High |
## Risks
| Risk | Probability | Impact | Mitigation |
| ------ | --------------- | --------------- | ----------------- |
| [risk] | Low/Medium/High | Low/Medium/High | [how to mitigate] |
## Rollback Plan
[How to revert if something goes wrong.
Must be concrete: which files, which commands, which steps.]
## Dependencies
- [What must exist/be completed before starting]
- [Changes in other parts of the system that this requires]
## Success Criteria
- [ ] [measurable and verifiable criterion 1]
- [ ] [measurable and verifiable criterion 2]
- [ ] [measurable and verifiable criterion 3]
## Effort Estimate
[Low (hours) / Medium (1-2 days) / High (several days)]
This step is non-blocking: if no conversation context is available, skip silently.
## Context Notes in proposal for:
## Context section to proposal:## Context
Recorded from conversation at [YYYY-MM-DDTHH:MMZ]:
### Explicit Intents
- **[intent]**: [exact wording or paraphrase from user]
### Platform Constraints
- **[constraint]**: [description]
### Provisional Notes
- **[note]**: [description and condition]
## Context section.This step is non-blocking: only runs if contradictions were detected in exploration.
## Contradiction Analysis section:
mem_search(query: "sdd/{change-name}/explore") → mem_get_observation(id) → extract section.## Contradiction Resolution section to proposal documenting each one and its resolution approach:## Contradiction Resolution
### [Feature or behavior name]
**Prior context**: [what the prior spec or archived change said]
**This proposal**: [what this change intends to do instead]
**Resolution approach**: [one of: contract superseded / breaking change with migration / deprecation period / stakeholder coordination required]
## Risks instead.I return a clear executive summary:
Proposal created: [change-name]
Intent: [one line]
Scope: [N deliverables included, M excluded]
Approach: [one line]
Risk: Low/Medium/High
Next step: specs + design (can run in parallel)
{
"status": "ok|warning|blocked",
"summary": "Proposal [name]: [intent in one line]. Risk [level].",
"artifacts": ["engram:sdd/{change-name}/proposal"],
"next_recommended": ["sdd-spec", "sdd-design"],
"risks": ["[main risk if any]"]
}
sdd-designbusiness
Turns an already-investigated customer issue into a short, non-technical engineering-to-CS brief: one natural message that leads with the finding (root cause, real scope, open question), ready to paste into Slack for the support team. Trigger: /support-brief, support brief, brief for support, resumen soporte.
development
Parks the current Claude Code session before going to sleep. Analyzes the conversation, writes a handoff document to docs/handoffs/ in the current project, mirrors the same summary to engram tagged with the session ID, and prints the exact `claude --resume <id>` command for tomorrow. Zero interaction — runs end-to-end on a single invocation. Trigger: /night-park, night park, park session, me voy a dormir, guardar sesion.
testing
Interactive creator for a project feature: scaffolds the domain knowledge markdown at ai-context/features/<slug>.md AND the antenna skill at .claude/skills/<slug>/SKILL.md, both from the canonical templates. Also registers the antenna in the project's CLAUDE.md. Trigger: /feature-define <name>, define feature, documentar funcionalidad, nueva feature.
data-ai
Generates a short, non-technical, informal English summary of an already-investigated customer issue, ready to paste into Slack/email for support, CX, or ops teammates. Trigger: /customer-summary, customer summary, resumir customer issue, slack summary.