Nicholas Clooney

Tagged "workflow"

72 entries

feat: tmux-agents v1.21.0 tracks turns instead of requests

I shipped v1.21.0 of tmux-agents, which replaces the request ledger with turn state. A running turn shows as working and an ended turn shows as idle or done, while parents show live "waiting on" text from their nearest working descendants. Replies no longer need a request ID, and a one-slot stop notice remembers the latest requester. tmux-spawn also passes agent CLI arguments after --, saves them with the sub agent and brings them back on resume.

feat: tmux-agents v1.20.0 brings project launchers into tmux-agents

I shipped v1.20.0 of tmux-agents, which moves my project launchers into tmux-agents itself. tmux-agents main-sequence opens the configured project windows in order, with optional names and plain shells, and tmux-agents chain picks a project from the current directory, the saved projects or an optional scan root. The config is editable with list, add --at N, set and unset, with nothing personal hardcoded. tmux-agents start chain --main-resume ID resumes just the main conversation, with Claude reconnecting Remote Control through /rc, and sub agents spawned by a profiled Codex agent now inherit that profile, including on resume.

feat: tmux-agents v1.19.0 makes long messages explicit

I shipped v1.19.0 of tmux-agents, which makes long messages explicit: tmux-ask and tmux-spawn take --message-file, so an agent sends a summary plus the full text, the recipient reads it with tmux-read <id>, and automatic truncation is gone. Agents now get resume hints and can resume in place with tmux-spawn --resume --here, and a requester is notified when a sub agent stops without replying, replacing "reply overdue". Claude hooks are hardened, with StopFailure handled, tool hooks clearing permission waits, and AskUserQuestion and MCP input dialogs marking "needs you". Resumed Codex agents are tracked, finished agents keep their last report, ownership survives a gone ancestor, and a new probe checks Codex compatibility.

blog: The Two Extremes of AI-Assisted Engineering: Fast and Furious, vs. Slow and Careful

I published The Two Extremes of AI-Assisted Engineering: Fast and Furious, vs. Slow and Careful, about the two opposite ways I work with the same coding agents: letting them run while I barely read the code, and slowing down until every decision is mine. It uses EDControlRoom as the example of a project moving along that spectrum, and argues that the real decision is where to set the quality bar for each project right now, and when to move it. This is the third version; I wrote it section by section after setting two earlier drafts aside.

feat: tmux-agents v1.18.0 tracks replies and makes attention explicit

I shipped v1.18.0 of tmux-agents, which tracks completion per request: each tmux-ask request resolves when its own reply arrives, whoever asked, so answering an agent other than its parent no longer leaves the receiver working or falsely showing "needs you". A delivered request with no observable progress for 30 minutes now shows "reply overdue" on the receiver, with a configurable timeout separate from "needs you". When an agent in a tmux-spawn --split pane exits, the pane returns to the default shell with its original environment; @tmux_agents_sub_exit keep preserves the old dead-pane behaviour. Any tracked agent, including a top-level main, can now use tmux-agent-report --needs-you "reason" to ask for me explicitly, with the reason shown in the chip and agent list.

feat: tmux-agents v1.17.0 adds command mode to shell popups

I shipped v1.17.0 of tmux-agents, which adds command mode to shell popups: prefix + C-s now opens an fzf picker over saved fish, bash or zsh history, or lets me type a new command, then runs it in a hidden pane shown in a popup; the plain shell moves to prefix + S. A successful command shows ok and closes after a three-second countdown unless I press any key to keep it, while a failed command stays open in a shell, and prefix + a lists each command as running, ok or failed N until cleared with ctrl-x. Agents can use tmux-shell --from NAME --command CMD, and shell popup startup is about twice as fast, with the tool's work before the shell starts down from about 290 ms to 140 ms. The history picker uses fish's own history and Perl without Python, and start chain --help is fixed too.

feat: tmux-agents v1.16.0 lets scripts create chain windows

I shipped v1.16.0 of tmux-agents, which lets scripts such as my dotfiles' tmux-chain delegate chain window creation with tmux-agents start chain [DIR] --target session[:index] --name NAME. --target creates the window detached in an existing session, even from outside tmux, and a bare session name picks the next free index. --name sets the window name, defaulting to the directory basename, and the window's automatic-rename and allow-rename options are off before the agent starts. On success, the command prints exactly the new pane ID.

feat: tmux-agents v1.15.0 adds shell popups

