#!/usr/bin/env bash # ── Hermes Ops Dashboard v2 ──────────────────────────────────────────── # 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 # 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 # 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 # Controls tmux send-keys -t "$SESSION:1.2" "source ~/.hermes/bin/ops-helpers.sh && ops-help" 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 # 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 # 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 # Pane titles tmux select-pane -t "$SESSION:1.1" -T "Status" 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" # 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 tmux select-pane -t "$SESSION:1.2" echo "Dashboard ready — attach with: tmux attach -t ops"