<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <title>Work</title>
        <link>https://work.munyamakosa.com/appcast.xml</link>
        <description>Updates for Work</description>
        <language>en</language>
        <item>
            <title>Version 1.4.1</title>
            <pubDate>Mon, 23 Jun 2026 17:51:00 +0000</pubDate>
            <sparkle:version>23</sparkle:version>
            <sparkle:shortVersionString>1.4.1</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>The new mark - Atelier's dovetail</h3>
                <p>A few days after the rename, the brand finally has a mark to match.</p>
                <p>Atelier's new logo is a <b>dovetail joint</b>: a square frame split by a single seam that interlocks two halves without a nail. It's a joinery technique woodworkers have used for thousands of years because it gets stronger the harder you pull on it. A workshop's mark should be a piece of joinery. This one is.</p>
                <h4>What's new in this build</h4>
                <ul>
                    <li><b>New macOS app icon.</b> Graphite squircle, ivory mark, uniform stroke weight, the exact dovetail geometry. After this update lands, your Dock, Finder, App Switcher, and Cmd+Tab all show the new mark.</li>
                    <li><b>New favicons + site icons.</b> Browser tab, iOS home screen, OG cards - every visible icon surface is now the new mark.</li>
                    <li><b>No functional changes.</b> This is a brand release. Everything you can do with Atelier 1.4.0 you can still do here, just with a better-looking icon in your dock.</li>
                </ul>
                <p>The mark was designed against an explicit brief: quiet, precise, owned. The kind of thing you'd recognize stamped on the bottom of something you didn't expect to find it on. Monochrome at heart, geometric, no flourishes.</p>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="7401975"
                type="application/octet-stream"
                sparkle:edSignature="Xd4Bz4ldbQE6++H6eOOn7fqWpBnmoiETFpJj9J04W52Tw/JdotlMs2ynhGS8c3dd2lxqfPCxScoIh8Nk3vKEDQ==" />
        </item>
        <item>
            <title>Version 1.4.0</title>
            <pubDate>Mon, 23 Jun 2026 17:06:00 +0000</pubDate>
            <sparkle:version>22</sparkle:version>
            <sparkle:shortVersionString>1.4.0</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Atelier - same app, better name</h3>
                <p>"Work" was a placeholder. It said nothing. It told you nothing about what was inside. <em>Work</em> is what you do when you'd rather be doing anything else - a verb pretending to be a noun, a name that admits defeat.</p>
                <p>An atelier is the opposite. It's where a craftsman keeps their tools, their unfinished pieces, their drawings on the wall. The work happens there - but the room itself has a name, a feel, a smell, a door you close behind you when it's time to make something.</p>
                <p>That's what this app actually is. Six live Claude sessions in one window. Real terminals, real PTYs, a polished surface over the messy filesystem Claude Code already writes to. It's a workshop. It deserved to be named like one.</p>
                <h4>What changed under the hood</h4>
                <p>Almost nothing. The dock label, the menu bar, every alert and tooltip in the app now says "Atelier" instead of "Work." That's it.</p>
                <p>The bundle identifier stays <code>com.munyamakosa.work</code>, so your install updates in place via Sparkle - no manual reinstall, no <code>/Applications/Atelier.app</code> showing up next to your existing <code>/Applications/Work.app</code>. Next launch, you'll just see the new name. The on-disk filename is still <code>Work.app</code> because changing it would orphan every install on Earth.</p>
                <h4>What about the URLs?</h4>
                <p><code>work.munyamakosa.com</code> stays live forever. Every binary out there checks it for updates, and we don't break things that work. The new home - <b>atelier.dev</b> - is where the marketing and docs migrate over the coming weeks. Both will resolve to the same content; Sparkle will keep updating your install from the old URL until the heat death of the universe.</p>
                <h4>Why now</h4>
                <p>"Work" was never going viral. Searching for it returned the dictionary. People couldn't recommend it to a friend without three sentences of explanation. A name should do work <em>for</em> you - sit in someone's head, make them curious, render well on a screenshot. "Atelier" does. "Work" never did.</p>
                <p>If "Work" already lived in your head, mine too. It'll feel weird for about a week. Then "Atelier" will feel obvious and we'll wonder why it took this long.</p>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9131973"
                type="application/octet-stream"
                sparkle:edSignature="CgLdVrLMOh6ElTrGaQhOtCcqwNLhENBS4mxw2C6Wwa26x+IJ6Ml+a5jN6wqzwcS/BjZ4OIfbNZU4dk+fqqqXCQ==" />
        </item>
        <item>
            <title>Version 1.3.1</title>
            <pubDate>Mon, 23 Jun 2026 16:23:00 +0000</pubDate>
            <sparkle:version>21</sparkle:version>
            <sparkle:shortVersionString>1.3.1</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Memory diet - large sessions no longer balloon Work's RAM</h3>
                <ul>
                    <li><b>Byte-walk JSONL parsing.</b> Opening a conversation used to allocate the full session file as a Swift <code>String</code> just to start parsing - a 191MB session produced a ~400-500MB heap peak before a single message was rendered. Work now memory-maps the JSONL and walks line boundaries directly, emitting one <code>Data</code> slice per line. The mmap'd region is the only large allocation, and it's pageable - the kernel reclaims it under pressure.</li>
                    <li><b>One source of truth for tool output.</b> Every tool result was being stored twice - once in the message's <code>kind</code> enum and again in a sibling <code>text</code> field. The <code>text</code> field is now a computed property that returns a 500-char preview for tool results, so multi-megabyte file dumps and grep outputs only live in one place. Views and exports that wanted the full output read it from the enum directly.</li>
                    <li><b>Smarter semantic search index.</b> The embedding index used to chunk every message - including 5MB tool output dumps - into 512-char fragments, each paired with a 512-float vector. For a 191MB session that built a ~1GB in-memory index just to power semantic search. Work now skips <code>.toolResult</code> rows entirely (you rarely semantic-search a <code>find . -name</code> dump) and caps any single message at 32 chunks. User prompts and assistant text replies still index normally.</li>
                </ul>
                <p>Expected net result: a session view that used to hold 1.5-2GB resident drops to roughly 150-300MB. Multi-session navigation should feel snappier, and Work should no longer feature in Activity Monitor's top spenders after an afternoon of browsing.</p>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9132148"
                type="application/octet-stream"
                sparkle:edSignature="8Xn7eVKjF0tOWxHHCN5bMO3Qsgix5Js4G16p4NBWCeWO72E3TRWfG/5M6rg8ye2esLYL2Yid5sYaXrxQcOHbAQ==" />
        </item>
        <item>
            <title>Version 1.3.0</title>
            <pubDate>Wed, 17 Jun 2026 10:10:00 +0000</pubDate>
            <sparkle:version>20</sparkle:version>
            <sparkle:shortVersionString>1.3.0</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Skip-permissions prompt on every new chat</h3>
                <ul>
                    <li><b>Get asked, every time.</b> Whenever you start a new chat - Cmd+T, sidebar "+", resume from the session list, continue last, or start-on-project-add - Work now asks whether to launch Claude with <code>--dangerously-skip-permissions</code> for that session. No more digging into the terminal to skip prompts on the runs you know you trust.</li>
                    <li><b>Per-session choice.</b> The decision is scoped to the tab you're starting - pick "Skip permissions" for the throwaway scratch session, pick "Use normal permissions" for the production-touching one, side by side in the same window.</li>
                    <li><b>Restart preserves the mode.</b> Use the tab chip's "Restart session" action and Work re-spawns Claude in whichever mode the tab was originally launched. Skip stays skip; normal stays normal.</li>
                    <li><b>Off switch in Preferences.</b> The gear icon's popover has a new "Ask before starting" toggle. Turn it off and Work always starts in normal mode without asking - no chance of accidentally leaving skip on as a default.</li>
                </ul>
                <p><b>Safety note:</b> Skip mode runs Claude without confirming tool use. Faster, but only safe in projects you trust completely. The dialog defaults to surfacing this choice every time precisely so you don't forget which mode you're in.</p>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9133360"
                type="application/octet-stream"
                sparkle:edSignature="pDrmOOyCszXh1VuwzDHeTzi7BtrJfm9HlMVyYrtT3BqG+brRCwK5lM9G5FDXHkoZZ6wN2kC0H0UWDxTx6TwgBg==" />
        </item>
        <item>
            <title>Version 1.2.0</title>
            <pubDate>Tue, 16 Jun 2026 10:30:00 +0000</pubDate>
            <sparkle:version>19</sparkle:version>
            <sparkle:shortVersionString>1.2.0</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Usage tab now shows what your Claude Code use is actually worth</h3>
                <ul>
                    <li><b>API-equivalent value, per range.</b> A new hero in the Activity card shows the dollar value of the Claude API tokens you used this week, month, or year. If you're on Pro or Max, you are NOT billed this - the number is framed against your subscription so you can finally see whether your $20 or $200 is paying off. "≈ 2.4× a month of Claude Pro · 0.2× a month of Claude Max" tells the story at a glance.</li>
                    <li><b>Per-model token attribution.</b> Work now reads <code>message.model</code> from every JSONL line and splits each session's tokens across the models it actually used - Opus 4.8 at $25/M output, Sonnet 4.6 at $15/M, Haiku 4.5 at $5/M. The dollar number is honest about the model mix rather than guessing.</li>
                    <li><b>Heatmap cells now have tooltips.</b> Hover any day on the 52-week heatmap to see date, token count, and dollar value. Native macOS tooltip - pre-computed so hover never triggers a recompute.</li>
                    <li><b>Tokens ↔ Value chart toggle.</b> The activity bar chart can switch between token counts and dollar amounts. Y-axis labels and colour change with the mode - one chart, your choice of unit.</li>
                    <li><b>Top sessions, sortable by value.</b> The Top projects list gets a Value column, and there's a new Top 10 sessions list right below. Toggle between "Tokens" and "Value" sort to find the session that ate the most of your week.</li>
                    <li><b>Pricing freshness without an app release.</b> Pricing data is fetched from work.munyamakosa.com/pricing.json on launch (24h cached, silent fallback to the embedded table on any failure). When Anthropic adjusts prices, your Work install picks up the change without waiting for the next release.</li>
                    <li><b>Cache schema bump.</b> First launch after upgrade re-parses every session JSONL once to populate per-model breakdowns - a couple of seconds for most users, then back to instant.</li>
                </ul>
                <p><b>Heads up for Claude Pro and Max subscribers:</b> the dollar figures shown in the Usage tab are the API-equivalent cost of the tokens you actually used - they are NOT a bill. Your billing is the flat subscription you already pay. The number is for visibility only.</p>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9109024"
                type="application/octet-stream"
                sparkle:edSignature="oMmQtEWUrMIhAjXMbcoF0EtNF1yndEuUxjOHm3EJ4eocik0HmHsPbrzsKKQLHhV34RkihYJUYkek78Y0agj3Bg==" />
        </item>
        <item>
            <title>Version 1.1.0</title>
            <pubDate>Wed, 27 May 2026 14:00:00 +0000</pubDate>
            <sparkle:version>18</sparkle:version>
            <sparkle:shortVersionString>1.1.0</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>MCPs tab, now matching Claude Code's full feature surface - plus in-place session restart</h3>
                <ul>
                    <li><b>Three real scopes, not two.</b> The MCP editor now distinguishes <b>User</b> (every project, only you), <b>Local</b> (only this project, only you - what <code>claude mcp add</code> does by default), and <b>Project</b> (shared with the team via <code>.mcp.json</code>). Previously "Just me" silently dumped MCPs into every project - now it stays put.</li>
                    <li><b>HTTP Headers editor.</b> Bearer-token MCPs (GitHub, Sentry, internal APIs) no longer require hand-editing <code>~/.claude.json</code>. Add <code>Authorization</code>, <code>X-API-Key</code>, anything - values matching common secret patterns are masked by default with an eye toggle to reveal.</li>
                    <li><b>OAuth fields for HTTP/SSE servers.</b> A new "Advanced auth" section lets you pre-configure <code>clientId</code>, <code>callbackPort</code>, <code>scopes</code>, and <code>authServerMetadataUrl</code> for servers that don't support Dynamic Client Registration.</li>
                    <li><b>Always-load + per-server timeout.</b> "Advanced server options" exposes the <code>alwaysLoad</code> toggle (skip Tool Search deferral, load tools every turn) and a per-server tool-call timeout in seconds.</li>
                    <li><b>${VAR} expansion in .mcp.json values.</b> Both <code>${VAR}</code> and <code>${VAR:-default}</code> syntaxes are now expanded against the host environment when parsing - matching Claude Code's documented behavior. The editor still shows the raw <code>${VAR}</code> form so you can see what's in the file.</li>
                    <li><b><code>streamable-http</code> alias recognized.</b> Servers configured with the newer <code>streamable-http</code> transport type now parse correctly (canonicalised to <code>http</code> on save).</li>
                    <li><b>Restart-session in place.</b> New "Restart session" action on the tab chip context menu and in the live-session header's "Running" menu. SIGTERMs the Claude process and respawns it on the same session - so you can pick up newly added MCPs, hooks, or skills without leaving the terminal. If the session was brand new (no <code>sessionId</code> assigned yet), Work uses <code>claude --continue</code> so your just-typed prompts aren't orphaned. The new tab keeps its original position in the bar.</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="8924011"
                type="application/octet-stream"
                sparkle:edSignature="0EaZqX9NCHHs1/cbI2Hwsh0nzEs2iODk1pL5VNyoXn0paM7eO8YHZz+8bUz1dUvQtQs2lsjQUEmBWiTux4m6Cg==" />
        </item>
        <item>
            <title>Version 1.0.15</title>
            <pubDate>Sat, 30 May 2026 11:50:00 +0000</pubDate>
            <sparkle:version>16</sparkle:version>
            <sparkle:shortVersionString>1.0.15</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Snappier tabs + a clean-up pass</h3>
                <ul>
                    <li><b>Tab switching is instant.</b> The previous 280ms cross-fade animation between tabs made every click feel laggy because the UI had to wait for the fade to finish before content was interactive. Removed.</li>
                    <li><b>No more double-fire on tab clicks.</b> Clicking a tab chip was running the navigation handler twice - once via the direct callback, once via the activeTabId onChange. Cascading state mutations all happened twice per click. Consolidated to a single firing path.</li>
                    <li><b>Scrollback cap now actually applies.</b> The 5000-line cap was declared but never assigned to the SwiftTerm terminal - long sessions could grow the in-memory buffer without bound. Fixed.</li>
                    <li><b>AppleScript escaping is honest.</b> Paths or commands containing stray newlines / tabs were silently dropping those characters when embedded into AppleScript literals; now they get properly escaped instead.</li>
                    <li><b>Cleaner file permission flags.</b> Two cache files were being chmod'd with the wrong integer type (Int16 vs mode_t). Aligned.</li>
                    <li><b>CRLF-encoded SKILL.md files parse correctly.</b> Skills authored on Windows or copy-pasted from CRLF sources no longer break YAML frontmatter detection.</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9809705"
                type="application/octet-stream"
                sparkle:edSignature="ukyfMJlyvslGMiXUPI0PVT17UjXwgrP3VVKpImUClzG64TQuEO5byXlXHgZc5+rreiXULUm/bv4P3hM+3g+NBw==" />
        </item>
        <item>
            <title>Version 1.0.14</title>
            <pubDate>Mon, 20 Apr 2026 13:55:00 +0000</pubDate>
            <sparkle:version>15</sparkle:version>
            <sparkle:shortVersionString>1.0.14</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Add Project - one sheet, three paths</h3>
                <ul>
                    <li><b>New "+" button in the sidebar toolbar.</b> Single sheet with three segmented tabs: Open folder, Clone, New folder. Cmd+Shift+N opens it. Same end state for all three - the project appears in the sidebar, is persisted to ~/.claude.json, and can optionally start a Claude session immediately.</li>
                    <li><b>Open folder.</b> Pick any directory, optionally name the first session, Work registers + opens it.</li>
                    <li><b>Clone.</b> Paste a GitHub URL, SSH URL, or owner/repo shorthand. Live streaming clone log. When it finishes, the freshly-cloned repo is already a known project ready for a session.</li>
                    <li><b>New folder.</b> Pick a parent, type a folder name, Work creates the directory, registers it, and can spawn a session in it. Great for kicking off something fresh from scratch without hopping to Finder first.</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9810182"
                type="application/octet-stream"
                sparkle:edSignature="WdYc4VYAFf6M8GbTjnKfWPypNWLhP7WOMPy4PJ/4PL1EvlICtjStvra/ZlPda1Hq7bnnS2Mn13rWn3KyW5SJBA==" />
        </item>
        <item>
            <title>Version 1.0.13</title>
            <pubDate>Fri, 17 Apr 2026 16:50:00 +0000</pubDate>
            <sparkle:version>14</sparkle:version>
            <sparkle:shortVersionString>1.0.13</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Self-relocate to /Applications + drag-to-install DMG</h3>
                <ul>
                    <li><b>Bug fix: "Work can't be updated if it's running from the location it was downloaded to."</b> Some users were launching Work straight from the DMG or Downloads, then hitting a dead-end Sparkle dialog. On first launch from any location outside /Applications, Work now offers to move itself there and relaunch. Declining is remembered - we won't nag.</li>
                    <li><b>Drag-to-install DMG.</b> The disk image now includes an Applications symlink alongside Work.app, so you can drag Work across to install - the standard macOS install experience.</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9638109"
                type="application/octet-stream"
                sparkle:edSignature="YEO6BnW8XAvJ5M9oGlfiDV8WWRDDXMS+xUeIIbC4iHKVvFiy8FW3vkeVbg/JMvGvf28/cj4AlQmstasvtXsaBA==" />
        </item>
        <item>
            <title>Version 1.0.12</title>
            <pubDate>Fri, 17 Apr 2026 15:32:00 +0000</pubDate>
            <sparkle:version>13</sparkle:version>
            <sparkle:shortVersionString>1.0.12</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>GitHub Dark terminal, plus 35 bugs squashed</h3>
                <ul>
                    <li><b>New default terminal theme.</b> Work's embedded terminals now open with a GitHub Dark palette (#24292e on #d1d5da), matching what most devs already live in via VS Code/Cursor. One-line revert path; a Terminal Settings pane with Basic / Homebrew / VS Code Dark+ presets is coming.</li>
                    <li><b>"Project Not Found" fixed.</b> Starting a session in a directory Work hadn't seen before sometimes rendered a "Project Not Found" empty state in the detail pane. Synthetic projects are now inserted into the store synchronously so navigation never misses.</li>
                    <li><b>Open in Terminal.app no longer strands you.</b> If AppleScript automation is denied (or any error surfaces), the in-app PTY is preserved - previously you lost both the tab and the Terminal window. Launcher now reports success/failure and the caller only tears down on success.</li>
                    <li><b>Marketplace plugin installs work on fresh Macs.</b> `claude plugin install` now inherits the enriched PATH (node/npx/git/uv) that embedded terminals already use, instead of launchd's stripped default.</li>
                    <li><b>No more "No sessions yet" flash.</b> Empty state is gated on load completion - initial launch no longer briefly shows it while JSONL parses.</li>
                    <li><b>Directory picker remembers your choice.</b> Fresh directories opened via "Open directory…" now register in `~/.claude.json` so they survive a Work restart even before Claude writes a JSONL.</li>
                    <li><b>MCP rename collision safety.</b> Renaming an MCP to a name that already exists now throws DuplicateName instead of silently overwriting the other entry.</li>
                    <li><b>Sidebar lists every approved project.</b> Projects you've opened with Claude but whose JSONL history got cleaned up now appear (canonicalised by path). Previously only projects with live history were surfaced.</li>
                    <li><b>MCP status detection is tighter.</b> Running-status checks now require BOTH the command basename AND a distinctive arg, so `ls node` no longer false-matches every node-based MCP.</li>
                    <li><b>Dead exited tabs no longer accumulate.</b> Resuming a previously-exited session prunes its ghost chip before spawning.</li>
                    <li><b>Session slug recovery on huge files.</b> `readSlugFromTail` falls back to a 64KB pass if the 4KB tail missed the customTitle line that straddled the boundary.</li>
                    <li><b>Store.load() recovers from wedged reads.</b> A hung load over 30s no longer silently blocks every subsequent refresh; the flag auto-releases.</li>
                    <li><b>Usage aggregate race guarded.</b> Token-totals re-aggregation checks a load generation before publishing, so a slow aggregate from an older load can't clobber newer totals.</li>
                    <li><b>Big perf win on usage aggregation.</b> Replaced `Array(data)` on memory-mapped JSONL with `withUnsafeBytes` - no more full-copy allocation that defeated `.mappedIfSafe`.</li>
                    <li><b>MCP config writes preserve key order.</b> `~/.claude.json` writes no longer alphabetize top-level keys, so hand-ordered config isn't shuffled on every save. Permissions now use mode_t and surface chmod errors.</li>
                    <li><b>Flat `.mcp.json` mixed content rejected.</b> Writing to a `.mcp.json` that mixes MCP entries with non-MCP top-level keys now fails loudly instead of silently breaking the file.</li>
                    <li><b>Tab focus no longer steals across switches.</b> The terminal-first-responder async block re-checks the active tab before claiming focus, so switching tabs mid-render doesn't bounce focus back.</li>
                    <li><b>Dynamic Type friendly popover rows.</b> The project-picker popover row height now scales with accessibility text sizes instead of a hard-coded 40pt.</li>
                    <li><b>Skill operations don't freeze the UI.</b> Auto-invoke/user-invocable toggles, clone-to-personal, and delete now run file I/O on a background task instead of blocking the main thread.</li>
                    <li><b>Cmd+W respects system close-window.</b> When no tab is active, Cmd+W now falls through to closing the current window instead of being swallowed.</li>
                    <li><b>SIGKILL escalation on wedged renames.</b> ClaudeRenamer escalates a timed-out SIGTERM to SIGKILL after a 1s grace instead of leaving a zombie process.</li>
                    <li><b>PID-recycle guard before SIGKILL.</b> Tab close re-verifies the target pid still belongs to a Work descendant before the 3s-later kill, so we can't accidentally signal an unrelated process that reused the pid.</li>
                    <li><b>Misc.</b> Scope tooltip fixed (`~/.claude.json`, not `~/.claude/settings.json`). `force` parameter on close() honored. `sendInputWhenReady` sleep clamped to timeout. AppleScript escaping consolidated. Conflict filter no longer dead-coded. ContentUnavailableView empty-state flashes fixed.</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9625114"
                type="application/octet-stream"
                sparkle:edSignature="JYD/FbaQKCTSf5FfDMY4lLC4Fy9RHFtE+QjT6mQj2s5B413XjjsX9jLWzMrkPjQqoiQBhaO0vAPYoH5mQxU2Dw==" />
        </item>
        <item>
            <title>Version 1.0.11</title>
            <pubDate>Fri, 17 Apr 2026 13:32:00 +0000</pubDate>
            <sparkle:version>12</sparkle:version>
            <sparkle:shortVersionString>1.0.11</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>"Open directory" new sessions are reachable now</h3>
                <ul>
                    <li><b>Fresh directories actually work.</b> Starting a session via "Open directory…" on a folder Work hadn't seen before left you with a tab you couldn't click into and a sidebar that didn't show the new project. Fixed: the picked folder now enters the store synchronously, `selectedProject` points at it, and the new terminal takes over the detail pane immediately.</li>
                    <li><b>No more "project not found" flash.</b> Store.load() (which runs on the file watcher tick or every 30s) was blowing away the ephemeral project and nil-ing selectedProject, causing a layout shift + error state. It now preserves any project the user is actively on until real on-disk data replaces it.</li>
                    <li><b>No eager reload after picking a directory.</b> Removed the extra async reload that was triggering an isLoading skeleton + layout shift seconds after the picker closed. The file watcher catches the real JSONL when Claude writes it.</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9572878"
                type="application/octet-stream"
                sparkle:edSignature="q639BwFnaRsLaWzbRuJKhPnKF5fOg321D8vWr0rmO4tVPFhTjnI+6WWB8QNO7S5BYKrGQyfeQhjfp9Ng8TX2CQ==" />
        </item>
        <item>
            <title>Version 1.0.10</title>
            <pubDate>Fri, 17 Apr 2026 13:05:00 +0000</pubDate>
            <sparkle:version>11</sparkle:version>
            <sparkle:shortVersionString>1.0.10</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>New-session navigation + live busy indicator</h3>
                <ul>
                    <li><b>Bug fix: new sessions in a different project are now reachable.</b> Opening a new session for a project you weren't viewing left a tab chip in the bar that couldn't be clicked into - the detail pane kept showing the old view. Fixed: session-less tabs now navigate the sidebar to their project and render the live terminal in the detail pane.</li>
                    <li><b>Tabs turn orange while Claude is cooking, green when it's ready.</b> Per-tab activity indicator driven by a lightweight idle timer (zero parsing, zero polling). Orange during streaming, back to green 700ms after output stops.</li>
                    <li><b>Red dot on crash/kill.</b> Failed exits and killed sessions now render red instead of orange, so the color no longer collides with the busy state.</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9572149"
                type="application/octet-stream"
                sparkle:edSignature="StxiT8EwmnwY8yn28qOTAl8c4ikjJ0qXDSSw8YNPx1Vlv4u/xhpxqPoGroLHMlOEC4GtpP0Q83TWZrqtNtr0DQ==" />
        </item>
        <item>
            <title>Version 1.0.9</title>
            <pubDate>Fri, 17 Apr 2026 12:40:00 +0000</pubDate>
            <sparkle:version>10</sparkle:version>
            <sparkle:shortVersionString>1.0.9</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Embedded terminals + integrations, built for Opus 4.7</h3>
                <ul>
                    <li><b>Embedded Claude Code terminals.</b> Run six Claude sessions in one window instead of juggling Terminal.app. Real PTY processes, proper scrollback, drag to reorder, hover to close. New Session popover picks the project, optionally names the session, or opens a fresh directory.</li>
                    <li><b>Tab bar with Chrome-style chips.</b> Each open session is a tab at the top of the detail pane. Right-click for Close, Open in Terminal.app. Cmd+1-9 to switch instantly.</li>
                    <li><b>Per-project Integrations panel.</b> Two-click install curated MCPs (Linear, Notion, Sentry, GitHub, Supabase, Stripe, Filesystem, Puppeteer) into any project. Installing during a live session spawns a fresh Claude tab and auto-runs /mcp for OAuth, so you're one click away from connected.</li>
                    <li><b>PATH auto-fix.</b> Embedded terminals now inherit a real developer PATH (~/.local/bin, Homebrew, Cargo, Volta, Node) so <code>claude</code> resolves without shell config edits. No more "Native installation exists but ~/.local/bin is not in PATH" warning.</li>
                    <li><b>MCP writer fixed to match Claude Code 2.1+.</b> User-scope MCPs now write to ~/.claude.json (the canonical location Claude actually reads), not the legacy ~/.claude/settings.json. If you installed an MCP in an earlier version that never loaded - this is why.</li>
                    <li><b>SwiftUI close-confirm dialog.</b> Replaced the old NSAlert on tab close with a SwiftUI alert, so the destructive button actually renders on dark mode.</li>
                    <li><b>Static live-pulse indicator.</b> The streaming-status dot no longer pulses - clean halo + solid dot instead.</li>
                    <li><b>Faster Usage + sidebar.</b> Memoized filtered projects, session search results, and heatmap cells. Big projects with many sessions no longer re-compute on every keystroke.</li>
                    <li><b>Tuned for Opus 4.7.</b> New model defaults aligned with Claude Code v2.1.112+, xhigh effort as the recommended setting, and the new tokenizer's larger max_tokens floor respected when opening sessions.</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="9544150"
                type="application/octet-stream"
                sparkle:edSignature="6CHeo2EUBSjvSBe8CK5mo4LqwZLgaAdXRnFrHm1AGE/CopOpvzT91IHgAxWDYm4vje9EXZ8BsTSuHV2x9aNADg==" />
        </item>
        <item>
            <title>Version 1.0.8</title>
            <pubDate>Tue, 14 Apr 2026 00:30:00 +0000</pubDate>
            <sparkle:version>9</sparkle:version>
            <sparkle:shortVersionString>1.0.8</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Skills, reimagined</h3>
                <ul>
                    <li><b>Full skill metadata.</b> Expanded SKILL.md parsing: when_to_use, allowed-tools, model, effort, paths, argument-hint, user-invocable, disable-model-invocation, license - all surfaced as typed metadata chips in the detail view.</li>
                    <li><b>Rendered SKILL.md preview.</b> Click "View SKILL.md" on any skill to read the full body rendered as Markdown (with proper code blocks, headings, lists). No more guessing what a skill does.</li>
                    <li><b>References + scripts explorer.</b> Each skill's bundled files shown with sizes. Click any one to open it in your default editor.</li>
                    <li><b>Precedence viewer.</b> When a skill name exists at multiple scopes (personal + plugin, project + personal), Work shows which copy Claude actually uses - crown badge for the winner, warning badge for shadowed versions.</li>
                    <li><b>Scope picker.</b> Filter the Skills list by All / Personal / Project / Plugin. Each skill row shows a scope tag (USER, PROJ, PLUG, ENT) at a glance.</li>
                    <li><b>Symlink dedupe.</b> Skills symlinked between ~/.claude/skills/ and ~/.agents/skills/ no longer show twice.</li>
                    <li><b>.skill zip archive support.</b> Packaged skills (like <code>obsidian-brain.skill</code>) now parse and render correctly.</li>
                    <li><b>Plugin-as-skill detection.</b> Plugins with SKILL.md at the root (like claude-reflect) now appear in the Skills list too.</li>
                    <li><b>Skill operations.</b> Create a new skill from scratch (scaffold wizard), clone a plugin skill into your personal folder for editing, toggle auto-invoke and slash-command availability, delete to Trash. Right from the detail view.</li>
                    <li><b>Plugin enable/disable switches.</b> Flip any plugin on or off - Work writes <code>enabledPlugins</code> to ~/.claude/settings.json atomically.</li>
                    <li><b>New Marketplace tab.</b> Browse plugins from every marketplace installed on your machine. Install / Update / Uninstall via Claude's CLI with one click.</li>
                    <li><b>Today token counter.</b> The Usage tab now leads with a hero card showing today's tokens, vs-yesterday delta, and a Input/Output/Cache split.</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="7581540"
                type="application/octet-stream"
                sparkle:edSignature="jW0aMNECENC/iL5fIvpEuLOS0In3kJTOvECHgAQCTf6AzHyjKWgJZkjUkJ/PocIVXT7eFOCfiTUJdbPPFhkoAQ==" />
        </item>
        <item>
            <title>Version 1.0.7</title>
            <pubDate>Mon, 13 Apr 2026 22:42:00 +0000</pubDate>
            <sparkle:version>8</sparkle:version>
            <sparkle:shortVersionString>1.0.7</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Roomier on first launch</h3>
                <ul>
                    <li><b>Bigger initial window.</b> First-launch size bumped 15% (1010 × 670) so the new home screen, sidebar, and Usage charts breathe properly out of the box.</li>
                </ul>
                <p>Existing users keep their saved window size - only first-time installs see the new default.</p>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="7153413"
                type="application/octet-stream"
                sparkle:edSignature="SYC7NJOxkX/uQzz0L725m25cg5HyC5J27Dt0m/THLYJVJVAjI5hA+Ytt43rCrbMiW3lLXYjpwIusC99SOcLyDw==" />
        </item>
        <item>
            <title>Version 1.0.6</title>
            <pubDate>Mon, 13 Apr 2026 22:35:00 +0000</pubDate>
            <sparkle:version>7</sparkle:version>
            <sparkle:shortVersionString>1.0.6</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Renames that actually persist + a usage page worth opening</h3>
                <ul>
                    <li><b>Renames now propagate to Claude.</b> When you rename a session in Work, Work invokes <code>claude --resume &lt;id&gt; --name &lt;newname&gt;</code> headlessly to write the name into Claude's own session file. The new name shows up in <code>claude --resume</code>'s picker and in the terminal title - not just in Work.</li>
                    <li><b>Usage analytics with Week / Month / Year.</b> A new Activity card on the Usage tab shows tokens this period, daily average, peak day, and a clean bar chart. Switch ranges with the segmented control.</li>
                    <li><b>GitHub-style daily heatmap.</b> 52 weeks of activity at a glance, color-binned by adaptive quartiles. Active days, current streak, and longest streak shown above the grid.</li>
                    <li><b>Token usage now caches.</b> First load scans every session file once and writes a per-session cache to Application Support. Subsequent launches feel instant - only files Claude has touched since last run get re-parsed.</li>
                    <li><b>Token counts go to billions and trillions.</b> K, M, B, T suffixes so heavy usage still reads cleanly.</li>
                    <li><b>Polish.</b> Skeleton loading state for the Usage tab while scanning. Activity card chart redesigned with weekly bars for the Month view (no more dead-thin daily lines).</li>
                </ul>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="7153443"
                type="application/octet-stream"
                sparkle:edSignature="nB2OIsfcHhcv+joKlu0Q0h5XceuHzf2VaBgZSCbTHGmNpxci9QjSlwIVKFXYEgOAFTWdtXyW/pi/9I3WAlBdDg==" />
        </item>
        <item>
            <title>Version 1.0.5</title>
            <pubDate>Mon, 13 Apr 2026 20:10:00 +0000</pubDate>
            <sparkle:version>6</sparkle:version>
            <sparkle:shortVersionString>1.0.5</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Big numbers, bigger reach</h3>
                <ul>
                    <li><b>Token counts now scale to billions and trillions</b> - K, M, B, T suffixes so huge usage totals stay readable.</li>
                    <li><b>Rename from the home screen</b> - right-click the feature card or any "Jump back in" card to rename. A subtle pencil icon appears on hover for discoverability.</li>
                    <li><b>Fixed background auto-updates</b> - Sparkle's feed URL is now correctly baked into the app bundle. Updates land silently while you work.</li>
                </ul>

                <p>First release with working silent auto-update. From now on new versions download in the background and flip the badge to "Relaunch to update" when ready.</p>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="6942148"
                type="application/octet-stream"
                sparkle:edSignature="kQPZdtPIo1A5pIEHu1R6wREVqNht49twehbIaJZZv8TqYzOpibOMUtTYICbYIk3JxIN72Lvc5rW0hWkWX2jKCw==" />
        </item>
        <item>
            <title>Version 1.0.4</title>
            <pubDate>Mon, 13 Apr 2026 11:30:00 +0000</pubDate>
            <sparkle:version>5</sparkle:version>
            <sparkle:shortVersionString>1.0.4</sparkle:shortVersionString>
            <sparkle:minimumSystemVersion>15.0</sparkle:minimumSystemVersion>
            <description><![CDATA[
                <h3>Session superpowers</h3>
                <ul>
                    <li><b>Redesigned home screen</b> - App Store-style feature card shows your most recent session with one-click resume. "Jump back in" grid shows the next 4.</li>
                    <li><b>Cross-project session search</b> - type in the sidebar to search sessions across every project by name, project, or message content.</li>
                    <li><b>Name sessions at launch</b> - type a name in the New Session popover and Work applies it automatically as the session starts.</li>
                    <li><b>Rename existing sessions</b> - right-click any session → Rename. Names persist across launches.</li>
                    <li><b>Hide old sessions</b> - right-click → Hide to declutter. Toolbar toggle to show them again.</li>
                    <li><b>Home button</b> - go back to the home screen from anywhere via the new 🏠 icon in the sidebar toolbar.</li>
                    <li><b>⌘N from home</b> - keyboard shortcut to start a new session without touching the mouse.</li>
                </ul>

                <p>All aliases and hide flags live in <code>~/Library/Application Support/com.munyamakosa.work/</code> - nothing Work writes touches Claude's files.</p>
            ]]></description>
            <enclosure
                url="https://work.munyamakosa.com/Work.dmg"
                length="6799247"
                type="application/octet-stream"
                sparkle:edSignature="r3QyoqG195zuo6pLJloCiQzGHLmbdKKY74AXzJfTS4phqLqF25z4gRDYd6G5vOpbWSzpjxAtrx6ni8k9fzhdCA==" />
        </item>
    </channel>
</rss>
