
Workspace Status
- 1 installs
- 9 repo stars
- Updated January 25, 2026
- patricio0312rev/workspaces
Shows a table of all workspace projects with git branch, uncommitted changes, running services, ports and last commits.
About
Displays the status of every project in the current workspace including git branch, dirty state, running services and ports. A developer uses it to see the state of all repos in a multi-repo workspace at a glance.
- Formatted table of branch, git status, service and port per project
- Detects the active workspace from directory or git remote
Workspace Status by the numbers
- 1 all-time installs (skills.sh)
- Ranked #2,476 of 3,282 Productivity & Planning skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/patricio0312rev/workspaces --skill workspace-statusAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1 |
|---|---|
| repo stars | ★ 9 |
| Last updated | January 25, 2026 |
| Repository | patricio0312rev/workspaces ↗ |
What it does
Shows a table of all workspace projects with git branch, uncommitted changes, running services, ports and last commits.
Files
Skill: Workspace Status
Description
Show the status of all projects in the current workspace, including git status, running services, and last commits.
Instructions
When the user wants to see the workspace status:
Step 1: Detect Current Workspace
First, detect which workspace the user is in by checking:
- Current directory against project paths in
~/.claude/workspaces/*/WORKSPACE.md - Git remote URL against configured repos
If no workspace is detected, prompt the user to either:
- Run
/workspaces:initto create a new workspace - Navigate to a project directory that's part of a workspace
Step 2: Display Status
Show a formatted table with information about all projects:
📁 Workspace: Acme Corp
┌─────────────┬──────────────┬─────────────┬──────────┬─────────┐
│ Project │ Branch │ Git Status │ Service │ Port │
├─────────────┼──────────────┼─────────────┼──────────┼─────────┤
│ api │ main │ clean │ running │ 3000 │
│ admin │ feature/auth │ dirty (+3) │ stopped │ 3001 │
│ homepage │ main │ clean, ↑2 │ running │ 3002 │
│ mobile │ main │ not cloned │ - │ 8081 │
└─────────────┴──────────────┴─────────────┴──────────┴─────────┘Status Values
Git Status:
clean- No uncommitted changesdirty (+N)- N files changed↑N- N commits ahead of remote↓N- N commits behind remotenot cloned- Repository hasn't been cloned yet
Service Status:
running- Port is in usestopped- Port is not in use
Additional Information
Show recent commits and any warnings:
Recent commits:
• api: "fix: resolve auth token issue" (2 hours ago)
• admin: "feat: add user dashboard" (1 day ago)
⚠ Warning: 'admin' has uncommitted changes#!/bin/bash
# Show workspace status for all projects
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PLUGIN_DIR="$(cd "$SCRIPT_DIR/../../.." && pwd)"
# Source utilities
source "$PLUGIN_DIR/lib/workspace-utils.sh"
# Usage
usage() {
echo "Usage: $0 [workspace-name] [--detect]"
echo ""
echo "Options:"
echo " --detect Only detect and print current workspace"
echo ""
exit 1
}
# Parse arguments
WORKSPACE_NAME=""
DETECT_ONLY=false
while [[ $# -gt 0 ]]; do
case $1 in
--detect)
DETECT_ONLY=true
shift
;;
-h|--help)
usage
;;
*)
if [ -z "$WORKSPACE_NAME" ]; then
WORKSPACE_NAME="$1"
fi
shift
;;
esac
done
# Detect workspace if not provided
if [ -z "$WORKSPACE_NAME" ]; then
detected=$(detect_workspace)
if [ -n "$detected" ]; then
WORKSPACE_NAME=$(echo "$detected" | cut -d: -f1)
CURRENT_PROJECT=$(echo "$detected" | cut -d: -f2)
fi
fi
# Handle detect-only mode
if [ "$DETECT_ONLY" = true ]; then
if [ -n "$WORKSPACE_NAME" ]; then
echo "$WORKSPACE_NAME:$CURRENT_PROJECT"
exit 0
else
exit 1
fi
fi
# Check if workspace exists
if [ -z "$WORKSPACE_NAME" ]; then
print_error "No workspace detected. Run '/workspaces:init' to create one or navigate to a project directory."
exit 1
fi
if ! workspace_exists "$WORKSPACE_NAME"; then
print_error "Workspace '$WORKSPACE_NAME' not found"
exit 1
fi
CONFIG_FILE=$(get_workspace_config "$WORKSPACE_NAME")
# Get workspace display name
DISPLAY_NAME=$(grep -E "^name:" "$CONFIG_FILE" | head -1 | sed 's/^name:[ ]*//')
if [ -z "$DISPLAY_NAME" ]; then
DISPLAY_NAME="$WORKSPACE_NAME"
fi
echo ""
echo "📁 Workspace: $DISPLAY_NAME"
echo ""
# Print table header
printf "┌─────────────────┬────────────────────┬─────────────────┬──────────┬────────┐\n"
printf "│ %-15s │ %-18s │ %-15s │ %-8s │ %-6s │\n" "Project" "Branch" "Git Status" "Service" "Port"
printf "├─────────────────┼────────────────────┼─────────────────┼──────────┼────────┤\n"
# Track warnings
WARNINGS=""
# Process each project
while IFS='|' read -r name repo path stack port; do
[ -z "$name" ] && continue
expanded_path=$(expand_path "$path")
# Check if directory exists
if [ ! -d "$expanded_path" ]; then
printf "│ %-15s │ %-18s │ %-15s │ %-8s │ %-6s │\n" "$name" "-" "not cloned" "-" "$port"
continue
fi
# Get git info
branch=$(cd "$expanded_path" && get_git_branch 2>/dev/null || echo "-")
if [ ${#branch} -gt 18 ]; then
branch="${branch:0:15}..."
fi
# Get git status
if [ -d "$expanded_path/.git" ]; then
git_status=$(cd "$expanded_path" && get_git_status)
# Count changes if dirty
if [[ "$git_status" == *"dirty"* ]]; then
change_count=$(cd "$expanded_path" && git status --porcelain 2>/dev/null | wc -l | tr -d ' ')
git_status="dirty (+$change_count)"
WARNINGS="${WARNINGS}'$name' has uncommitted changes\n"
fi
# Check if behind
behind=$(cd "$expanded_path" && git rev-list --count HEAD..@{upstream} 2>/dev/null || echo "0")
if [ "$behind" -gt 0 ]; then
WARNINGS="${WARNINGS}'$name' is $behind commits behind remote\n"
fi
else
git_status="-"
fi
# Truncate git_status if too long
if [ ${#git_status} -gt 15 ]; then
git_status="${git_status:0:12}..."
fi
# Check service status
if [ -n "$port" ] && [ "$port" != "-" ]; then
if port_in_use "$port"; then
service_status="running"
else
service_status="stopped"
fi
else
service_status="-"
port="-"
fi
printf "│ %-15s │ %-18s │ %-15s │ %-8s │ %-6s │\n" "$name" "$branch" "$git_status" "$service_status" "$port"
done < <(parse_projects "$CONFIG_FILE")
printf "└─────────────────┴────────────────────┴─────────────────┴──────────┴────────┘\n"
# Show recent commits
echo ""
echo "Recent commits:"
while IFS='|' read -r name repo path stack port; do
[ -z "$name" ] && continue
expanded_path=$(expand_path "$path")
if [ -d "$expanded_path/.git" ]; then
last_commit=$(cd "$expanded_path" && git log -1 --format='"%s" (%ar)' 2>/dev/null || echo "no commits")
echo " • $name: $last_commit"
fi
done < <(parse_projects "$CONFIG_FILE")
# Show warnings
if [ -n "$WARNINGS" ]; then
echo ""
echo -e "${YELLOW}Warnings:${NC}"
echo -e "$WARNINGS" | while read -r warning; do
[ -n "$warning" ] && echo -e " ${YELLOW}⚠${NC} $warning"
done
fi
echo ""