From 0dba33c81114729f9632bba3119dc2736131e4d5 Mon Sep 17 00:00:00 2001 From: Alexander Whitestone Date: Sun, 22 Mar 2026 19:07:27 -0400 Subject: [PATCH] fix: ops dashboard 5-pane layout with 3 equal feed panes Status(40%) + Controls on left, Kimi/Claude/Gemini feeds(60%) stacked right. Co-Authored-By: Claude Opus 4.6 --- bin/ops-dashboard-v2.sh | 89 ++++++++++++++++++++++------------------- 1 file changed, 48 insertions(+), 41 deletions(-) diff --git a/bin/ops-dashboard-v2.sh b/bin/ops-dashboard-v2.sh index 2f14257..d702ded 100755 --- a/bin/ops-dashboard-v2.sh +++ b/bin/ops-dashboard-v2.sh @@ -1,66 +1,73 @@ #!/usr/bin/env bash # ── Hermes Ops Dashboard v2 ──────────────────────────────────────────── -# 5-pane layout with triple agent feeds: -# ┌───────────────────────────────────┬────────────────────────────────┐ -# │ │ KIMI LIVE FEED │ -# │ STATUS + GITEA + QUEUE ├────────────────────────────────┤ -# │ (auto-refresh 20s) │ CLAUDE LIVE FEED │ -# │ ├────────────────────────────────┤ -# │ │ GEMINI LIVE FEED │ -# ├───────────────────────────────────┴────────────────────────────────┤ -# │ CONTROLS (bash prompt with helpers loaded) │ -# └────────────────────────────────────────────────────────────────────┘ +# 5-pane layout: +# ┌──────────────────┬─────────────────────────────┐ +# │ │ KIMI LIVE FEED │ +# │ STATUS PANEL ├─────────────────────────────┤ +# │ (auto-refresh) │ CLAUDE LIVE FEED │ +# │ ├─────────────────────────────┤ +# │ │ GEMINI LIVE FEED │ +# ├──────────────────┘ │ +# │ CONTROLS │ +# └─────────────────────────────────────────────────┘ # ─────────────────────────────────────────────────────────────────────── SESSION="ops" tmux kill-session -t "$SESSION" 2>/dev/null +sleep 1 -tmux new-session -d -s "$SESSION" - -# Split: left status (55%) | right feeds (45%) -tmux split-window -h -p 45 -t "$SESSION" - -# Split left pane: top status (80%) | bottom controls (20%) -tmux split-window -v -p 20 -t "$SESSION:1.1" - -# Split right pane into 3 equal feeds: kimi (top 33%) | claude (mid 33%) | gemini (bot 33%) -tmux split-window -v -p 67 -t "$SESSION:1.2" -tmux split-window -v -p 50 -t "$SESSION:1.3" - -# Initialize log files if they don't exist +# Initialize log files touch ~/.hermes/logs/kimi-loop.log 2>/dev/null touch ~/.hermes/logs/claude-loop.log 2>/dev/null touch ~/.hermes/logs/gemini-loop.log 2>/dev/null -# Pane 1 (top-left): consolidated status, auto-refresh +# Create session +tmux new-session -d -s "$SESSION" + +# Horizontal split: left 40% (status) | right 60% (feeds) +tmux split-window -h -p 60 -t "$SESSION" + +# Split right pane into 3 equal feeds +tmux split-window -v -p 67 -t "$SESSION:1.2" +tmux split-window -v -p 50 -t "$SESSION:1.3" +# Right is now: 1.2=kimi, 1.3=claude, 1.4=gemini + +# Split left pane: status top (85%) | controls bottom (15%) +tmux split-window -v -p 15 -t "$SESSION:1.1" +# Left is now: 1.1=status, 1.2=controls +# (inserts shift right panes to 1.3=kimi, 1.4=claude, 1.5=gemini) + +# === Fill panes === + +# Status panel tmux send-keys -t "$SESSION:1.1" "watch -n 20 -t -c 'bash ~/.hermes/bin/ops-panel.sh'" Enter -# Pane 2 (top-right): kimi live feed with color -tmux send-keys -t "$SESSION:1.2" "echo -e '\\033[1m\\033[33m KIMI FEED\\033[0m' && tail -f ~/.hermes/logs/kimi-loop.log | GREP_COLOR='1;32' grep --color=always -E 'SUCCESS|$' | GREP_COLOR='1;31' grep --color=always -E 'FAILED|BACKOFF|$' | GREP_COLOR='1;36' grep --color=always -E 'ISSUE #[0-9]+|$'" Enter +# Controls +tmux send-keys -t "$SESSION:1.2" "source ~/.hermes/bin/ops-helpers.sh && ops-help" Enter -# Pane 3 (mid-right): claude live feed with color -tmux send-keys -t "$SESSION:1.3" "echo -e '\\033[1m\\033[35m CLAUDE FEED\\033[0m' && tail -f ~/.hermes/logs/claude-loop.log | GREP_COLOR='1;32' grep --color=always -E 'SUCCESS|$' | GREP_COLOR='1;31' grep --color=always -E 'FAILED|BACKOFF|$' | GREP_COLOR='1;36' grep --color=always -E 'ISSUE #[0-9]+|$'" Enter +# Kimi feed +tmux send-keys -t "$SESSION:1.3" "echo -e '\\033[1m\\033[33m KIMI FEED\\033[0m' && tail -f ~/.hermes/logs/kimi-loop.log | GREP_COLOR='1;32' grep --color=always -E 'SUCCESS|$' | GREP_COLOR='1;31' grep --color=always -E 'FAILED|BACKOFF|$' | GREP_COLOR='1;36' grep --color=always -E 'ISSUE #[0-9]+|$'" Enter -# Pane 4 (bottom-right): gemini live feed with color -tmux send-keys -t "$SESSION:1.4" "echo -e '\\033[1m\\033[32m GEMINI FEED\\033[0m' && tail -f ~/.hermes/logs/gemini-loop.log | GREP_COLOR='1;32' grep --color=always -E 'SUCCESS|$' | GREP_COLOR='1;31' grep --color=always -E 'FAILED|BACKOFF|$' | GREP_COLOR='1;36' grep --color=always -E 'ISSUE #[0-9]+|$'" Enter +# Claude feed +tmux send-keys -t "$SESSION:1.4" "echo -e '\\033[1m\\033[35m CLAUDE FEED\\033[0m' && tail -f ~/.hermes/logs/claude-loop.log | GREP_COLOR='1;32' grep --color=always -E 'SUCCESS|$' | GREP_COLOR='1;31' grep --color=always -E 'FAILED|BACKOFF|$' | GREP_COLOR='1;36' grep --color=always -E 'ISSUE #[0-9]+|$'" Enter -# Pane 5 (bottom-left): controls with helpers sourced -tmux send-keys -t "$SESSION:1.5" "source ~/.hermes/bin/ops-helpers.sh && ops-help" Enter +# Gemini feed +tmux send-keys -t "$SESSION:1.5" "echo -e '\\033[1m\\033[32m GEMINI FEED\\033[0m' && tail -f ~/.hermes/logs/gemini-loop.log | GREP_COLOR='1;32' grep --color=always -E 'SUCCESS|$' | GREP_COLOR='1;31' grep --color=always -E 'FAILED|BACKOFF|$' | GREP_COLOR='1;36' grep --color=always -E 'ISSUE #[0-9]+|$'" Enter -# Set pane titles +# Pane titles tmux select-pane -t "$SESSION:1.1" -T "Status" -tmux select-pane -t "$SESSION:1.2" -T "Kimi Feed" -tmux select-pane -t "$SESSION:1.3" -T "Claude Feed" -tmux select-pane -t "$SESSION:1.4" -T "Gemini Feed" -tmux select-pane -t "$SESSION:1.5" -T "Controls" +tmux select-pane -t "$SESSION:1.2" -T "Controls" +tmux select-pane -t "$SESSION:1.3" -T "Kimi Feed" +tmux select-pane -t "$SESSION:1.4" -T "Claude Feed" +tmux select-pane -t "$SESSION:1.5" -T "Gemini Feed" -# Border styling +# Styling tmux set-option -t "$SESSION" pane-border-status top tmux set-option -t "$SESSION" pane-border-format " #{pane_title} " tmux set-option -t "$SESSION" pane-border-style "fg=colour240" tmux set-option -t "$SESSION" pane-active-border-style "fg=cyan" -# Focus on controls pane -tmux select-pane -t "$SESSION:1.5" +# Focus on controls +tmux select-pane -t "$SESSION:1.2" -tmux attach -t "$SESSION" +echo "Dashboard ready — attach with: tmux attach -t ops"