Back to skills
SkillHub ClubWrite Technical DocsFull StackTech Writer

docs-stories

Complete CRUD for SDLC documentation (stories, tasks, context retrieval). Use when creating/managing stories, creating/managing tasks, updating task state, or retrieving full context for any user story via index (<3min restoration).

Packaged view

This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.

Stars
0
Hot score
74
Updated
March 20, 2026
Overall rating
C0.5
Composite score
0.5
Best-practice grade
B75.1

Install command

npx @skill-hub/cli install shredbx-demo-3d-model-docs-stories

Repository

shredbx/demo-3d-model

Skill path: .claude/skills/docs-stories

Complete CRUD for SDLC documentation (stories, tasks, context retrieval). Use when creating/managing stories, creating/managing tasks, updating task state, or retrieving full context for any user story via index (<3min restoration).

Open repository

Best for

Primary workflow: Write Technical Docs.

Technical facets: Full Stack, Tech Writer.

Target audience: everyone.

License: Unknown.

Original source

Catalog source: SkillHub Club.

Repository owner: shredbx.

This is still a mirrored public skill entry. Review the repository before installing into production workflows.

What it helps with

  • Install docs-stories into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
  • Review https://github.com/shredbx/demo-3d-model before adding docs-stories to shared team environments
  • Use docs-stories for development workflows

Works across

Claude CodeCodex CLIGemini CLIOpenCode

Favorites: 0.

Sub-skills: 0.

Aggregator: No.

Original source / Raw SKILL.md

---
name: docs-stories
description: Complete CRUD for SDLC documentation (stories, tasks, context retrieval). Use when creating/managing stories, creating/managing tasks, updating task state, or retrieving full context for any user story via index (<3min restoration).
---

# docs-stories Skill

## Purpose

Provide complete CRUD operations for SDLC documentation in the Bestays project. This skill handles all story/task management and context retrieval operations.

**Single Interface:** Anytime you need to read/write anything about the codebase in terms of documenting, use this skill.

## When to Use This Skill

**CREATE:**
- Creating new user stories
- Creating new tasks for stories

**READ:**
- Finding stories by domain or keywords
- Listing tasks for a story
- Getting current active task
- **Retrieving full context for a user story** (via index)
- **Finding all files/commits/decisions for a story** (via index)

**UPDATE:**
- Updating task state (NOT_STARTED, IN_PROGRESS, COMPLETED)
- Updating task phase (RESEARCH, PLANNING, IMPLEMENTATION, TESTING, VALIDATION)
- Adding commits to task record
- Adding modified files to task record
- Setting current active task

**DELETE:**
- Not implemented (stories/tasks are permanent audit trail)

## Available Scripts

All scripts located in: `.claude/skills/docs-stories/scripts/`

### Story Management

#### `story_create.py` - Create New User Story

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/story_create.py <domain> <feature> <scope>
```

**Arguments:**
- `domain`: Story category (auth, booking, admin, infrastructure, etc.)
- `feature`: Main feature name (login, signup, dashboard, etc.)
- `scope`: Specific scope (admin, user, validation, etc.)

**Example:**
```bash
python3 .claude/skills/docs-stories/scripts/story_create.py auth login admin
# Creates: .sdlc-workflow/stories/auth/US-001-auth-login-admin.md
```

**What it does:**
1. Scans existing stories to find next story number
2. Creates story file from template
3. Replaces placeholders with provided values
4. Returns story ID and file path

---

#### `story_find.py` - Find Existing Stories

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/story_find.py [domain] [--status STATUS]
```

**Arguments:**
- `domain` (optional): Filter by domain (auth, booking, etc.)
- `--status` (optional): Filter by status (READY, IN_PROGRESS, COMPLETED)

**Examples:**
```bash
# Find all stories
python3 .claude/skills/docs-stories/scripts/story_find.py

# Find all auth stories
python3 .claude/skills/docs-stories/scripts/story_find.py auth

# Find all completed stories
python3 .claude/skills/docs-stories/scripts/story_find.py --status COMPLETED

# Find completed auth stories
python3 .claude/skills/docs-stories/scripts/story_find.py auth --status COMPLETED
```

**What it does:**
1. Scans `.sdlc-workflow/stories/` for story files
2. Parses story metadata (status, domain, title)
3. Filters by criteria
4. Returns list of matching stories

---

### Task Management

