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).
Installation
Details
Usage
After installing, this skill will be available to your AI coding assistant.
Verify installation:
npx agent-skills-cli listSkill Instructions
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:
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:
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:
- Scans existing stories to find next story number
- Creates story file from template
- Replaces placeholders with provided values
- Returns story ID and file path
story_find.py - Find Existing Stories
Usage:
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:
# 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:
- Scans
.sdlc-workflow/stories/for story files - Parses story metadata (status, domain, title)
- Filters by criteria
- Returns list of matching stories
Task Management
task_create.py - Create New Task
Usage:
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:
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:
- Creates task folder at
.claude/tasks/TASK-{number}/ - Creates phase subfolders (research/, planning/, etc.)
- Creates STATE.json with metadata
- Creates README.md from template
- Returns task ID and folder path
task_list.py - List Tasks for Story
Usage:
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:
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:
- Scans
.claude/tasks/for tasks with matching story - Reads STATE.json for each task
- Returns list with status and phase
task_get_current.py - Get Current Active Task
Usage:
python3 .claude/skills/docs-stories/scripts/task_get_current.py
Example:
python3 .claude/skills/docs-stories/scripts/task_get_current.py
# Returns: TASK-001 (US-001, clerk-mounting)
What it does:
- Checks current git branch for TASK-XXX reference
- Reads task STATE.json
- Returns current task details
task_set_current.py - Set Current Active Task
Usage:
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:
python3 .claude/skills/docs-stories/scripts/task_set_current.py TASK-001
# Switches to task branch or updates tracking
What it does:
- Validates task exists
- Updates tracking (implementation depends on approach)
- Returns confirmation
task_update_state.py - Update Task Status
Usage:
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:
python3 .claude/skills/docs-stories/scripts/task_update_state.py TASK-001 IN_PROGRESS
# Updates STATE.json: {"status": "IN_PROGRESS", ...}
What it does:
- Reads task STATE.json
- Updates status field
- Updates timestamp
- Writes back to STATE.json
task_update_phase.py - Update Task Phase
Usage:
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:
python3 .claude/skills/docs-stories/scripts/task_update_phase.py TASK-001 PLANNING
# Updates STATE.json: {"phase": "PLANNING", ...}
What it does:
- Reads task STATE.json
- Updates phase field
- Updates timestamp
- Writes back to STATE.json
task_add_commit.py - Add Commit to Task Record
Usage:
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:
python3 .claude/skills/docs-stories/scripts/task_add_commit.py TASK-001 abc123def
# Updates STATE.json: {"commits": ["abc123def"], ...}
What it does:
- Reads task STATE.json
- Appends commit hash to commits array
- Writes back to STATE.json
task_add_file_modified.py - Add Modified File to Task Record
Usage:
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:
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:
- Reads task STATE.json
- Appends file path to files_modified array (no duplicates)
- Writes back to STATE.json
Context Indexing and Retrieval
context_index.py - Index All SDLC Artifacts
Status: To be implemented (US-001D)
Usage:
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:
# 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:
- Scans
.sdlc-workflow/stories/for story files - Scans
.claude/tasks/for task folders - Parses git log for commits with story/task references
- Parses file headers for design patterns and trade-offs
- Builds structured JSON index with bidirectional cross-references
- Outputs:
.sdlc-workflow/.index/sdlc-index.json
Index Schema:
{
"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
import json
with open('.sdlc-workflow/.index/sdlc-index.json') as f:
index = json.load(f)
Step 2: Query by Story ID
story = index['stories']['US-001']
# Returns: title, file, tasks, commits, files, acceptance_criteria
Step 3: Traverse Cross-References
# 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:
- Read index
- Get story metadata (title, acceptance criteria)
- Get all tasks (semantic names, decisions, subagents)
- Get all commits (timeline)
- Get all files (design patterns, trade-offs)
- Format output for readability
Expected Output:
# 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:
- Read index
- Get story['implementation_files']
- For each file, get metadata (design pattern, layer, trade-offs)
- 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:
- Read index
- Get story['commits']
- Sort by date
- 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:
- Read index
- Get all tasks for story
- Extract decisions field from each task
- 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:
- Read index
- Search files for "authentication" or "auth" keywords
- Extract trade-offs sections from file headers
- 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.mdvia 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:
- Always use docs-stories for story/task CRUD operations (don't manually create files)
- Update task state after each phase transition
- Run context_index.py periodically (after completing stories)
- Use retrieval queries to restore context in new sessions
For Subagents:
- Read task STATE.json to understand current task context
- Add commits and files_modified after implementation
- Reference task folder for implementation spec and decisions
- 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
More by shredbx
View allManages PostgreSQL database operations including Alembic migrations (creation, application, rollback), database backups and restoration for both development and production environments, shell access, and pgvector extension management. This skill should be used when creating schema changes, running migrations, backing up data, or troubleshooting database issues.
Guide for creating valid skills. This skill should be ALWAYS used when users want to create a new skill or update an existing skill that extends Claude's capabilities with specialized knowledge, workflows, or tool integrations. Use it everytime you need to modify anything in ".claude/skills" folder
Manages Bestays infrastructure including Docker Compose, Dockerfile creation, Makefile workflows, service orchestration, production migrations, and backups. Use when managing containers, adding services, deploying to VPS, running migrations, or setting up infrastructure. Acts as a self-updating knowledge index that points to authoritative sources.
Master Python asyncio, concurrent programming, and async/await patterns for high-performance FastAPI applications. Use when building async APIs, concurrent systems, or I/O-bound applications requiring non-blocking operations.
