<feed xmlns='http://www.w3.org/2005/Atom'>
<title>rulesets/claude-templates/bin/ai, branch main</title>
<subtitle>Claude Code skills, rules, and language bundles
</subtitle>
<id>https://git.cjennings.net/rulesets/atom?h=main</id>
<link rel='self' href='https://git.cjennings.net/rulesets/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/'/>
<updated>2026-05-19T06:45:01+00:00</updated>
<entry>
<title>fix(ai): explicit end-of-session placement for new windows</title>
<updated>2026-05-19T06:45:01+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-19T06:45:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=68569726f4ca1e550a3e4e288a8f861703cdeb8e'/>
<id>urn:sha1:68569726f4ca1e550a3e4e288a8f861703cdeb8e</id>
<content type='text'>
tmux's default new-window placement chooses the lowest free index, which can land between existing windows when the session's window indexes have gaps. The -a flag plus the :{end} target makes it explicit: insert after the existing last window, every time.

The change only touches create_window. The two tmux new-session sites (single_mode and multi_mode first window) create fresh sessions; the first window's position is whatever base-index dictates, and there's nothing to append after.
</content>
</entry>
<entry>
<title>feat(ai): per-project opening line with host and project name</title>
<updated>2026-05-19T02:53:37+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-19T02:53:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=9d804cdb4cdb14787e928a1d45c3f2023d739e41'/>
<id>urn:sha1:9d804cdb4cdb14787e928a1d45c3f2023d739e41</id>
<content type='text'>
The ai launcher used to send claude a fixed instruction string ('Read .ai/protocols.org and follow all instructions.'). Every window opened the same way, with no signal in the conversation about which machine or project it belonged to. That's fine when there's one window, less fine when an ai-session has 5+ windows across two machines.

The new build_instructions helper formats the opener per project: "This is &lt;host&gt; &lt;name&gt; project. Follow all instructions in .ai/protocols.org." Host comes from uname -n (POSIX, no dependency on the hostname binary which isn't installed by default on Arch). The project name distinguishes windows; the .ai/ prefix on the path stays so claude resolves the file reliably on first read.

The three send-keys call sites all use the helper now (create_window, single_mode new-session, multi_mode first-window). Smoke-tested with rulesets, .emacs.d, jr-estate basenames.

Also fixes the stale Source/Install header comments. They still pointed at ~/projects/claude-templates/bin/ai, the pre-fold path the subtree merge replaced.
</content>
</entry>
<entry>
<title>Merge commit '69c5e4ace81586c05dea6a9a3afd54dafa61a73b' as 'claude-templates'</title>
<updated>2026-05-15T21:56:39+00:00</updated>
<author>
<name>Craig Jennings</name>
<email>c@cjennings.net</email>
</author>
<published>2026-05-15T21:56:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.cjennings.net/rulesets/commit/?id=c1d4e3c4a42abd01bc7ef83b1d6ae036ee32ef1d'/>
<id>urn:sha1:c1d4e3c4a42abd01bc7ef83b1d6ae036ee32ef1d</id>
<content type='text'>
</content>
</entry>
</feed>
