tissue list / tissue ls
List and filter issues in the repository.
Tissue Commands
# List all issues
tissue list
tissue ls
# Filter by status
tissue list --status open
tissue list --status closed
# Filter by multiple criteria
tissue list --priority high --tags bug
# Sort issues
tissue list --sort priority
tissue list --sort updated --reverse
Manual Workflow (bash + git)
List all issues
# Simple listing
cd ../issues
ls -la *.md
# Or from main branch
git ls-tree issues: --name-only | grep '\.md$'
List with details using yq
# Display all issues with metadata
list_issues() {
cd ../issues
# Header
printf "%-4s %-10s %-8s %-40s %-15s\n" "NUM" "STATUS" "PRIORITY" "TITLE" "TAGS"
echo "--------------------------------------------------------------------------------"
# Process each issue file
for file in *.md; do
[ "$file" = "README.md" ] && continue
[ -f "$file" ] || continue
# Extract issue number from filename
NUM=$(echo "$file" | cut -d'_' -f1)
# Extract fields using yq
TITLE=$(yq --front-matter '.title // ""' "$file" | head -c 40)
STATUS=$(yq --front-matter '.status // "unknown"' "$file")
PRIORITY=$(yq --front-matter '.priority // ""' "$file")
TAGS=$(yq --front-matter '.tags | join(", ") // ""' "$file" | head -c 15)
# Print row
printf "%-4s %-10s %-8s %-40s %-15s\n" \
"$NUM" "$STATUS" "$PRIORITY" "$TITLE" "$TAGS"
done
}
list_issues
Filter by status
# List issues with specific status
filter_by_status() {
STATUS_FILTER="$1"
cd ../issues
for file in *.md; do
[ "$file" = "README.md" ] && continue
[ -f "$file" ] || continue
# Check status using yq
STATUS=$(yq --front-matter '.status' "$file" 2>/dev/null)
if [ "$STATUS" = "$STATUS_FILTER" ]; then
TITLE=$(yq --front-matter '.title' "$file")
echo "${file}: ${TITLE}"
fi
done
}
filter_by_status "open"
Advanced filtering with yq
# Filter by multiple criteria using yq expressions
filter_issues() {
cd ../issues
local status_filter="${1:-.*}"
local priority_filter="${2:-.*}"
local tag_filter="${3:-}"
for file in *.md; do
[ "$file" = "README.md" ] && continue
[ -f "$file" ] || continue
# Build and evaluate filter expression
if [ -n "$tag_filter" ]; then
MATCHES=$(yq --front-matter "
.status == \"$status_filter\" and
.priority == \"$priority_filter\" and
(.tags // [] | contains([\"$tag_filter\"]))
" "$file" 2>/dev/null)
else
MATCHES=$(yq --front-matter "
.status == \"$status_filter\" and
.priority == \"$priority_filter\"
" "$file" 2>/dev/null)
fi
if [ "$MATCHES" = "true" ]; then
TITLE=$(yq --front-matter '.title' "$file")
echo "${file}: ${TITLE}"
fi
done
}
# Usage examples
filter_issues "open" "high"
filter_issues "open" "high" "bug"
Sort issues by field
# Sort by priority using yq
sort_by_priority() {
cd ../issues
# Create temp file with sortable data
TMPFILE=$(mktemp)
for file in *.md; do
[ "$file" = "README.md" ] && continue
[ -f "$file" ] || continue
PRIORITY=$(yq --front-matter '.priority // "low"' "$file")
TITLE=$(yq --front-matter '.title // ""' "$file")
# Assign numeric values for sorting
case "$PRIORITY" in
critical) PNUM=4 ;;
high) PNUM=3 ;;
medium) PNUM=2 ;;
low) PNUM=1 ;;
*) PNUM=0 ;;
esac
echo "${PNUM}|${file}|${PRIORITY}|${TITLE}" >> "$TMPFILE"
done
# Sort and display
sort -t'|' -k1 -rn "$TMPFILE" | while IFS='|' read -r num file priority title; do
printf "%-20s %-8s %s\n" "$file" "$priority" "$title"
done
rm "$TMPFILE"
}
sort_by_priority
Sort by date modified
# Sort by last updated using yq
sort_by_updated() {
cd ../issues
# Create sortable list with timestamps
for file in *.md; do
[ "$file" = "README.md" ] && continue
[ -f "$file" ] || continue
UPDATED=$(yq --front-matter '.updated // .created // ""' "$file")
TITLE=$(yq --front-matter '.title' "$file")
STATUS=$(yq --front-matter '.status' "$file")
echo "${UPDATED}|${file}|${STATUS}|${TITLE}"
done | sort -r | while IFS='|' read -r updated file status title; do
printf "%-20s %-10s %-10s %s\n" "$file" "$updated" "$status" "$title"
done
}
sort_by_updated
What tissue does for you:
- Provides consistent formatted output
- Fast filtering without parsing every file
- Configurable display formats (table, compact, detailed)
- Efficient sorting algorithms
- Caching for repeated queries
- Color-coded output for terminals
- Pagination for long lists
- Export to various formats
- Integration with shell completion
- Performance optimization for large issue sets