I shipped v1.15.0 of tmux-agents, which adds shell popups: prefix + C-s or tmux-shell opens a plain shell in the hidden project session, with the shortcut configurable through @tmux_agents_shell_key (none disables it). prefix + d detaches the popup while the shell keeps running, and prefix + a lists it as a shell, with Enter to reopen and ctrl-x to close. Agents can open owned shells with tmux-shell --from NAME, which close with their owner, and agent messages can never be typed into a shell. exit removes the shell, with nothing resumable and no separate command log.

feat: tmux-agents v1.14.0 opens up to other coding agents

I shipped v1.14.0 of tmux-agents, which adds limited support for other coding agents. Any executable on PATH, such as gemini, opencode or aider, now works wherever tmux-agents takes an agent: tmux-agents start, tmux-spawn and the chain roles. Claude, Codex and Codex profiles keep full features. Other agents get panes, naming, connect, peek, dismiss and tmux-ask messaging, but no automatic tracking, worked time, resume or permission setup, and their first task is sent manually once they reach their prompt. The new docs/agents.md has the feature table and welcomes PRs that add full support for more agents. One behaviour change: a single bare first word to tmux-spawn is now read as the agent to launch.

feat: tmux-agents v1.13.0 lets you pick each chain role's agent

I shipped v1.13.0 of tmux-agents, which makes the agent chain's roles configurable. Each of the three roles (main, secondary, worker) can now be Claude, Codex or a configured Codex profile, per launch with tmux-agents start chain [DIR] --main/--secondary/--worker AGENT, or lastingly through the @tmux_agents_chain_* tmux options or TMUX_AGENTS_CHAIN_* env vars. The defaults stay Claude, Claude and Codex, a preference in CLAUDE.md or AGENTS.md still wins, and a Codex main or secondary now works. A new read-only tmux-agents chain-config [--sources] shows the role choices new chains start from and where each came from. To upgrade, rerun ./install.sh to refresh the copied Codex rules and add the Claude allow rule Bash(tmux-agents chain-config:*).

blog: Start the Chain: My Three-Agent Setup Is Now One Command

I published Start the Chain: My Three-Agent Setup Is Now One Command, a follow-up to the main agent post. The main agent, secondary and worker setup is now the agent-chain skill in tmux-agents, started with one command, and the post covers what changed with a week of real use and how projects talk to each other. It also covers what happens after a restart: tmux-main-sequence brings back a chain for every project, and /resume brings back the conversations that matter.

fix: tmux-agents v1.12.2 keeps agent names and quiets main agents

I shipped v1.12.2 of tmux-agents, a patch release with two fixes that bring behaviour in line with the docs. Renaming and auto-naming now keep the agent kind prefix for agents started with tmux-agents start, so renaming a chain's main to main gives claude-tmux-agents-main instead of tmux-agents-main, and Codex profiles consistently use codex-. Top-level agents, like a chain's main, now go idle when they finish a turn with nothing pending instead of showing amber "needs you", which stays for sub agents and members.

feature: tmux-agents v1.11.0 members and a calmer agent list

I shipped v1.11.0 of tmux-agents with long-lived members (tmux-spawn --member), which the agent-chain skill now uses for its secondary and worker instead of sub agents. The agent list is calmer: a fixed name column, compact names, time in state and worked time per agent, plus a pinned preview header with full activity and scrolling that pauses follow. The list now requires fzf and gives clear install instructions when it is missing; there is also a new configuration guide and an updated quick start. After updating, reload the tmux config with tmux source-file ~/.tmux.conf so the new hooks can save worked time and mark removed panes closed.

skill: tmux-agents v1.10.0 shared skills and agent chain

I shipped v1.10.0 of tmux-agents with one shared skill for Claude and Codex, installable with npx skills add TheClooneyCollection/tmux-agents -g, and a new agent-chain skill for “start the chain”: main, secondary and worker side by side. The installer now handles Codex homes more safely, backs up real files and directories with --force, and warns about dangling skill links; re-run ./install.sh from the installed checkout after updating. CI runs on macOS and Ubuntu, covering installation and upgrades as well as the offline tests. Picker rows now stay aligned, and searches match only agent names and projects.

feature: tmux-agents v1.9.0 agent ids behind the names

