Init specs
Skill datamaker-kr/synapse-claude-marketplace/dist/opencode/sdd-helper/.opencode/skills/init-specs
시냅스 제품군 개발을 위한 공용 Claude Marketplace 입니다. 용도 및 목적 별 plugins 를 통해 claude plugins, agents, skills, commands 를 제공합니다.
npx -y skills add datamaker-kr/synapse-claude-marketplace --skill init-specsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Initialize spec documents (requirements, specs, plans) for a new task. Creates scaffolded markdown files in specs/ directory. Use when user wants to start a new task specification.
SKILL.md
12.7 KB, ~3.2k tokens by cl100k_base, as published. Nobody here has run it
Init Specs
Skill Info
Part of the spec-manager agent. This skill scaffolds the initial spec documents for a new task.
The pipeline that init-specs scaffolds depends on the task's difficulty:
low→ lite pipeline: onlyrequirements.mdandplans.mdare created.specs.mdis skipped. The next step is/plan-with-requirements.medium/high→ full pipeline:requirements.md,specs.md,plans.mdare all created (legacy behavior). The next step is/specify-with-requirements.
If Jira MCP is available and a ticket ID is provided, init-specs will also auto-populate requirements.md from the Jira issue.
Input
The user provides a task title as arguments: $ARGUMENTS
Arguments may optionally include a ticket ID prefix and the flags below:
/init-specs SYN-1234 User Authentication Flow— ticket ID + title/init-specs User Authentication Flow— title only (ticket ID asked later)/init-specs SYN-1234 Fix copy typo --difficulty low— force lite pipeline/init-specs SYN-1234 Big refactor --difficulty high --pipeline full— force full pipeline/init-specs SYN-1234 Some task --no-jira— skip Jira auto-fill even if MCP is available
Recognized flags (any order, before or after the title):
| Flag | Values | Default | Effect |
|---|---|---|---|
--difficulty | low / medium / high | inferred | Forces difficulty. Skips inference. |
--pipeline | lite / full | derived from difficulty | Overrides pipeline. lite ⇒ no specs.md. |
--no-jira | (bool) | off | Disables Jira MCP detection + auto-fill. |
If no task title is provided, ask the user for a task title before proceeding.
Process
Step 0: Collect Ticket ID
- Check if the first argument matches a ticket ID pattern (e.g.,
SYN-1234,PROJ-99,#123). If so, extract it as the ticket ID and use the remaining text as the task title. - If no ticket ID was found in the arguments, ask the user for a ticket ID using AskUserQuestion. Provide options:
- Skip — No ticket ID for this task
- Other — Let the user type a ticket ID
- The ticket ID will be used for:
- The git branch name
- The
Ticketfield in the requirements template - Jira auto-fill (Step 0.7) and difficulty inference (Step 0.6) when Jira MCP is available
Step 0.5: Detect Jira MCP Availability
Skip this step entirely if --no-jira was passed or no ticket ID exists.
Otherwise, determine whether Jira MCP tools are available in the current session:
- Look for any of these tool name prefixes in the available tools:
mcp__jira__jira_get_ticketmcp__platform-dev-team-common__jira__jira_get_ticket- any tool whose name ends with
jira_get_ticket
- Use the first matching prefix. Record it as the active Jira MCP prefix for this run (used by Steps 0.6 and 0.7).
- If no matching tool is found, set Jira MCP availability to
false. Do not error — Jira features are optional.
Record the result internally; do not write it to any file.
Step 0.6: Resolve Difficulty
Difficulty determines the pipeline (low ⇒ lite, others ⇒ full) and is recorded in requirements.md header.
Resolution order (use the first that succeeds):
- Explicit flag: If
--difficulty=<value>was passed, use it. - Jira heuristic (only when Jira MCP available + ticket ID exists):
- Call
jira_get_ticket(ticketId, fields=["summary", "priority", "labels"]). - Apply rules in order:
priority∈ {Lowest,Low} OR any label in {trivial,chore,docs} →lowpriority∈ {Highest,High} OR any label in {epic,spike} →high- Otherwise →
medium
- Call
- User prompt: If neither succeeded, use AskUserQuestion:
- Options:
low (lite)/medium (full, default)/high (full) - Default selection:
medium.
- Options:
If --pipeline=<value> was provided, it overrides the pipeline derived from difficulty. Otherwise: low → lite, medium/high → full.
Step 0.7: (Reserved for Jira auto-fill — executed at Step 4.5)
Skip; see Step 4.5 below.
Step 1: Slug the Task Title
Convert the task title to a URL-friendly slug:
- Lowercase all characters
- Replace spaces and special characters with hyphens
- Remove consecutive hyphens
- Trim leading/trailing hyphens
Example: "User Authentication Flow" -> user-authentication-flow
Step 2: Create Git Branch
Create and checkout a new git branch for this task:
-
Build branch name:
- If ticket ID exists:
{ticket-id}-{slug}(e.g.,syn-1234-user-authentication-flow) - If no ticket ID:
feat-{slug}(e.g.,feat-user-authentication-flow) - Entire branch name should be lowercased
- If ticket ID exists:
-
Check current git state:
- Run
git statusto check for uncommitted changes - If there are uncommitted changes, warn the user and ask whether to proceed (changes will carry over to the new branch) or abort
- Run
-
Create and checkout the branch:
- Run
git checkout -b {branch-name} - If the branch already exists, warn the user and ask whether to:
- Switch to the existing branch (
git checkout {branch-name}) - Choose a different name
- Abort
- Switch to the existing branch (
- Run
-
Report: Confirm the branch was created and checked out
Step 3: Check for Existing Directory
Check if a directory already exists at specs/{slug}/. If it does, warn the user and ask whether to overwrite or choose a different title.
Step 4: Create Spec Files
Create the specs/{slug}/ directory and the following files inside it. Which files are created depends on the resolved pipeline (Step 0.6):
- lite pipeline:
requirements.md+plans.mdonly. Do NOT createspecs.md. - full pipeline:
requirements.md+specs.md+plans.md(legacy behavior).
1. specs/{slug}/requirements.md (always created)
# Requirements: {Original Task Title}
> Created: {YYYY-MM-DD}
> Status: {Draft | Draft (from Jira)}
> Ticket: {ticket-id or "N/A"}
> Difficulty: {low | medium | high}
> Pipeline: {lite | full}
> Source: {manual | jira:{ticket-id}}
## Overview
<!-- Describe the task/feature at a high level. What problem does it solve? -->
## Goals
<!-- What are the primary goals of this task? -->
- [ ] Goal 1
- [ ] Goal 2
## Functional Requirements
<!-- Describe what the system should DO. Be specific and measurable. -->
### FR-1: {Requirement Name}
- **Description**:
- **Acceptance Criteria**:
- [ ]
### FR-2: {Requirement Name}
- **Description**:
- **Acceptance Criteria**:
- [ ]
## Non-Functional Requirements
<!-- Performance, security, scalability, maintainability, etc. -->
- **Performance**:
- **Security**:
- **Scalability**:
## Constraints
<!-- Technical constraints, time constraints, dependencies, etc. -->
-
## Out of Scope
<!-- Explicitly state what is NOT included in this task -->
-
## References
<!-- Links to related documents, designs, APIs, etc. -->
-
Header field semantics:
Difficulty: from Step 0.6. Drives pipeline.Pipeline:liteorfull. Other skills (specify-with-requirements,update-requirements,sync-to-jira) read this to branch behavior.Source:manualif user is filling by hand,jira:<ticketId>if Step 4.5 auto-filled from Jira. Used by escalation logic.
2. specs/{slug}/specs.md (full pipeline only)
Skip creating this file when pipeline is lite.
# Specs: {Original Task Title}
> Created: {YYYY-MM-DD}
> Status: Pending (waiting for requirements)
> Requirements: [requirements.md](./requirements.md)
## Overview
<!-- This document will be generated from requirements. Run /specify-with-requirements after completing requirements. -->
## Technical Specifications
<!-- Auto-generated from requirements analysis -->
## Architecture
<!-- Component design, data flow, integrations -->
## API / Interface Design
<!-- Endpoints, function signatures, data models -->
## Error Handling
<!-- Error scenarios and handling strategies -->
## Dependencies
<!-- External and internal dependencies -->
## Open Questions
<!-- Unresolved questions to clarify -->
-
3. specs/{slug}/plans.md (always created)
The "Status" line differs slightly by pipeline:
- lite:
> Status: Pending (waiting for requirements — run /plan-with-requirements) - full:
> Status: Pending (waiting for specs)
The "Specs" link in lite pipeline points to N/A (lite) instead of specs.md.
# Plans: {Original Task Title}
> Created: {YYYY-MM-DD}
> Status: {see above}
> Requirements: [requirements.md](./requirements.md)
> Specs: {[specs.md](./specs.md) | N/A (lite pipeline)}
## Overview
<!-- This document will be generated from {specs | requirements}. Run {/plan-with-specs | /plan-with-requirements} after the prior step is finalized. -->
## Implementation Steps
<!-- Auto-generated -->
## Task Breakdown
<!-- Ordered list of implementation tasks -->
## Testing Strategy
<!-- Test plan for verification -->
## Rollback Plan
<!-- How to undo changes if needed -->
## Progress Tracking
| Step | Status | Notes |
|------|--------|-------|
| | | |
Step 4.5: Auto-fill requirements.md from Jira (when MCP available + ticket ID)
Skip if any of the following holds:
--no-jirawas passed- No ticket ID
- Jira MCP availability is
false(Step 0.5)
Otherwise:
- Call
jira_get_ticket(using the prefix detected in Step 0.5) with:{ ticketId, fields: ["summary", "description", "priority", "labels", "comment"], commentLimit: 5 } - If the call fails (auth, network, 404), do not overwrite the empty template. Keep
> Status: Draftand append a note to the Overview section:> Jira 자동 채움 실패 (사유: {error}). 수동으로 작성해주세요. - On success, transform the Jira response into markdown sections:
- Header: set
Status: Draft (from Jira),Source: jira:{ticketId}. - Overview:
summaryas one-line summary, followed by the first paragraph of the description. - Goals: best-effort extraction — if description contains a heading like
## Goalsor## 목표, copy its bullet list. Otherwise leave the goals template as-is with a comment noting that Goals were not auto-detected. - Functional Requirements: best-effort extraction from a
Acceptance Criteria/수락 조건section if present. Each top-level bullet or task-list item becomes aFR-N. If no such section exists, leave a single placeholderFR-1and add a comment. - References: append the canonical Jira link as the first reference:
- [Jira: {ticketId}](https://<jira-base>/browse/{ticketId}).
- Header: set
- The Jira description is ADF JSON. Use a conservative ADF→markdown reducer:
heading→#× levelparagraph→ blank-line separated textbulletList/orderedList/taskList→- item/1. item/- [ ] itemtextnodemarks→ wrap with**,*,`,~~, or[text](href)accordingly- Anything else → render plain text and continue (no error)
- For sections that could not be auto-mapped, leave the template comment in place and add
<!-- Jira에서 자동 매핑되지 않았습니다. 수동 작성이 필요합니다. -->.
Step 5: Report Completion
After creating files, display a summary tailored to the pipeline:
Spec documents initialized for: "{Original Task Title}"
Branch: {branch-name}
Ticket: {ticket-id or "N/A"}
Difficulty: {low | medium | high}
Pipeline: {lite | full}
Source: {manual | jira:{ticket-id}}
Created files:
- specs/{slug}/requirements.md <- {Write your requirements | Review the auto-filled draft}
{full only} - specs/{slug}/specs.md <- Generated after /specify-with-requirements
- specs/{slug}/plans.md <- Generated after {/plan-with-specs | /plan-with-requirements}
Next step: Edit specs/{slug}/requirements.md, then run:
{full} /specify-with-requirements {slug}
{lite} /plan-with-requirements {slug}
Tip: lite로 시작했더라도 나중에 /specify-with-requirements {slug}를 호출하면 specs.md가 추가되며 full로 escalate 됩니다.
Important
- Always create the
specs/directory if it doesn't exist - Use the actual current date for the "Created" field
- Preserve the original task title (with proper casing) in document headers
- Use the slugged version only for file names and cross-references
- Never error out because Jira MCP is unavailable — degrade gracefully. The plugin must work fully offline.
- Difficulty and Pipeline headers are mandatory: if missing on an existing file, treat as
medium/fullfor compatibility.
What ships with it
Read from the repository
Just SKILL.md. No reference files, no scripts.