#### `task_create.py` - Create New Task

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/task_create.py <story_id> <task_number> <semantic_name>
```

**Arguments:**
- `story_id`: Parent story ID (e.g., US-001)
- `task_number`: Task number (1, 2, 3, etc.)
- `semantic_name`: Semantic slug (2-3 words, lowercase, hyphens)

**Example:**
```bash
python3 .claude/skills/docs-stories/scripts/task_create.py US-001 1 clerk-mounting
# Creates: .claude/tasks/TASK-001/
# With STATE.json: {"story": "US-001", "semantic_name": "clerk-mounting", ...}
```

**What it does:**
1. Creates task folder at `.claude/tasks/TASK-{number}/`
2. Creates phase subfolders (research/, planning/, etc.)
3. Creates STATE.json with metadata
4. Creates README.md from template
5. Returns task ID and folder path

---

#### `task_list.py` - List Tasks for Story

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/task_list.py <story_id>
```

**Arguments:**
- `story_id`: Story ID to list tasks for (e.g., US-001)

**Example:**
```bash
python3 .claude/skills/docs-stories/scripts/task_list.py US-001
# Returns:
# TASK-001 (clerk-mounting): IN_PROGRESS, PLANNING phase
# TASK-002 (login-tests): NOT_STARTED, RESEARCH phase
```

**What it does:**
1. Scans `.claude/tasks/` for tasks with matching story
2. Reads STATE.json for each task
3. Returns list with status and phase

---

#### `task_get_current.py` - Get Current Active Task

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/task_get_current.py
```

**Example:**
```bash
python3 .claude/skills/docs-stories/scripts/task_get_current.py
# Returns: TASK-001 (US-001, clerk-mounting)
```

**What it does:**
1. Checks current git branch for TASK-XXX reference
2. Reads task STATE.json
3. Returns current task details

---

#### `task_set_current.py` - Set Current Active Task

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/task_set_current.py <task_id>
```

**Arguments:**
- `task_id`: Task ID to make active (e.g., TASK-001)

**Example:**
```bash
python3 .claude/skills/docs-stories/scripts/task_set_current.py TASK-001
# Switches to task branch or updates tracking
```

**What it does:**
1. Validates task exists
2. Updates tracking (implementation depends on approach)
3. Returns confirmation

---

#### `task_update_state.py` - Update Task Status

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/task_update_state.py <task_id> <status>
```

**Arguments:**
- `task_id`: Task ID (e.g., TASK-001)
- `status`: New status (NOT_STARTED, IN_PROGRESS, COMPLETED)

**Example:**
```bash
python3 .claude/skills/docs-stories/scripts/task_update_state.py TASK-001 IN_PROGRESS
# Updates STATE.json: {"status": "IN_PROGRESS", ...}
```

**What it does:**
1. Reads task STATE.json
2. Updates status field
3. Updates timestamp
4. Writes back to STATE.json

---

#### `task_update_phase.py` - Update Task Phase

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/task_update_phase.py <task_id> <phase>
```

**Arguments:**
- `task_id`: Task ID (e.g., TASK-001)
- `phase`: New phase (RESEARCH, PLANNING, IMPLEMENTATION, TESTING, VALIDATION)

**Example:**
```bash
python3 .claude/skills/docs-stories/scripts/task_update_phase.py TASK-001 PLANNING
# Updates STATE.json: {"phase": "PLANNING", ...}
```

**What it does:**
1. Reads task STATE.json
2. Updates phase field
3. Updates timestamp
4. Writes back to STATE.json

---

#### `task_add_commit.py` - Add Commit to Task Record

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/task_add_commit.py <task_id> <commit_hash>
```

**Arguments:**
- `task_id`: Task ID (e.g., TASK-001)
- `commit_hash`: Git commit hash

**Example:**
```bash
python3 .claude/skills/docs-stories/scripts/task_add_commit.py TASK-001 abc123def
# Updates STATE.json: {"commits": ["abc123def"], ...}
```

**What it does:**
1. Reads task STATE.json
2. Appends commit hash to commits array
3. Writes back to STATE.json

---

#### `task_add_file_modified.py` - Add Modified File to Task Record

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/task_add_file_modified.py <task_id> <file_path>
```

**Arguments:**
- `task_id`: Task ID (e.g., TASK-001)
- `file_path`: Path to modified file (relative to project root)

