2026-03-21 12:00:18 -04:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
# ── Hermes Ops Dashboard v2 ────────────────────────────────────────────
|
2026-03-22 19:07:27 -04:00
|
|
|
# 5-pane layout:
|
|
|
|
|
# ┌──────────────────┬─────────────────────────────┐
|
|
|
|
|
# │ │ KIMI LIVE FEED │
|
|
|
|
|
# │ STATUS PANEL ├─────────────────────────────┤
|
|
|
|
|
# │ (auto-refresh) │ CLAUDE LIVE FEED │
|
|
|
|
|
# │ ├─────────────────────────────┤
|
|
|
|
|
# │ │ GEMINI LIVE FEED │
|
|
|
|
|
# ├──────────────────┘ │
|
|
|
|
|
# │ CONTROLS │
|
|
|
|
|
# └─────────────────────────────────────────────────┘
|
2026-03-21 12:00:18 -04:00
|
|
|
# ───────────────────────────────────────────────────────────────────────
|
|
|
|
|
SESSION="ops"
|
|
|
|
|
|
|
|
|
|
tmux kill-session -t "$SESSION" 2>/dev/null
|
2026-03-22 19:07:27 -04:00
|
|
|
sleep 1
|
2026-03-21 12:00:18 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# 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
|
2026-03-21 12:00:18 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# Create session
|
|
|
|
|
tmux new-session -d -s "$SESSION"
|
2026-03-21 12:00:18 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# Horizontal split: left 40% (status) | right 60% (feeds)
|
|
|
|
|
tmux split-window -h -p 60 -t "$SESSION"
|
2026-03-21 12:00:18 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# Split right pane into 3 equal feeds
|
2026-03-22 18:58:30 -04:00
|
|
|
tmux split-window -v -p 67 -t "$SESSION:1.2"
|
|
|
|
|
tmux split-window -v -p 50 -t "$SESSION:1.3"
|
2026-03-22 19:07:27 -04:00
|
|
|
# Right is now: 1.2=kimi, 1.3=claude, 1.4=gemini
|
2026-03-22 18:06:38 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# 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 ===
|
2026-03-22 18:06:38 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# Status panel
|
2026-03-21 12:00:18 -04:00
|
|
|
tmux send-keys -t "$SESSION:1.1" "watch -n 20 -t -c 'bash ~/.hermes/bin/ops-panel.sh'" Enter
|
|
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# Controls
|
|
|
|
|
tmux send-keys -t "$SESSION:1.2" "source ~/.hermes/bin/ops-helpers.sh && ops-help" Enter
|
2026-03-22 18:06:38 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# 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
|
2026-03-22 18:06:38 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# 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
|
2026-03-22 18:58:30 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# 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
|
2026-03-22 18:06:38 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# Pane titles
|
2026-03-22 18:06:38 -04:00
|
|
|
tmux select-pane -t "$SESSION:1.1" -T "Status"
|
2026-03-22 19:07:27 -04:00
|
|
|
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"
|
2026-03-21 12:00:18 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# Styling
|
2026-03-22 18:06:38 -04:00
|
|
|
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"
|
2026-03-21 12:00:18 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
# Focus on controls
|
|
|
|
|
tmux select-pane -t "$SESSION:1.2"
|
2026-03-21 12:00:18 -04:00
|
|
|
|
2026-03-22 19:07:27 -04:00
|
|
|
echo "Dashboard ready — attach with: tmux attach -t ops"
|