Skip to content

Commit 088c264

Browse files
DUBSOpenHubGregg CochrandjenseniusOregandCopilot
authored
Combine launcher improvements: Homebrew + fish + multi-terminal detection + --here (#3)
* Combine launcher improvements from PR #1 and PR #2 Cherry-picks the best of both PRs without flipping the beginner-friendly default (new window = wow factor on first run). From #1 (@djensenius): - Homebrew formula (Formula/agent-pulse.rb) + release workflow that auto-updates the tarball URL + SHA256 on new releases - Fish shell alias support in quickstart.sh (alongside bash/zsh) - Multi-terminal-emulator auto-detection in start.sh: Ghostty, iTerm, Kitty, WezTerm, Alacritty, Warp, Terminal.app, tmux, gnome-terminal, xterm, with sensible fallbacks From #2 (@Oregand): - --here flag to run the dashboard in the current terminal (SSH sessions, tmux panes, in-place workflows) Docs updated (README, AGENTS.md, quickstart.sh) to describe both flows and the new agentpulse-here alias. Keeps default behaviour (opens a new window) so the first-run experience stays delightful for non-developers. Co-authored-by: djensenius <782512+djensenius@users.noreply.github.com> Co-authored-by: Oregand <4388753+Oregand@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Docs: update copilot-instructions and site for new launcher + Homebrew Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Gregg Cochran <greggcochran@github.com> Co-authored-by: djensenius <782512+djensenius@users.noreply.github.com> Co-authored-by: Oregand <4388753+Oregand@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent 50326a3 commit 088c264

8 files changed

Lines changed: 337 additions & 34 deletions

File tree

.github/copilot-instructions.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ agent_pulse.py — Main dashboard (single-file, Python/Textual/Rich)
77
agent_pulse.tcss — Textual CSS stylesheet (responsive layout)
88
pyproject.toml — Python packaging + console entry point
99
requirements.txt — Python deps (rich>=13.0.0, textual>=0.50.0)
10-
start.sh — Launcher (auto-opens in a new terminal window)
10+
start.sh — Launcher (auto-detects terminal emulator for new window; --here for in-place)
1111
quickstart.sh — One-command installer
1212
site/index.html — Showcase website (GitHub Pages)
1313
experimental/ink/ — React/Ink TUI (experimental, separate stack)

.github/workflows/release.yml

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
name: Release & Update Homebrew Formula
2+
3+
on:
4+
release:
5+
types: [published]
6+
7+
permissions:
8+
contents: write
9+
10+
jobs:
11+
update-formula:
12+
runs-on: ubuntu-latest
13+
steps:
14+
- uses: actions/checkout@v4
15+
with:
16+
ref: main
17+
18+
- name: Get release tag
19+
id: tag
20+
run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
21+
22+
- name: Download source tarball and compute SHA256
23+
id: sha
24+
run: |
25+
TARBALL_URL="https://github.com/${{ github.repository }}/archive/refs/tags/${GITHUB_REF_NAME}.tar.gz"
26+
SHA256=$(curl -sL "$TARBALL_URL" | shasum -a 256 | awk '{print $1}')
27+
echo "sha256=$SHA256" >> "$GITHUB_OUTPUT"
28+
echo "url=$TARBALL_URL" >> "$GITHUB_OUTPUT"
29+
30+
- name: Update formula version and SHA256
31+
run: |
32+
python3 - <<'PYEOF'
33+
import re
34+
35+
with open("Formula/agent-pulse.rb") as f:
36+
content = f.read()
37+
38+
# Update the source url
39+
content = re.sub(
40+
r'( url )"https://github\.com/.*/archive/refs/tags/.*\.tar\.gz"',
41+
rf'\1"${{ steps.sha.outputs.url }}"',
42+
content,
43+
count=1,
44+
)
45+
46+
# Update the source sha256 (the one right after the url line, before license)
47+
content = re.sub(
48+
r'( url "https://github\.com/.*\.tar\.gz"\n )sha256 ".*?"',
49+
rf'\g<1>sha256 "${{ steps.sha.outputs.sha256 }}"',
50+
content,
51+
count=1,
52+
)
53+
54+
with open("Formula/agent-pulse.rb", "w") as f:
55+
f.write(content)
56+
PYEOF
57+
58+
- name: Verify formula syntax
59+
run: ruby -c Formula/agent-pulse.rb
60+
61+
- name: Commit and push updated formula
62+
run: |
63+
git config user.name "github-actions[bot]"
64+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
65+
git add Formula/agent-pulse.rb
66+
git diff --cached --quiet && echo "No changes to commit" && exit 0
67+
git commit -m "Update Homebrew formula for ${GITHUB_REF_NAME}
68+
69+
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>"
70+
git push origin main

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Agent Pulse is a real-time terminal dashboard for monitoring GitHub Copilot CLI
1313
| `agent_pulse.py` | Main dashboard application (all logic, rendering, data collection) | ✅ Primary target |
1414
| `pyproject.toml` | Python packaging and metadata | Only for version/deps |
1515
| `requirements.txt` | Python dependency list | Keep in sync with pyproject.toml |
16-
| `start.sh` | Launcher — auto-opens dashboard in a new terminal window | Rarely |
16+
| `start.sh` | Launcher — opens dashboard in a new window of the user's terminal (Ghostty/iTerm/Kitty/WezTerm/Alacritty/Warp/Terminal.app/tmux/Linux); `--here` runs in current terminal | Rarely |
1717
| `site/index.html` | Showcase website | For site updates only |
1818
| `experimental/ink/` | React/Ink TUI (experimental) | Separate from main app |
1919

Formula/agent-pulse.rb

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
class AgentPulse < Formula
2+
include Language::Python::Virtualenv
3+
4+
desc "Real-time terminal dashboard for monitoring GitHub Copilot CLI sessions and agents"
5+
homepage "https://github.com/DUBSOpenHub/copilot-cli-agent-pulse"
6+
url "https://github.com/DUBSOpenHub/copilot-cli-agent-pulse/archive/refs/tags/v1.0.0.tar.gz"
7+
sha256 "PLACEHOLDER"
8+
license "MIT"
9+
10+
depends_on "python@3.12"
11+
12+
resource "linkify-it-py" do
13+
url "https://files.pythonhosted.org/packages/2e/c9/06ea13676ef354f0af6169587ae292d3e2406e212876a413bf9eece4eb23/linkify_it_py-2.1.0.tar.gz"
14+
sha256 "43360231720999c10e9328dc3691160e27a718e280673d444c38d7d3aaa3b98b"
15+
end
16+
17+
resource "markdown-it-py" do
18+
url "https://files.pythonhosted.org/packages/5b/f5/4ec618ed16cc4f8fb3b701563655a69816155e79e24a17b651541804721d/markdown_it_py-4.0.0.tar.gz"
19+
sha256 "cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3"
20+
end
21+
22+
resource "mdit-py-plugins" do
23+
url "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz"
24+
sha256 "f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6"
25+
end
26+
27+
resource "mdurl" do
28+
url "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz"
29+
sha256 "bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"
30+
end
31+
32+
resource "platformdirs" do
33+
url "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz"
34+
sha256 "3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a"
35+
end
36+
37+
resource "pygments" do
38+
url "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz"
39+
sha256 "6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"
40+
end
41+
42+
resource "rich" do
43+
url "https://files.pythonhosted.org/packages/c0/8f/0722ca900cc807c13a6a0c696dacf35430f72e0ec571c4275d2371fca3e9/rich-15.0.0.tar.gz"
44+
sha256 "edd07a4824c6b40189fb7ac9bc4c52536e9780fbbfbddf6f1e2502c31b068c36"
45+
end
46+
47+
resource "textual" do
48+
url "https://files.pythonhosted.org/packages/cf/2f/d44f0f12b3ddb1f0b88f7775652e99c6b5a43fd733badf4ce064bdbfef4a/textual-8.2.3.tar.gz"
49+
sha256 "beea7b86b03b03558a2224f0cc35252e60ef8b0c4353b117b2f40972902d976a"
50+
end
51+
52+
resource "typing_extensions" do
53+
url "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz"
54+
sha256 "0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"
55+
end
56+
57+
resource "uc-micro-py" do
58+
url "https://files.pythonhosted.org/packages/78/67/9a363818028526e2d4579334460df777115bdec1bb77c08f9db88f6389f2/uc_micro_py-2.0.0.tar.gz"
59+
sha256 "c53691e495c8db60e16ffc4861a35469b0ba0821fe409a8a7a0a71864d33a811"
60+
end
61+
62+
def install
63+
virtualenv_install_with_resources
64+
end
65+
66+
test do
67+
assert_match "Agent Pulse", shell_output("#{bin}/agent-pulse --help")
68+
assert_match "{", shell_output("#{bin}/agent-pulse --export")
69+
end
70+
end

README.md

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,25 @@
66

77
### 🚀 Install & Launch
88

9+
**Homebrew (recommended on macOS):**
10+
11+
```bash
12+
brew tap DUBSOpenHub/copilot-cli-agent-pulse
13+
brew install agent-pulse
14+
```
15+
16+
**Quick installer (any platform):**
17+
918
```bash
1019
curl -fsSL https://raw.githubusercontent.com/DUBSOpenHub/copilot-cli-agent-pulse/main/quickstart.sh | bash
1120
```
1221

13-
Then just type `agentpulse` — the dashboard opens in a new terminal window automatically.
22+
Then just type `agentpulse` — the dashboard opens in a new window of your current
23+
terminal emulator (auto-detects Ghostty, iTerm, Kitty, WezTerm, Alacritty, Warp,
24+
Terminal.app, and tmux).
25+
26+
Use `agentpulse --here` to run it in the current terminal instead (handy over SSH
27+
or inside a tmux pane).
1428

1529
<div align="center">
1630

@@ -66,14 +80,17 @@ That's it. The dashboard auto-detects your Copilot CLI sessions and starts monit
6680

6781
### Shell Commands
6882

69-
Add these aliases to your `~/.zshrc` or `~/.bashrc`:
83+
Add these aliases to your `~/.zshrc` or `~/.bashrc` (fish users: `~/.config/fish/config.fish`):
7084

7185
```bash
7286
alias agentpulse='~/copilot-cli-agent-pulse/start.sh'
7387
alias agentdashboard='~/copilot-cli-agent-pulse/start.sh'
88+
alias agentpulse-here='~/copilot-cli-agent-pulse/start.sh --here'
7489
```
7590

76-
Then just type **`agentpulse`** or **`agentdashboard`** from anywhere — the live dashboard **automatically opens in a new terminal window** so it never blocks your current session.
91+
Then just type **`agentpulse`** or **`agentdashboard`** from anywhere — the live dashboard **automatically opens in a new terminal window** so it never blocks your current session. The launcher auto-detects **Ghostty, iTerm, Kitty, WezTerm, Alacritty, Warp, Terminal.app, tmux, gnome-terminal,** and **xterm**.
92+
93+
Use **`agentpulse --here`** (or the `agentpulse-here` alias) to run the dashboard **in the current terminal** instead — ideal for SSH sessions or tmux panes.
7794

7895
---
7996

@@ -85,7 +102,13 @@ Then just type **`agentpulse`** or **`agentdashboard`** from anywhere — the li
85102
| **Export** | `python agent_pulse.py --export` | JSON export to stdout |
86103
| **No Splash** | `python agent_pulse.py --no-splash` | Skip boot animation |
87104

88-
### Options
105+
### Launcher Options
106+
107+
| Flag | Description |
108+
|------|-------------|
109+
| `--here` | Run in the current terminal instead of opening a new window |
110+
111+
### Dashboard Options
89112

90113
```
91114
--export, -e Export JSON to stdout
@@ -192,7 +215,7 @@ copilot-cli-agent-pulse/
192215
├── agent_pulse.tcss # Textual CSS stylesheet
193216
├── pyproject.toml # Python packaging + entry point
194217
├── requirements.txt # Python dependencies (rich, textual)
195-
├── start.sh # Launcher (auto-opens in new terminal window)
218+
├── start.sh # Launcher (auto-detects terminal emulator; --here for in-place)
196219
├── quickstart.sh # One-command installer
197220
├── site/ # Showcase website (GitHub Pages)
198221
│ └── index.html

quickstart.sh

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,20 +35,43 @@ echo " ✅ Installed to $DEST"
3535
echo ""
3636

3737
# Auto-add shell aliases if not already present
38+
FISH_CONFIG="$HOME/.config/fish/config.fish"
3839
SHELL_RC=""
3940
if [ -f "$HOME/.zshrc" ]; then
4041
SHELL_RC="$HOME/.zshrc"
4142
elif [ -f "$HOME/.bashrc" ]; then
4243
SHELL_RC="$HOME/.bashrc"
4344
fi
4445

46+
ALIASES_ADDED=0
47+
48+
# bash/zsh aliases
4549
if [ -n "$SHELL_RC" ] && ! grep -q 'alias agentpulse=' "$SHELL_RC" 2>/dev/null; then
4650
echo "" >> "$SHELL_RC"
47-
echo "# Agent Pulse — auto-opens live dashboard in a new terminal window" >> "$SHELL_RC"
51+
echo "# Agent Pulse — live terminal dashboard" >> "$SHELL_RC"
4852
echo "alias agentpulse='~/copilot-cli-agent-pulse/start.sh'" >> "$SHELL_RC"
4953
echo "alias agentdashboard='~/copilot-cli-agent-pulse/start.sh'" >> "$SHELL_RC"
50-
echo " 🔗 Added 'agentpulse' and 'agentdashboard' aliases to $(basename "$SHELL_RC")"
51-
else
54+
echo "alias agentpulse-here='~/copilot-cli-agent-pulse/start.sh --here'" >> "$SHELL_RC"
55+
echo " 🔗 Added 'agentpulse', 'agentdashboard', 'agentpulse-here' aliases to $(basename "$SHELL_RC")"
56+
ALIASES_ADDED=1
57+
fi
58+
59+
# fish aliases (works alongside bash/zsh)
60+
if [ -f "$FISH_CONFIG" ] || echo "${SHELL:-}" | grep -q fish; then
61+
mkdir -p "$(dirname "$FISH_CONFIG")"
62+
touch "$FISH_CONFIG"
63+
if ! grep -q 'alias agentpulse' "$FISH_CONFIG" 2>/dev/null; then
64+
echo "" >> "$FISH_CONFIG"
65+
echo "# Agent Pulse — live terminal dashboard" >> "$FISH_CONFIG"
66+
echo "alias agentpulse '~/copilot-cli-agent-pulse/start.sh'" >> "$FISH_CONFIG"
67+
echo "alias agentdashboard '~/copilot-cli-agent-pulse/start.sh'" >> "$FISH_CONFIG"
68+
echo "alias agentpulse-here '~/copilot-cli-agent-pulse/start.sh --here'" >> "$FISH_CONFIG"
69+
echo " 🔗 Added 'agentpulse', 'agentdashboard', 'agentpulse-here' aliases to config.fish"
70+
ALIASES_ADDED=1
71+
fi
72+
fi
73+
74+
if [ "$ALIASES_ADDED" -eq 0 ]; then
5275
echo " 🔗 Aliases already configured."
5376
fi
5477

@@ -57,6 +80,9 @@ echo " Launch it (opens in a new terminal window):"
5780
echo " agentpulse"
5881
echo " agentdashboard"
5982
echo ""
83+
echo " Run in the current terminal (SSH / tmux / no new window):"
84+
echo " agentpulse --here"
85+
echo ""
6086
echo " Or run directly:"
6187
echo " $DEST/start.sh"
6288
echo ""

site/index.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -817,6 +817,10 @@ <h2 class="section-title glow-green">Up and Running in 30 Seconds</h2>
817817
</div>
818818
<div class="terminal-body">
819819
<div class="install-line"><span class="comment"># Clone the repository</span></div>
820+
<div class="install-line"><span class="comment"># Install with Homebrew (macOS)</span></div>
821+
<div class="install-line install-line-wrap"><span class="prompt">$ </span><span class="cmd">brew tap DUBSOpenHub/copilot-cli-agent-pulse &amp;&amp; brew install agent-pulse</span><button class="copy-btn" data-cmd="brew tap DUBSOpenHub/copilot-cli-agent-pulse && brew install agent-pulse">COPY</button></div>
822+
<div class="install-line">&nbsp;</div>
823+
<div class="install-line"><span class="comment"># — or — clone the repository</span></div>
820824
<div class="install-line install-line-wrap"><span class="prompt">$ </span><span class="cmd">git clone https://github.com/DUBSOpenHub/copilot-cli-agent-pulse.git</span><button class="copy-btn" data-cmd="git clone https://github.com/DUBSOpenHub/copilot-cli-agent-pulse.git">COPY</button></div>
821825
<div class="install-line">&nbsp;</div>
822826
<div class="install-line"><span class="comment"># Enter the directory</span></div>

0 commit comments

Comments
 (0)