Claude-skill-registry filter-skill
Filter tasks by priority, status, tags, due dates, and other criteria. Use when implementing filtering functionality.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/filter-skill" ~/.claude/skills/majiayu000-claude-skill-registry-filter-skill && rm -rf "$T"
manifest:
skills/data/filter-skill/SKILL.mdsource content
Filter Skill
Purpose
Implement comprehensive filtering for task management.
Instructions
Filter by Priority
from typing import List, Optional def filter_by_priority(self, priority: str) -> List[dict]: """Filter tasks by priority level.""" return self.db.search(self.db.query.priority == priority) def filter_by_priorities(self, priorities: List[str]) -> List[dict]: """Filter tasks by multiple priority levels.""" return [t for t in self.get_all_tasks() if t.get('priority') in priorities] def get_urgent_tasks(self) -> List[dict]: """Get only urgent and high priority tasks.""" return self.filter_by_priorities(['urgent', 'high'])
Filter by Status
def filter_by_status(self, status: str) -> List[dict]: """Filter tasks by status.""" return self.db.search(self.db.query.status == status) def get_pending_tasks(self) -> List[dict]: """Get all pending tasks.""" return self.filter_by_status('pending') def get_completed_tasks(self) -> List[dict]: """Get all completed tasks.""" return self.filter_by_status('completed') def get_active_tasks(self) -> List[dict]: """Get all non-completed tasks.""" return self.db.search(self.db.query.status != 'completed')
Filter by Tags
def filter_by_tag(self, tag: str) -> List[dict]: """Filter tasks containing a specific tag.""" tag = tag.lower() return self.db.search( self.db.query.tags.test( lambda tags: tag in [t.lower() for t in tags] ) ) def filter_by_all_tags(self, tags: List[str]) -> List[dict]: """Filter tasks containing ALL specified tags.""" tags = [t.lower() for t in tags] return self.db.search( self.db.query.tags.test( lambda task_tags: all( tag in [t.lower() for t in task_tags] for tag in tags ) ) ) def filter_by_any_tag(self, tags: List[str]) -> List[dict]: """Filter tasks containing ANY specified tag.""" tags = [t.lower() for t in tags] return self.db.search( self.db.query.tags.test( lambda task_tags: any( tag in [t.lower() for t in task_tags] for tag in tags ) ) )
Filter by Due Date
from datetime import datetime, timedelta def get_overdue_tasks(self) -> List[dict]: """Get tasks past their due date.""" now = datetime.now().isoformat() return self.db.search( (self.db.query.due_date.exists()) & (self.db.query.due_date.test(lambda d: d < now)) & (self.db.query.status != 'completed') ) def get_due_today(self) -> List[dict]: """Get tasks due today.""" today = datetime.now().date().isoformat() tomorrow = (datetime.now().date() + timedelta(days=1)).isoformat() return self.db.search( (self.db.query.due_date.exists()) & (self.db.query.due_date.test(lambda d: today <= d[:10] < tomorrow)) ) def get_due_this_week(self) -> List[dict]: """Get tasks due within the next 7 days.""" today = datetime.now().date() week_end = (today + timedelta(days=7)).isoformat() return self.db.search( (self.db.query.due_date.exists()) & (self.db.query.due_date.test( lambda d: today.isoformat() <= d[:10] <= week_end )) ) def get_tasks_without_due_date(self) -> List[dict]: """Get tasks without a due date.""" return self.db.search( ~self.db.query.due_date.exists() | (self.db.query.due_date == None) )
Combined Filter Service
class FilterService: """Comprehensive filter service with chainable filters.""" def __init__(self, database): self.db = database def filter_tasks( self, priority: Optional[str] = None, priorities: Optional[List[str]] = None, status: Optional[str] = None, tags: Optional[List[str]] = None, tag_mode: str = 'any', # 'any' or 'all' has_due_date: Optional[bool] = None, is_overdue: Optional[bool] = None, due_before: Optional[str] = None, due_after: Optional[str] = None, ) -> List[dict]: """Apply multiple filters to tasks.""" tasks = self.db.get_all() # Priority filter if priority: tasks = [t for t in tasks if t.get('priority') == priority] elif priorities: tasks = [t for t in tasks if t.get('priority') in priorities] # Status filter if status: tasks = [t for t in tasks if t.get('status') == status] # Tags filter if tags: tags = [tag.lower() for tag in tags] if tag_mode == 'all': tasks = [ t for t in tasks if all(tag in [x.lower() for x in t.get('tags', [])] for tag in tags) ] else: # 'any' tasks = [ t for t in tasks if any(tag in [x.lower() for x in t.get('tags', [])] for tag in tags) ] # Due date presence filter if has_due_date is not None: if has_due_date: tasks = [t for t in tasks if t.get('due_date')] else: tasks = [t for t in tasks if not t.get('due_date')] # Overdue filter if is_overdue is not None: now = datetime.now().isoformat() if is_overdue: tasks = [ t for t in tasks if t.get('due_date') and t['due_date'] < now and t.get('status') != 'completed' ] else: tasks = [ t for t in tasks if not t.get('due_date') or t['due_date'] >= now ] # Date range filters if due_before: tasks = [t for t in tasks if t.get('due_date') and t['due_date'] < due_before] if due_after: tasks = [t for t in tasks if t.get('due_date') and t['due_date'] > due_after] return tasks
Best Practices
- Handle None/empty filter values gracefully
- Support both single and multiple value filters
- Provide sensible defaults for filter modes
- Combine filters efficiently (filter in memory when possible)
- Cache common filter results if performance is needed
- Normalize tags and other text-based filters