I shipped v1.9.0 of tmux-agents with hidden agent ids behind the readable names: session records, parent links, waiting lists and queued messages now use ids, so reusing a closed agent's name cannot overwrite its saved conversation, a real bug we found while checking renames. Renaming now changes only the label; names remain unique among live agents and are still how we address them, with ids kept out of the agent list rows. Agents can look up ids with tmux-peers --ids or tmux-spawn --list-closed, and use --resume-id to reopen one exact closed agent when names repeat. Existing setups migrate on first use with a backup of the old records, preserving every resumable conversation and parent link, checked on a copy of my 54 real records.

feature: tmux-agents v1.8.0 renaming and live configuration

I shipped v1.8.0 of tmux-agents with tmux-rename: an agent's links, saved records, references from other agents and queued messages follow the new name, and it and its connected agents get a notice. Agents can rename themselves and their descendants, while I can rename anyone. Given names now follow the automatic format, so tmux-spawn codex --name spirit-earth creates codex-<project>-spirit-earth, with --exact to keep a name as given. Every user setting is now a live tmux option in tmux.conf (set -g @tmux_agents_<name> ...), listed in one Configuration section, with the old environment variables still taking precedence.

docs: tmux-agents v1.7.3 lessons from shipping

I shipped v1.7.3 of tmux-agents, rewriting AGENTS.md around what the agents learned shipping v1.6 and v1.7. It now covers running tests, treating flaky tests as release blockers, the list-build process budget, working in a shared checkout and recording decisions before implementation. The release routine says to reply as soon as a release is out and never move a published tag, while the DESIGN.md overview now matches current behaviour.

fix: tmux-agents v1.7.1 faster popup startup

I shipped v1.7.1 of tmux-agents so prefix + a shows the popup in about 50ms, instead of waiting 0.5–0.7 seconds before anything appears: fzf starts immediately and loads the rows right after. The bigger delay was in my shell, since tmux runs every popup through default-shell -c: my fish config loaded thefuck and mise even for non-interactive shells, costing 0.26–0.47 seconds each time, and now stops early in 0.01–0.02 seconds. I added performance notes, an “If popups feel slow” check in the README and a tmux-agents-perf skill to help agents find where a delay comes from.

feature: tmux-agents v1.7.0 durable messages and a faster list

I shipped v1.7.0 of tmux-agents so tmux-ask keeps waiting messages instead of giving up on a busy pane, with “✉ message waiting” pinned in the agent list and shown in the chip after 30 minutes. If the receiver is gone, the sender gets a notice with the saved text's path; messages for reopenable spawned agents are kept for tmux-spawn --resume, while tmux-ask --pending lists queued or undelivered messages and --retry re-sends them, including files from older versions, with at-least-once delivery. The list also opens and switches scope about 45 times faster on my live data (28 panes and 45 session records), from 4.5 seconds to 0.1 seconds, by using one tmux snapshot instead of hundreds of tmux, awk and git calls; a new test fails the build if a rebuild launches more than 20 processes. The worker split the work across three agents of its own, with decisions recorded.

docs: tmux-agents v1.6.1 reply when the main work is done

I shipped v1.6.1 of tmux-agents, a skills update telling agents to reply as soon as a request's main work is done, then send follow-ups such as a deploy or a page going live as notices. For requests with several parts, they send a notice as each part lands. It came from my agent chain: secondary held its v1.6.0 reply until the blog entry was live, leaving main and me unaware that the release was already out.

feature: tmux-agents v1.6.0 close an agent tree

I shipped v1.6.0 of tmux-agents so one tmux-dismiss closes the secondary, worker and the rest of their subtree, deepest first and with each agent reopenable; agents can close any descendant, while --keep-children leaves children running without an owner. An agent waiting for its first task now shows “○ idle”, and an agent that sends its parent a progress notice and waits no longer gets flagged “needs you”, a bug I saw with spirit-earth. Closed agents whose parents were also closed now appear in the right window's list. The worker split the work across three agents of its own, with decisions recorded and 199 checks, including the new tests/dismiss.sh.

feature: tmux-agents v1.5.0 window-scoped agent list

I shipped v1.5.0 of tmux-agents after running several projects at once: prefix + a now opens the agent list for the current window, including its agents and their spawned descendants in hidden windows or splits, with ctrl-t to switch to all windows. Agents waiting for permission or marked “needs you” stay pinned at the top across all windows, longest wait first and labelled with their project and the visible window they belong to (their first visible ancestor’s), so the filter never hides something waiting on me. The status-bar chip stays global on purpose. The decisions are recorded, and tests/list-scope.sh covers the list behaviour.

feature: tmux-agents v1.4.0 visible splits

