From spec-driven-workflow
Gera um dashboard visual no terminal com o estado completo do projeto. Mostra milestone, slices, tasks, progresso, decisões e próxima ação. Ativado por: /status, "status", "como está o projeto", "progresso".
npx claudepluginhub souzalemos/spec-driven-workflow --plugin spec-driven-workflowThis skill uses the workspace's default tool permissions.
1. Leia `.spec/STATE.md` para estado atual
Provides Ktor server patterns for routing DSL, plugins (auth, CORS, serialization), Koin DI, WebSockets, services, and testApplication testing.
Conducts multi-source web research with firecrawl and exa MCPs: searches, scrapes pages, synthesizes cited reports. For deep dives, competitive analysis, tech evaluations, or due diligence.
Provides demand forecasting, safety stock optimization, replenishment planning, and promotional lift estimation for multi-location retailers managing 300-800 SKUs.
.spec/STATE.md para estado atualROADMAP.md do milestone ativo (se houver)PLAN.md e conte tasks completas.spec/DECISIONS.md e conte decisões.spec/KNOWLEDGE.md e conte lições.spec/QUEUE.md, leia milestones na filaExecute o seguinte script bash, preenchendo as variáveis com os dados coletados:
#!/bin/bash
# ══════════════════════════════════════════════
# Preencha estas variáveis com dados de .spec/
# ══════════════════════════════════════════════
PROJECT_NAME="Nome do Projeto"
MILESTONE_ID="M001"
MILESTONE_TITLE="Título do Milestone"
MILESTONE_PHASE="execução" # pesquisa | discussão | execução | validação | completo
TOTAL_SLICES=5
COMPLETED_SLICES=2
CURRENT_SLICE_ID="S03"
CURRENT_SLICE_TITLE="Título do Slice Atual"
CURRENT_TASK_ID="T02"
CURRENT_TASK_TITLE="Título da Task Atual"
TOTAL_TASKS_IN_SLICE=4
COMPLETED_TASKS_IN_SLICE=1
TOTAL_TASKS_ALL=18
COMPLETED_TASKS_ALL=9
DECISIONS_COUNT=5
KNOWLEDGE_COUNT=3
BLOCKERS="nenhum" # ou "descrição do bloqueio"
NEXT_ACTION="Executar T02 do slice S03"
# Slices data (arrays paralelos)
SLICE_IDS=("S01" "S02" "S03" "S04" "S05")
SLICE_TITLES=("Auth Login" "Auth Registro" "API Perfil" "Dashboard" "Testes E2E")
SLICE_TOTAL_TASKS=(3 3 4 5 3)
SLICE_DONE_TASKS=(3 3 1 0 0)
SLICE_STATUS=("done" "done" "active" "pending" "pending")
# Queue (pode ser vazio)
QUEUE_ITEMS=("M002: Painel Admin" "M003: Notificações")
# ══════════════════════════════════════════════
# Rendering (NÃO edite abaixo)
# ══════════════════════════════════════════════
# Colors
C_RESET="\033[0m"
C_BOLD="\033[1m"
C_DIM="\033[2m"
C_GREEN="\033[32m"
C_YELLOW="\033[33m"
C_BLUE="\033[34m"
C_MAGENTA="\033[35m"
C_CYAN="\033[36m"
C_RED="\033[31m"
C_WHITE="\033[37m"
C_BG_BLUE="\033[44m"
C_BG_GREEN="\033[42m"
C_BG_YELLOW="\033[43m"
C_BG_RED="\033[41m"
W=60 # width
hr() { printf "${C_DIM}"; printf '─%.0s' $(seq 1 $W); printf "${C_RESET}\n"; }
hr_double() { printf "${C_BLUE}"; printf '═%.0s' $(seq 1 $W); printf "${C_RESET}\n"; }
pad() { printf "%-${1}s" "$2"; }
# Phase color
phase_color() {
case "$1" in
pesquisa) echo "${C_CYAN}" ;;
discussão) echo "${C_YELLOW}" ;;
"discussao") echo "${C_YELLOW}" ;;
execução) echo "${C_GREEN}" ;;
"execucao") echo "${C_GREEN}" ;;
validação) echo "${C_MAGENTA}" ;;
"validacao") echo "${C_MAGENTA}" ;;
completo) echo "${C_GREEN}${C_BOLD}" ;;
*) echo "${C_WHITE}" ;;
esac
}
# Progress bar
progress_bar() {
local done=$1
local total=$2
local width=20
local filled=$((done * width / total))
local empty=$((width - filled))
local pct=$((done * 100 / total))
printf "${C_GREEN}"
printf '█%.0s' $(seq 1 $filled 2>/dev/null) || true
printf "${C_DIM}"
printf '░%.0s' $(seq 1 $empty 2>/dev/null) || true
printf "${C_RESET} ${C_BOLD}%d%%${C_RESET}" "$pct"
}
echo ""
hr_double
printf "${C_BOLD}${C_BLUE} ⚡ SPEC-DRIVEN DASHBOARD${C_RESET}\n"
hr_double
echo ""
# ── Project ──
printf " ${C_DIM}Projeto:${C_RESET} ${C_BOLD}%s${C_RESET}\n" "$PROJECT_NAME"
echo ""
# ── Milestone ──
PC=$(phase_color "$MILESTONE_PHASE")
printf " ${C_BOLD}🎯 Milestone${C_RESET} ${C_CYAN}%s${C_RESET} — %s\n" "$MILESTONE_ID" "$MILESTONE_TITLE"
printf " ${C_DIM}Fase:${C_RESET} ${PC}● %s${C_RESET}\n" "$MILESTONE_PHASE"
printf " ${C_DIM}Progresso:${C_RESET} "
if [ "$TOTAL_TASKS_ALL" -gt 0 ]; then
progress_bar "$COMPLETED_TASKS_ALL" "$TOTAL_TASKS_ALL"
printf " ${C_DIM}(%d/%d tasks)${C_RESET}" "$COMPLETED_TASKS_ALL" "$TOTAL_TASKS_ALL"
fi
echo ""
echo ""
# ── Slices ──
hr
printf " ${C_BOLD}📦 SLICES${C_RESET}\n"
hr
for i in "${!SLICE_IDS[@]}"; do
sid="${SLICE_IDS[$i]}"
stitle="${SLICE_TITLES[$i]}"
sdone="${SLICE_DONE_TASKS[$i]}"
stotal="${SLICE_TOTAL_TASKS[$i]}"
sstatus="${SLICE_STATUS[$i]}"
case "$sstatus" in
done)
icon="✅"
color="${C_GREEN}"
;;
active)
icon="🔄"
color="${C_YELLOW}"
;;
blocked)
icon="🚫"
color="${C_RED}"
;;
*)
icon="⬜"
color="${C_DIM}"
;;
esac
printf " %s ${color}%-4s${C_RESET} %-28s " "$icon" "$sid" "$stitle"
if [ "$stotal" -gt 0 ]; then
bar_w=10
bar_filled=$((sdone * bar_w / stotal))
bar_empty=$((bar_w - bar_filled))
printf "${C_GREEN}"
printf '█%.0s' $(seq 1 $bar_filled 2>/dev/null) || true
printf "${C_DIM}"
printf '░%.0s' $(seq 1 $bar_empty 2>/dev/null) || true
printf "${C_RESET} %d/%d" "$sdone" "$stotal"
fi
echo ""
done
echo ""
# ── Current Task ──
if [ -n "$CURRENT_TASK_ID" ] && [ "$MILESTONE_PHASE" = "execução" -o "$MILESTONE_PHASE" = "execucao" ]; then
hr
printf " ${C_BOLD}🔧 TASK ATUAL${C_RESET}\n"
hr
printf " ${C_CYAN}%s${C_RESET} / ${C_CYAN}%s${C_RESET} / ${C_YELLOW}%s${C_RESET}\n" "$MILESTONE_ID" "$CURRENT_SLICE_ID" "$CURRENT_TASK_ID"
printf " %s\n" "$CURRENT_TASK_TITLE"
printf " ${C_DIM}Progresso do slice:${C_RESET} %d/%d tasks\n" "$COMPLETED_TASKS_IN_SLICE" "$TOTAL_TASKS_IN_SLICE"
echo ""
fi
# ── Stats ──
hr
printf " ${C_BOLD}📊 STATS${C_RESET}\n"
hr
printf " ${C_DIM}Decisões registradas:${C_RESET} %d\n" "$DECISIONS_COUNT"
printf " ${C_DIM}Lições aprendidas:${C_RESET} %d\n" "$KNOWLEDGE_COUNT"
if [ "$BLOCKERS" != "nenhum" ]; then
printf " ${C_RED}${C_BOLD}⚠️ Bloqueio:${C_RESET} ${C_RED}%s${C_RESET}\n" "$BLOCKERS"
else
printf " ${C_DIM}Bloqueios:${C_RESET} ${C_GREEN}nenhum${C_RESET}\n"
fi
echo ""
# ── Queue ──
if [ ${#QUEUE_ITEMS[@]} -gt 0 ]; then
hr
printf " ${C_BOLD}📋 FILA${C_RESET}\n"
hr
for item in "${QUEUE_ITEMS[@]}"; do
printf " ${C_DIM}⏳${C_RESET} %s\n" "$item"
done
echo ""
fi
# ── Next Action ──
hr_double
printf " ${C_BOLD}➡️ Próximo:${C_RESET} %s\n" "$NEXT_ACTION"
hr_double
echo ""
bash para renderizar no terminalMostre:
⚡ SPEC-DRIVEN DASHBOARD
═══════════════════════════
Nenhum milestone ativo.
Use /start-milestone para começar.
Ajuste os campos para mostrar o estado correto. Slices podem estar todos como "pending" se ainda não foram planejados.