hackers
-
Contactless cards and key fobs are now part of everyday life. They unlock apartment buildings, identify employees, open hotel rooms, record attendance and interact with electronic locks. Although many of these credentials look similar from the outside, the technology inside them can be very different. The Chameleon Ultra is a compact, open-source RFID and NFC […] The post Chameleon Ultra: Guide to RFID Reading, Emulation and Testing appeared first on Mobile Hacker.
Mobile Hacker Sep 7, 2026
-
One of the great things about the last quarter century is how much the barriers to entry have fallen around the publishing industry. That has continued to blur […]
ideatrash Sep 6, 2026 -
Claude Code On-The-Go was six agents from an iPhone — kick off a task, pocket the phone, get a ping when something needs me. The async loop is still the point. The stack around it grew into a Grok Bot fleet. I talk to one Grok Bot. The rest of the fleet — household, work, writing, research, the one-shot temps that browse a site or launch a Cursor cloud agent — does not get my DMs. They get tickets. I get a link when something needs a decision, and a sidebar I can actually scan.
Granda | Ideas & Code Sep 6, 2026 -
It is equivalent to a two- to three-percent raise.
ideatrash Sep 4, 2026 -
I had not realized that was possible. It is super annoying.
ideatrash Sep 2, 2026 -
Most people assume that once their phone is locked, their photos are protected from anyone who picks up the device. However, a behavior discovered Jose Rodriguez shows that photos may be accessible during an incoming WhatsApp video call, even while the phone remains locked. Before discussing the issue, it is important to understand a key […] The post WhatsApp Lets You View Photos Without Unlocking Smartphone appeared first on Mobile Hacker.
Mobile Hacker Sep 2, 2026
-
but she's a girl... Sep 1, 2026
-
Even more useful than I thought it would be.
ideatrash Aug 31, 2026 -
The ClockworkPi uConsole is already an interesting portable Linux computer. By connecting a Proxmark3, it can also become portable RFID research for exploring and understanding contactless cards and tags, cloning them and identifying how different cards work and their security. This beginner-friendly guide explains how to install the Proxmark3 client, compile the matching firmware, connect […] The post How to Install Proxmark3 on the ClockworkPi uConsole appeared first on Mobile Hacker.
Mobile Hacker Aug 31, 2026
-
-
Luckily, it could not be simpler to fix.
ideatrash Aug 24, 2026 -
Emacs 31.1 adds a slew of quality-of-life features. It retires its quirky unexec dumper; there are general improvements to tree-sitter, including a much-wanted auto-installer for grammars; and much more.
Mastering Emacs Aug 24, 2026
-
https://github.com/gotbletu/urlportal
gotbletu on Odysee Aug 22, 2026 -
Most of us carry NFC cards every day without even thinking about it. Your office badge. Your apartment key card. Your gym membership card. Your contactless payment card. They’re convenient, fast, and usually just work. But have you ever wondered what would happen if someone deliberately tried to scan those cards while they were still […] The post How Easy Is It to Scan a Contactless Payment and Access Card? appeared first on Mobile Hacker.
Mobile Hacker Aug 20, 2026
-
Historically, I've only ever known two great ways of focusing Emacs windows: the built-in other-window command, which cycles through all the available windows, and the ace-window package, offering random window access. It's not that there aren't more or better ways, I just didn't look any further as these were enough for my needs. While I really wanted to make ace-window my default choice, for whatever reason, it never stuck. other-window with a custom M-o binding always felt like the smoother fit for my limited needs. You see, I hardly ever have more than two visible windows, so whenever ace-window kicked into action (for 3 or more windows), it often took me by surprise. The one area other-window didn't fit my needs revolved around focus requiring visual feedback, but I eventually solved that with winpulse (a little package I wrote). As you can see, I'm a simple man using few Emacs windows, and when it comes to frames, I almost never use more than one. That is until somewhat recently, when I built ytr, a tiny YouTube radio player that sits in the corner of your frame. While it all feels fairly integrated into your frame, under the hood, ytr renders in a separate frame. This broke my trusty other-window flow. I couldn't just focus my radio window using my well-internalized M-o binding. Turns out, other-window actually caters for focusing windows across frames, but only when invoked programmatically. Sure, I can wrap it with my own custom command, but Emacs already had me covered. I found the built-in next-window-any-frame command. All I had to do was bind it to M-o and Bob's your uncle. I can now switch between my current window and my YouTube radio, with my dear M-o binding. Balance restored.
xenodium.com @alvaro Aug 16, 2026
-
Another month, another agent-shell update. If you missed the last one, have a look at the 0.63 update. While this post showcases the latest highlights, the full list of changes is far chunkier than what we'll cover. What's agent-shell? agent-shell is a native Emacs mode to interact with AI agents powered by ACP (Agent Client Protocol). agent-shell enters the chat Since inception in September last year (yikes nearly a year), agent-shell has featured a shell-like experience, powered by comint mode. There's also viewport mode (via agent-shell-prefer-viewport-interaction), if you prefer a more focused experience, and now we have chat mode. Chat mode fuses comint mode with a more traditional chat-like labelling experience. We're living on the edge here, so chat mode is now enabled by default. Ok not really that edgy, it's fairly safe (powered overlays) and can be disabled entirely via (setq agent-shell-chat-mode-enabled nil). Chat mode itself is a minor mode, so you can always toggle it on and off via M-x agent-shell-chat-mode. A little more chatter In the last post, we talked about making agent-shell less chatty with more grouping for the likes of tool calls and agent thinking, all collapsed by default. If that's far too quiet, you can expand by default via (setq agent-shell-activity-group-expand-by-default t). If you found these two settings either too quiet or too chatty, we now have a third alternative via (setq agent-shell-activity-group-expand-by-default 'latest). When set, only the latest grouped activity is expanded by default, and automatically collapsed when the agent moves on to something else. I've become quite fond of this feature (thank you @nhojb for the PR), so yes. It's also enabled by default. Prompt queueing Queuing received some improvements. The related commands have been consolidated under agent-shell-prompt-queue.el. You can queue prompts while the agent is busy, then view, resume, or drop pending prompts via M-x agent-shell-prompt-queue, M-x agent-shell-prompt-queue-resume, and M-x agent-shell-prompt-queue-remove. The pending queue is now shown after each new submission. Compose from anywhere M-x agent-shell-prompt-compose opens a dedicated buffer for crafting a prompt, and it's now more independent of the shell. You can invoke it from any buffer (it resolves to the right shell), C-c C-c sends and returns you to whatever you were doing (fire and forget), and C-u C-c C-c submits the prompt and immediately lets you craft another queued prompt. Start typing sooner Shell initialization may take a second or two, depending on what agent you're using, which meant you had to wait for initialization before you could start typing into your new shell. Unnecessary, so that's no longer the case. Shell prompts are now offered as soon as possible, so one can get typing. Markdown lists While Markdown lists are easily digestible without special rendering, we can do better than that, so we now give them a better treatment with normalized padding, indentation, and of course, civilized bullets. TAB navigation improvements + hints TAB navigation made it into agent-shell fairly early on. I love being able to TAB my way into any section in the buffer and press RET to toggle folding. That's great and all, but we can make the navigation experience richer by welcoming the likes of Markdown source blocks, links, and images to the navigation party. Why these in particular? They are all actionable by RET too, of course. While you'd rightly assume RET opens links to local text files in Emacs and delegates to browsers when needed, Markdown source blocks and images get a similar treatment. While their respective RET actions may not be as obvious, we can certainly make them much more discoverable, so we now add hints. Landing point on an actionable item now echoes a hint of what you can do and which key does it (say, "Press RET to copy" on a source block, "Press + to enlarge" on an image, and so on). Hints are also shown on mouse over events. Image size hints While agent-shell offers agent-shell-markdown-image-max-width for customizing image sizes, it's fairly restrictive. Not all images are the same, so why force them all to fit within the same constraint? agent-shell-markdown-image-max-width continues to offer a preferred default, but you can now scale images differently by getting the agent to annotate Markdown images with Pandoc-style link attributes. The attribute block goes right after the image, taking a width and/or height in pixels or percentages: {width=300} {width=50% height=200} Auto resize I may be sweating the small stuff here, but this was really grinding my gears. We have lovely Markdown table rendering, which I'm glad we do as LLMs aren't always great at producing perfectly aligned tables. In the best of cases, the LLMs align the table perfectly, but it's just too wide for our Emacs window. Luckily, our lovely rendering also wraps cells to make them fit into our window. The thing is, all that lovely rendering goes out the door the moment you either resize your Emacs frame or merely split your window, resulting in a monstrosity like this: I know. I'm sweating the small stuff here, but hey we don't have to live like this. Emacs has all the hooks in the world, so let's track window changes and rejoin the civilized world. On a much smaller scale, I also wanted auto resize for images, so here you have it… Manual resize While we can influence image size at render time, this can still generate undesirable image dimensions, so we can now rescale all images in buffer on demand. Sometimes a hammer really isn't the right tool, so we can now also rescale an image at point. Open file links as you please Opening a local file (from a link, image, or @file mention) now routes through agent-shell-file-display-action, a standard display-buffer action you can customize. The default reuses a window already showing the file, or takes over the current one. If you'd like a different window arrangement, you could do something like: (setq agent-shell-file-display-action '(display-buffer-pop-up-window)) Xref support Following a local file link now pushes your origin onto xref's marker stack, so xref-go-back (M-,) brings you right back to where you were in your agent-shell, just like other Emacs jumps. Use your favorite folding key binding Foldable fragments now use agent-shell-ui-fragment-map and bind agent-shell-ui-toggle-fragment. If you're not a fan of the RET binding to toggle folding, you can now use your preferred binding. If TAB is your jam, you can do something like: (with-eval-after-load 'agent-shell-ui (define-key agent-shell-ui-fragment-map (kbd "TAB") #'agent-shell-ui-toggle-fragment)) Styling thoughts If you prefer styling agent thoughts differently, a new agent-shell-thought-body face lets you do just that. Streaming performance Streaming performance also received some love. Thanks to @suhail-singh for the profiling and improvements, and to @Scott-Guest and @claytharrison for the trace analysis and benchmarking in #757. Richer display of options The "Available config options" section now displays possible values. Public functions Dynamic agent configs agent-shell-agent-configs can now be set to a function, letting you compute the available agent configurations dynamically rather than hard-coding a static list. The function is called on every access, so it stays current across code reloads. Maybe you'd like to list only available agents. Here's a rough snippet. (setq agent-shell-agent-configs (lambda () (seq-filter (lambda (maker) (when-let* ((client (ignore-errors (funcall (map-elt (funcall maker) :client-maker) (current-buffer)))) (command (map-elt client :command))) (executable-find command))) (agent-shell-default-agent-config-makers)))) Subscribe to agent message chunks agent-shell-subscribe-to now broadcasts an agent-message-chunk event, handy for external integrations that want to observe streamed output. Remote agents executable-find now works correctly on remote hosts (#742 by @CeleritasCelery), smoothing out TRAMP-driven remote agents. New third-party packages agent-shell-hq joins the family, offering an interface for managing multiple agent-shell sessions. Maintenance and housekeeping If you peeked at the commit logs, you'll notice I've been working daily on agent-shell, keeping up with project inflow. Since last month, 27 issues have been closed and 13 pull requests merged. As of today, the backlog sits at 11 open issues and 5 open PRs (versus 13 and 4 last time around). If there's something you'd like me to prioritize, feel free to ping. agent-shell needs your support Vendor-neutral tooling matters more than ever, and there are a couple of ways to help keep agent-shell going. Some cost money, others just a click. All are appreciated ;) Sponsorships for agent-shell longevity agent-shell is just me, an indie dev, while the tools it competes with have well-funded teams behind them. Time spent on agent-shell is time away from work that pays the bills, so if it's useful to you, please consider sponsoring the project. And if your employer benefits from your agent-shell use, nudge them to chip in too, they can typically contribute at a scale individuals can't. GitHub stars for exposure GitHub stars help with exposure, attracting new users and potential sponsors. Starring agent-shell costs nothing and can potentially help bring in more funding, so if you don't mind a couple of clicks, the project can really use another GitHub star. Pull requests Thank you to all contributors for these improvements! #730: Queue requests sent during session/push and submit them when it ends (@catern) #737: Add a workaround for goose (@bergmannf) #740: Add a when-active option to agent-shell-activity-group-expand-by-default (@nhojb) #742: Fix executable-find on remote host (@CeleritasCelery) #743: Preserve "claimed" regions when rendering bold / italic / strikethrough (@alberti42) #746: Avoid repeated system-sleep load attempts (@liaowang11) #748: Preserve properties on escaped Markdown punctuation (@Scott-Guest) #752: Guard group member walk against non-advancing block range (@hamza-m-masood) #756: Preserve point during table rendering (@Lenbok) #762: Document viewport workflow (@KarimAziev) #763: Render raw tool output (@mrychlik) #765: Prevent syntax highlighting from delaying other buffers' mode hooks (@Scott-Guest) #766: Refresh viewport header even with nil agent-shell-prefer-viewport-interaction (@catern) Make it sustainable, sponsor the agent-shell Liking agent-shell? Would like to see it evolve? Consider sponsoring the effort.
xenodium.com @alvaro Aug 15, 2026
-
but she's a girl... Aug 14, 2026 -
Both introducing a useful script and talking about harm reduction with AI use.
ideatrash Aug 9, 2026 -
but she's a girl... Aug 7, 2026
-
Ignore the investors behind the curtain.
ideatrash Aug 6, 2026 -
but she's a girl... Aug 5, 2026
-
These are some of the questions I’ve been asked when I’ve talked to friends and family about my researching into asking AI/LLM chatbots for advice. A repository contains […]
ideatrash Aug 3, 2026 -
Over the last week, I designed and performed a small pilot experiment looking at how the generic chatbot AI interfaces handled people asking for the kinds of advice […]
ideatrash Aug 3, 2026 -
It's been a little over a month since the 0.55 update, but plenty has landed since. Let's go through the highlights as of v0.63. What's agent-shell? agent-shell is a native Emacs mode to interact with AI agents powered by ACP (Agent Client Protocol). Supported agents The roster continues to grow. This time we get two new agents supported: Oh My Pi (omp), #631 by @tychoish. Grok Build (xAI), #720 by @eddof13. Additionally: Claude regains rendering thinking output, since its ACP server started omitting by default. Cursor now runs on the official Cursor CLI (agent acp). Note a recent CLI is required, as the acp subcommand was only added in 2026. Codex now uses @agentclientprotocol/codex-acp. Cline now accepts a default model and session mode via defcustoms (#693 by @nhojb). Goose no longer requires an OpenAI key by default (#711 by @hoyon). Qwen now has explicit support for OpenAI-compatible keys. Preferred agent agent-shell-preferred-agent-config gained finer control over agent selection. Set to an agent identifier to skip the picker entirely, or wrap it to keep the picker with a preselected default: (setq agent-shell-preferred-agent-config 'claude-code) always starts Claude, no prompt. (setq agent-shell-preferred-agent-config '(preselect . claude-code)) keeps the picker but preselects Claude as the default. Custom markdown renderers The new markdown renderer introduced in 0.55 is now extensible. Third-party packages can claim and render specific markdown constructs (source blocks, inline code ranges, etc) through agent-shell-markdown-render-functions. Thanks to Andrea Alberti for driving the first integration in agent-shell-math-renderer, which renders LaTeX math equations as SVGs. agent-shell faces If you've wanted more theming control over agent-shell buffers, this is now possible via agent-shell-faces.el. Additionally, check out agent-shell-markdown.el for Markdown theming. Less chatter, more grouping If your agent session requires lots of tool use (fairly typical), you may notice that shell output is fairly verbose or chatty. This can be quite distracting, so from now on, tool usage as well as thinking are grouped together under an "Activity" section (collapsed by default). If you're a fan of the chatty output, not to worry. Use agent-shell-activity-group-expand-by-default to expand the lot by default. The new "Activity" section has customisable headers (via agent-shell-activity-group-header-label-function). You now have three ways of rendering the activity header: Descriptive Collapsed Expanded (setq agent-shell-activity-group-header-label-function #'agent-shell-activity-group-descriptive-label) Count Collapsed Expanded (setq agent-shell-activity-group-header-label-function #'agent-shell-activity-group-count-label) Tally Collapsed Expanded (setq agent-shell-activity-group-header-label-function #'agent-shell-activity-group-tally-label) Inline image and rich content rendering agent-shell can now render agent-supplied image content inline, whether base64-encoded, a remote URL, or a resource_link/resource content block (#676 by @melito). Audio and other binary resources now render as links that can open externally. Per-agent MCP servers You can now attach MCP servers per agent kind through its config using the :mcp-servers field, as requested in #593. Diff improvements Section titles now summarize lines added and removed. In addition, pressing RET in a diff buffer jumps to the file location where the change would apply, while multi-diff permission requests are now supported. Improved out-of-turn handling Some agents emit notifications outside of the usual prompt session request/response turn. Historically, these have been dropped by agent-shell. These out-of-turn notifications should now render as expected. Please file a bug if you continue to run into issues. New copy commands A few new commands for grabbing hidden content out of the shell buffer: M-x agent-shell-copy-as-markdown copies buffer text as markdown. M-x agent-shell-copy-source-block-at-point copies the source block at point. M-x agent-shell-copy-link-url-at-point copies the URL of the link at point. Viewport tweaks The viewport picked up a few refinements: agent-shell-viewport-dismiss-on-send dismisses the viewport once you send. Submitting prompts via C-u C-c C-c now enables you to continue queuing additional requests. History navigation now preserves your in-progress prompt. Session choices The new agent-shell-session-choices-function lets you customize what options are presented when starting a new shell. This is useful if you'd like to hide some of these options: Agent-specific notification adapters A new notification-adapter mechanism enables agent-specific logic to preprocess notifications before handing back to agent-agnostic handling, starting with a Cursor notification adapter (#702 by @aburtsev). Narrow to block M-x agent-shell-narrow-to-block narrows the buffer to the most recent N blocks (defaulting to 1), handy for focusing on the latest exchange (#672 by @arthurgleckler). Keeping the system awake while busy To keep a long agent turn from being cut short by idle sleep, agent-shell now keeps the system awake while an agent is busy, releasing it as soon as the turn finishes (the display may still blank). It won't override a hard sleep such as closing a laptop lid. This needs the system-sleep library (Emacs 31.1+) and can be disabled via agent-shell-inhibit-system-sleep. Thanks to @shipmints for proposing the idea. Artist support M-x agent-shell-artist-insert-text-drawing lets you sketch simple text drawings to drop into a prompt. Check out Bending Emacs episode 14 for a demo, crafting iOS UI. New third-party packages The agent-shell package family keeps expanding. Recent additions: agent-shell-math-renderer: Render LaTeX math equations as SVGs in agent-shell. agent-shell-dashboard: A landing page for agent-shell. agent-shell-links.el: Bookmarks and Org links for agent-shell sessions. agent-shell-desktop: Desktop save mode integration, resuming shells by folder, config, and session id. Maintenance and housekeeping Keeping up with the project requires daily work. Luckily, I'm getting a bit better at time management since my new 24-hour job, so I've been catching up on general project maintenance, delivering bugfixes and feature requests, merging pull requests, and general bookkeeping. At its most backed-up period, in mid-May, agent-shell's open issues peaked at 75 while pending PRs peaked at 29. As of today, we are down to 13 open issues and 4 open PRs. Side note: this chart was generated using the /github-activity skill shared in my emacs-skills repo. agent-shell needs your support Vendor-neutral tooling matters, and there are a couple of ways to help keep agent-shell going. Some cost money, others just a click. All are appreciated ;) Sponsorships for agent-shell longevity agent-shell is just me, an indie dev, while the tools it competes with have well-funded teams behind them. If this project is useful to you, please consider sponsoring the project. And if your employer benefits from your agent-shell use, nudge them to chip in too, they can typically contribute at a scale individuals can't. GitHub stars for Anthropic credit Anthropic offers 6 months of free Claude Max 20x for qualifying open-source projects with at least 5,000+ GitHub stars. Starring agent-shell costs nothing and can save me some money, so if you don't mind a couple of clicks, the project can really use another GitHub star. Pull requests Thank you to all contributors for these improvements! #629: Write .agent-shell/ to .git/info/exclude instead of .gitignore (@phairoh) #631: Add implementation/support for oh-my-pi (omp) (@tychoish) #632: Render tool call parameters for non-standard tools like MCP calls (@martenlienen) #633: Add GitHub Actions workflow for ERT tests (@phairoh) #634: Update art generated by agent-shell-hermes--ascii-art (@TamsynUlthara) #639: Preserve window position when restarting (@Gleek) #647: Adjust region line counting when ending at the beginning of a line (@bcc32) #648: Don't italicize intraword underscores (@liaowang11) #651: Post test results on fork PRs (@phairoh) #652: Fix file paths in README for model registration (@vellvisher) #653: Add a reference to agent-shell-desktop.el (@timfel) #656: Fix previous-item skipping the current fragment's heading (@liaowang11) #658: Fix viewport previous-page navigation and stale position label (@liaowang11) #659: Use native ERT JUnit reporting in CI (@phairoh) #661: Don't delete temp dir on agent-shell-restart (@arthurgleckler) #664: Fix transcript section heading glued to interrupted agent message (@liaowang11) #665: Don't trigger completion on path separators in file paths (@liaowang11) #666: Preserve viewport edit draft when queued request executes (@liaowang11) #667: Fix markdown rendering for non-streamed bodies (@arthurgleckler) #672: Add agent-shell-narrow-to-block (@arthurgleckler) #676: Render agent image content blocks inline (@melito) #686: Fix command to pull Qwen2.5 model in README (@jcubic) #687: Record session ID and model in transcript header (@alberti42) #693: Fixes for cline agent (@nhojb) #695: Fix unexpected resize of the window header (@jcubic) #696: Strip source-buffer properties from grabbed region context (@liaowang11) #697: Fix agent-shell-send-dwim double-inserting context with prefix arg (@liaowang11) #698: Fix mouse-copy inside formatted text (@jcubic) #702: Add cursor toolcall output adapter (@aburtsev) #707: Add hermes to default agent configs (@eliferrous) #709: Prevent programmatic fragments ending up in undo history (@martinbaillie) #711: Update goose to not require OpenAI key by default (@hoyon) #713: Align embedded-image rendering with link rendering (@alberti42) #715: Fix table column wrapping for CJK text (@ktakahashi74) #716: Fix resuming copilot session (@gnufied) #717: Make the markdown render context available via a public function (@alberti42) #720: Add first-class Grok Build (xAI) ACP support (@eddof13) #721: Fix hidden streamed Markdown headings (@regadas) #727: Fetches the proper Pi logo (@JanJoar) Make it sustainable, sponsor the effort Liking agent-shell? Would like to see it evolve? Consider sponsoring the effort.
xenodium.com @alvaro Jul 22, 2026
-
And is therefore sus.
ideatrash Jul 21, 2026 -
Or: Does it matter if my story is strange?
ideatrash Jul 19, 2026 -
-
The monster was in us all along.
ideatrash Jul 13, 2026 -
Otherwise everyone would have it.
ideatrash Jul 7, 2026 -
I've been a happy ready-player user for some time now. I consider the Emacs package fairly feature-complete, for my needs anyway. Well almost. While I've successfully migrated most of my music-listening to offline playback, there are the odd times when I enjoy streaming YouTube audio. I've pondered extending ready-player for this use case, but its current approach is fairly file-driven. For starters, it uses dired as a core abstraction. Before venturing on a major refactoring, without even knowing if an Emacs streaming flow would stick, I decided to build a new package. Coincidentally, this enables me to experiment with the package UX without being restricted by ready-player's needs. And so that's what I did in my new YouTube radio package ytr. ytr really is fairly experimental. I'm currently driving its development purely on current needs. Let's see where it goes. It borrows lots from ready-player, but its UX presents itself more as a widget. I'm kinda liking the experience. There isn't much to it: you add a channel URL, and its content metadata is automatically pulled and presented as a child frame. I've also sprinkled in some eye candy (animations), reminiscing about the Winamp days. Beware, these sweets require running on Emacs GUI. ytr is powered by mpv and yt-dlp, the real streaming workhorses doing the heavy lifting. ytr is available on GitHub if you're keen to check it out. Keep in mind this is a brand new package and a first iteration, so it may need some improvements. If you give it a try, I'd love to hear how you got on. I've only tested on macOS so far. Make it sustainable, sponsor the effort Liking ytr? Would like to see it evolve? Consider sponsoring the effort.
xenodium.com @alvaro Jun 23, 2026
-
Smart glasses with camera are becoming more common, fitting into everyday life. They look like normal sunglasses — but they can record video, capture audio, and take photos at any moment. The post Smart Glasses Can Record You – And Detecting Them Isn’t So Simple appeared first on Mobile Hacker.
Mobile Hacker Jun 14, 2026
-
It's been a little while since my last agent-shell update, so let's go through the latest highlights as of v0.55. What's agent-shell? agent-shell is a native Emacs mode to interact with AI agents powered by ACP (Agent Client Protocol). Picking up where I left off If you noticed slower project activity in April, this is why. I'm getting better at the new 24-hour job, so I've resumed working on agent-shell. I'm still chipping away at the backlog that built up while I was away, but if there's anything in particular you'd like me to look at, feel free to ping. Anthropic, Google, and why ACP matters With Anthropic's SDK subscription support changing, Google's Gemini CLI deprecation, and Antigravity's unclear support for the Agent Client Protocol (ACP), vendor-neutral tools matter more than ever. Luckily, agent-shell is built on ACP, which sidesteps the problem. When a vendor changes course, you can swap providers and keep using your preferred tool. No need to reshape that hard-earned muscle memory. On that note, the list of agents supported by agent-shell continues to grow. Supported agents Here's a list of the latest agents now supported by agent-shell. Auggie Claude Cline CodeBuddy (new by @illidan127) Codex Cursor Factory Droid Gemini CLI GitHub Copilot CLI Goose Hermes (new by @yitang) Kimi Code (new by @nicolaisingh) Kiro Mistral Vibe OpenCode Pi Qwen Code agent-shell needs your support Speaking of vendor-neutral tools being more important than ever, there are a couple of ways to help keep agent-shell going. Some cost money, others just a click. All are appreciated ;) Sponsorships for agent-shell longevity agent-shell has been attracting quite a few users. It's nice to hear folks are using agent-shell on a daily basis. They are often relieved agent-shell exists as an alternative to AI-tools commonly mandated at work. Those tools have well-funded engineering teams behind them, while agent-shell is just me, an indie dev ;) Time spent on agent-shell is time away from work that pays the bills, so if it's useful to you, please consider sponsoring the project. Every individual sponsorship genuinely helps keep the project going. And if your employer benefits from your agent-shell use, they're typically in a position to contribute at a scale individuals can't, so nudge them to chip in too. Hey, I'm looking at you, folks at Google, GitHub, GitLab, NVIDIA, Oracle, Red Hat, Yelp, Venmo, ARM, Spotify, Augment Code, Hinge, Mercury, Nubank, Veeva… Some of you are using agent-shell. Nudge your employer ;) GitHub stars for Anthropic credit Anthropic offers 6 months of free Claude Max 20x for qualifying open-source projects with at least 5,000+ GitHub stars. Starring agent-shell costs nothing and can save me some money. We're only a 5th of the way there ;) so if you don't mind a couple of clicks, the project can really use another GitHub star. Speaking of GitHub stars, agent-shell is now my most popular Emacs package, recently overtaking chatgpt-shell. New markdown renderer agent-shell now ships with a brand new, more performant inline markdown renderer. This is the biggest internal change in some time. Enabled by default via agent-shell-markdown-render-function (moving away from the overlay-based renderer in shell-maker). Access/navigate table content Table content is now accessible. Point can land on any cell, which wasn't possible with the previous overlay implementation. In addition, tables are now also navigable: TAB and S-TAB move between cells. Improved source block support (enabled by default) Source-block syntax highlighting is now on by default. The per-snippet copy button is now keyboard-accessible too (previously mouse-click only, due to the overlay implementation). New blockquotes support Blockquotes now render in both shell and viewport. More importantly, you can select text in either a viewport page (or the shell itself), press r (for reply) and the selection becomes a blockquote in a fresh prompt. Viewport Shell Session restoration Session restoration got a meaningful overhaul (#605 by @nhojb), now exposed via agent-shell-session-restore-verbosity, with four levels: minimal (default): title only, so restore is fast and quiet (needs session/resume support). last: render the last prompt turn (needs session/load support). first-last: render the first and last prompt turns (needs session/load support). full: replay the whole conversation (needs session/load support). Feature availability is agent-specific, requiring either session/resume or session/load request support. agent-shell degrades as needed, ultimately falling back to creating a new session. Note that anything but minimal verbosity is fairly new, so please report bugs or rough edges. Relatedly, agent-shell-session-strategy now defaults to 'prompt, and 'new-deferred has been retired. Session forking You can now fork the current session, starting a new shell that shares the conversation history so far and diverges from there. Invoke via M-x agent-shell-fork. Restart/reload session You can now restart the current shell anew (drop history) via M-x agent-shell-restart or reload (keep history) via agent-shell-reload. Downloads/Temp shells The new agent-shell-new-downloads-shell and agent-shell-new-temp-shell commands create agents anchored at either ~/Downloads or a temp directory. Both are also reachable via C-u M-x agent-shell. TRAMP support acp.el #20 by @martenlienen landed support for ACP connections over TRAMP, now making it possible to drive remote agents from agent-shell. Pair it with agent-shell-tramp for the user-facing integration. Viewport improvements Viewport interaction (setq agent-shell-prefer-viewport-interaction t) continues to be my primary way to interact with agents. It is focused (see only the latest interaction), fast (single-key bindings: y = yes, c = continue, m = more…), and offers a richer editing experience (dedicated prompt-crafting buffer). The viewport is just a viewport to shell content. You can have your cake and eat it too, by jumping to the related shell buffer if needed. Queueing From a viewport, you can press r to reply to the latest agent response. In the past, you could only reply to idle agents. You can now press r to reply to busy agents too, automatically queuing requests on submission. List editing mode A new (basic) agent-shell-list-edit-mode lets you edit list-style content inside the viewport. Improved buffer selection Some commands prompt you to pick one of your active shell buffers (e.g. M-x agent-shell-send-region-to). The picker now shows extra context for each buffer to help you choose. The same mechanism is now used by the new M-x agent-shell-switch-buffer command. More on the underlying API later. Improved folding Folding got smarter (#608 by @codeluggage): M-x agent-shell-ui-toggle-fragment toggles the fragment at or near point (DWIM). M-x agent-shell-ui-toggle-all-fragments cycles globally between all-expanded and all-collapsed. Together they replace the previous agent-shell-ui-toggle-fragment-at-point, which is now an internal primitive. c joins the viewport reply gang You can now press c from a viewport to quickly send a "continue" request, joining the rest of the single-key reply shortcuts: c: replies "continue" (new) y: replies "yes" m: replies "more" a: replies "again" 1 … 9: replies with the corresponding numbered choice r: opens the reply compose buffer R: same as r, with the agent response quoted More compact status rendering Tool call status is now rendered as a compact icon-based label by default (agent-shell--inverse-icon-status-kind-label). agent-shell-styles.el ships several alternatives, picked via agent-shell-status-kind-label-function. To get the previous word-based label back: (setq agent-shell-status-kind-label-function #'agent-shell--inverse-label-status-kind-label) Codex defaults You can now set a default model and session mode for Codex via agent-shell-openai-default-model-id and agent-shell-openai-default-session-mode-id (#405 by @robjgray). Both must match an ID from Codex's "Available models" / "Available modes" listings. Emacs 31 fixes Headers had a few rendering hiccups on Emacs 31. These are now fixed (#588 and #590 by @nhojb, #463 by @ftlio). Warnings from deprecated when-let usage were also cleared. Wayland clipboard support wl-paste is now a supported clipboard handler for pasting images on Wayland (#461 by @martenlienen). Windows clipboard support Similarly, pasting clipboard images now works on Windows via PowerShell (#572 by @repelliuss). Header improvements The graphical header got minor tweaks here and there. For example, thought level is now displayed in the header. It can be changed via M-x agent-shell-viewport-set-session-thought-level as well as menus (#601 by @martenlienen). Session config options agent-shell now supports ACP session config options (#553 by @greggroth and #613 by @catern). Bind C-c C-s (or call agent-shell-set-session-config-option) to pick from the options the agent advertises. Broadcasted as config-option-update and available externally via agent-shell-subscribe-to. Interrupt confirmation You can now skip interrupt confirmations by unsetting agent-shell-confirm-interrupt (#424 by @emil-e). Public functions Resume sessions by ID You can now resume an existing session by its ID via M-x agent-shell-resume-session (#332). Primarily useful for external integrations. Outgoing request decorator You can now use agent-shell-outgoing-request-decorator to tag or transform outgoing requests. Subscribe to idle events agent-shell-subscribe-to now broadcasts idle events (#509 by @arthurgleckler). Getting shell buffers agent-shell-shell-buffer returns the underlying shell buffer for the current context. Last vs interaction at point agent-shell-goto-last-interaction jumps to the latest prompt/response pair, while agent-shell-interaction-at-point returns the interaction at point as data. Shell status agent-shell-status returns 'busy, 'blocked, or 'ready status for any shell buffer. Session title The agent-supplied session title is now exposed via the session-title-changed event (delivered via agent-shell-subscribe-to) (#559 by @smagnuso). Can be handy for buffer names, bookmarks, or recent listings. New third-party packages The agent-shell family of third-party packages keeps growing. Recent additions: agent-shell-knockknock: Notifications for agent-shell via knockknock.el. agent-shell-notifications: Desktop notifications for agent-shell events. agent-shell-hud: Real-time agent-shell status overlay via a floating dashboard. agent-shell-pet: Codex-like pets that broadcast agent-shell session states. agent-shell-tramp: Tramp integration for agent-shell. agent-circus: Run AI coding agents in sandboxed Docker containers. Pull requests Thank you to all contributors for these improvements! #308: Fix heartbeat nil value crash in timer and busy indicator (@ElleNajt) #340: Add documentation about the OAuth Anthropic authentication (@chemtov) #397: Add detailed context usage indicator mode (@emil-e) #398: Expose outgoing-request-decorator as a defcustom (@emil-e) #405: Codex defaults for session mode and model (@robjgray) #408: Use diff-command for diffing (@timfel) #413: Track and manage diff buffers for each permission request (@emil-e) #418: Add defvar for agent-shell-mode-hook + test (@emil-e) #420: Replace all references to "Claude Code Agent" with "Claude Agent" (@jinnovation) #421: Add agent-shell-clear (@Makesesama) #424: Add agent-shell-confirm-interrupt option (@emil-e) #425: README: Update all references to Claude Code (@jinnovation) #429: Viewport attachment fixes (@nhojb) #438: Fix for structured input from toolCall.rawInput.plan (@timfel) #442: Add related project agent-circus to README.org (@rpoisel) #445: Use project-name instead of default-directory in header (@bcc32) #446: Droid: use native acp client and support default model and mode (@kohnish) #450: Fix restart using wrong default-directory (@zackattackz) #453: Ensure that viewport compiles (@martenlienen) #457: Prefer cache directory over tmp for caching (@martenlienen) #460: Unhandled method returns an error, unblocking client (@0x6362) #461: Add wl-paste as a Wayland image handler (@martenlienen) #463: Fix header text invisible when font-get :size returns 0 (@ftlio) #469: Do not create a file if no image in Wayland clipboard (@martenlienen) #473: Caching project files completions for improved performance (@Gleek) #477: Handle non-text content in user_message_chunk during session load (@Gleek) #483: Add CodeBuddy agent support (@illidan127) #489: Snapshot session strategy in any case (@timfel) #492: Update claude-agent-acp repository (@Gleek) #498: Normalize missing MCP transport collection fields for ACP compatibility (@CsBigDataHub) #503: Add agent-shell-macext to related projects (@cxa) #509: Add agent-shell-idle-alert-functions (@arthurgleckler) #513: Quote reply to the complete response with R (@martenlienen) #515: Make detection of binary files more robust (@martenlienen) #523: Add agent-shell-org-transcript to Related projects (@lllShamanlll) #528: Add support for Kimi Code CLI using ACP (@nicolaisingh) #529: Sort the session list based on recency (@smagnuso) #530: Add simple blinking circle as busy indicator (@rudolf-adamkovic) #532: Fix removing queued messages (@Gleek) #536: Add programmatic query API: agent-shell-query and agent-shell-shell-buffer (@eddof13) #539: Add ob-agent-shell to related projects in readme (@eddof13) #545: Keep buffer name on agent-shell-reload and -restart (@timfel) #550: Add agent-recall to related projects (@Marx-A00) #551: Avoid gitignore update for external data dirs (@Silex) #552: Use helper function from shell-maker rather than eob (@smagnuso) #553: Add ACP session config options support (@greggroth) #554: Fix error when cancelling session selection prompt (@Gleek) #555: Add some niceties useful for agent-shell-list (@vermiculus) #559: Expose topic in agent-shell (@smagnuso) #561: Update Pi coding agent logo to look more official (@jeff-phil) #565: Enable @ and / completion when reading queued prompts (@Gleek) #571: Fix unkillable buffer after major-mode change (@Scott-Guest) #572: Add clipboard image support for Windows (@repelliuss) #574: Add agent-shell-pet link to README (@lgmoneda) #582: Add a few additional forward declarations (@tychoish) #583: Add Hermes Agent support (@yitang) #588: Fix header foreground color (emacs 31) (@nhojb) #589: Only trim response region when region is active (@martenlienen) #590: Fix context-limit header color (emacs-31) (@nhojb) #595: Fix / completion regression in viewport buffers (@Gleek) #600: Do not emit permission-request for auto-handled permissions (@Gleek) #601: Expose thought level (reasoning effort) in header, mode line and keymaps (@martenlienen) #602: Update README with Opencode and Ollama setup instructions (@dvictori) #605: Add agent-shell-restore-context defcustom (@nhojb) #608: Toggle folding for everything & comfortably fold at point (@codeluggage) #609: Prevent accidental auto-scrolling in viewport buffers on tool calls (@martenlienen) #611: Fix agent-shell-hermes-acp-command (@TamsynUlthara) #613: Improve completion for set-session-config-option (@catern) #618: Fix header not showing session mode name (@deftsp) #621: Reindent Elisp files (@bcc32) #623: Add agent-shell-hud to related packages (@nohzafk) #625: Fix source-block face background not rendering when theme loads after package (@phairoh) #627: Hermes: add default-session-mode-id to match other agents (@yitang) #629: Write .agent-shell/ to .git/info/exclude instead of .gitignore (@phairoh) #632: Render tool call parameters for non-standard tools like MCP calls (@martenlienen) #633: Add GitHub Actions workflow for ERT tests (@phairoh) #634: Update art generated by agent-shell-hermes--ascii-art (@TamsynUlthara) #639: Preserve window position when restarting (@Gleek) Bug fixes #202: Header icon is double the expected size #278: Heartbeat causes high CPU usage with many agent buffers #366: .agent-shell/ directory at risk when switching git branches #400: agent-shell-viewport-reply-1 errors with "Text is read-only" #401: Garbled characters output when using non-English languages #412: Diff buffer management is messy #414: agent-shell-mode-hook timing makes subscribing to events difficult #417: Unhandled notifications with kiro #426: Starting conversation before agent has initialized leaves "dangling" text #431: Heartbeat timer keeps running after failed/abandoned authentication in OpenAI #435: xclip clipboard handler silently saves text as PNG in terminal mode #441: Background agent notifications treated as stale after session/prompt response #443: image-type: Invalid image type 'svg on calling agent-shell #455: agent-shell enters frozen/hanging state when receiving unknown notifications #462: Header text invisible when font-get :size returns 0 #465: Session load crashes on non-text user message chunks (e.g. images) #466: agent-shell-diff-accept-all / -reject-all now focus the originating shell #468: wl-paste-image-handler breaks pasting text #481: History input rolls back in insert editing mode while pressing up/down arrows #485: Shells created in other workspaces no longer display #493: Tables rendered in agent-shell break cursor (point) navigation #533: Can't install agent-shell from MELPA #548: Copied highlighted text from agent output includes trailing backtick #563: "Cannot modify map in-place" when starting agents #577: agent-shell-get-config does not work in an agent-shell-command-prefix function #587: Long region preview's "Expand…" button is sent literally to the agent #617: OpenCode: consent prompt shows empty input when request_permission arrives before tool_call_update populates rawInput Lots of polish Beyond what's showcased, I've poured much love and effort into polishing the agent-shell experience. Interested in the nitty-gritty? Have a look through my regular commits. Make the work sustainable If agent-shell is useful to you, please consider sponsoring the project. I'm now back to working on agent-shell daily. LLM tokens aren't free, and neither is the time dedicated to building this stuff (especially as an indie dev). I also have bills to pay ;) Unless I can make this work sustainable, I will have to shift my focus to work on something else that is. ✨ Sponsor agent-shell ✨
xenodium.com @alvaro Jun 11, 2026
-
The Flipper Zero was never really about "hacking" other people's devices; its true value was helping owners understand how secure their own devices actually are. It allowed enthusiasts to find weak spots and think like a hacker to understand how an attacker might exploit or misuse common tech, like RFID cards, rolling codes, replay attack, bad USB, or remote controls. The post The Flipper One: Hacking Gadget is Becoming a Pocket Linux PC appeared first on Mobile Hacker.
Mobile Hacker May 20, 2026
-
A Sony PSP-2000 is a 333 MHz MIPS handheld from 2007 with 64 MB of RAM. Mine, this week, runs a 15-million-parameter Transformer and streams English text onto the LCD at one to two tokens per second.
Granda | Ideas & Code May 16, 2026 -
xAI launched Grok Build yesterday — their answer to Claude Code and Codex CLI. The install command is one line, the binary is gated behind their top consumer tier ($299/mo, $99 intro), and the agent itself talks to Grok 4 through an OpenAI-compatible HTTP surface. I downloaded the binary because I was curious what language it was built in. I came out the other end with thirty-odd verbatim system prompts, the names of every internal subagent, every tool description, and a fairly complete picture of the architecture. None of it took more than tr and grep.
Granda | Ideas & Code May 15, 2026 -
In May 2026, Google disclosed CVE‑2026‑0073 as a Critical vulnerability in the Android System component, specifically the adbd subcomponent (part of the ADB stack). The bulletin states it could lead to remote (proximal) code execution as the shell user with no user interaction required. The post Android RCE via Wireless Debugging: From Network Access to Shell appeared first on Mobile Hacker.
Mobile Hacker May 12, 2026
-
but she's a girl... May 9, 2026
-
The scariest line in homelab automation is the one that edits a firewall rule on the router you’re SSH’d in through. Here’s how Claude Code and I edit them anyway. The Fear I needed to flip a UDM Pro rule named “Block inter-VLAN traffic” from accept to drop. The rule had been miswired for ages — set to accept, short-circuiting every per-flow allow above it — and closing it back down was the whole point. The orchestrator running the change was a NixOS VM on my home network. If the flip took out the path that VM (or my own SSH) was using, I’d be locked out of my own router with no console fallback.
Granda | Ideas & Code May 5, 2026 -
If you’ve been using a ClockworkPi uConsole as a daily device, chances are you’ve noticed something slightly off about the input experience. The keyboard works, the trackball works—but neither feels as precise or refined as you’d expect from such a well‑designed handheld. If you would like to know more about uConcole, check out my previous […] The post Fixing uConsole Trackball and Keyboard Issues appeared first on Mobile Hacker.
Mobile Hacker Apr 18, 2026
-
but she's a girl... Apr 6, 2026
-
The other day, my partner and I went into the hospital as two and came out as three. This week, I became a father. From the second I cuddled this little fella, I felt like I'd known him my entire life. I love him so much. Since going indie dev full-time, I've enjoyed a great degree of flexibility to work on personal projects. This has enabled me to share more via blog posts and YouTube videos, but also dedicate more time to projects like agent-shell. It is now my most popular Emacs package, receiving lots of attention from users (bug reports, pull requests, discussion, etc). If you've been in touch recently and haven't heard from me, now you know why. Fatherhood is new to me. I'll need a little time to adjust while finding my footing. While my hope is to continue working on my indie projects, sustainability is now… errm, a tad more important. If you get value out of my work, please consider sponsoring. Better yet, if you use my tools at work, consider getting your employer to sponsor me instead. I also run a blogging service and offer a handful of iOS/macOS apps. If you're keen to journal or take quick notes on iOS, Journelly is my take on it. Bonus points for Emacs users, as it saves entries to an org file. Now, please excuse me while I start crafting my son's first init.el… ps. This post was stitched up from a handful of seconds here and there, in between all the sleep-deprived but loving activities currently rocking my world.
xenodium.com @alvaro Apr 3, 2026
-
Granda | Ideas & Code Apr 3, 2026
-
Today we will look at the ClockworkPi uConsole as a pocket‑sized Linux. I will explain what the device is, what comes in the box, how to install popular OS images (Kali, Ubuntu, Arch, RetroPie), how to expand it with the growing lineup of expansion boards, and practical workflows you can reproduce. Where helpful, I link […] The post uConsole Review: A Portable Linux Cyberdeck appeared first on Mobile Hacker.
Mobile Hacker Mar 30, 2026
-
I wanted to understand how spacecraft computers work. The real-time scheduling, the radiation hardening, the delay-tolerant networking that keeps Mars rovers talking to Earth. With Artemis II on the horizon (the first crewed lunar mission in over 50 years) it felt like the right time to dig in. So I built a simulator. From scratch. With Claude Code as my pair programmer. No physical hardware. Everything runs in QEMU and Docker on a laptop. Code on GitHub.
Granda | Ideas & Code Mar 30, 2026 -
Your car is parked 95% of the time. Inside it sits a chip capable of 300-500 trillion operations per second, connected to cooling, power conversion, and a cellular radio. It does nothing. Tesla and xAI want to change that. On March 11, Elon Musk unveiled “Macrohard” — internally called Digital Optimus — a joint project that turns parked Teslas into personal AI agents. Not chatbots. Agents that watch your screen, control your mouse and keyboard, and do actual work.
Granda | Ideas & Code Mar 13, 2026 -
I have been using the Pilot G2 for a long time. I use my Lamy Safari to write things when I have time. But, when I have to get something done, I always reach for the Pilot G2. The G2 is one of the best pens I have ever written with in my life. It’s reliable, smooth, and an absolute joy to use. I would go as far as to say, it would be the pen I would pick if the entire world had to use only one pen. I also love how cheaply available it is. You can go to almost any stationary store and buy it for the same price, if not less, as other gel pens. If you haven’t tried the Pilot G2, I strongly recommend you try it out. If you never tried a gel pen before, you will probably never go back.
blog on sufyaan's corner Mar 12, 2026 -
We got quite a few agent-shell additions since the last post, so let's go through the highlights as of v0.47.1. What's agent-shell? Agent shell is a native Emacs mode to interact with LLM agents powered by ACP (Agent Client Protocol). Your employer can make a difference agent-shell has been attracting quite a few users. Many of you are working in tech where employers are happily paying for IDE subscriptions and LLM tokens to improve productivity. If you are using agent-shell for work, consider getting your employer to give back by sponsoring the project. I also know many of you work at AI companies offering paid agents like Claude Code, Copilot, Gemini, Codex, etc. all supported by agent-shell. Please nudge your employers to help fund projects like agent-shell, which are making their services available to more users. ✨ Sponsor agent-shell ✨ So what's new? claude-code-acp renamed to claude-agent-acp [Action Required] Let's get this one out of the way, as it needs actioning. Both the npm package and the CLI agent have been renamed from claude-code-acp to claude-agent-acp (to align with Anthropic's branding guidelines). If you're using Claude Code, you'll need to update: npm remove -g @zed-industries/claude-code-acp npm install -g @zed-industries/claude-agent-acp If you had customized agent-shell-anthropic-claude-acp-command, update it to point to claude-agent-acp. New agents supported Auggie (#179 by @Pacane). Cline. Factory Droid (#178 by @ag91). GitHub Copilot. Kiro CLI (#351 by @zmjones). Mistral Vibe. Pi (#232 by @conornash) Bootstrapped sessions (experimental) This was a biggie. How sessions are loaded is now configurable via agent-shell-session-strategy. When set to 'new, starting a new shell delivers a fully bootstrapped session before presenting you with the shell prompt. This means the ACP handshake, authentication, and session creation all happen upfront. You can enable this flow with: (setq agent-shell-session-strategy 'new) What's the benefit? Bootstrapped sessions enable changing models and session modes (Planning, Don't ask, Skip permissions, etc…) before submitting your first prompt. For the time being, the existing (deferred) behaviour is still offered via 'new-deferred. Just set as follows: (setq agent-shell-session-strategy 'new-deferred) Session resume (experimental) Probably the most requested feature and also facilitated by the bootstrapping changes. agent-shell-session-strategy also unlocks session resume. Set it to 'prompt and every time either M-x agent-shell-new-shell or C-u M-x agent-shell are invoked, you'll be offered to resume previous sessions or start a new one. (setq agent-shell-session-strategy 'prompt) Alternatively, you can set to 'latest to always resume the most recent session in current project. Under the hood, there are two ways to pick up from previous session: session/resume (lightweight, no message replay) and session/load (full history replay). By default, agent-shell prefers resuming (controlled by agent-shell-prefer-session-resume). Please favor resuming for the time being as loading has more edge cases to sort out still. Note: Both resuming and loading sessions are agent-dependent. Some agents may not yet support either, especially as the features aren't yet considered stable in Agent Client Protocol (see session/list spec). This feature was a collaboration between @farra, @travisjeffery, and myself. Clipboard images You can now use agent-shell-send-clipboard-image (#285 by @dangom) to send images straight from your clipboard into agent-shell. Clipboard images are saved to .agent-shell/screenshots in your project root and inserted into the shell buffer as context. Note: You'll need either pngpaste or xclip installed on your system for the feature to automatically kick in. In addition, we now have agent-shell-yank-dwim: if the clipboard has an image, it pastes it as context. Otherwise, it yanks text as usual. In other words, copy an image anywhere to your system's clipboard and paste/yank into the buffer as usual (typically via C-y). Status display + tool calls Status labels and tool call titles rendering got some improvements. Status reporting is generally more compact, redundant text is dropped from tool call titles, and tool status/kind shortening has been consolidated. Image rendering agent-shell now renders images inline. When agents output images (charts, diagrams, screenshots, etc.), they display directly in the shell buffer. You may need to nudge the agent to output image paths in the expected format so agent-shell can pick up. Markdown images:  Any of the following in a line of their own are supported also: /path/to/image.png file:///path/to/image.png ./output/chart.png ~/screenshots/demo.png Recognized image formats depend on what your Emacs was built with (typically png, jpeg, gif, svg, webp, tiff, etc. via image-file-name-extensions). Emacs skills While on the topic of image rendering, this works particularly well when coupled with charting agent skills. I shared some of these over at emacs-skills, demoed in episode 13 of the Bending Emacs series. Table rendering Tables are now rendered using overlays (#17 by @ewilderj). Usage tracking Tracking usage now possible (#270 by @Lenbok): A color-coded context usage indicator in the header (green -> yellow -> red as context fills up), enabled by default via agent-shell-show-context-usage-indicator. M-x agent-shell-show-usage to check token counts, context window usage, and cost in the minibuffer.r- An optional end-of-turn usage summary can be enabled via (setq agent-shell-show-usage-at-turn-end t). Git worktree shell If keen to run multiple agents on the same repo without stepping on each other's work, M-x agent-shell-new-worktree-shell facilitates this via git worktrees (#255 by @nhojb). Send context to… You can now send context to a specific shell using agent-shell-send-file-to, agent-shell-send-region-to, agent-shell-send-clipboard-image-to. and agent-shell-send-screenshot-to. These prompt you to pick a target shell. Both M-x agent-shell and agent-shell-send-dwim are now prefix-aware. C-u forces a new shell, while C-u C-u prompts you to pick a target shell. Compose buffer improvements Compose buffers now support file (via @) and command (via /) completions. It is now also possible to browse previous pages via C-c C-p and come back to your prompt draft. There's also prompt history navigation/insertion when composing prompts via M-p (previous), M-n (next), and M-r (search). Bringing context into viewport compose buffers is now more robust. For example, carrying context into a new viewport compose buffer is now supported (#383 by @liaowang11). Viewport improvements While viewport interaction was introduced in the previous post, it is now my preferred way of interacting with agent-shell. You can enable via (setq agent-shell-prefer-viewport-interaction t). In any case, viewport buffers got a handful of quality-of-life improvements. Single key replies without needing to open a compose/reply buffer: y sends "yes" (handy for quickly answering agent questions). 1-9 sends digits (handy for quickly choosing options). m sends "more" (handy for requesting more of the same kind of data). a sends "again" (handy for requesting to carry out instructions again). Customizable context sources agent-shell-context-sources lets you configure which DWIM context sources are considered by M-x agent-shell, agent-shell-send-dwim, and compose buffers. You can control the order sources are checked and add custom functions. Defaults to files, region, error, and line. I'm always on the lookout for some DWIM goodness. If you add your own context function, I'd love to hear about it. Flycheck support While on the topic of context sources, in addition to picking up flymake errors at point, flycheck errors are now automatically recognized (#219 by @Lenbok). Diff improvements Diff buffers got some love too, now with syntax highlighting (#198 by @Azkae). There's also a new agent-shell-diff-mode-map for customizing diff keybindings, which avoid inheriting unsupported features from the parent mode. You can also press f to open the modified file from a diff buffer. Additionally, you can now press C-c C-c from an agent-shell-diff buffer to reject all changes (same binding as the shell itself). Event subscriptions You can now programmatically subscribe to agent-shell events like initialization steps, tool call updates, file writes, permission responses, permission requests, and turn completions. This opens the door for building integrations on top of agent-shell. (agent-shell-subscribe-to :shell-buffer (current-buffer) :event 'file-write :on-event (lambda (event) (message "File written: %s" (alist-get :path (alist-get :data event))))) Permission UX improvements Permission dialogs got a few improvements. Amongst them, automatic navigation to the next pending dialog and also making executed commands more prominent for some agents. Permission responder function You can now programmatically respond to permission requests via agent-shell-permission-responder-function. A built-in agent-shell-permission-allow-always handler is provided to auto-approve everything (use with caution): (setq agent-shell-permission-responder-function #'agent-shell-permission-allow-always) Claude Code OAuth token support OAuth token now supported for Claude Code (#339 by @chemtov). Transcript improvements Markdown transcripts generation needed love. Thank you @Idorobots and @systemfreund for the improvements (#374, #325, and #326). Session ID display With (setq agent-shell-show-session-id t), session IDs are now displayed in header as well as session lists (#363 by @Cy6erBr4in). Custom CWD function agent-shell-cwd-function now enables customizing how agent-shell determines the working directory sent to agents. Configurable dot-subdir location agent-shell-dot-subdir-function now lets you customize where agent-shell keeps per-project files (#378 by @zackattackz). Lambda MCP servers agent-shell-mcp-servers now accept lambda functions too (#237 by @matthewbauer). Useful for setups like claude-code-ide using dynamic MCP details. Buffer name format agent-shell-buffer-name-format now makes buffer naming configurable. Choose between the default title case ("Claude Code Agent @ My Project"), kebab-case ("claude-code-agent @ my-project"), or provide your own function (#256 by @nhojb). Inhibit minor modes during writes agent-shell-write-inhibit-minor-modes lets you temporarily disable modes (like auto-formatting entire file) when agents write files (#224 by @ultronozm). File autocompletion performance File autocompletion is now more performant for larger repositories (#262 by @perfectayush). Container modeline indicator When running shells inside a container, a [C] indicator now shows up in the modeline (#250 by @ElleNajt). Graphical header improvements Graphical header rendering is more robust now (#275 by @nhojb). Busy throbber display options The busy/working indicator now offers multiple visual styles, customizable via agent-shell-busy-indicator-frames (#280 by @Lenbok). New related packages agent-shell-to-go: Interact with agent-shell sessions from your mobile or any other device via Slack (by @ElleNajt). meta-agent-shell: Multi-agent coordination system for agent-shell with inter-agent communication, task tracking, and project-level dispatching (by @ElleNajt). agent-shell-workspace: Dedicated tab-bar workspace for managing multiple agent-shell sessions (by @gveres). Pull requests Thank you to all contributors for these improvements! #159: Improve Mistral Vibe documentation (@KaiHa) #162: Fix agent-shell-help-menu binding (@jinnovation) #164: Fix nil-check semantics in when-let (@jinnovation) #166: Use project-name for buffer names (@catern) #169: Resolve @mentioned paths in devcontainers (@fritzgrabo) #173: Fix when-let binding issue (@byronclark) #178: Add Factory Droid capability (@ag91) #179: Add Auggie support (@Pacane) #185: Update OpenCode logo (@bps) #186: Use context in viewport mode (@byronclark) #193: Handle user_message_chunk session update type (@Lenbok) #196: Fix agent names when config icons are off (@budevg) #197: Function-based container command runner (@rpoisel) #198: Syntax highlighting in diffs (@Azkae) #199: Fix reply in viewport mode (@byronclark) #200: Prevent context from own agent-shell buffer (@juboba) #204: Terminal-mode status labels (@whhone) #206: Add Evil section to README (@juboba) #208: Theme-aware status label color (@whhone) #209: Add missing image require (@timvisher) #212: Simplify language detection (@necaris) #213: Improve file and command completion (@necaris) #214: Fix auto-insert variable declaration (@ultronozm) #219: Flycheck error context support (@Lenbok) #224: Inhibit minor modes during file writes (@ultronozm) #226: Deduplicate file link (@bixuanzju) #232: Add Pi coding agent (@conornash) #235: Fix empty list normalizer (@ROCKTAKEY) #237: Lambda MCP servers (@matthewbauer) #240: Fix viewport shell buffer association (@Rutherther) #245: Fix :tool-calls state maintenance (@vermiculus) #246: Respect viewport visits for buffer ordering (@Rutherther) #249: Fix tool call title duplication (@ElleNajt) #250: Container modeline indicator (@ElleNajt) #252: Document C-c C-c to send (@HIRANO-Satoshi) #255: Git worktree shell (@nhojb) #256: Buffer name format customization (@nhojb) #257: Fix kebab-case project name (@nhojb) #262: File autocompletion speedup (@perfectayush) #266: Guard permission title rendering (@budevg) #269: Add missing paren (@Rutherther) #270: Session usage tracking (@Lenbok) #272: Update Copilot ASCII art (@ewilderj) #275: Graphical header improvements (@nhojb) #279: Add agent-shell-send-dwim to transient (@matthewbauer) #280: Busy throbber options (@Lenbok) #285: Clipboard image pasting (@dangom) #289: Session list/load/resume (@farra, @travisjeffery) #291: Normalize tool call commands (@ultronozm) #292: Strip text properties from copied text (@ultronozm) #293: Restore usage indicator color (@Lenbok) #295: Handle tools without a command (@byronclark) #296: Handle nil tool-call command (@genegoykhman) #299: claude-code-acp -> claude-agent-acp rename (@byronclark) #312: Function-valued model ID (@lgfang) #316: Fix diff syntax highlighting (@Azkae) #318: Tool call parameters in transcripts (@systemfreund) #319: Fix terminal Emacs font crash (@eddof13) #325: Log agent thoughts in transcript (@Idorobots) #326: Fix nested backtick fences in transcript (@systemfreund) #328: Switch modes in agent-shell-diff (@wmedrano) #329: Fix tests (@timvisher-dd) #313: Bring "Start a new session" to the top (@catern) #335: Fix plan from request_permission (@Azkae) #339: OAuth token support for Anthropic (@chemtov) #350: Prepare devcontainer package extraction (@fritzgrabo) #351: Add Kiro CLI ACP support (@zmjones) #353: Fix xclip blocking on X11 (@chemtov) #363: Configurable session selection columns (@Cy6erBr4in) #370: Fix permission UI on out-of-order status updates (@xar7) #374: Indent markdown headers in transcript (@systemfreund) #376: Fix file skip check (@zackattackz) #378: Configurable dot-subdir location (@zackattackz) #382: Permission-request and turn-complete subscription events (@emil-e) #383: Viewport context on first open (@liaowang11) #385: Fix leading space in terminal prompt (@bcc32) #388: Apply dir-local variables in shell buffer (@fritzgrabo) Bug fixes #168: replace-buffer-contents timeout to prevent freeze on large diffs #170: Suppress effects of find-file-noselect during agent writes #175: ACP configuration JSON-RPC inserted into shell #180: Terminal-friendly keybindings #189: Changing the model with Claude causes hang #191: user_message_chunk session updates no longer dump raw JSON #220: Python comments no longer interpreted as Markdown headers #265: session/request_permission with argv array commands #297: Unexpected tool-call command type error #300: agent-shell-send-region no longer fails silently without a region #303: Context insertion for new deferred sessions #319: Fix "Wrong type argument: font, unspecified" in terminal Emacs (fix by @eddof13) #335: Plan not displaying from session/request_permission (fix by @Azkae) #345: Out of turn notifications inserted into shell #353: xclip handler blocking on X11 when clipboard has no image (fix by @chemtov) #361: loadSession regression #370: Permission UI not reacting on status failed/completed (fix by @xar7) #376: File skip check using full path instead of filename only (fix by @zackattackz) #385: Leading space in agent-shell-select-config prompt in terminal frames (fix by @bcc32) Lots of polish Beyond what's showcased, I've poured much love and effort into polishing the agent-shell experience. Interested in the nitty-gritty? Have a look through my regular commits. Make the work sustainable If agent-shell is useful to you, please consider sponsoring the project. These days, I've been working on agent-shell daily. LLM tokens aren't free, and neither is the time dedicated to building this stuff. While I now have more time to work on agent-shell as an indie dev, I also have bills to pay ;) Unless I can make this work sustainable, I will have to shift my focus to work on something else that is. ✨ Sponsor agent-shell ✨
xenodium.com @alvaro Mar 12, 2026
-
Cost-per-wear is a metric that helps you decide which products to buy. It saves money, the environment and makes you feel better. Whenever I have to make a purchase, I consider cost-per-wear over the upfront price. This is due to numerous reasons. Firstly, considering cost-per-wear adjusts for product quality and longevity. Look at the table below: Product Cost Expected Wears CPW A $50 250 $0.2 B $100 1000 $0.1 As you can see, Product B is the clear winner in terms of value, despite being costlier upfront compared to product A. As a result, cost-per-wear saves you money in the long run. Another reason I consider cost-per-wear is because of product quality. Premium products just feel better to use. They can add that feeling of luxury in your day-to-day life. Companies that produce high-quality products in an age where it seems like most manufacturers are producing cheap, barely usable products ought to be supported. Lastly, cost-per-wear is (mostly) environmentally conscious. Buying a product that’s made using sustainabilly-sourced, high-quality materials allows you to use the product for longer and ensures that it doesn’t end up in a landfill sooner. In conclusion, cost-per-wear helps me purchase products in a way that benefits everyone. Me, the company, and the environment.
blog on sufyaan's corner Mar 9, 2026 -
I’ve been using hledger to manage my finances for the past week, and I find it to be a spectacular tool for this purpose. For the uninitiated, hledger is a command-line plaintext accounting tool. It allows you to generate overviews and statements about your spending to anaylze your finances. This can help you identiy spending habits and patterns. Since I started using it, I’m more conscious about my spending. I know that I have to add every purchase to my hledger journal file, and that I’ll be looking at how each purchase is tied to my spending goals. This allows me to follow my budget. Another reason I love hledger is that it works flawlessly on my phone using Termux. It’s identical to how it works on my desktop, which eliminates the need for a separate application. hledger also has a vast array of features related to investments. I find it handy to see my investment performance. It gives lots of advanced metrics, many of which I never heard of. It feels like a complete tool in this regard. I also used the HTML output feature more times than I’d like to count. It allows you to view your expenses in the browser, which makes it easier to navigate and view your reports on a bigger screen. I mainly use the is (income statement) and bal (balance) commands, as they provide the most useful overview for me. I aliased them which makes viewing my spending effortless. Since hledger deals in plaintext files, I found it to be easy to edit on-the-go. I love being able to do work without internet access. Backing up and syncing is also simple. I used to use a spreadsheet. hledger is freeing. I’m finally able to view detailed information about my spending with just a few keystrokes. It would have taken me hours trying to do that on a spreadsheet. In conclusion, I’m very happy with hledger. It has made me more conscious of my spending and fits my workflow perfectly. I highly recommend trying it out!
blog on sufyaan's corner Mar 8, 2026 -
I had been using Artix and Void Linux for the past few months as a way to distance myself from systemd. I enjoyed it for the most part, but there are some things I can’t live without. After almost an year away from Arch, I am now back, and happier than ever! On my first day away from Arch, I installed Artix with the runit init system. The startup speed was incredible, faster than what I was used to. I was happy to have the AUR by my side, and I never really felt “away” from Arch for the first few days. After installing a few programs that I regularly use, I noticed that some of them weren’t working. Upon research, I found out that there are versions of popular packages with their systemd components removed. They’re specific to the init system you have installed. This left a bitter taste in my mouth, because I had to use modified versions of applications. These were different from what the author(s) of the package wrote. I didn’t think much of it at the time, but it slowly took its toll on me. It took me a few months, but I felt unsatisfied with Artix. I did not like how much work I had to do to make it feel like Arch. It did not feel purpose-built for using a different init system. Rather, it felt like Arch modified to fulfil a specific need, the need for a different init system. If I was using runit, I wanted to go all-in. I wanted to use an operating system that puts runit first. That’s when I stumbled across Void Linux. I heard lots about it in the past, mostly about how it’s stable and rock-steady reliable. And also how it’s updates are nearly impossible to break. I thought it would be perfect for me. However, after the first hour of using Void, I noticed something. I needed the AUR! I found it tedious to install obscure programs that I love to tinker and test with. I had to either: Compile most of the applications I want from scratch Install a custom repository, trusting a random GitHub user to update it on time After a week of using Void, I had enough. I certainly understand that it has it’s userbase, people who just want a reliable system that’s lightweight, boots fast, and just works. Unfortunately, I do not fall into that demographic. Arch allows me to update fast and mess around with random scripts and applications, which is what I adore doing in my free time. Void was too boring for me. All in all, I feel at home using Arch. I do not think I’ll switch my distro for a looooong time! It just works and it fits my needs perfectly.
blog on sufyaan's corner Mar 7, 2026 -
There’s a graphic making the rounds right now. You’ve probably seen it. It’s a radar chart showing the difference between what AI theoretically could do across various job categories versus what people are actually using it for.
Burke Holland Mar 6, 2026 -
Time for a new Bending Emacs episode. This one is a follow-up to Episode 12, where we explored Claude Skills as emacs-skills. Bending Emacs Episode 13: agent-shell + Claude Skills + Charts This time around, we look at inline image rendering in agent-shell and how it opens the door to charting. I added a handful of new charting skills to emacs-skills: /gnuplot, /mermaid, /d2, and /plantuml. The agent extracts or fetches data from context, generates the charting code, saves it as a PNG, and agent-shell renders it inline. Cherry on top: the generated charts match your Emacs theme colors by querying them via emacsclient --eval. Hope you enjoyed the video! Want more videos? Liked the video? Please let me know. Got feedback? Leave me some comments. Please like my video, share with others, and subscribe to my channel. As an indie dev, I now have a lot more flexibility to build Emacs tools and share knowledge, but it comes at the cost of not focusing on other activities that help pay the bills. If you benefit or enjoy my work please consider sponsoring.
xenodium.com @alvaro Mar 4, 2026
-
The astronauts who circled the moon in 1968 could still see Earth. They were farther from home than anyone had ever been, but when they looked back, there it was - blue and white and impossibly fragile against the black. They knew the math. They knew the trajectory would bring them home. But they’d never actually been that far before. Beyond low Earth orbit, past the point where you could fix things if they went wrong.
Burke Holland Mar 3, 2026 -
We don’t build cathedrals anymore. Do we even know how?
Burke Holland Feb 28, 2026 -
Time for a new Bending Emacs episode. This one is a follow-up to Episode 10, where we introduced agent-shell. Bending Emacs Episode 12: agent-shell + Claude Skills This time around, we explore Claude Skills and how to use them to teach agents Emacs tricks. I built a handful of skills packaged as a Claude Code plugin at github.com/xenodium/emacs-skills. The skills use emacsclient --eval under the hood to bridge agent work to your running Emacs session: /dired - Open files from the latest interaction in a dired buffer with marks. /open - Open files in Emacs, jumping to a specific line when relevant. /select - Open a file and select the relevant region. /highlight - Highlight relevant regions across files with a temporary read-only minor mode. /describe - Look up Emacs documentation and summarize findings. emacsclient (auto) - Teaches the agent to always prefer emacsclient over emacs. Hope you enjoyed the video! Want more videos? Liked the video? Please let me know. Got feedback? Leave me some comments. Please go like my video, share with others, and subscribe to my channel. As an indie dev, I now have a lot more flexibility to build Emacs tools and share knowledge, but it comes at the cost of not focusing on other activities that help pay the bills. If you benefit or enjoy my work please consider sponsoring the work.
xenodium.com @alvaro Feb 25, 2026
-
The world of mobile security is getting its very first dedicated online conference – and you’re invited! Get ready for summit dedicated entirely to mobile hacking, organized by Mobile Hacking Lab – a one of leading platform for offensive mobile security training and hands‑on exploitation labs. This free, online, two‑day event will be held on […] The post The First Mobile Hacking Conference Is Coming This March appeared first on Mobile Hacker.
Mobile Hacker Feb 23, 2026
-
but she's a girl... Feb 22, 2026 -
https://github.com/tanciaku/tmmprtmmprterminal mind mapperA simple, lightweight mind mapping application that runs in your terminal
gotbletu on Odysee Feb 21, 2026 -
At times, even purchased music excludes album covers in track metadata. For those instances, ready-player-mode offers M-x ready-player-download-album-artwork, which does as it says on the tin. The interactive command offers a couple of fetching providers (iTunes vs Internet Archive / MusicBrainz) to grab the album cover. The thing is, I often found myself trying one or the other provider, sometimes without luck. Today, I finally decided to add a third provider (Deezer) to the list. Even then, what's the point of manually trying each provider out when I can automatically try them all and return the result from the first successful one? And so that's what I did. In addition to offering all providers, M-x ready-player-download-album-artwork now offers "Any", to download from the first successful provider. Now, why keep the option to request from a specific provider? Well, sometimes one provider has better artwork than another. If I don't like what "Any" returns, I can always request from a specific provider. While on the subject, I also tidied the preview experience up and now display the thumbnail in the minibuffer. In any case, best to show rather than tell. Enjoying your unrestricted music via Emacs and ready player mode? ✨sponsor✨ the project.
xenodium.com @alvaro Feb 18, 2026
-
I recently built a little package to flash Emacs windows as you switch through them, so I might as well showcase it in a new Bending Emacs episode, so here it goes: Bending Emacs Episode 11: winpulse In addition to showcasing winpulse, we showed some of the built-in window-managing commands like: C-x 3 split-window-right C-x 2 split-window-below C-x 0 delete-window C-x ^ enlarge-window C-x } enlarge-window-horizontally C-x { shrink-window-horizontally C-x o other-window It's worth noting the last four commands are can be optimized by repeat-mode. Check out Karthink's It Bears Repeating: Emacs 28 & Repeat Mode post. Hope you enjoyed the video! Want more videos? Liked the video? Please let me know. Got feedback? Leave me some comments. Please go like my video, share with others, and subscribe to my channel. If there's enough interest, I'll continue making more videos! Make it all sustainable Enjoying this content or my projects? I am an indie dev. Help make it sustainable by ✨sponsoring✨ Need a blog? I can help with that. Maybe buy my iOS apps too ;)
xenodium.com @alvaro Feb 17, 2026
-
https://git.sr.ht/~rkta/w3m/blob/master/NEWS
gotbletu on Odysee Feb 15, 2026 -
I'm joining OpenAI to work on bringing agents to everyone. OpenClaw will move to a foundation and stay open and independent.
Peter Steinberger Feb 15, 2026
-
Hard to say officially, but I've been primarily using Emacs for roughly a couple of decades. Maybe my eyesight isn't what it used to be, or maybe I've just been wanting a stronger visual signal as I navigate through Emacs windows. Either way, today's the day I finally did something about it… I asked around to see if a package already existed for this purpose. Folks shared a handful of great options: pulsar: Emacs package to pulse the current line after running select functions. dimmer.el: Interactively highlight the active buffer by dimming the others. window-dim.el: A window dimmer package for Emacs. I wanted my windows to temporarily flash when switching between them. Of these options, pulsar came closest, though highlighting the current line only. This is Emacs, so I should be able to get the behavior I want by throwing some elisp at the problem. With that, I give you winpulse, a package to temporarily highlight focused Emacs windows. This package is fresh out of the oven and likely has some edge cases I haven't yet considered. If you're still keen to check it out, it's available on GitHub. Make it sustainable Enjoying this package or my content? I'm an indie dev. Consider sponsoring to help make it sustainable.
xenodium.com @alvaro Feb 10, 2026
-
I merged a PR last month. The code review looked good. Tests passed. Then I opened the site on my phone and the sidebar was completely broken. The fix was trivial—a missing media query. The bug was obvious once you actually looked at the mobile view. Nobody did. So I added a pipeline stage that looks. I open a GitHub issue that says: Implement the Manual Entry option for adding clients. When clicked, opens a wide slide-over drawer with a form to create a new client.
Granda | Ideas & Code Feb 6, 2026 -
https://github.com/tjblackheart/andcliandcli lets you work with 2FA tokens directly in your shell, using encrypted backups exported out of your favorite 2FA apps. All the data is held in memory only and will never leave your machine.
gotbletu on Odysee Feb 2, 2026 -
Cursor released Agent Trace, an open spec for tracking which code in a repo was written by an LLM. It records the model, the tool, the conversation, and the exact line ranges — all appended to a JSONL file in your project. The pitch: “As agents write more code, it’s important to understand what came from AI versus humans.” I spent time reading the spec and the reference implementation. The engineering is solid — clean schema, thoughtful extensibility, good partner list (Amp, Amplitude, Cloudflare, Cognition, Google, Vercel). But I kept circling back to one question: what do you do with this data?
Granda | Ideas & Code Jan 30, 2026 -
I've been somewhat chaotically "bookmarking" things to watch for some time. The info typically goes straight to an Emacs org file primarily via Journelly. I'm fairly forgiving in my input form. I often link to Reddit discussions, IMDB/Letterboxd links, or at times simply write movie or director names. The only real requirement is to sprinkle some hashtags (#film or #series or #watch) for retrieval. While this flexibility is important (makes it more likely for me to actually write), it's not super practical to browse through this mixed structure when looking for something to watch. Yesterday, I finally did something about that. Here's what my save-to-Journelly flow may look like for a Reddit link: All entries are saved to Journelly.org, a plain text org file (Markdown is supported too), so I first extracted all relevant entries (containing #film or #series or #watch). A matching entry looks a little something like this: * [2026-01-29 Thu 09:52] @ Home :PROPERTIES: :LATITUDE: 51.5007 :LONGITUDE: -0.1246 :WEATHER_TEMPERATURE: 4.2°C :WEATHER_CONDITION: Cloudy :WEATHER_SYMBOL: cloud :END: #film #hongkong #watch https://www.reddit.com/r/movies/comments/1j85b52/just_rewatched_kung_fu_hustle_still_felt_great Having extracted non-personal items from Journelly.org, I created a git repo with just one file: watchlist.org including entries like the one above. With personal/private details out of the way, I decided to let the LLM robots loose. That is, hand watchlist.org over to a Claude Code agent, via Emacs agent-sell to organize my chaos. First I asked to normalize data by extracting all film/tv info from each entry, visiting Reddit/IMDB/Letterboxd links if needed, which yielded normalized.org: Kung Fu Hustle https://www.imdb.com/title/tt0373074 Next I asked to generate metadata for me (using the fields I wanted from IMDB), stored in org drawers, saved to db.org: * Kung Fu Hustle :PROPERTIES: :TYPE: film :YEAR: 2004 :IMDB: https://www.imdb.com/title/tt0373074/ :IMDB_RATING: 7.7 :COUNTRY: Hong Kong :DIRECTOR: Stephen Chow :GENRE: action, comedy, fantasy :RUNTIME: 99 :ADDED: [2026-01-28] :THUMBNAIL: file:thumbnails/tt0373074.png :IMDB_THUMBNAIL: https://m.media-amazon.com/images/M/MV5BNGU2OWVlM2ItZGZlOC00Yzk2LWE1NzEtMDYwMzE4YTE5MzQ2XkEyXkFqcGc@._V1_FMjpg_UY1024_.jpg :END: Finally, I asked to generate HTML from db.org so I can render and easily browse. <div> <a href="https://www.imdb.com/title/tt0373074/"><img src="https://m.media-amazon.com/images/M/MV5BNGU2OWVlM2ItZGZlOC00Yzk2LWE1NzEtMDYwMzE4YTE5MzQ2XkEyXkFqcGc@._V1_FMjpg_UY1024_.jpg" alt="Kung Fu Hustle" width="150" height="225"></a> <p><strong>Kung Fu Hustle (2004)</strong></p> <p>action · comedy · fantasy</p> <p>Hong Kong · Stephen Chow</p> </div> For each transformation, Claude Code generated a python script. I've yet to decide what to do with all the resulting source code. Do I clean it up? Rewrite it? For now, I'm happy with the results of the experiment. I managed to organize some of my chaos! In some ways, this isn't too different from me writing a quick/hacky/ugly script, when it's acceptable to do so. At the center of it all, is my beloved org syntax. Thanks to plain text formats, we can easily peek at them, query them, poke at them, tweak them, and bend til our heart's content. It's just so versatile, and now we can throw them at LLMs too. Oh, and if you're curious about that watch list, here you go. Do you have some movie/show suggestions for me? 12 Monkeys (2015) tv · adventure · drama · mystery United States 2149: The Aftermath (2021) sci-fi Canada · Benjamin Duffield 3 Body Problem (2024) tv · adventure · drama · fantasy United Kingdom 964 Pinocchio (1991) horror · sci-fi Japan · Shozin Fukui A Scanner Darkly (2006) animation · comedy · crime United States · Richard Linklater A Separation (2011) drama Iran · Asghar Farhadi A Small Light (2023) tv · biography · drama · history United States A Taxing Woman (1987) comedy · crime Japan · Jûzô Itami Absentia (2017) tv · crime · drama · mystery Israel Across the Furious Sea (2023) crime · drama · mystery China · Baoping Cao Akira (1988) animation · action · drama Japan · Katsuhiro Ôtomo Alita: Battle Angel (2019) action · adventure · sci-fi United States · Robert Rodriguez All About My Mother (1999) comedy · drama · romance Spain · Pedro Almodóvar Altered Carbon (2018) tv · action · adventure · drama United States Altered Hours (2016) sci-fi · thriller United States · Bruce Wemple Amelie (2001) comedy · romance France · Jean-Pierre Jeunet Amores Perros (2000) drama · thriller Mexico · Alejandro G. Iñárritu An Elephant Sitting Still (2018) crime · drama China · Bo Hu Anatomy of a Fall (2023) crime · drama · mystery France · Justine Triet Arcane (2021) tv · animation · action · adventure United States Archive 81 (2022) tv · drama · horror · mystery United States As Tears Go By (1988) crime · drama · romance Hong Kong · Wong Kar-Wai Asakusa Kid (2021) biography · drama Japan · Gekidan Hitori Ash Is Purest White (2018) crime · drama · romance China · Jia Zhang-ke Asura (2023) tv · comedy · drama Indonesia Band of Brothers (2001) tv · action · drama · history United Kingdom Banshee (2013) tv · action · crime · drama United States Barry (2018) tv · action · comedy · crime United States Battlestar Galactica (2004) tv · action · adventure · drama United States Being Human (UK) (2008) tv · comedy · drama · fantasy United Kingdom Big Man Japan (2007) action · comedy · sci-fi Japan · Hitoshi Matsumoto Black Coal, Thin Ice (2014) crime · drama · mystery China · Yi'nan Diao Black Sails (2014) tv · action · adventure · drama South Africa Blackadder (1983) tv · comedy United Kingdom BlackBerry (2023) biography · comedy · drama Canada · Matt Johnson Blade Runner (1982) action · drama · sci-fi United States · Ridley Scott Blade Runner 2049 (2017) action · drama · mystery United States · Denis Villeneuve Blade Runner: Black Lotus (2021) tv · animation · action · drama United States Bloody Hell (2020) comedy · horror · mystery Australia · Alister Grierson Boardwalk Empire (2010) tv · crime · drama United States Bojack Horseman (2014) tv · animation · comedy · drama United States Brand New Cherry Flavor (2021) tv · drama · horror · mystery United States Brazil (1985) drama · sci-fi · thriller United Kingdom · Terry Gilliam Broadchurch (2013) tv · crime · drama · mystery United Kingdom Burn Notice (2007) tv · action · crime · drama United States Burning (2018) drama · mystery · thriller South Korea · Lee Chang-dong Carnivale (2003) tv · drama · fantasy · mystery United States Castlevania (2017) tv · animation · action · adventure United States Chungking Express (1994) comedy · crime · drama Hong Kong · Wong Kar-Wai City Hunter (2024) action · comedy · crime Japan · Yûichi Satô City of God (2002) crime · drama Brazil · Kátia Lund Cloud (2024) action · crime · drama Japan · Kiyoshi Kurosawa Cold Fish (2010) crime · drama · horror Japan · Sion Sono Colony (2016) tv · action · adventure · drama United States Counterpart (2017) tv · drama · sci-fi · thriller United States Crouching Tiger Hidden Dragon (2000) action · adventure · drama Taiwan · Ang Lee Cure (1997) crime · horror · mystery Japan · Kiyoshi Kurosawa Cyberpunk: Edgerunners (2022) tv · animation · action · adventure Japan DaVinci's Demons (2013) tv · adventure · biography · drama United States Days of Being Wild (1990) crime · drama · romance Hong Kong · Wong Kar-Wai Deadwind (2018) tv · crime · drama · mystery Finland Deadwood (2004) tv · crime · drama · history United States Dear Child (2023) tv · crime · drama · mystery Germany Decision to Leave (2022) crime · drama · mystery South Korea · Park Chan-wook Demon City (2024) action · adventure · crime Japan · Seiji Tanaka Derry Girls (2018) tv · comedy United Kingdom Destroyer (2018) action · crime · drama United States · Karyn Kusama Devs (2020) tv · drama · mystery · sci-fi United Kingdom Dirk Gently's Holistic Detective Agency (2016) tv · action · adventure · comedy United States District 9 (2009) action · sci-fi · thriller South Africa · Neill Blomkamp Doom Patrol (2019) tv · action · adventure · comedy United States Downton Abbey (2010) tv · drama · romance United Kingdom Dredd (2012) action · crime · sci-fi United Kingdom · Pete Travis Drops of God (2023) tv · drama France Dune (2021) action · adventure · drama United States · Denis Villeneuve Dust of Angels (1992) action · crime · drama Taiwan · Hsiao-Ming Hsu Edge of Tomorrow (2014) action · adventure · sci-fi United States · Doug Liman Edie (2017) adventure · drama United Kingdom · Simon Hunter Elysium (2013) action · drama · sci-fi United States · Neill Blomkamp Encanto (2021) animation · comedy · family United States · Jared Bush Endeavour (2012) tv · crime · drama · mystery United Kingdom Equilibrium (2002) action · drama · sci-fi United States · Kurt Wimmer Euphoria (2019) tv · drama United States Extreme Job (2019) action · comedy · crime South Korea · Lee Byeong-heon Fair Play (2023) drama · thriller United States · Chloe Domont Fallen Leaves (2023) comedy · drama · romance Finland · Aki Kaurismäki Fallout (2024) tv · action · adventure · drama United States Fargo (2014) tv · crime · drama · thriller United States Firefly (2002) tv · adventure · drama · sci-fi United States Foundation (2021) tv · drama · sci-fi Ireland Foyle's War (2002) tv · crime · drama · mystery United Kingdom Fringe (2008) tv · drama · mystery · sci-fi United States From (2022) tv · drama · horror · mystery United States Funky Forest (2005) comedy · fantasy Japan · Katsuhito Ishii Future Man (2017) tv · action · adventure · comedy United States Gen V (2023) tv · action · adventure · comedy United States Ghost in the Shell (1995) animation · action · crime Japan · Mamoru Oshii Ghostbusters Afterlife (2021) adventure · comedy · fantasy United States · Jason Reitman Godzilla Minus One (2023) action · adventure · drama Japan · Takashi Yamazaki Going By The Book (2007) action · comedy South Korea · Hee-chan Ra Gomorrah (2014) tv · crime · drama · thriller Italy Guns & Talks (2001) action · drama · comedy South Korea · Jang Jin Halt and Catch Fire (2014) tv · drama United States Handmaid's Tale (2017) tv · drama · sci-fi · thriller United States Hanna (2019) tv · action · crime · drama United States Hannibal (2013) tv · crime · drama · horror United States Hausen (2020) tv · drama · horror · mystery Germany Heavy Water War (Kampen om tungtvannet) (2015) tv · drama · history · war Norway Heroes (2006) tv · crime · drama · fantasy United States Hotel Del Luna (2019) tv · action · comedy · drama South Korea Infernal Affairs (2002) crime · drama · mystery Hong Kong · Wai Keung Lau Inside the Yellow Cocoon Shell (2023) drama Vietnam · Thien An Pham Inspector Morse (1987) tv · crime · drama · mystery United Kingdom Ip Man (2008) action · biography · drama Hong Kong · Wilson Yip Johnny Mnemonic (1995) action · drama · sci-fi Canada · Robert Longo JSA: Joint Security Area (2000) action · drama · thriller South Korea · Park Chan-wook Jury Duty (2023) tv · comedy United States Justified (2010) tv · action · crime · drama United States Kaili Blues (2015) drama · mystery China · Bi Gan Kalifat (2020) tv · crime · drama · thriller Sweden Katla (2021) tv · drama · fantasy · mystery Iceland Killers of the Flower Moon (2023) crime · drama · history United States · Martin Scorsese Killzone (SPL) (2005) action · crime · thriller Hong Kong · Wilson Yip Kingdom (2019) tv · action · drama · horror South Korea Kung Fu Dunk (2008) action · comedy · sport China · Yen-Ping Chu Kung Fu Hustle (2004) action · comedy · fantasy Hong Kong · Stephen Chow La Haine (1995) crime · drama France · Mathieu Kassovitz Le Bureau des Legendes (2015) tv · drama · thriller France Left Handed Girl (2024) drama Taiwan · Shih-Ching Tsou Legion (2017) tv · action · sci-fi · thriller United States Les Revenants (2012) tv · drama · fantasy · horror France Little Fires Everywhere (2020) tv · drama · mystery · thriller United States Locked In (2023) mystery · thriller United States · David C. Snyder Lodge 49 (2018) tv · comedy · drama · mystery United States Logan Lucky (2017) action · comedy · crime United States · Steven Soderbergh Loki (2021) tv · action · adventure · fantasy United States Long Day's Journey Into Night (2018) drama · mystery · romance China · Bi Gan Looper (2012) action · drama · sci-fi United States · Rian Johnson Lupin (2021) tv · action · crime · drama France Lust, Caution (2007) drama · history · romance Taiwan · Ang Lee Man in the High Castle (2015) tv · drama · sci-fi · thriller United States Man Standing Next (2020) thriller South Korea · Min-ho Woo Manhunt (2019) tv · biography · crime · drama United Kingdom Manifest (2018) tv · drama · mystery · sci-fi United States Marco Polo (2014) tv · action · adventure · drama United States Marvelous Mrs Maisel (2017) tv · comedy · drama United States Max Headroom (1987) tv · comedy · sci-fi United States May December (2023) comedy · drama United States · Todd Haynes Metropolis (1927) drama · sci-fi Germany · Fritz Lang Midnight Mass (2021) tv · drama · fantasy · horror United States Midsommar (2019) drama · horror · mystery United States · Ari Aster Minority Report (2002) action · crime · mystery United States · Steven Spielberg Misfits (2009) tv · comedy · drama · fantasy United Kingdom Miss King (2024) tv · drama · thriller Japan Mobland (2024) tv · crime · drama United Kingdom Mogura (2024) tv Monk (2002) tv · comedy · crime · drama United States Moving (2023) tv · action · adventure · drama South Korea Mr Inbetween (2018) tv · comedy · crime · drama Australia Mr. Robot (2015) tv · crime · drama · thriller United States Sympathy for Mr. Vengeance (2002) crime · drama · thriller South Korea · Park Chan-wook Mrs. Davis (2023) tv · comedy · drama · sci-fi United States My Name (2021) tv · action · crime · drama South Korea Narcos (2015) tv · biography · crime · drama United States Nine Days (2020) drama · fantasy United States · Edson Oda No Other Choice (2025) comedy · crime · drama South Korea · Park Chan-wook Nobel (2016) tv · drama · thriller · war Norway Northern Exposure (1990) tv · adventure · comedy · drama United States Occupied (Okkupert) (2015) tv · drama · thriller Norway Oldboy (2003) action · drama · mystery South Korea · Park Chan-wook Once Upon a Time in China (1991) action Hong Kong · Hark Tsui One False Move (1992) crime · drama · thriller United States · Carl Franklin Ong Bak (2003) action · crime · thriller Thailand · Prachya Pinkaew Oppenheimer (2023) biography · drama · history United States · Christopher Nolan Orphan Black (2013) tv · drama · sci-fi · thriller Canada Ozark (2017) tv · crime · drama · thriller United States Pacifiction (2022) drama · thriller France · Albert Serra Pan's Labyrinth (2006) drama · fantasy · war Mexico · Guillermo del Toro Panchayat (2020) tv · comedy · drama India Pantheon (2022) tv · animation · action · adventure United States Past Lives (2023) drama · romance United States · Celine Song Peacemaker (2022) tv · action · adventure · comedy United States Peaky Blinders (2013) tv · crime · drama United Kingdom PEN15 (2019) tv · comedy · drama United States Penny Dreadful (2014) tv · drama · fantasy · horror United Kingdom Perfect Days (2023) drama Japan · Wim Wenders Persepolis (2007) animation · biography · drama France · Vincent Paronnaud Police Story (1985) action · comedy · crime Hong Kong · Jackie Chan Poor Things (2023) comedy · drama · romance Ireland · Yorgos Lanthimos Preacher (2016) tv · adventure · comedy · fantasy United States Primo (2023) tv · comedy United States Priscilla (2023) biography · drama · music Italy · Sofia Coppola Professor T (2015) tv · comedy · crime · drama Belgium Raise the Red Lantern (1991) drama · romance China · Yimou Zhang Reservation Dogs (2021) tv · comedy · crime United States Riki Oh (1991) action · comedy · crime Hong Kong · Ngai Choi Lam Ripley (2024) tv · crime · drama · thriller United States Robocop (1987) action · crime · sci-fi United States · Paul Verhoeven Rome (2005) tv · action · drama · romance United Kingdom Rurouni Kenshin (2012) action · adventure · drama Japan · Keishi Otomo Russian Doll (2019) tv · comedy · drama · mystery United States Scavengers Reign (2023) tv · animation · adventure · drama United States Scrapper (2023) comedy · drama United Kingdom · Charlotte Regan Secret Level (2024) tv · animation · action · adventure United States See (2019) tv · action · drama · sci-fi United States Sex is Zero (2002) comedy · drama · romance South Korea · JK Youn Shall We Dance (1996) comedy · drama · music Japan · Masayuki Suô Shameless (2011) tv · comedy · drama United States Shantaram (2022) tv · action · adventure · crime United States Shaolin Soccer (2001) action · comedy · fantasy Hong Kong · Stephen Chow Sharp Objects (2018) tv · crime · drama · mystery United States Shin Ultraman (2022) action · adventure · drama Japan · Shinji Higuchi Shinobi No Mono (1962) action · drama Japan · Satsuo Yamamoto Shogun (2024) tv · action · adventure · drama United States Shutter Island (2010) drama · mystery · thriller Canada · Martin Scorsese Signal (2016) tv · crime · drama · fantasy South Korea Silo (2023) tv · drama · mystery · sci-fi United States Six Feet Under (2001) tv · comedy · drama United States Slow Horses (2022) tv · drama · thriller United Kingdom Snowfall (2017) tv · crime · drama United States Snowpiercer (2013) action · sci-fi · thriller South Korea · Bong Joon Ho Somebody Somewhere (2022) tv · comedy · drama United States Sonatine (1993) action · comedy · crime Japan · Takeshi Kitano Spartacus (2010) tv · action · adventure · biography United States Spiral (Engrenage) (2005) tv · crime · drama · mystery France Strange Darling (2023) horror · thriller United States · JT Mollner Strange Days (1995) crime · drama · sci-fi United States · Kathryn Bigelow Strike Back (2010) tv · action · drama · thriller United Kingdom Succession (2018) tv · comedy · drama United States Survive Style 5+ (2004) comedy · fantasy · horror Japan · Gen Sekiguchi Suzhou River (2000) drama · romance Germany · Ye Lou Taegukgi (2004) action · drama · war South Korea · Kang Je-kyu Talk to Her (2002) drama · mystery · romance Spain · Pedro Almodóvar Taxi Driver (2017) action · drama · history South Korea · Hun Jang Ted Lasso (2020) tv · comedy · drama · sport United States Terminal List (2022) tv · action · drama · thriller United States Terminator (1984) action · adventure · sci-fi United Kingdom · James Cameron Tetsuo: The Iron Man (1989) horror · sci-fi Japan · Shin'ya Tsukamoto The 8 Show (2024) tv · comedy · drama · horror South Korea The Americans (2013) tv · crime · drama · mystery United States The Beekeeper (2024) action · crime · thriller United Kingdom · David Ayer The Boys (2019) tv · action · comedy · crime United States The Bridge (Broen/Bron) (2011) tv · crime · mystery · thriller Sweden The Brothers Sun (2024) tv · action · comedy · drama United States The Cabin in the Woods (2011) horror · mystery · thriller Canada · Drew Goddard The Detour (2016) tv · adventure · comedy United States The Electric State (2025) action · adventure · comedy United States · Anthony Russo The Empty Man (2020) drama · horror · mystery United States · David Prior The End of the F***ing World (2017) tv · adventure · comedy · crime United Kingdom The Expanse (2015) tv · drama · mystery · sci-fi United States The Fall of the House of Usher (2023) tv · drama · horror · mystery United States The Glory (2022) tv · drama · mystery · thriller South Korea The Good The Bad The Weird (2008) action · adventure · comedy South Korea · Kim Jee-woon The Handmaiden (2016) drama · romance · thriller South Korea · Park Chan-wook The Head (2020) tv · drama · horror · mystery Spain The Holdovers (2023) comedy · drama United States · Alexander Payne The Host (2006) drama · horror · sci-fi South Korea · Bong Joon Ho The Killer (1989) action · crime · drama Hong Kong · John Woo The Killing (2007) tv · crime · drama · mystery Denmark The Last Kingdom (2015) tv · action · drama · history United Kingdom The Last of Us (2023) tv · action · adventure · drama Canada The Lazarus Project (2022) tv · action · drama · fantasy United Kingdom The Leftovers (2014) tv · drama · fantasy · mystery United States The Legend of Vox Machina (2022) tv · animation · action · adventure United States The Letdown (2017) tv · comedy Australia The Man from Nowhere (2010) action · crime · drama South Korea · Lee Jeong-beom The Matrix (1999) action · sci-fi United States · Lana Wachowski The Night Comes for Us (2018) action · crime · thriller Indonesia · Timo Tjahjanto The Other Two (2019) tv · comedy United States The Outsider (2020) tv · crime · drama · horror United States The Pitt (2025) tv · drama United States The Queen's Gambit (2020) tv · drama United States The Raid (2011) action · crime · thriller Indonesia · Gareth Evans The Raid 2 (2014) action · crime · thriller Indonesia · Gareth Evans The Running Man (1987) action · sci-fi · thriller United States · Paul Michael Glaser The Shield (2002) tv · crime · drama · thriller United States The Sopranos (1999) tv · crime · drama United States The Taste of Things (2023) drama · history · romance France · Anh Hung Tran The Tower (2021) tv · crime · drama · mystery United Kingdom The Town (2010) crime · drama · thriller United States · Ben Affleck The Umbrella Academy (2019) tv · action · adventure · comedy United States The Wire (2002) tv · crime · drama · thriller United States The Zone of Interest (2023) drama · history · war United Kingdom · Jonathan Glazer Three Colors: Blue (1993) drama · music · mystery France · Krzysztof Kieslowski Three Colors: Red (1994) drama · mystery · romance France · Krzysztof Kieslowski Three Colors: White (1994) comedy · drama · romance France · Krzysztof Kieslowski Tokyo Vice (2022) tv · crime · drama · thriller Japan Tom Yum Goong (The Protector) (2005) action · crime · drama Thailand · Prachya Pinkaew Total Recall (1990) action · adventure · sci-fi United States · Paul Verhoeven Trapped (2015) tv · crime · drama · mystery Iceland Tron (1982) action · adventure · sci-fi United States · Steven Lisberger Tumbbad (2018) drama · fantasy · horror India · Rahi Anil Barve Upgrade (2018) action · sci-fi · thriller United States · Leigh Whannell Us and Them (2018) drama · romance China · Rene Liu Utopia (2013) tv · drama · mystery · sci-fi United Kingdom Violet Evergarden: The Movie (2020) animation · drama · fantasy Japan · Taichi Ishidate Volver (2006) comedy · drama Spain · Pedro Almodóvar Warped Forest (2011) comedy · fantasy Japan · Shunichirô Miki Warrior (2019) tv · action · crime · drama United States Wayward Pines (2015) tv · drama · horror · mystery United States Weeds (2005) tv · comedy · crime · drama United States Westworld (2016) tv · drama · mystery · sci-fi United States Wild Goose Lake (2019) crime · drama China · Yi'nan Diao Wind River (2017) crime · drama · mystery United Kingdom · Taylor Sheridan Winter's Bone (2010) crime · drama · mystery United States · Debra Granik Yellowjackets (2021) tv · drama · mystery · thriller United States You (2018) tv · crime · drama · romance United States Yu Yu Hakusho (2023) tv · action · adventure · comedy Japan Zero Zero Zero (2020) tv · crime · drama · thriller Italy
xenodium.com @alvaro Jan 29, 2026
-
https://github.com/bachya/linkding-cliA CLI to interact with a linkding instance
gotbletu on Odysee Jan 28, 2026 -
https://github.com/skorokithakis/catt
gotbletu on Odysee Jan 25, 2026 -
Back in 2023, I toyed with the relevant iOS dev tools needed to create a custom Tesco Clubcard pkpass, and even showed how to scan a QR code from our beloved Emacs (of course). Neither my friend Vaarnan nor I are strangers to the iOS ecosystem, yet we both agreed the above approach wasn't very practical (for neither devs nor the average iOS user). So we figured we should have a crack at it. While there are some ready-made solutions out there, they often require downloading additional iOS apps or working through clunky web interfaces. We just wanted a simpler way to create our own Apple Wallet cards, and so Kitty Cards (kitty.cards) was born: no app download or sign-in required. Hopefully not much to explain. From kitty.cards, customize a card, press the Add to Apple Wallet button, and Bobs your uncle. Hope you enjoy Kitty Cards!
xenodium.com @alvaro Jan 23, 2026
-
In my previous post about sleep, I talked about the difficulty I faced following a sleeping schedule. I was tired, even after naps, and couldn’t get anything done. I thought that a proper sleep schedule was reserved only for those who had the flexibility to manage their commitments. But, after talking to people and getting to know their schedules, I realized that there were problems with my approach. Now, I’m able to sleep from 10:30PM to 6AM every day without feeling any signs of tiredness throughout the day. I can get more things done than ever before, and I’m glad I made this change. Why My Old Schedule Didn’t Work On some research and reflection, I realized that there were two major issues with my approach. These caused me to have a negative initial impression of my routine, and thus made me lose motivation to continue. They were: I was sleeping too little The change was too sudden Firstly, I was sleeping from 11PM to 5AM every day. This is just six hours of sleep, less than the recommended 7-9h of sleep every day. This affected my mood, productivity, and energy. I would come home groggy, even after drinking coffee. My new schedule accounts for this problem. I sleep from 10:30PM to 6AM, which is 7.5 hours of sleep. The other issue was that my change was sudden rather than gradual. I went from sleeping at around 3AM to sleeping at 11AM, a four-hour shift. These types of changes are difficult to adjust to, which can hamper productivity and waste the few days of getting used to the schedule. I adjusted to my new schedule in a different way. There was a period of two days in which I was very tired, and decided to sleep at 10:30PM and wake up at 6AM. Those two tiring days were a blessing in disguise, because me and my body both got what we wanted. My body got sleep, and I got my schedule fixed. Tips A piece of advice that helps is knowing that the total number of hours in your day don’t change, you’re just rearranging them. In the beginning, near your bedtime, you’ll feel like you accomplished nothing, and that the day flew by. But, you have to remember, however earlier you’re sleeping, you’re getting the same amount of time in the morning, but wide awake instead of sleepy. I happily go to bed, and even look forward to sleeping now. Sleeping early also makes it easier for you to do more things throughout the day. Often, I was done with the most important things before even leaving for university, which gave me a sense of accomplishment and helped me rest after coming back home. All in all, I highly suggest following a proper, fixed sleep schedule. It’s one of the best changes I made in my life, and it takes away a lot of stress in my life.
blog on sufyaan's corner Jan 21, 2026 -
https://links.twibright.com/Links is a graphics and text mode web browser, released under GPL. Links is a free software.
gotbletu on Odysee Jan 16, 2026 -
I've just uploaded a new Bending Emacs episode: Bending Emacs Episode 10: agent-shell You may have seen some of my previous posts on agent-shell, a package I built offering a uniform user experience across a diverse set of agents. In this video, I showcase the main agent-shell features. I had lots to cover, so the video is on the longer side of things. I've showcased much of the content in previous agent-shell posts, so I'll just share links to those instead: agent-shell 0.25 updates. agent-shell 0.17 improvements + MELPA. agent-shell 0.5 improvements. Introducing Emacs agent-shell (powered by ACP). Introducing acp.el. Hope you enjoyed the video! Want more videos? Liked the video? Please let me know. Got feedback? Leave me some comments. Please go like my video, share with others, and subscribe to my channel. If there's enough interest, I'll continue making more videos!
xenodium.com @alvaro Jan 16, 2026
-
When I share a blog link on Twitter or Slack, it shows up as plain text. No preview image. Just a URL like granda.org/en/2026/01/02/claude-code-on-the-go/. I needed Open Graph images. The standard approach: manually create a 1200x630 image for each post. That’s tedious. I asked Claude to automate it. flowchart LR Push[git push] --> GHA[GitHub Actions] GHA --> Hugo[Hugo Server] GHA --> PW[Playwright] PW -->|screenshot| Hugo PW --> IMG[OG Image] IMG --> Commit[git commit] Commit --> Deploy[Deploy] flowchart TB Push[git push] --> GHA[GitHub Actions] GHA --> Hugo[Hugo Server] GHA --> PW[Playwright] PW -->|screenshot| Hugo PW --> IMG[OG Image] IMG --> Commit[git commit] Commit --> Deploy[Deploy] The Setup I told Claude the problem: posts need social preview images, but I don’t want to create them manually. Screenshot the article content, save it as an OG image, update the frontmatter automatically.
Granda | Ideas & Code Jan 10, 2026 -
but she's a girl... Jan 9, 2026
-
Claude can click buttons. That sounds trivial, but it changes how I build UIs. With Playwright MCP, Claude doesn’t just write code—it opens a browser, navigates to localhost, and verifies that things actually work. It catches bugs I’d miss in code review. The Setup Playwright MCP gives Claude browser automation. I run it with headless Chromium: { "mcpServers": { "playwright": { "command": "npx", "args": ["@anthropic-ai/mcp-server-playwright", "--headless"] } } } Now Claude can navigate, click, type, and screenshot. It sees what users see.
Granda | Ideas & Code Jan 9, 2026 -
Day two of the Hacker News traffic spike. Forty thousand visitors, no way to reach them again. I needed a newsletter signup. I looked at Buttondown, Beehiiv, Substack, ConvertKit. All overkill. I just needed to collect emails. I didn’t need campaigns, analytics, or subscriber management. And I wanted to own my data. So I asked Claude to build it. flowchart LR User([User]) --> Form[Newsletter Form] Form -->|POST /api/subscribe| Worker[Cloudflare Worker] Worker --> KV[(Cloudflare KV)] KV -.->|Daily sync| GHA[GitHub Actions] GHA -.-> Repo[(subscribers.jsonl)] flowchart TB User([User]) --> Form[Newsletter Form] Form -->|POST /api/subscribe| Worker[Cloudflare Worker] Worker --> KV[(Cloudflare KV)] KV -.->|Daily sync| GHA[GitHub Actions] GHA -.-> Repo[(subscribers.jsonl)] The Setup I gave Claude a Cloudflare API token via environment variable and described what I wanted: a form that collects emails and stores them somewhere I control.
Granda | Ideas & Code Jan 7, 2026 -
https://github.com/Niehztog/freshrss-af-readability---------install extension with podman--------git clone https://github.com/Niehztog/freshrss-af-readabilitymv freshrss-af-readability af_readabilitypodman cp af_readability freshrss:/config/www/freshrss/extensions/-------------activate the extension------------- webui > cog icon > extensions > [X] af_readability- webui > cog icon > extensions > af_readability > cog icon > [select feeds] > submit
gotbletu on Odysee Jan 6, 2026 -
A new year, a new Bending Emacs episode, so here it goes: Bending Emacs Episode 9: Time around the world Emacs comes with a built-in world clock: M-x world-clock To customize displayed timezones, use: (setq world-clock-list '(("America/New_York" "New York") ("America/Caracas" "Caracas") ("Europe/London" "London") ("Asia/Tokyo" "Tokyo"))) Each entry requires a valid timezone string (as per entries in your system's /usr/share/zoneinfo) and a display label. I wanted a slightly different experience than the built-in command (more details here), so I built the time-zones package. time-zones is available on MELPA, so you can install with: (use-package time-zones :ensure t) Toggle help with the "?" key add cities with the "+" key. Shifting time is possible via the "f" / "b" keys, in addition to a other features available via the "?" help menu. Hope you enjoyed the video! Want more videos? Liked the video? Please let me know. Got feedback? Leave me some comments. Please go like my video, share with others, and subscribe to my channel. If there's enough interest, I'll continue making more videos! Make it all sustainable Enjoying this content or my projects? I am an indie dev. Help make it sustainable by ✨sponsoring✨ Need a blog? I can help with that. Maybe buy my iOS apps too ;)
xenodium.com @alvaro Jan 6, 2026
-
Three months ago I would have dismissed claims that AI could replace developers. Today, after using Claude Opus 4.5, I believe AI coding agents can absolutely replace developers.
Burke Holland Jan 5, 2026 -
From August to December, I have been journaling every single night, right before I hit the bed. However, in the past few weeks, journaling slipped my mind. I don’t know why exactly this happened, but I slowly felt the effects. At first, I didn’t notice. Going through each day, knowing that I should keep journaling. After all, it’s good for me! Yet, days passed on without a single entry. I felt clutter in my mind, despite not having much to think about. Feeling like I was forgetting something important. Then, I made the connection. I felt this way because I wasn’t journaling! The benefits of journaling began to make sense. Going through chaos was important to understanding the value of peace. I realized what I had to do. After around three weeks of not journaling, I made my way to my bag, and took out my journal. I picked up my trusty Lamy Safari, wrote down the date, and started writing about what happened since the last time I opened my journal. Every stroke felt like strings of strain going down the drain. Every sentence felt like parts of my story. Every page felt mine. If you don’t journal, I highly recommend you pick up the habit. Once per day, right before sleeping. Your body, mind, and soul will thank you for it.
blog on sufyaan's corner Jan 5, 2026 -
I run six Claude Code agents in parallel from my phone. No laptop, no desktop—just Termius on iOS and a cloud VM. The Setup flowchart LR A[Phone] -->|Termius + mosh| B[Tailscale VPN] B --> C[Vultr VM] C --> D[Claude Code] D -->|PreToolUse hook| E[Poke webhook] E -->|Push notification| A The loop is: kick off a task, pocket the phone, get notified when Claude needs input. Async development from anywhere. Infrastructure A Vultr VM in Silicon Valley:
Granda | Ideas & Code Jan 2, 2026 -
https://github.com/tonymajestro/reddit-tuiA lightweight terminal application for browsing Reddit from your command line.
gotbletu on Odysee Dec 31, 2025 -
In 2024, I took the leap to go indie full-time. By 2025, that shift enabled me to focus exclusively on building tools I care about, from a blogging platform, iOS apps, and macOS utilities, to Emacs packages. It also gave me the space to write regularly, covering topics like Emacs tips, development tutorials for macOS and iOS, a few cooking detours, and even launching a new YouTube channel. The rest of this post walks through some of the highlights from 2025. If you’ve found my work useful, please consider sponsoring. Off we go… Launched a new blogging service For well over a decade, my blogging setup consisted of a handful of Elisp functions cobbled together over the years. While they did the job just fine, I couldn't shake the feeling that I could do better, and maybe even offer a blogging platform without the yucky bits of the modern web. At the beginning of the year, I launched LMNO.lol. Today, my xenodium.com blog proudly runs on LMNO.lol. LMNO.lol blogs render pretty much anywhere (Emacs and terminals included, of course). 2026 is a great year to start a blog! Custom domains totally welcome. A journaling/note-taking app that feels like tweeting Sure, there are plenty of journaling and note-taking apps out there. For one reason or another, none of them stuck for me (including my own apps). That is, until I learned a thing or two from social media. With that in mind, Journelly was born: like tweeting, but for your eyes only. With the right user experience, I felt compelled to write things down all the time. Saving to Markdown and Org markup was the mighty sweet cherry on the cake. Let's learn Japanese As a Japanese language learning noob, what better way to procrastinate than by building yet another Kana-practicing iOS app? Turns out, it kinda did the job. Here's mochi invaders, a fun way to practice your Kana A new Emacs-native AI/LLM agent (powered by ACP) 2025 brought us the likes of Claude Code, Gemini CLI, Goose, Codex, and many more AI/LLM CLI agents. While CLI utilities have their appeal, I wanted a native Emacs integration, so I simply ignored agents for quite some time. I was initially tempted to write my own Emacs agent, but ultimately decided against it. My hope was that agent providers would somehow converge to offer editor integration, so I could focus on building an Emacs integration while leveraging the solid work from many teams producing agents. With LLM APIs historically fragmented, my hope for agent convergence seemed fairly far-fetched. To my surprise, ACP (Agent Client Protocol) was announced by Zed and Google folks. This was the cue I had been waiting for, so I set out to build acp.el, a UX agnostic elisp library, followed by an actual client: agent-shell. I'm fairly happy with how agent-shell's been shaping up. This is my most popular package from 2025, receiving lots of user feedback. If you're curious about the feature-set, I've written about agent-shell's progress from early on: agent-shell 0.25 updates agent-shell 0.17 improvements + MELPA agent-shell 0.5 improvements Introducing Emacs agent-shell (powered by ACP) Introducing acp.el So you want ACP (Agent Client Protocol) for Emacs? chatgpt-shell improvements While agent-shell is the new kid on the block, chatgpt-shell received DeepSeek, Open Router, Kagi, and Perplexity support, in addition to a handful of other improvements and bugfixes. A new YouTube channel While most of what I share usually ends up as a blog post, this year I decided to try something new. I started the Bending Emacs YouTube channel and posted 8 episodes: Bending Emacs - Episode 8: completing-read Bending Emacs - Episode 7: Eshell built-in commands Bending Emacs - Episode 6: Overlays Bending Emacs - Episode 5: Ready Player Mode Bending Emacs - Episode 4: Batch renaming files Bending Emacs - Episode 3: Git clone (the lazy way) Bending Emacs - Episode 2: From vanilla to your flavor Bending Emacs - Episode 1: Applying CLI utils Enjoying the content? Leave me a comment or subscribe to my channel. My decade with org (Emacs Carnival) While I enthusiastically joined the Emacs Carnival, I didn't quite manage monthly posts. Having said that, when I did participate, I went all in, documenting my org experience over the last decade. Ok well… I also joined in with my elevator pitch ;) Awesome Emacs on macOS While migrating workflows to Emacs makes them extra portable across platforms, I've also accumulated a bunch of tweaks enhancing your Emacs experience on macOS. EverTime for macOS While we're talking macOS, I typically like my desktop free from distractions, which includes hiding the status bar. Having said that, I don't want to lose track of time, and for that, I built EverTime, an ever-present floating clock (available via Homebrew). A new time zone Emacs package Emacs ships with a perfectly functional world clock, available via M-x world-clock, but I wanted a little more, so I built time-zones. Also covered in: time-zones now on MELPA. Do I have your support? Emacs time-zones A new WhatsApp Emacs client For better or worse, I rely on WhatsApp Messenger. Migrating to a different client or protocol just isn't viable for me, so I did the next best thing and built wasabi, an Emacs client ;) While not a trivial task, wuzapi and whatsmeow offered a huge leg up. I wanted tighter Emacs integration, so I upstreamed a handful of patches to add JSON-RPC support, plus easier macOS installation via Homebrew. Details covered in a couple of posts: WhatsApp from you know where Want a WhatsApp Emacs client? Spiff that shell up While both macOS and iOS offer APIs for generating URL previews, they also let you fetch rich page metadata. I built rinku, a tiny command-line utility, and showed how to wire it all up via eshell for a nifty shell experience. With similar eshell magic, you can also get a neat cat experience. At one with your code I always liked the idea of generating some sort of art or graphics from a code base, so I built one, a utility to transform images into character art using text from your codebase. Also covered in a short blog post. Emacs can trim your videos too Emacs is just about the perfect porcelain for command-line utilities. With little ceremony, you can integrate almost any CLI tool. Magit remains the gold standard for CLI integration. While trimming videos doesn't typically spring to mind as an Emacs use case, I was pleasantly surprised by the possibilities. Landing Emacs patches upstream While I've built my fair share of Emacs packages, I'm still fairly new at submitting Emacs features upstream. This year, I landed my send-to (aka sharing on macOS) patch. While the proposal did spark quite the discussion, I'm glad I stuck with it. Both Eli and Stefan were amazingly helpful. This year, I also wanted to experiment with dictating into my Emacs text buffers, but unfortunately dictation had regressed in Emacs 30. Bummer. But hey, it gave me a new opportunity to submit another patch upstream. Ready Player improvements Ready Player, my Emacs media-playing package received further improvements like starring media (via Emacs bookmarks), enabling further customizations, and other bug fixes. Also showcased a tour of its features. GitHub activity Commits: 1,095 Issues created: 37 PRs reviewed: 106 Average commits per day: ~3 New GitHub projects EverTime - An ever present clock for macOS acp.el - An ACP implementation in Emacs lisp agent-shell - A native Emacs buffer to interact with LLM agents powered by ACP diverted - Identify temporary Emacs diversions and return to original location emacs-materialized-theme - An Emacs theme derived from Material homebrew-evertime - EverTime formula for the Homebrew package manager homebrew-one - Homebrew recipe for one homebrew-rinku - Homebrew recipe for rinku one - Transform images into character art using text from your codebase rinku - Generate link previews from the command line (macOS) time-zones - View time at any city across the world in Emacs video-trimmer - A video-trimming utility for Emacs wasabi - A WhatsApp Emacs client powered by wuzapi and whatsmeow Blog posts Journelly 1.3 released: Hello Markdown! agent-shell 0.25 updates Bending Emacs - Episode 8: completing-read At one with your code Bending Emacs - Episode 7: Eshell built-in commands Rinku: CLI link previews Bending Emacs - Episode 6: Overlays WhatsApp from you know where Want a WhatsApp Emacs client? Will you fund it? Bending Emacs - Episode 5: Ready Player Mode agent-shell 0.17 improvements + MELPA time-zones now on MELPA. Do I have your support? Bending Emacs - Episode 4: Batch renaming files Emacs time-zones Bending Emacs - Episode 3: Git clone (the lazy way) agent-shell 0.5 improvements Bending Emacs - Episode 2: From vanilla to your flavor Bending Emacs - Episode 1: Applying CLI utils Introducing Emacs agent-shell (powered by ACP) Introducing acp.el So you want ACP (Agent Client Protocol) for Emacs? Diverted mode Who moved my text? Dired buffers with media overlays Brisket recipe A tiny upgrade to the LLM model picker Emacs elevator pitch Emacs as your video-trimming tool macOS dictation returns to Emacs (fix merged) Writing experience: My decade with Org Interactive ordering of dired items Patching your Homebrew's Emacs Plus (macOS) Emacs send-to (aka macOS sharing) merged upstream Mochi Invaders now on the App Store Markdown is coming to Journelly EverTime available via Homebrew Journelly 1.2 released Ranking Officer now on the App Store Awesome Emacs on macOS Journelly 1.1 released LLM text chat is everywhere. Who's optimizing its UX? A richer Journelly org capture template Journelly: like tweeting but for your eyes only (in plain text) Journelly vs Emacs: Why Not Both? The Mac Observer showcases Journelly Journelly open for beta DeepSeek, Open Router, Kagi, and Perplexity join the chat Keychron K3 Pro: F1-F12 as default macOS keys E-ink bookmarks Sourdough bookmarks Cardamom Buns recipe A tour of Ready Player Mode A platform that moulds to your needs Blogging minus the yucky bits of the modern web Hope you enjoyed my 2025 contributions. Sponsor the work.
xenodium.com @alvaro Dec 30, 2025
-
Why I stopped reading code and started watching it stream by.
Peter Steinberger Dec 28, 2025
-
I needed a dev server: VM with SSH access and dev tools installed. I described what I wanted to Claude Code and let it handle the setup. The Prompt I asked for a Vultr VM with 8 cores and 32GB of RAM, accessible only through Tailscale, with persistent sessions that survive network drops. What Claude Code Built 1. Provisioned the VM via Vultr API It created an 8-core/32GB Ubuntu instance, waited for the IP, then SSH’d in as root.
Granda | Ideas & Code Dec 28, 2025 -
Every post I write gets translated automatically. Claude handles the translation, commits the results to main, and the translated versions deploy alongside the original. The Flow The translation workflow runs in GitHub Actions when English content is merged to main: on: push: branches: [main] paths: - 'content/**/*.en.md' flowchart LR B[Merge to main] --> C[Translations generated] C --> D[Committed to main] D --> E[Production deploy with all languages] The Prompt The workflow uses claude-code-action:
Granda | Ideas & Code Dec 23, 2025 -
Abstract This document describes the authorship methodology employed by this blog. 1. Introduction This blog is largely generated with the assistance of Large Language Models (LLMs). The author provides direction, editing, and quality control; the machine provides initial drafts and translations. 2. Rationale The author believes in transparency regarding AI-assisted content creation. Rather than obscuring the tools used, this disclosure aims to: Set appropriate expectations for readers Contribute to honest norms around AI content Acknowledge the collaborative nature of modern writing 3. What This Means Ideas: Human-originated Structure: Collaborative Prose: Primarily AI-generated, human-reviewed Translations: Entirely AI-generated (not human-reviewed) 4. Quality Assurance English content undergoes human review before publication. Translations are generated automatically and may contain errors or awkward phrasing. The author takes responsibility for the final published English content.
Granda | Ideas & Code Dec 22, 2025 -
Abstract This document provides background information about the author of this blog. 1. Background Software engineer with 15 years of experience, 10 spent working in the field. Areas of focus include: Distributed systems Backend development and infrastructure Full-stack and end-to-end product development User interface design Building secure and reliable systems 2. Contact Always happy to connect with others in the industry: @mtt
Granda | Ideas & Code Dec 22, 2025 -
https://github.com/gotbletu/shownotes/blob/master/notes/create_live_wallpaper_with_audio.mdeasy way to create a loop video with your own audio using those live wallpapers aka animated wallpaper aka motion wallpapers
gotbletu on Odysee Dec 21, 2025 -
Journelly 1.3 available on the App Store What is Journelly? Journelly feels like tweeting but for your eyes only. A fresh take on frictionless note-taking or journaling for iOS, powered by plain text (Markdown + Org). Save cooking recipes, movies, music, restaurants, coffee shops… Jot down your thoughts. Save your favorite quotes. Use it as a journal, memo book, or notes. Write your shopping lists. Document your travels. Lots more… Check out journelly.com for details. What's new? Journelly v1.3 brings Markdown support (the most requested feature), along with Simplified Chinese localization and other enhancements. Markdown support Journelly first launched with Org markup support, popular among Emacs enthusiasts. Markdown support has by far been the most requested feature. Thank you to everyone who reached out, shared your interest, and helped beta test early builds. Whether you're a fan of Markdown or Org-mode, Journelly now lets you store entries in your preferred format. Choose your favorite markup on first launch or via the app menu. So you like Markdown things? While on topic, I also run lmno.lol, a Markdown-powered blogging service. Simple and focused, without the frustrating parts of the modern web. Custom domains welcome. My xenodium.com blog runs off lmno.lol. Simplified Chinese (简体中文) Simplified Chinese (简体中文) is now available, joining Journelly's list of supported languages: Simplified Chinese (简体中文) Danish Dutch English Finnish French German Italian Japanese Norwegian Spanish Swedish Home Screen Widget A home screen widget is now available, offering quick access to three key actions right from the home screen. Discoverable mode Prefer clear buttons over swipe gestures? You can now enable Discoverable Mode under “Menu > View.” This new mode makes features more visible and easier to navigate, perfect for folks favoring more explicit interaction over gestures or subtle hints. Org rendering For Org users: Journelly now renders both quote and code blocks. Tidying the list up The entry list received a little refresh to make better use of screen space. Bottom-aligned controls also make for easier one-handed use. Love Journelly? I need your help Since launch, Journelly has remained a single-payment app. No subscriptions. I get it, subscriptions are no fun. That said, sustainable development is tough without regular downloads. I'm hoping the new Markdown support helps Journelly reach a wider audience. Help Journelly grow: Leave a review on the App Store. Share Journelly with your friends. Thank you Hope you enjoy the v1.3 update. Thank you for using Journelly and supporting indie development 💛💙❤️
xenodium.com @alvaro Dec 21, 2025
-
It's been a little while since the last agent-shell blog post detailing changes, so we're naturally due another one detailing the latest features. What's agent-shell? A native Emacs shell to interact with any LLM agent powered by ACP (Agent Client Protocol). ✨ Sponsor agent-shell ✨ So what's new? Let's go through the latest changes… Viewport/compose (experimental) The biggest change is the new experimental viewport/compose mode. While agent-shell's comint shell experience has its benefits, some folks may opt for a more familiar buffer experience, that is less shell-like. There are perhaps 3 defining characteristics in the new viewport/compose feature: A dedicated compose buffer: You get a full, multiline buffer dedicated to crafting prompts. I personally find this mode of operation more natural (no need to watch out for accidental submissions via RET), but also opens up the possibility to enable your favourite minor modes that may not play nice with comint. You can launch compose buffers via M-x agent-shell-prompt-compose, edit your prompt, and when you're ready, submit with the familiar C-c C-c binding. Viewport: I've experimented with shell viewports before and also added a similar experience to chatgpt-shell. This compose/viewport UX quickly became my primary way of interacting with non-agent LLMs. This is a read-only buffer typically displaying the latest agent interaction. Use n/p to navigate through current interaction items. Use f/b to switch through pages/interactions. Auto-modal: Compose and viewport modes complement each other and offer automatic transition between read-only and editable (compose) buffers. From a viewport, you can always press r to reply to the latest interaction. When replying, you automatically go into edit/compose mode. When submitting via C-c C-c, you automatically transition into viewport (read-only) mode. While you can use M-x agent-shell-prompt-compose at any time to compose multi-line prompts and send from the shell, to get the compose/viewport hybrid experience, you need to enable with (setq agent-shell-prefer-viewport-interaction t). From then on, M-x agent-shell will favor the compose/viewport experience. You can always jump between viewport and shell with C-c C-o. Prompt queueing (experimental) agent-shell buffers now offer the ability to queue additional prompts if the agent is busy. Use M-x agent-shell-queue-request and M-x agent-shell-remove-pending-request to queue and remove requests. Session model/mode You can now change models via M-x agent-shell-set-session-model (C-c C-v), when supported by the agent. For Anthropic users, we now have agent-shell-anthropic-default-model-id and agent-shell-anthropic-default-session-mode-id to set default agent model and modes. You can view available values by expanding shell handshake items. If keen on using defaults for a different agent, please file a feature request. Set preferred agent By default, launching via M-x agent-shell prompts users to select one of the supported agents. You can now skip this by setting your preferred agent (thank you Jonathan). (setq agent-shell-new-shell-config (agent-shell-anthropic-make-claude-code-config)) Automatic transcripts While shell-maker automatically prompts users to save content when killing agent-shell buffers, its integration was a little clunky with agents. Elle Najt's agent-shell-specific implementation is now enable by default, saving Markdown transcripts to project/.agent-shell/transcripts. When launching new shells, you should see a message like: Created project/.agent-shell/transcripts/2025-12-17-22-07-38.md You can always open the current transcript via M-x agent-shell-open-transcript. To disable the new transcript generation use: (setq agent-shell-transcript-file-path-function nil) MCP servers Jonathan Jin introduced agent-shell-mcp-servers, enabling folks to add MCP servers to their agents. For example: (setq agent-shell-mcp-servers '(((name . "notion") (type . "http") (headers . []) (url . "https://mcp.notion.com/mcp")))) Buffer search You can now search across shell nodes, including collapsed ones. When using isearch (swiper too), matching nodes are now automatically expanded. DWIM context When invoking M-x agent-shell, active region, flymake errors, dired and image buffers are now automatically considered and brought over to agent-shell buffers to be included while crafting prompts. There's one more. From a viewport buffer, selecting a region and pressing "r" (for reply) brings the selection over to the compose buffer as blockquoted text. Cursor support (migrated to Mike Moore's adapter) We've migrated Cursor agent support to use Mike Moore's ACP Adapter. Install with: npm install -g @blowmage/cursor-agent-acp New related packages Paul Nelson built agent-shell-attention.el offering a mode line attention indicator. Julian Hirn built agent-review introducing a streamlined workflow. Bug fixes #106: Use replace-buffer-contents instead of erase-buffer/insert #127: No longer possible to select the Anthropic model used by Claude Code #142: [bug] Crash during message streaming: markdown overlay receives nil positions #143: gemini 0.17.1 requires authMethod to authenticate (fix by Andrea) #144: Make collapsible indicator keymap customizable #145: Unable to enter Plan Mode until after first message is sent #150: Warning (undo): Buffer 'Codex Agent @ …' undo info was 25664948 bytes long #154: Gemini CLI doesn't need authorization if already logged in Pull requests Thank you to all contributors for these improvements! #125: Fix error when viewing proposed diffs (Nat Page) #129: Support setting a preferred agent config (Jonathan Jin) #138: Enable specifying MCP server configurations via custom variable (Jonathan Jin) #139: Document MCP server config functionality (Jonathan Jin) #140: README: Add MELPA badge + expand install instructions (Jonathan Jin) #141: Add keybindings to cycle/set session mode (Jonathan Jin) #149: Use fixed-pitch for ascii art logos (Mark A. Hershberger) #155: Give the new custom flag to gemini for skipping the authorization (ccQpein) Lots of other work ❤️😅 Beyond what's showcased, much love and effort's been poured into polishing the agent-shell experience. Interested in the nitty-gritty? Have a look through the 122 commits since the last blog post. Make the work sustainable If agent-shell or acp.el are useful to you, please consider sponsoring development. LLM tokens aren't free, and neither is the time dedicated to building this stuff ;-)
xenodium.com @alvaro Dec 20, 2025
-
Welcome to my blog! This is my first post. I’ll be sharing ideas, notes, and things I find interesting here.
Granda | Ideas & Code Dec 20, 2025 -
Hell froze over. Anthropic fixed Claude Code's signature flicker in their latest update (2.0.72)
Peter Steinberger Dec 18, 2025
-
https://github.com/ps2dev/mymcconvert savefiles to ps2 memory cardsvmc for .ps2 pcsx2 or .bin for oplconvert/import/exportmax to binpsu to binsps to binxps to bincbs to binmax to ps2psu to ps2sps to ps2xps to ps2cbs to ps2- import examplepython2.7 mymc.py SLUS_207.72_0.bin import SSX3.max- list memcard contents examplepython2.7 mymc.py SLUS_207.72_0.bin dir- export examplepython2.7 mymc.py SLUS_207.72_0.bin export BASLUS-20772-GAM0001----OPL creating VMC (.bin) (PS2 Virtual Memory Card)----- PS2 > FMCB (Slot2) > OPL 1.2.0 > Games List > [highlight game] > Options (press Triangle) > Configure VMC > VMC Slot 1 > not set (Press X) > Create > Back (press O) - It creates 8MB Virtual Memory Card (e.g /VMC/SLUS_204.86_0.bin)- PS2 > FMCB (Slot2) > OPL 1.2.0 > Games List > [highlight game] > Options (press Triangle) > Configure VMC > Save changes----Use Existing VMC----- PS2 > FMCB (Slot2) > OPL 1.2.0 > Settings > Write Operations > [On] > OK- PS2 > FMCB (Slot2) > OPL 1.2.0 > Save Changes > Settings saved to mc1- PS2 > FMCB (Slot2) > OPL 1.2.0 > Games List > [highlight game] > Options (press Triangle) > Configure VMC > VMC Slot 1 > not set (Press X) > [SLUS_204.86_0] > Modify > OK > Back (press O)- PS2 > FMCB (Slot2) > OPL 1.2.0 > Games List > [highlight game] > Options (press Triangle) > Configure VMC > Save changes
gotbletu on Odysee Dec 17, 2025 -
Nearly a couple of weeks since the last Bending Emacs episode, so here's a new episode: Bending Emacs Episode 8: completing-read In this video, we take a look at the humble but mighty completing-read function. We can use it to craft our purpose-built tools, whether in pure elisp or to interact with command-line utilities. Of interest, I also highlighted the great elisp-demos package, which extends your help buffers with sample snippets. Here are some of the completing-read snippets we played with: Pick a queen: (completing-read "Pick a Queen: " '("Queen of Hearts ♥" "Queen of Spades ♠" "Queen of Clubs ♣" "Queen of Diamonds ♦") ;; predicate nil ;; require match t) Our own hashing function with an algo picker: (defun misc/hash-region () (interactive) (message "Hash: %s" (secure-hash (intern (completing-read "Hash type: " '(md5 sha1 sha224 sha256 sha384 sha512))) (current-buffer) (when (use-region-p) (region-beginning)) (when (use-region-p) (region-end))))) A first look at integrating completing read with a CLI util: (completing-read "Select file: " (string-split (shell-command-to-string "ls -1 ../") "\n")) Also got creative with BluetoothConnector on macOS and completing-read. (completing-read "Toggle BT connection: " (mapcar (lambda (device) ;; Extract device name (nth 1 (split-string device " - "))) (seq-filter (lambda (line) ;; Keep lines like: af-8c-3b-b1-99-af - Device name (string-match-p "^[0-9a-f]\\{2\\}" line)) (split-string (shell-command-to-string "BluetoothConnector") "\n")))) Some of my completing-read uses: Emacs: quickly killing processes. Emacs: insert and render SF symbols. macOS open with. macOS set default app. macOS share (the unhinged way). ready-player search. Hope you enjoyed the video! Want more videos? Liked the video? Please let me know. Got feedback? Leave me some comments. Please go like my video, share with others, and subscribe to my channel. If there's enough interest, I'll continue making more videos! Make it all sustainable Enjoying this content or my projects? I am an indie dev. Help make it sustainable by ✨sponsoring✨ Need a blog? I can help with that. Maybe buy my iOS apps too ;)
xenodium.com @alvaro Dec 13, 2025
-
Blocking ads, trackers and other unwanted content using an ad-blocker is useful, easy and convenient. However, it takes up system resources. Using the /etc/hosts file on Linux and MacOS to block unwanted content system-wide can mitigate this issue. It makes your browsing experience snappier, and applies to every browser installed on your system. Why? Using the /etc/hosts file is better since the block comes directly from your system. When a website requests an unwanted link, what happens is: The browser starts loading the content The ad-blocker recognizes the content The ad-blocker blocks the content However, when using a system-wide, local method like the /etc/hosts file, the system blocks (or redirects) the request altogether. This leads to a snappier browsing experience, since the number of steps is less, and it’s happening at an earlier stage. How? The /etc/hosts file basically works like a tiny DNS override. It maps hostnames to IP addresses. In simple terms, it tells the system what IP address a specific hostname corresponds to. For example, if I write the following in my /etc/hosts file: 0.0.0.0 www.youtube.com It will tell my system that www.youtube.com should lead to 0.0.0.0, which is localhost. Since there is (usually) nothing running on localhost on a system, browsers usually say that the website is unable to connect. This is the process to blocking a single website. Hostfiles It is impractical to add every single site you don’t want connecting. Thankfully, many people online have different hostfiles to simplify the process. These hostfiles are filled with unwanted content, and just require copy-pasting in your /etc/hosts file. One of the best hostfile repositories is Steven Black’s Unified Hosts. There are 31 different host file variants, each offering different types of blocking functionality. To use any one of them, just open the respective host file, copy everything except the localhost configuration in the beginning, and paste it in the end of your /etc/hosts file. It’s as simple as that!
blog on sufyaan's corner Dec 8, 2025 -
but she's a girl... Dec 7, 2025
- Loading…
Select an article to read.
Keyboard shortcuts
- j / k
- Next / previous article (also n / p)
- g / G
- First / last article
- Enter / o / v
- Open in the reader
- Middle / ⌘-click
- Open the article source in a background tab
- Space
- Page down (Shift = up)
- s
- Star / unstar
- m
- Toggle read
- A
- Mark all read
- r
- Refresh feeds
- u
- Go to Unread
- t
- Add a tag
- /
- Search
- ?
- This help
- Esc
- Close / back to list