<feed xmlns='http://www.w3.org/2005/Atom'>
<title>archsetup/dotfiles/common/.local/bin/aix, branch main</title>
<subtitle>Builds a full dev workstation from a bare Arch Linux install.
</subtitle>
<id>https://git.cjennings.net/archsetup/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/archsetup/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/'/>
<updated>2026-04-20T14:28:47+00:00</updated>
<entry>
<title>remove aix and hey: 'ai' lives in claude-templates now</title>
<updated>2026-04-20T14:28:47+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-20T14:28:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=c092ed493a9ff4a823e38c4c23e571d27286bd49'/>
<id>urn:sha1:c092ed493a9ff4a823e38c4c23e571d27286bd49</id>
<content type='text'>
Both the aix script and hey shell function are superseded by the
unified 'ai' launcher in claude-templates (bin/ai, installed via
make install). Single command, three modes, smart in-tmux behavior
so all sessions survive Hyprland crashes.

Per-machine setup adds a step:
  cd ~/projects/claude-templates &amp;&amp; make install

The orphaned ~/.local/bin/aix symlink should be removed manually on
each machine after pulling this change (rm ~/.local/bin/aix). Stow
re-stow would also clean it up.
</content>
</entry>
<entry>
<title>aix: synchronous fetch + git-status annotations + auto-pull if clean</title>
<updated>2026-04-20T14:05:39+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-20T14:05:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=f3526632257686692687b1b5a596eb399e42b119'/>
<id>urn:sha1:f3526632257686692687b1b5a596eb399e42b119</id>
<content type='text'>
Adds multi-machine sync awareness to the session launcher.

Before fzf:
- Fetches all candidate repos in parallel (capped at 6 concurrent)
- Annotates each entry with git status: (↑N ↓N dirty), (no upstream)
- Clean repos show no annotation

When launching a window:
- If working tree is clean, has upstream, is behind (not ahead): pull
- Otherwise: open window as-is, user handles any sync manually

Design choices:
- Fetches are synchronous — accurate status at the cost of a brief wait
  on session start. Parallel execution keeps it fast (~1-2s for 22 repos).
- Pull is --ff-only — never merges, never creates merge commits in aix
- Diverged repos (ahead AND behind) trigger no auto-action; user decides
- No stash/pop dance — unreliable in multi-project batches; prefer
  explicit awareness via annotation

Primary use case: moving between laptop and desktop. Wrap-it-up's
always-push ensures remote is current at session end; this ensures
local is current at next session start.
</content>
</entry>
<entry>
<title>aix: update to .ai/ layout; filter candidates to template projects</title>
<updated>2026-04-20T13:56:59+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-04-20T13:56:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=93c137a953e7a5fe69d781ebdb49fcc85ae67b0c'/>
<id>urn:sha1:93c137a953e7a5fe69d781ebdb49fcc85ae67b0c</id>
<content type='text'>
Two changes:
- AI_INSTRUCTIONS now points at .ai/protocols.org (was docs/) — aligns
  with the template docs/ → .ai/ restructure
- build_candidates filters directories to those with .ai/protocols.org
  present. Previously listed every dir under ~/code/ and ~/projects/
  including third-party clones and non-template projects, which would
  fail silently when Claude tried to read a missing protocols file.

New projects that haven't been initialized (no .ai/ yet) will not
appear in the fzf list. Bootstrap those with a direct claude
invocation; the first-session workflow takes over once .ai/ exists.
</content>
</entry>
<entry>
<title>fix(aix): classify windows by project name instead of shell regex</title>
<updated>2026-02-14T22:22:02+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-14T22:22:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=1e36edcd85624d12faed9a2a65a38f62a8ab2043'/>
<id>urn:sha1:1e36edcd85624d12faed9a2a65a38f62a8ab2043</id>
<content type='text'>
sort_windows now builds known project basenames from candidate dirs
and treats everything else as non-project. Prevents TUI apps (mc,
ranger, htop) from being misclassified as project windows.
</content>
</entry>
<entry>
<title>feat(aix): focus newly opened project window after sort</title>
<updated>2026-02-14T07:48:59+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-14T07:48:59+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=5372a54721ff8be501fdf4066f57c13b33e6cced'/>
<id>urn:sha1:5372a54721ff8be501fdf4066f57c13b33e6cced</id>
<content type='text'>
Move select-window after sort_windows so the first new project gets
focus via stable window ID. Also restructure todo.org into flat task
list (V2MOM preserved in docs/v2mom.org).
</content>
</entry>
<entry>
<title>fix(aix): respect tmux base-index for shell window placement</title>
<updated>2026-02-13T19:46:55+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-13T19:46:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=65b53e2bc09a8fa6f7047637e9e1c3a59d984296'/>
<id>urn:sha1:65b53e2bc09a8fa6f7047637e9e1c3a59d984296</id>
<content type='text'>
Shell window was intermittently shifting to index 1 because sort_windows
hardcoded index 0, which conflicts with base-index=1 and renumber-windows.
</content>
</entry>
<entry>
<title>feat(aix): sort windows on every attach, add --attach flag</title>
<updated>2026-02-10T21:24:54+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-10T21:24:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=23d936187d3e709ea3ead1d101b8e7ea2792a962'/>
<id>urn:sha1:23d936187d3e709ea3ead1d101b8e7ea2792a962</id>
<content type='text'>
Sort windows (shells at 0, projects alphabetically from 1) on every
session access including --attach. Move --attach check after function
definitions so sort_windows is available.
</content>
</entry>
<entry>
<title>refactor(aix): extract helper functions, remove duplication</title>
<updated>2026-02-10T21:19:48+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-10T21:19:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=12c04e69a8aa57602087e2ccb31b879c8bef5776'/>
<id>urn:sha1:12c04e69a8aa57602087e2ccb31b879c8bef5776</id>
<content type='text'>
Extract attach_session, create_window, read_selections, and
build_candidates functions. Remove unused variable. Simplify
new-session window ID capture.
</content>
</entry>
<entry>
<title>feat(aix): sort windows alphabetically, shells last, start from 1</title>
<updated>2026-02-10T18:53:00+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-10T18:53:00+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=2d7381373237678094c70799c7754cc6e7a7020c'/>
<id>urn:sha1:2d7381373237678094c70799c7754cc6e7a7020c</id>
<content type='text'>
Windows are reordered after creation and when adding to an existing
session. Shell windows (bash/zsh) sort to the end. Window numbering
starts at 1. Focus lands on the first selected window.
</content>
</entry>
<entry>
<title>feat(aix): add windows to existing session, fix special char handling</title>
<updated>2026-02-10T18:13:49+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-02-10T18:13:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/archsetup/commit/?id=3ecbaf1b430254a20d538138072a9a7784cd8413'/>
<id>urn:sha1:3ecbaf1b430254a20d538138072a9a7784cd8413</id>
<content type='text'>
Allow calling aix from within the ai tmux session to add new project
windows. Already-open projects are filtered from the selection list.
Use tmux window IDs instead of names to fix errors with dots in
directory names (e.g. chime.el).
</content>
</entry>
</feed>
