<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>ccmon release notes</title>
        <link>https://ccmon.eu/blog</link>
        <description>Releases and changes to ccmon</description>
        <lastBuildDate>Sun, 03 May 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[ccmon v0.1.0 — first public release]]></title>
            <link>https://ccmon.eu/blog/v0-1-0</link>
            <guid>https://ccmon.eu/blog/v0-1-0</guid>
            <pubDate>Sun, 03 May 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The first public release of ccmon — a local Linux daemon and desktop UI]]></description>
            <content:encoded><![CDATA[<p>The first public release of ccmon — a local Linux daemon and desktop UI
that watches every <code>claude</code> CLI session running on your machine,
surfaces what each one is doing, and lets you approve or deny permission
requests from any terminal.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_NWTB" id="highlights">Highlights<a href="https://ccmon.eu/blog/v0-1-0#highlights" class="hash-link" aria-label="Direct link to Highlights" title="Direct link to Highlights" translate="no">​</a></h2>
<ul>
<li class=""><strong>Live monitoring</strong> of every <code>claude</code> session via Claude Code's hook
system. The daemon never spawns <code>claude</code>; it only observes.</li>
<li class=""><strong>Desktop UI</strong> with a Sessions tab, Approvals tab, History tab with
full-text search, and a Settings tab for notifications, retention,
and rules.</li>
<li class=""><strong>Auto-approve rules</strong> with literal / glob / regex patterns and a
<strong>dry-run mode</strong> so you can promote frequent decisions from the audit
log and verify them against real traffic before they take effect.</li>
<li class=""><strong>Approval audit log</strong> — every decision the daemon ever resolved,
with who decided (UI / CLI / notification / timeout / rule).</li>
<li class=""><strong>Desktop notifications</strong> via <code>notify-send</code>, including opt-in
stuck-detection (<code>CCMON_STUCK_THRESHOLD_S</code>).</li>
<li class=""><strong><code>ccmon://</code> deep links</strong> — notification "Open" actions take you
straight to the right approval modal.</li>
<li class=""><strong>Single <code>.deb</code> package</strong> that bundles the daemon and the desktop UI
into one ~70 MB installer — no Python or Node runtime needed on the
user's machine.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_NWTB" id="backend">Backend<a href="https://ccmon.eu/blog/v0-1-0#backend" class="hash-link" aria-label="Direct link to Backend" title="Direct link to Backend" translate="no">​</a></h2>
<ul>
<li class="">HTTP API on <code>127.0.0.1:7777</code> with the next-free-port fallback.</li>
<li class="">WebSocket interface for the desktop UI — single connection carries
sessions, approvals, audit log, and live event stream.</li>
<li class="">SQLite-backed event log at <code>~/.local/state/ccmon/ccmon.db</code>.</li>
<li class="">Fail-safe hook scripts: if the daemon is down, hooks exit <code>0</code> and
Claude Code falls back to its in-terminal prompt. You never lose a
session because the daemon crashed.</li>
<li class=""><code>claude -p</code> summarizers capped at 2 concurrent so you don't burn
through rate limits; summaries cache for 30 s.</li>
<li class=""><code>ccmon doctor</code> for one-shot health checks.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_NWTB" id="ui">UI<a href="https://ccmon.eu/blog/v0-1-0#ui" class="hash-link" aria-label="Direct link to UI" title="Direct link to UI" translate="no">​</a></h2>
<ul>
<li class="">Sessions tab with live state pills (working / awaiting / stuck /
ended) and a chat-style timeline.</li>
<li class="">Three-pane Approvals tab with risk classification, deny-with-message,
deny+interrupt, and a 9-minute countdown.</li>
<li class="">History tab with two subtabs (Sessions browser + Approval audit log),
full-text search, filters, and per-session transcript export.</li>
<li class="">Settings tab covering auto-approve rules, notifications, summaries,
retention, and hooks/daemon status.</li>
<li class="">Rules editor with sample-traffic preview and inline lints.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_NWTB" id="known-limitations">Known limitations<a href="https://ccmon.eu/blog/v0-1-0#known-limitations" class="hash-link" aria-label="Direct link to Known limitations" title="Direct link to Known limitations" translate="no">​</a></h2>
<ul>
<li class=""><strong>Hook timeout is 10 minutes.</strong> If you don't decide within ~9
minutes, the daemon falls back to <code>ask</code> and the in-terminal prompt
fires. Intentional.</li>
<li class=""><strong><code>~/.claude/settings.json</code> is global</strong> — hooks fire for <em>every</em>
Claude Code session on the machine. Sessions started while the daemon
was down still get tracked the moment they fire their next event.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_NWTB" id="getting-started">Getting started<a href="https://ccmon.eu/blog/v0-1-0#getting-started" class="hash-link" aria-label="Direct link to Getting started" title="Direct link to Getting started" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://ccmon.eu/docs/installation/prebuilt-deb">Install the <code>.deb</code></a>.</li>
<li class=""><a class="" href="https://ccmon.eu/docs/guides">App guides</a> — what each tab does.</li>
</ul>
<p>Welcome aboard.</p>]]></content:encoded>
            <category>Release</category>
            <category>Backend</category>
            <category>UI</category>
        </item>
    </channel>
</rss>