From d364cf2a8520f733d9438fa1e32cb3010c655ee2 Mon Sep 17 00:00:00 2001 From: Craig Jennings Date: Fri, 15 May 2026 17:22:28 -0500 Subject: feat(make): add install-ai target for bootstrapping .ai/ in fresh projects scripts/install-ai.sh copies canonical .ai/ content from claude-templates/ into a fresh project. Rsyncs protocols.org, workflows/, scripts/, someday-maybe.org as-is; templates notes.org with project-name and date placeholders substituted; creates empty sessions/, references/, retrospectives/ dirs. Two tracking modes: TRACK=1 adds .gitkeep files inside otherwise-empty dirs so they survive in git history; GITIGNORE=1 appends .ai/ to the project's .gitignore so session records stay local. Prompts interactively if neither flag is set. Refuses if PROJECT/.ai/ already exists with a message pointing to `make audit APPLY=1` for sync of existing installs. Without a PROJECT argument, fzf-picks from ~/code/* + ~/projects/* git checkouts that don't already have .ai/. --- todo.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'todo.org') diff --git a/todo.org b/todo.org index 6b2a957..42d8e39 100644 --- a/todo.org +++ b/todo.org @@ -1864,7 +1864,7 @@ Exit code: =0= if all clean, no skips, no failures. =1= otherwise. =doctor= has a clean meaning today: "is this machine's =~/.claude/= consistent with rulesets?" Mixing in cross-project =.ai/= drift muddies the exit code. Keep them separate. =audit= can optionally invoke =doctor= as its last check since both ask "did the symlinks keep up with the source?". A future =make all-checks= can wrap both. -*** TODO [#A] Add =make install-ai PROJECT== — bootstrap =.ai/= in a fresh project +*** DOING [#A] Add =make install-ai PROJECT== — bootstrap =.ai/= in a fresh project Separate target from =audit= because operating on projects that lack =.ai/= is a distinct action. The absence might be intentional, so =audit= skips them. Bootstrap is explicit opt-in. -- cgit v1.2.3