I shipped v1.4.0 of tmux-agents so spawned agents can open in a visible split with tmux-spawn --split <pane> [--right | --below] [--size N%]. It came from the layout I wanted for my agent chain: main on the left half, secondary top right and worker bottom right, all in one window, using --split main --right for secondary and --for secondary --split secondary --below for the worker. Split agents keep the agent list, status chip, messaging, closing and reopening, though reopened agents return in hidden windows. The decisions are recorded, and tests/spawn-split.sh covers the feature with 43 checks.

feature: tmux-agents v1.3.0 agent ownership

I shipped v1.3.0 of tmux-agents to support the main → coordinator → worker chain: tmux-spawn --for <owner> lets main spawn a worker that belongs to and connects only to the coordinator, which introduces itself and sends the first task. The worker starts without a task, and depth counts from main so it can still spawn agents of its own. I also fixed messages to closed agent names landing in similarly named windows; missing names now fail, and agents are told to use the names tmux-peers shows now. Product decisions live one per file, with new regression tests for ownership and name matching.

fix: tmux-agents v1.2.1 needs-you status

I shipped v1.2.1 of tmux-agents after finished spawned agents showed “needs you” when their parent broadcast a rule as a request. Agents now use tmux-ask --notice to pass along information, so a request saying “no reply needed” doesn't put an idle agent back to work. Notices also preserve a Claude agent's waiting state while background work runs, and regression tests cover both false alarms and cases that really need me.

blog: Messy Chat with Your Agents? You Just Need One More. Really.

I published Messy Chat with Your Agents? You Just Need One More. Really., about splitting the Claude agent I talk to from the one coordinating work on my Stone Age remake. With tmux-agents, the new main agent has one peer: the coordinator, which handles the main Codex agent and its sub-agents. The post shows the setup before and after, why my conversation got quieter, and the extra hand-off that comes with it.

blog: I Gave My Coding Agents a Shared Worktree Pool

I published I Gave My Coding Agents a Shared Worktree Pool, about the worktrees Claude and Codex left behind while I was building my Stone Age remake. I run those agents through tmux-agents, which I shipped the day before. I replaced fresh checkouts with reusable slots and shared asset folders, then made a general Python version available as a gist. The post covers the lease rules, the disk cleanup that prompted them, and what I have and haven't tested yet.

blog: Your Sub-Agents Shouldn't Disappear: Meet tmux-agents

I published Your Sub-Agents Shouldn't Disappear: Meet tmux-agents, the introduction to tmux-agents that my last two posts kept pointing back to. It covers why I wanted visible sub-agent sessions, how I use them on my game and this blog, and how to try the tool. I also wrote down a few of the design choices and the limits I'm still working through.

feature: tmux-agents v1.0.0

I shipped v1.0.0 of tmux-agents, extracted from my dotfiles with its full history and released under MIT, because I want my sub agents' work to stay visible after the task ends. Each Claude or Codex sub agent runs in its own tmux window: I can watch a live preview, switch in to steer it, and let agents exchange tasks and replies through tmux-ask. The panes stay until closed, the conversations can be resumed afterward, and a line above the status bar flags agents that need me. There's also a setup skill so an agent can install it and walk me through a quick start.

thoughts: Multi-project agent orchestration

A new style of working with AI has been clicking for me lately: keeping several projects open at once, letting the main agent spawn off sub-agents per project, then hopping between them as work lands.

The glue is AGENTS.md and CLAUDE.md in each repo, which keeps every spawned agent oriented to that project's conventions while I focus on the next handoff. The loop in each project stays the same: pick a feature, write tests, document progress and findings as it goes, commit atomically.

feature: Lightweight Emacs migration and tmux workflow

I shipped v2026.5.1 of dotfiles, which pairs a nicer tmux workflow with the move away from the old Spacemacs setup into a smaller hand-rolled Emacs config. The tmux side gives me a one-keystroke 70/20/10 vertical layout plus a safe top-and-middle pane swap, while PR #2 keeps the core editor ergonomics I care about like Evil, leader keys, Magit, Helm-style tracked file finding, and early theme loading without the extra framework machinery. This is the point where the repo feels easier to understand and own, and I want to do a fuller write-up on the tmux and "Subspacemacs" workflow soon.

note: Tmux 70/20/10 Layout Shortcuts

