Sdd

Added March 10, 2026 Source: Pawel Huryn

Quickly kick off new work items by generating a draft task file. This skill analyzes your request, determines the task type, and creates a structured markdown file with an action-oriented title and description. It helps organize your development tasks right from the start.

Installation

This skill is self-contained. Copy the SKILL.md below directly into your project to get started.

.claude/skills/sdd/SKILL.md    # Claude Code
.cursor/skills/sdd/SKILL.md    # Cursor

Or install as a personal skill (available across all your projects):

~/.claude/skills/sdd/SKILL.md

You can also install using the skills CLI:

npx skills add NeoLabHQ/context-engineering-kit

Requires Node.js 18+.

SKILL.md

---
name: sdd:add-task
description: creates draft task file in .specs/tasks/draft/ with original user intent
argument-hint: Task title or description (e.g., "Add validation to form inputs") [list of task files that this task depends on]
---

# Create Draft Task File

## Role

Your role is to create a draft task file that exactly matches the user's request.

## Goal

Create a task file in `.specs/tasks/draft/` with:

- Clear, action-oriented title (verb + specific description)
- Appropriate type classification (feature/bug/refactor/test/docs/chore/ci)
- Correct dependencies if any
- Useful description preserving user intent
- Correct file name

## Input

- **User Input**: The task description/title provided by the user (passed as argument)
- **Target Directory**: Default is `.specs/tasks/draft/`

## Instructions

### 1. Ensure Directory Structure

Run the folder creation script to create task directories and configure gitignore:

```bash
bash ${CLAUDE_PLUGIN_ROOT}/scripts/create-folders.sh
```

This creates:

- `.specs/tasks/draft/` - New tasks awaiting analysis
- `.specs/tasks/todo/` - Tasks ready to implement
- `.specs/tasks/in-progress/` - Currently being worked on
- `.specs/tasks/done/` - Completed tasks
- `.specs/scratchpad/` - Temporary working files (gitignored)

### 2. Analyze Input

1. **Parse the user's request**:
   - Extract the core task objective
   - Identify implied type (bug, feature, task)
   - List of task files that this task depends on

2. **Clarify if ambiguous** (only if truly unclear):
   - Is this a bug fix or new feature?
   - Any related tasks or dependencies? (if not proided, then assume none)

### 3. Structure the Task

1. **Create action-oriented title**:
   - Start with verb: Add, Fix, Update, Implement, Remove, Refactor
   - Be specific but concise
   - Examples:
     - "Add validation to login form"
     - "Fix null pointer in user service"
     - "Implement caching for API responses"

2. **Determine type**:

   | Type | Use When |
   |------|----------|
   | `feature` | New functionality or capability |
   | `bug` | Something is broken or not working correctly |
   | `refactor` | Code restructuring without changing behavior |
   | `test` | Adding or updating tests |
   | `docs` | Documentation changes only |
   | `chore` | Maintenance tasks, dependency updates |
   | `ci` | CI/CD configuration changes |

### 4. Generate File Name

1. **Create short name from the task title**:
   - Lowercase the title
   - Replace spaces with hyphens
   - Remove special characters
   - Keep it concise (3-5 words max)
   - Example: "Add validation to login form" -> `add-validation-login-form`

2. **Form file name**: `<short-name>.<issue-type>.md`
   - Examples:
     - `add-validation-login-form.feature.md`
     - `fix-null-pointer-user-service.bug.md`
     - `restructure-auth-module.refactor.md`
     - `add-unit-tests-api.test.md`
     - `update-readme.docs.md`
     - `upgrade-dependencies.chore.md`
     - `add-github-actions.ci.md`

3. **Verify uniqueness**: Check `.specs/tasks/draft/`, `.specs/tasks/todo/`, `.specs/tasks/in-progress/`, and `.specs/tasks/done/` for existing files with same name

### 5. Create Task File

**Use Write tool** to create `.specs/tasks/todo/<short-name>.<issue-type>.md`:

```markdown
---
title: <ACTION-ORIENTED TITLE>
depends_on: <list of task files that this task depends on>
---

## Initial User Prompt

{EXACT user input as provided}

## Description

// Will be filled in future stages by business analyst
```

## Constraints

- **Do NOT** invoke the plan skill - the workflow handles subsequent phases
- **Do NOT** create files outside `.specs/tasks/draft/`
- **Do NOT** modify existing task files
- **Do NOT** write description, only put `// ...` placeholder as specified in the task file.
- **Do NOT** write depends_on section if no dependencies are provided.

## Expected Output

Return to the orchestrator:

1. **Task file path**: Full path to created file (e.g., `.specs/tasks/todo/add-validation-login-form.feature.md`)
2. **Generated title**: The action-oriented title created
3. **Issue type**: `task`, `bug`, or `feature`

Format:

