Nicholas Clooney

Timeline

#ai-agents

22 entries following this thread through the timeline.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

fix: tmux-agents v1.3.1 completed agent status

I shipped v1.3.1 of tmux-agents after a spawned agent on the Stone Age project showed “needs you” when it reported progress just after replying to its parent. A report such as “delivered abc123” now leaves a completed agent done, instead of putting it back to work and flagging it at the next turn end. A new regression case in tests/needs-you.sh covers the sequence.

Nicholas Clooney

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.

Nicholas Clooney

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.

Nicholas Clooney

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.

A request from Claude arriving in Codex's pane Codex's reply arriving back in Claude's pane
Claude asks Codex for a review, and the reply comes back as a new message.
The agent list showing sub agents with their status and parent, and a live preview of the selected session A hidden Codex sub agent opened in a popup from the list
prefix + a lists the sub agents with a live preview. I can open one in a popup to answer it or give direction.
Nicholas Clooney

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.

It is genuinely engaging, more like conducting than coding, but it burns through tokens fast, especially on top-tier models like Opus 4.7 or GPT 5.5.

A few cost-saving strategies I've landed on: drop to lower-tier models where the work allows; instead of paying for the $100 tier at a single provider, take the $20 tier at both OpenAI and Anthropic and run them side by side; and lean into the fact that each model has its own strengths and weaknesses, just like any tool. It's the vim vs emacs thing again. There is no single best editor, only what suits the job in that moment (I use both, with evil-mode in Emacs as the vim layer).

Nicholas Clooney

thoughts: Codex vs Claude on Cloudflare Pages TUI polish

I've been iterating on scripts/check_cloudflare_pages.py, and this one ended up being a pretty clean example of where Claude currently feels stronger than Codex for TUI / UI design.

Codex got the script started and helped shape the core deployment-status workflow, but when it came to making the terminal output feel actually polished, especially across both the short and verbose views, Claude was noticeably better. At its best Codex still seems to struggle a bit with this kind of presentation work, so I ended up handing the UI pass over to Claude even though Codex had started the script.

View Codex Claude
Short version Short terminal output version of the Cloudflare Pages deployment status script produced with Codex Short terminal output version of the Cloudflare Pages deployment status script produced with Claude
Verbose version Verbose terminal output version of the Cloudflare Pages deployment status script produced with Codex Verbose terminal output version of the Cloudflare Pages deployment status script produced with Claude
Short and verbose output passes for the same Cloudflare Pages deployment-status script, comparing Codex against Claude.
Nicholas Clooney

wip: ProjectSpire Claude snapshot

I tagged a ProjectSpire snapshot for 2026-05-11, but this one feels different because I barely did any of the implementation myself.

My Codex usage is nearly gone, so Claude carried most of the work while I was busy elsewhere: parsers for relics, potions, events, and monsters; shared parser utilities; tests; and a few devlogs.

I haven't built the UIs I need to verify Claude's parser work against the actual game properly. So I don't have that confidence in its work yet without the validation.

I miss Codex and the clearer feedback loop, the back and forth, and...

Most importantly my own deeper understanding of how everything ties together.

Tomorrow. Today has been a long day.

Nicholas Clooney

thoughts: Claude Code friction while Codex is capped

Almost running out of my weekly Codex / GPT token usage, so I switched to Claude for a few hours.

Somehow the experience feels much higher friction.

It likes to spend a long time thinking even for relatively simple tasks. For example: "write this devlog for me." It already had detailed guidance (ProjectSpire Devlogs CLAUDE.md) plus example documents in the same folder.

If it were GPT, it probably would have been done in seconds. Claude spent nearly a minute still "flabbergasting..." until I stopped it and asked what it was doing. Its response was essentially: "I was reading unnecessary documents."

Then there's the terminal behavior.

I wanted it to run some git commands, but it kept doing cd project-root && git ... everywhere. I genuinely do not understand why, because it can already execute commands from within the project context directly.

Claude Code repeatedly running git commands through cd into the ProjectSpire folder after being asked to switch to the project root once
Claude, Claude, Claude...

I explicitly told it: "cd into the project root once and then run git commands directly without repeating cd." Nope. It still kept issuing (cd ... && git ...) commands until I corrected it a second time.

I'm genuinely having a hard time getting used to working with Claude. Curious what other people's experiences have been.