Published Tmux 70/20/10 Layout Shortcuts, a note about building a one-keystroke tmux layout that creates a stable 70/20/10 vertical stack and only allows pane swapping when the window is explicitly tagged as that layout. The useful part was not just the final run-shell binding, but the testing approach: using detached tmux sessions plus list-keys, list-panes, and show-options as a lightweight TDD harness before touching the real config. This is one piece of a broader terminal and editor workflow cleanup, and I want to write that larger tmux plus lightweight Emacs story up properly soon.

blog: My AI-Assisted Terminal Setup: Subspace Emacs and a Tmux Layout Shortcut

I published My AI-Assisted Terminal Setup: Subspace Emacs and a Tmux Layout Shortcut, the fuller write-up that ties together the tmux 70/20/10 layout and the move off Spacemacs into Subspace Emacs. It covers how Claude and Codex split the work between research and implementation, the tmux-as-TDD-harness approach that unblocked the layout binding, and the tmux/tmux#1839 discovery that finally let swap-pane preserve zoom state. This supersedes the two narrower notes from earlier today.

blog: AgentOS: The Agent Environment That Gets Smarter As You Build

Published AgentOS: The Agent Environment That Gets Smarter As You Build, a post about the project environment I am building around AI agents so a fresh session does not have to rediscover the same context every time.

It uses ProjectSpire as the working example: instructions as project memory, plans for intent, Captain Logs for collaboration taste, devlogs for technical history, and skills or workflows for repeated mechanical steps.

blog: The Accelerated Speed of Creation

Published The Accelerated Speed of Creation, a reflection on how much faster the path from thought to shipped artifact has become with coding agents handling the translation layer around writing, blog workflow, and routine Git operations. I also kept the earlier Encoding My Blog Workflow for Coding Agents draft as a note rather than a post, because it was useful and concrete but still did not meet my standard for what the real piece needed to be.

The Limits of AI and Where Humans Shine

I hit a bug that looked too small to be interesting: entries on my timeline page were not sorted correctly within the same day.

The page had a date, a time, and a custom Eleventy collection sort. That sounds like the whole problem space. Sort by date plus time, reverse the collection for newest first, done. Instead, April 12 was rendering in a strange order: 00:01, 10:11, 22:16, 15:49, 22:20.

Building ProjectDawn with Claude and Codex: An AI-Assisted iOS Devlog Deep Dive

I've been building a habit-logging iOS app called ProjectDawn. Not because the App Store needs another habit tracker, but because I wanted a personal project that was genuinely mine and open source, and a project that can answer this openly: what does it feel like to build a real, modular, native iOS app with AI as a primary collaborator?

This post is part personal log, part technical retrospective. It covers the tools I used, what surprised me, where the AI fell flat, and the biggest shifts in how I think about building things now.

Behind the Scenes: Pair-Writing the Umami Post With GPT

I’ve had the Umami + Ansible post in my head for ages, but it touched three different repositories and a whole bunch of code snippets. Totally doable, but undeniably tedious — which is why it kept slipping down the backlog. You can read the finished article here: Private Analytics With Umami, Docker Compose, and Ansible.

The idea that finally nudged it forward was simple: why not let GPT (Codex) do the heavy lifting while I steer?

My Super Powered Tmux - One Session But Multiple 'Focuses'

I want tmux to feel like one cohesive environment that never goes away. When I am docked at my desk, I spread iTerm across multiple Mission Control desktops and keep a different project on each space, with some other tools I need for that specific project. Later, when I grab my MacBook Air or open Blink on my iPhone or iPad, I want those exact same panes, command histories, and scrollback.

Plain tmux attach gets close, but the shared "current window" breaks the illusion. When I switch to another window in my main terminal, all other tmux clients jump to the same window and interrupts whatever flow I was in. I wanted tmux to be stateful and multi-focus.

The Joy (and Frustrations) of Building Small Sites with GPT-5 Codex

Building small websites with GPT-5 Codex turned out to be less about typing code and more about collaboration. From crude sketches to polished sites, the model took on the heavy lifting while I guided direction and design.

Along the way I discovered both the joy of fast iteration and the limits of relying on an AI partner. These projects became less about the sites themselves and more about exploring a new style of programming — conversational, creative, and sometimes flawed, but always eye-opening.

Building My Own Subspace Builder

Last month, my girlfriend mentioned she needed a sleek portfolio site, and I realized I’d been meaning to start a personal tech blog.

I wanted something lightweight—easy to spin up and even easier to tweak. So I dove in: building a small 11ty + Tachyons site from scratch, pushing every iteration live in under a minute, and watching her face light up with each update even though she’s halfway across the country.