```
Created task file: .specs/tasks/draft/<name>.<type>.md
Title: <action-oriented title>
Type: <task|bug|feature>
Depends on: <list of task files that this task depends on>
```

## Success Criteria

- [ ] Directories `.specs/tasks/draft/`, `.specs/tasks/todo/`, `.specs/tasks/in-progress/`, `.specs/tasks/done/` exist
- [ ] Task file created in `.specs/tasks/draft/` with correct naming convention (`<name>.<type>.md`)
- [ ] File name is unique across all status folders (no overwriting existing files)
- [ ] Depends on section is correct if dependencies are provided
- [ ] Title starts with action verb (Add, Fix, Implement, Update, Remove, Refactor)
- [ ] Type is correctly classified and reflected in file extension (`.feature.md`, `.bug.md`, `.refactor.md`, `.test.md`, `.docs.md`, `.chore.md`, `.ci.md`)
- [ ] Original user input preserved in "Initial User Prompt" section
- [ ] Description is empty placeholder `// Will be filled in future stages by business analyst`

## Examples

**Test task** (`.specs/tasks/draft/add-unit-tests-auth.test.md`):

```markdown
---
title: Add unit tests for auth module
---

## Initial User Prompt

add tests for auth

## Description

// Will be filled in future stages by business analyst
```

**Bug with context** (`.specs/tasks/draft/fix-login-timeout.bug.md`):

```markdown
---
title: Fix login timeout on slow connections
---

## Initial User Prompt

users getting 504 errors on slow wifi

## Description

// Will be filled in future stages by business analyst
```

**Feature request** (`.specs/tasks/draft/implement-dark-mode.feature.md`):

```markdown
---
title: Implement dark mode toggle
---

## Initial User Prompt

add dark mode to settings page

## Description

// Will be filled in future stages by business analyst
```


## Companion Files

The following companion files are referenced above and included here for standalone use.

### scripts/create-folders.sh

```bash
#!/bin/bash
# create-folders.sh - Create task folder structure and add scratchpad to gitignore

set -e

# Check if we're in a git repository
if ! git rev-parse --is-inside-work-tree >/dev/null 2>&1; then
    echo "Error: Not a git repository" >&2
    exit 1
fi

# Get repository root
REPO_ROOT=$(git rev-parse --show-toplevel)
GITIGNORE="$REPO_ROOT/.gitignore"
SCRATCHPAD_PATTERN=".specs/scratchpad/"

# Create .gitignore if it doesn't exist
if [ ! -f "$GITIGNORE" ]; then
    touch "$GITIGNORE"
fi

# Check if .specs/scratchpad/ is in .gitignore
if ! grep -qF "$SCRATCHPAD_PATTERN" "$GITIGNORE"; then
    # Ensure the file ends with a newline before appending
    [ -s "$GITIGNORE" ] && [ -z "$(tail -c 1 "$GITIGNORE")" ] || echo "" >> "$GITIGNORE"
    echo "$SCRATCHPAD_PATTERN" >> "$GITIGNORE"
fi

# Create task directories with .gitkeep
mkdir -p "$REPO_ROOT/.specs/tasks/draft"
mkdir -p "$REPO_ROOT/.specs/tasks/todo"
mkdir -p "$REPO_ROOT/.specs/tasks/in-progress"
mkdir -p "$REPO_ROOT/.specs/tasks/done"

touch "$REPO_ROOT/.specs/tasks/draft/.gitkeep"
touch "$REPO_ROOT/.specs/tasks/todo/.gitkeep"
touch "$REPO_ROOT/.specs/tasks/in-progress/.gitkeep"
touch "$REPO_ROOT/.specs/tasks/done/.gitkeep"

# Create scratchpad directory (no .gitkeep - folder is gitignored)
mkdir -p "$REPO_ROOT/.specs/scratchpad"

# Create analysis directory
mkdir -p "$REPO_ROOT/.specs/analysis"
touch "$REPO_ROOT/.specs/analysis/.gitkeep"

# Create skills directory
mkdir -p "$REPO_ROOT/.claude/skills"
touch "$REPO_ROOT/.claude/skills/.gitkeep"

# Output confirmation
echo "Created folders:"
echo "  .specs/tasks/draft/"
echo "  .specs/tasks/todo/"
echo "  .specs/tasks/in-progress/"
echo "  .specs/tasks/done/"
echo "  .specs/scratchpad/"
echo "  .specs/analysis/"
echo "  .claude/skills/"
echo ""
echo "Added to .gitignore: $SCRATCHPAD_PATTERN"
```

Originally by Pawel Huryn, adapted here as an Agent Skills compatible SKILL.md.

This skill follows the Agent Skills open standard, supported by Claude Code, Cursor, Codex, Gemini CLI, and 20+ more editors.

Works with

Agent Skills format — supported by 20+ editors. Learn more