<?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" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[nedshed.dev]]></title><description><![CDATA[Guides and gear-tests for the AI-assisted dev. Industrial grade repos with decades of history, brand new ones too.]]></description><link>https://nedshed.dev</link><image><url>https://substackcdn.com/image/fetch/$s_!h2nv!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02458e3c-6ca3-429a-8a99-4831dfd3d4a3_512x512.png</url><title>nedshed.dev</title><link>https://nedshed.dev</link></image><generator>Substack</generator><lastBuildDate>Thu, 16 Apr 2026 03:27:16 GMT</lastBuildDate><atom:link href="https://nedshed.dev/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Ned Twigg]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[nedsheddev@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[nedsheddev@substack.com]]></itunes:email><itunes:name><![CDATA[Ned Twigg]]></itunes:name></itunes:owner><itunes:author><![CDATA[Ned Twigg]]></itunes:author><googleplay:owner><![CDATA[nedsheddev@substack.com]]></googleplay:owner><googleplay:email><![CDATA[nedsheddev@substack.com]]></googleplay:email><googleplay:author><![CDATA[Ned Twigg]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[You need a Windows Remote Desktop, not an OpenClaw]]></title><description><![CDATA[Customizable personal agents for macbook lovers.]]></description><link>https://nedshed.dev/p/you-need-a-windows-remote-desktop</link><guid isPermaLink="false">https://nedshed.dev/p/you-need-a-windows-remote-desktop</guid><dc:creator><![CDATA[Ned Twigg]]></dc:creator><pubDate>Wed, 08 Apr 2026 19:58:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!R63o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>After spending ~12 hrs total tinkering with OpenClaw and Hermes in various configurations (cloud, local, semi-local), this is where I have landed for the foreseeable future:</p><ul><li><p>I have an always-on Windows 11 Pro desktop with Remote Desktop</p></li><li><p>Connected via Tailscale so I can access it from my MacBook or my phone</p></li><li><p>Dispatching scheduled tasks through Claude Cowork</p></li><li><p>With some Hermes tinkering on the side</p></li><li><p>NO MESSAGING GATEWAY (not sure why everybody wants one)</p></li></ul><p>What follows is a short brain dump of what worked for me and what did not. I hear rumors of how OpenClaw has been game-changing for people, and I understand how it can be fun, but I mostly found it less useful than the standard interfaces from Anthropic and OpenAI.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R63o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R63o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg 424w, https://substackcdn.com/image/fetch/$s_!R63o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg 848w, https://substackcdn.com/image/fetch/$s_!R63o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!R63o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R63o!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg" width="1200" height="747.5274725274726" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:907,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1200,&quot;bytes&quot;:2406057,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://nedshed.dev/i/193601244?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R63o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg 424w, https://substackcdn.com/image/fetch/$s_!R63o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg 848w, https://substackcdn.com/image/fetch/$s_!R63o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!R63o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b243e50-c6d8-4711-ae31-5d2467b3d397_2620x1632.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2><strong>Claude Cowork </strong><em><strong>dominates</strong></em><strong> Hermes and OpenClaw at browser tasks</strong></h2><p>I have had tremendous gains from using Playwright to automate the testing of my applications, I am 100% sold on &#8220;agentic browsing&#8221;. There are a bunch of dashboard sorts of things I would love to have, where I want to collate ~5 random websites without APIs into one coherent thing that updates every day. But these websites need auth, and after burning ~4 hours on Camofox, Camoufox, agent-browser, Chrome DevTools Protocol and others, all I can say is - I cannot get any of the open solutions to work, and <em>Claude Cowork just works.</em></p><p>And I mostly expect this to continue! Claude Cowork takes a very different approach - it takes the <em>exact Chrome instance</em> that I use, sticks a plugin into it, and then uses that browser to do stuff. So it looks like me, and the sites believe it! Everything else is faking it, and in general the websites can tell, and so it is flaky. The fakers will get better, the fake-detectors will get better, I want no part in that rat-race. I am surprised that none of the open solutions seem to have built around &#8220;try to be headless but always be able to ask for help if we need it&#8221;, but for now Cowork stands alone.</p><p>Cowork can do scheduled tasks, and you can dispatch it from your phone. If you&#8217;re trying to invest in &#8220;agent personal assistant&#8221; stuff, I would 100% start there.</p><h2><strong>Windows Remote Desktop and Tailscale</strong></h2><p>As mentioned above, part of why Cowork is so good is because it uses the same computer that I do. If you want to be able to walk away from that computer and still fix a login issue, then you need to be able to login and fix stuff. Windows has not exactly covered itself in glory of late, but Windows Remote Desktop is excellent. I <em>hate</em> using Windows. But I was recently working while on plane WiFi. Using the browser on my actual laptop was horrifically slow. But I could remote into my Windows desktop at home, and the performance was flawless. Bizarre but true! To use Remote Desktop, you need Windows 11 Pro. Getting it will cost either $99 or $199, but it will cost you more than $100 to find out which price applies to you.</p><p>The other part to making this work is Tailscale. If you want to access this stuff from your phone or wherever you and your laptop happen to be, then you need some kind of static IP or VPN thing. I strongly strongly recommend just installing Tailscale on all your devices and calling it done - don&#8217;t mess around with static IPs or port forwarding. I think it&#8217;s free for under 5 devices?</p><h2><strong>Expert-in-a-box skills, and my path to Hermes</strong></h2><p>There&#8217;s a few giant unlocks most people seem to agree on - agentic coding first beginning to work with Sonnet 3.5, the big end-of-2025 Claude+Codex upgrade. The only other giant upgrade I have experienced are &#8220;expert-in-a-box&#8221; skills. These are skills that provide structure to a task or problem domain, and I am shocked at how effective they are. I have always done the trick of &#8220;I am an expert in X, I am bad at Y, now explain Z to me&#8221; and it works pretty good. These &#8220;expert-in-a-box&#8221; skills seem to follow that sort of logic, but just cranked way up. Pages and pages elaborating on exactly what sort of expert the assistant should be, cognitive frameworks the assistant should use. It&#8217;s remarkable how useful the results are, and how different the result is from the 1-or-2 sentence primers I have given in the past.</p><p>The ones which have been most transformative for me were<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-1" href="#footnote-1" target="_self">1</a>:</p><ul><li><p>https://marketing-skills.com/</p></li><li><p>https://impeccable.style/</p></li><li><p>https://skills.worksonmymachine.ai/</p></li></ul><p>Some of these skills (impeccable.style for instance) live very naturally inside of a project repository. But others of them (marketing-skills.com for instance) would do better if they were in a 1:n relationship with a group of projects, rather than a 1:1 relationship with any specific project.</p><p>And so the question becomes - where do they go? And mostly I think the answer is &#8220;just into chatgpt.com silly&#8221;. You don&#8217;t need OpenClaw or Hermes to use them, these skills are incredibly portable.</p><ul><li><p>1:1 relationship with you - Claude Cowork</p></li><li><p>1:1 relationship with a project - Put the skills into the project and use Claude Code or Codex</p></li><li><p>other arities of relationship? - I think this is where bespoke agents might be able to provide value that requires too much manual copy-pasting with mainstream products from the big labs<a class="footnote-anchor" data-component-name="FootnoteAnchorToDOM" id="footnote-anchor-2" href="#footnote-2" target="_self">2</a>. One thing I am exploring in particular is that you can expose an Hermes to other Claude Code instances as a tool that they can call. I think it&#8217;s the beginning of &#8220;bespoke middle-management&#8221; for AI builders.</p></li></ul><h2><strong>Hermes &gt; OpenClaw, don&#8217;t setup a gateway</strong></h2><p>I would describe both Hermes and OpenClaw as Claude Code with write access to itself, and a mostly-unnecessary messaging gateway tacked on. I am placing my bets on Hermes for the time being. Simplest reasons to bet on Hermes imo is:</p><ul><li><p>It is very easy to setup multiple of them, create and destroy. Not sure if you want to do X or Y? Do both at once and see which you like better.</p></li><li><p>You can quickly transition an agent back and forth between operating in &#8220;local&#8221; mode (<code>hermes setup terminal </code>to switch), where it has full R/W to itself (and your system!), into &#8220;docker&#8221; mode where it is much safer. So you can get something working in &#8220;local&#8221; mode, where its self-knowledge makes it easy to debug. When it becomes an unattended cron job, switch it to &#8220;docker&#8221; mode and you&#8217;ll be relatively safe with little effort. Something breaks? Go back to &#8220;local&#8221; and fix it.</p></li></ul><p>One of the more tedious parts of getting these running is &#8220;The Gateway&#8221;, where you setup its Slack/Discord/WhatsApp/Email/whatever so that you can talk to it. Don&#8217;t do that.</p><p>You already setup Tailscale, just start a web interface, and bookmark that web interface on your phone.</p><ul><li><p>https://github.com/nesquena/hermes-webui</p></li><li><p>https://github.com/outsourc-e/hermes-workspace</p></li></ul><p>It will have more features than a messaging app can have, you can set it up much faster, and you can vibecode modify them into whatever shape you need. Yes it&#8217;s very duct-tapey to just have a random IP and port bookedmarked on your phone, but&#8230;</p><h2><strong>Reliability</strong></h2><p>I do not have it. I don&#8217;t think you will have it either. Even the big labs don&#8217;t have it! My goal is to make it easy to change and easy to fix, not hard to break.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://nedshed.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! If you enjoyed this and want more like it, you can support this work by becoming a free subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-1" href="#footnote-anchor-1" class="footnote-number" contenteditable="false" target="_self">1</a><div class="footnote-content"><p>I found all of these skills in <a href="https://worksonmymachine.ai/p/the-ghost-in-the-funnel">this excellent post</a>, and I have not personally found any new ones. It&#8217;s really really tough to evaluate a candidate, since the whole point is that the ones I find most useful are the ones I know the least about. Let the popularity power laws begin!</p></div></div><div class="footnote" data-component-name="FootnoteToDOM"><a id="footnote-2" href="#footnote-anchor-2" class="footnote-number" contenteditable="false" target="_self">2</a><div class="footnote-content"><p>Anthropic just launched <a href="https://platform.claude.com/docs/en/managed-agents/overview">Managed Agents</a> on the day this was published! Seems like a good fit for what I&#8217;m using Hermes for, we&#8217;ll see&#8230;</p></div></div>]]></content:encoded></item><item><title><![CDATA[Meet Gitcasso — Syntax Highlighting for GitHub Comments]]></title><description><![CDATA[bonus: how it was made]]></description><link>https://nedshed.dev/p/meet-gitcasso</link><guid isPermaLink="false">https://nedshed.dev/p/meet-gitcasso</guid><dc:creator><![CDATA[Ned Twigg]]></dc:creator><pubDate>Fri, 10 Oct 2025 07:44:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/wm7fVg4DWqk" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this YouTube episode, I walk through Gitcasso - a browser extension that fixes the messy parts of GitHub comments.</p><ul><li><p>&#127912; Syntax highlighting for Markdown comments</p></li><li><p>&#129517; Quick navigation between open PRs and issues</p></li><li><p>&#128190; Optional draft recovery (no more lost work!)</p></li></ul><p>Then we go under the hood: how Gitcasso was built using Claude Code, Playwright, and AI-assisted coding. You&#8217;ll see how snapshot testing makes it easy to develop against a large corpus of use cases, and how slash commands can make the entire development process nearly automatic.</p><div id="youtube2-wm7fVg4DWqk" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;wm7fVg4DWqk&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/wm7fVg4DWqk?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://nedshed.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://nedshed.dev/subscribe?"><span>Subscribe now</span></a></p><ul><li><p><a href="https://github.com/diffplug/gitcasso">source code</a></p></li><li><p><a href="https://chromewebstore.google.com/detail/gitcasso/pcmhndeklkimmcbklmbikdooghkmilpf">install for chrome</a>, <a href="https://microsoftedge.microsoft.com/addons/detail/gitcasso/agldcmiblfnebkjielmgcipekjhejihp">install for edge</a></p></li><li><p>0:00 syntax highlighting</p></li><li><p>0:27 quick navigation between open PRs and issues</p></li><li><p>1:09 draft autosave</p></li><li><p>2:02 how it was built</p></li><li><p>3:06 using the corpus viewer</p></li><li><p>4:37 using a claude slash command</p></li><li><p>5:55 using playwright</p></li><li><p>8:06 fixing a bug using playwright and claude slash commands</p></li><li><p>9:37 how the corpus viewer works</p></li><li><p>10:20 development system design</p><blockquote><p>I think our job as software developers now is to design and describe a camera that captures the problem domain, and then design and describe a camera that captures the output of your solution. Once you&#8217;ve described these systems of lenses, mirrors, and cameras; AI can build them for you. And when you have this ability to image the problem and the behavior of your solution, then AI can build a solution or help you build a solution really effectively. And you can you can oversee it easier because you have these cameras to work with. <em>(edited to replace &#8220;pipe&#8221; with the better concept of &#8220;camera&#8221;)</em></p></blockquote></li><li><p>11:00 precommit script</p></li><li><p>11:23 snapshot tests</p></li><li><p>13:22 outro, thanks for watching</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://nedshed.dev/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! If you enjoyed this and want more like it, you can support this work by becoming a free subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>