Generates implementation specifications from conversation context optionally enriched with GitHub issue data
Generates implementation specifications from conversation context, optionally enriched with GitHub issue data. Use `/fractary-spec:create` to trigger, which bypasses the agent layer to preserve full planning discussions in specs.
/plugin marketplace add fractary/claude-plugins/plugin install fractary-spec@fractaryThis skill inherits all available tools. When active, it can use any tool Claude has access to.
docs/spec-format-guide.mdscripts/check-existing-specs.shscripts/fetch-issue.shscripts/generate-spec.shscripts/link-to-issue.shtemplates/spec-api.md.templatetemplates/spec-basic.md.templatetemplates/spec-bug.md.templatetemplates/spec-feature.md.templatetemplates/spec-infrastructure.md.templateworkflow/generate-from-context.mdYou are invoked directly by the /fractary-spec:create command to preserve full conversation context. This bypasses the agent layer to ensure planning discussions are captured in specs.
</CONTEXT>
<CRITICAL_RULES>
workflow/generate-from-context.md workflow{
"work_id": "123", // Optional: link to issue and enrich with issue data (auto-detected from branch if omitted)
"template": "basic|feature|infrastructure|api|bug", // Optional: override auto-detection
"context": "Explicit additional context", // Optional: extra context to consider
"force": false // Optional: force creation even if spec already exists (default: false)
}
Auto-Detection: If work_id is not provided, automatically attempt to read from repo plugin's git status cache to detect issue ID from current branch name (e.g., feat/123-name ā 123). If repo plugin not found or no issue detected, creates standalone spec.
Graceful Degradation: Missing work_id + no repo plugin = standalone spec (SPEC-{timestamp}-* naming).
Idempotency: If spec(s) already exist for the work_id and force is false, skip creation and return existing spec info. Use force: true to create additional specs.
</INPUTS>
Follow workflow/generate-from-context.md for detailed step-by-step instructions.
High-level process:
<COMPLETION_CRITERIA> You are complete when:
Additional criteria for context-based mode:
See: plugins/faber/docs/RESPONSE-FORMAT.md for complete specification.
Output structured messages:
Start:
šÆ STARTING: Spec Generator
Work ID: #123 (auto-detected from branch: feat/123-name) [or "not detected" or "provided"]
Template: feature (auto-detected) [or "override: feature"]
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
During execution, log key steps:
End:
ā
COMPLETED: Spec Generator
Spec created: /specs/WORK-00123-user-auth.md
Template used: feature
Source: Conversation + Issue #123
GitHub comment: ā Added
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Next: Begin implementation using spec as guide
Success Response (with work_id):
{
"status": "success",
"message": "Specification generated: WORK-00123-user-auth.md",
"details": {
"spec_path": "/specs/WORK-00123-user-auth.md",
"work_id": "123",
"issue_url": "https://github.com/org/repo/issues/123",
"template": "feature",
"source": "conversation+issue",
"github_comment_added": true
}
}
Success Response (standalone):
{
"status": "success",
"message": "Specification generated: SPEC-20250115143000-user-auth.md",
"details": {
"spec_path": "/specs/SPEC-20250115143000-user-auth.md",
"template": "feature",
"source": "conversation",
"github_comment_added": false
}
}
Skipped Response (Spec Already Exists):
{
"status": "skipped",
"message": "Specification already exists for issue #123",
"details": {
"work_id": "123",
"existing_specs": [
"/specs/WORK-00123-user-auth.md"
],
"existing_spec_count": 1,
"action": "read_existing"
},
"hint": "Use --force to create additional spec"
}
Output for skipped:
šÆ STARTING: Spec Generator
Work ID: #123 (auto-detected from branch)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā¹ Existing spec(s) found for issue #123:
1. /specs/WORK-00123-user-auth.md
ā Reading existing specification(s)...
ā Spec context loaded into session
ā SKIPPED: Spec already exists
Existing spec: /specs/WORK-00123-user-auth.md
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Hint: Use --force to create additional spec
Warning Response (Issue Data Incomplete):
{
"status": "warning",
"message": "Specification generated with incomplete issue data",
"details": {
"spec_path": "/specs/WORK-00123-user-auth.md",
"work_id": "123",
"template": "feature",
"completeness_score": 0.75
},
"warnings": [
"Issue description is empty - using conversation context only",
"No acceptance criteria defined in issue"
],
"warning_analysis": "The spec was generated but may be incomplete because the issue lacks detailed requirements",
"suggested_fixes": [
"Add description to issue #123",
"Add acceptance criteria to issue",
"Review generated spec and add missing sections"
]
}
Failure Response (Issue Not Found):
{
"status": "failure",
"message": "Failed to generate spec - issue #999 not found",
"details": {
"work_id": "999"
},
"errors": [
"Issue #999 does not exist in repository"
],
"error_analysis": "The specified work_id does not correspond to an existing issue",
"suggested_fixes": [
"Verify issue number is correct",
"Create the issue first: /work:issue-create",
"Generate standalone spec without work_id"
]
}
Failure Response (Write Failed):
{
"status": "failure",
"message": "Failed to write spec file",
"details": {
"spec_path": "/specs/WORK-00123-user-auth.md"
},
"errors": [
"Permission denied: /specs/WORK-00123-user-auth.md"
],
"error_analysis": "Unable to write to the specs directory - permission or path issue",
"suggested_fixes": [
"Check /specs directory exists",
"Verify write permissions",
"Run: mkdir -p specs"
]
}
</OUTPUTS>
<ERROR_HANDLING> Handle errors using the standard FABER response format:
Error Response Format:
{
"status": "failure",
"message": "Brief description of failure",
"details": {
"operation": "generate-spec",
"work_id": "123"
},
"errors": [
"Specific error 1",
"Specific error 2"
],
"error_analysis": "Root cause explanation",
"suggested_fixes": [
"Actionable fix 1",
"Actionable fix 2"
]
}
</ERROR_HANDLING>
<DOCUMENTATION> Document your work by: 1. Creating spec with complete frontmatter 2. Commenting on GitHub issue 3. Logging all steps 4. Returning structured output </DOCUMENTATION>Creating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems. Create original algorithmic art rather than copying existing artists' work to avoid copyright violations.
Applies Anthropic's official brand colors and typography to any sort of artifact that may benefit from having Anthropic's look-and-feel. Use it when brand colors or style guidelines, visual formatting, or company design standards apply.
Create beautiful visual art in .png and .pdf documents using design philosophy. You should use this skill when the user asks to create a poster, piece of art, design, or other static piece. Create original visual designs, never copying existing artists' work to avoid copyright violations.