**Example:**
```bash
python3 .claude/skills/docs-stories/scripts/task_add_file_modified.py TASK-001 apps/server/core/clerk.py
# Updates STATE.json: {"files_modified": ["apps/server/core/clerk.py"], ...}
```

**What it does:**
1. Reads task STATE.json
2. Appends file path to files_modified array (no duplicates)
3. Writes back to STATE.json

---

### Context Indexing and Retrieval

#### `context_index.py` - Index All SDLC Artifacts

**Status:** To be implemented (US-001D)

**Usage:**
```bash
python3 .claude/skills/docs-stories/scripts/context_index.py [--story-id US-XXX] [--output PATH]
```

**Arguments:**
- `--story-id` (optional): Index specific story only
- `--output` (optional): Output path (default: `.sdlc-workflow/.index/sdlc-index.json`)

**Example:**
```bash
# Index all stories
python3 .claude/skills/docs-stories/scripts/context_index.py

# Index specific story
python3 .claude/skills/docs-stories/scripts/context_index.py --story-id US-001

# Custom output path
python3 .claude/skills/docs-stories/scripts/context_index.py --output /tmp/index.json
```

**What it does:**
1. Scans `.sdlc-workflow/stories/` for story files
2. Scans `.claude/tasks/` for task folders
3. Parses git log for commits with story/task references
4. Parses file headers for design patterns and trade-offs
5. Builds structured JSON index with bidirectional cross-references
6. Outputs: `.sdlc-workflow/.index/sdlc-index.json`

**Index Schema:**
```json
{
  "metadata": {
    "generated": "2025-11-07T10:30:00Z",
    "total_stories": 5,
    "total_tasks": 12
  },
  "stories": {
    "US-001": {
      "id": "US-001",
      "title": "Login Flow Validation",
      "file": ".sdlc-workflow/stories/auth/US-001-...",
      "tasks": ["TASK-001-file-headers"],
      "commits": ["abc123"],
      "implementation_files": ["apps/frontend/tests/..."]
    }
  },
  "tasks": {
    "TASK-001-file-headers": {
      "story": "US-001",
      "folder": ".claude/tasks/TASK-001/",
      "decisions": "...",
      "files_modified": ["..."]
    }
  },
  "commits": {...},
  "files": {...}
}
```

---

## Retrieving Full Context for a Story

Once the index is built, retrieve full context:

### Step 1: Read the Index

```python
import json
with open('.sdlc-workflow/.index/sdlc-index.json') as f:
    index = json.load(f)
```

### Step 2: Query by Story ID

```python
story = index['stories']['US-001']
# Returns: title, file, tasks, commits, files, acceptance_criteria
```

### Step 3: Traverse Cross-References

```python
# Get all tasks for story
tasks = [index['tasks'][task_id] for task_id in story['tasks']]

# Get all commits for story
commits = [index['commits'][commit_hash] for commit_hash in story['commits']]

# Get all files for story
files = [index['files'][file_path] for file_path in story['implementation_files']]
```

### Common Query Templates

#### Query: "Full context for US-001"

**Steps:**
1. Read index
2. Get story metadata (title, acceptance criteria)
3. Get all tasks (semantic names, decisions, subagents)
4. Get all commits (timeline)
5. Get all files (design patterns, trade-offs)
6. Format output for readability

**Expected Output:**
```markdown
# Full Context: US-001 - Login Flow Validation

## Story
- Title: Login Flow Validation
- Status: COMPLETED
- Acceptance Criteria:
  - Valid credentials authenticate user
  - Invalid credentials rejected
  - E2E tests passing

## Tasks
1. TASK-001-file-headers
   - Decision: Add file headers with design patterns for instant context
   - Trade-offs: Maintenance overhead vs clarity
   - Subagent: dev-backend-fastapi

## Timeline
- 2025-10-16: feat: add file headers (abc123)
- 2025-10-20: test: add E2E login tests (def456)

## Files Modified
- apps/server/core/clerk.py
  - Design Pattern: Singleton
  - Architecture Layer: Core Service
  - Trade-offs: Vendor lock-in vs faster development

## Time to Context: < 3 minutes
```

---

#### Query: "Files changed in US-001"

**Steps:**
1. Read index
2. Get story['implementation_files']
3. For each file, get metadata (design pattern, layer, trade-offs)
4. Format as list

