<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Great Work]]></title><description><![CDATA[Great Work]]></description><link>https://greatworkco.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Sun, 01 Nov 2026 00:16:43 GMT</lastBuildDate><atom:link href="https://greatworkco.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Send a number to your menu bar with a link]]></title><description><![CDATA[Every multimeter://set parameter, plus copy-paste recipes for Terminal, shell scripts, git hooks, Shortcuts, Raycast, Python and Node.]]></description><link>https://greatworkco.hashnode.dev/send-a-number-to-your-menu-bar-with-a-link</link><guid isPermaLink="true">https://greatworkco.hashnode.dev/send-a-number-to-your-menu-bar-with-a-link</guid><category><![CDATA[macOS]]></category><dc:creator><![CDATA[Great Work]]></dc:creator><pubDate>Fri, 30 Oct 2026 07:55:58 GMT</pubDate><content:encoded><![CDATA[<p><em>This guide first appeared on</em> <a href="https://multimeterapp.com/guides/url-scheme"><em>multimeterapp.com</em></a><em>. Multimeter is a Mac menu bar app that turns any number into a live meter.</em></p>
<p>Open <code>multimeter://set?key=deploys&amp;value=42</code> and the Sent Value meter with the key <code>deploys</code> shows 42, right away. If it can open a link, it can update a meter. This works in every version of Multimeter.</p>
<h2>Add the meter</h2>
<ol>
<li>Choose Add Meter… from any meter’s menu and pick Sent Value.</li>
<li>In Customize This Meter…, give it a key, like <code>deploys</code>. Keys ignore case.</li>
<li>Send it a value with a link (below). Until the first one arrives the meter says it’s waiting for a value.</li>
</ol>
<h2>Parameters</h2>
<p><em>multimeter://set parameters</em></p>
<table>
<thead>
<tr>
<th>Parameter</th>
<th>What it does</th>
</tr>
</thead>
<tbody><tr>
<td><code>key</code></td>
<td>Which meter. Required. Case doesn’t matter.</td>
</tr>
<tr>
<td><code>value</code></td>
<td>The number. Required. The first number in the text is used, so <code>value=42%25</code> works.</td>
</tr>
<tr>
<td><code>min</code>, <code>max</code></td>
<td>The range, so gauges and bars fill correctly. Default 0 to 100.</td>
</tr>
<tr>
<td><code>label</code></td>
<td>Text for the meter’s label.</td>
</tr>
<tr>
<td><code>unit</code></td>
<td>Shown after the number, like <code>cups</code>. Use <code>%25</code> (an encoded %) for a percentage.</td>
</tr>
<tr>
<td><code>formatted</code></td>
<td>Your own text, shown instead of the number. The value still drives colors and alerts.</td>
</tr>
</tbody></table>
<p>Multimeter remembers the last value for each key, across restarts. Encode spaces as <code>%20</code>.</p>
<h2>Recipes</h2>
<p>From Terminal or any shell script. <code>-g</code> keeps Multimeter in the background so your focus doesn’t jump:</p>
<p><strong>Terminal</strong></p>
<pre><code class="language-bash">open -g "multimeter://set?key=coffee&amp;value=3&amp;max=5&amp;label=COFFEE"
</code></pre>
<p>A small shell function for your <code>~/.zshrc</code>:</p>
<p><strong>~/.zshrc</strong></p>
<pre><code class="language-bash">mm() { open -g "multimeter://set?key=$1&amp;value=$2"; }
# mm deploys 42
</code></pre>
<p>Count uncommitted files after every commit, from a git hook:</p>
<p><strong>.git/hooks/post-commit (make it executable)</strong></p>
<pre><code class="language-bash">#!/bin/sh
n=$(git status --porcelain | wc -l | tr -d ' ')
open -g "multimeter://set?key=dirty&amp;value=$n&amp;label=DIRTY"
</code></pre>
<p>From <strong>Shortcuts</strong>: add a URL action with your link, then Open URLs. Run it from the menu bar, a keyboard shortcut or an automation.</p>
<p>From a <strong>Raycast</strong> script command: any bash script can run the same <code>open -g</code> line.</p>
<p>From Python and Node:</p>
<p><strong>Python</strong></p>
<pre><code class="language-python">import subprocess
subprocess.run(["open", "-g", "multimeter://set?key=queue&amp;value=17&amp;max=100"])
</code></pre>
<p><strong>Node or Bun</strong></p>
<pre><code class="language-javascript">import { spawnSync } from "node:child_process"
spawnSync("open", ["-g", "multimeter://set?key=queue&amp;value=17&amp;max=100"])
</code></pre>
<h2>Check it worked</h2>
<p>Run the Terminal line above with your key. The meter should change within a second, and its menu should show the new value.</p>
<h2>Troubleshooting</h2>
<p><em>What the meter says, why, and what to do</em></p>
<table>
<thead>
<tr>
<th>Symptom</th>
<th>Cause</th>
<th>Fix</th>
</tr>
</thead>
<tbody><tr>
<td>The meter says to give it a key</td>
<td>The Sent Value meter has no key yet.</td>
<td>Set one in Customize This Meter…, the same word you use in key= in the link.</td>
</tr>
<tr>
<td>The meter keeps waiting for a value</td>
<td>No link with that key has arrived since the meter was set up, or the keys differ.</td>
<td>Check the spelling of key= against the meter. Case doesn’t matter, spelling does.</td>
</tr>
<tr>
<td>macOS asks which app to open the link with, or nothing happens</td>
<td>Multimeter isn’t installed in /Applications or hasn’t been opened yet.</td>
<td>Open Multimeter once, then try again.</td>
</tr>
<tr>
<td>Spaces in the label show up as plus signs</td>
<td>The link encoded spaces as +.</td>
<td>Use <code>%20</code> for spaces.</td>
</tr>
</tbody></table>
<h2>Next</h2>
<ul>
<li><a href="https://multimeterapp.com/menu-bar/build-status">Put your build status in the menu bar</a></li>
<li><a href="https://multimeterapp.com/guides/script-meters">Run a script on a schedule instead</a></li>
<li><a href="https://multimeterapp.com/faces">Pick a face for your number</a></li>
<li><a href="https://multimeterapp.com/guides#topics">Ready-made recipes by topic</a></li>
<li><a href="https://multimeterapp.com/guides">All guides</a></li>
</ul>
]]></content:encoded></item></channel></rss>