**Expected Output:**
```
Files changed in US-001:
- apps/server/core/clerk.py (Singleton, Core Service)
- apps/server/api/clerk_deps.py (Dependency Injection, API Layer)
- apps/frontend/tests/e2e/login.spec.ts (Test, E2E Layer)
```

---

#### Query: "Timeline for US-001"

**Steps:**
1. Read index
2. Get story['commits']
3. Sort by date
4. Format chronologically

**Expected Output:**
```
Timeline for US-001:
- 2025-10-16 14:30: feat: add file headers to backend deps (abc123)
  Files: clerk.py, deps.py
  Task: TASK-001-file-headers

- 2025-10-20 10:15: test: add E2E login tests (def456)
  Files: login.spec.ts
  Task: TASK-002-login-tests
```

---

#### Query: "Decisions for US-001"

**Steps:**
1. Read index
2. Get all tasks for story
3. Extract decisions field from each task
4. Format as list

**Expected Output:**
```
Decisions for US-001:

TASK-001-file-headers:
- Chose Clerk over Auth0 for authentication
- Trade-offs: Vendor lock-in vs faster development
- Added file headers with design patterns for instant context

TASK-002-login-tests:
- Chose Playwright over Cypress for E2E tests
- Trade-offs: Newer tool vs more examples available
```

---

#### Query: "Trade-offs for authentication"

**Steps:**
1. Read index
2. Search files for "authentication" or "auth" keywords
3. Extract trade-offs sections from file headers
4. Format as list

**Expected Output:**
```
Trade-offs for authentication:

apps/server/core/clerk.py (Singleton):
- Pro: Shared Clerk client reduces memory usage
- Con: Vendor lock-in to Clerk
- When to revisit: If Clerk pricing becomes prohibitive

apps/server/api/clerk_deps.py (Dependency Injection):
- Pro: Easy to mock for testing
- Con: Extra indirection layer
```

---

## Performance Expectations

**Indexing:**
- Time: < 10 seconds for 20 stories, 50 tasks, 150 commits
- Memory: < 500MB
- Output: < 2MB JSON file

**Retrieval:**
- Full context for any story: **< 3 minutes** (vs 30-60 minutes manual)
- Files changed query: < 30 seconds
- Timeline query: < 30 seconds
- Decisions query: < 30 seconds

---

## Integration with Other Skills

**sdlc-orchestrator skill:**
- Orchestrator uses docs-stories to update task state during phase transitions
- Example: After completing planning phase, orchestrator calls `task_update_phase.py TASK-001 IMPLEMENTATION`

**planning-quality-gates skill:**
- Quality gates reference docs-stories for creating planning artifacts
- Example: Create `planning/quality-gate-checklist.md` via task folder structure

**Memory MCP:**
- Coordinator loads SDLC patterns from Memory MCP before using docs-stories
- Example: Load "Task Folder System" entity to understand structure

---

## Best Practices

**For Coordinators:**
1. Always use docs-stories for story/task CRUD operations (don't manually create files)
2. Update task state after each phase transition
3. Run context_index.py periodically (after completing stories)
4. Use retrieval queries to restore context in new sessions

**For Subagents:**
1. Read task STATE.json to understand current task context
2. Add commits and files_modified after implementation
3. Reference task folder for implementation spec and decisions
4. Save reports to task folder (subagent-reports/)

**For Both:**
- Never bypass docs-stories scripts (maintain consistency)
- Always use semantic task names (self-documenting)
- Document decisions and trade-offs in task folders
- Update STATE.json after significant progress

---

## Troubleshooting

**Problem:** `story_create.py` fails with "Not in a project with .claude/"
**Solution:** Run from project root or any subdirectory containing `.claude/`

**Problem:** `task_create.py` fails with "Task already exists"
**Solution:** Use different task number or delete existing task folder

**Problem:** Index is outdated after new commits
**Solution:** Re-run `context_index.py` to rebuild index

**Problem:** Context retrieval returns no results for recent story
**Solution:** Ensure story file exists and index has been built

---

## Future Enhancements (Out of Scope)

- Delete operations (story/task archival)
- Story/task templates with variants
- Incremental indexing (only scan changed files)
- Web UI for browsing index
- Full-text search across decisions and reports
- Automated index rebuild on git commit (hook)

---

**Skill Version:** 1.0
**Last Updated:** 2025-11-07
**Maintained By:** Bestays SDLC Team
docs-stories | SkillHub