17 Commits

Author SHA1 Message Date
ecfbd0bb37 feat: worktree-based run isolation for parallel loops
Each /agent-loop:run now creates a git worktree for the feature branch
before generating stories. This provides full isolation:

- Multiple loops can run in parallel on different specs in the same project
- Main working directory stays on main, always available
- Each worktree has its own .loop/ state, tmux session, and branch
- Completed runs are archived to main's .loop/archive/ with runs.log

Changes:
- setup.sh: add --init-worktree mode for initializing worktree .loop/
- archive.sh: add archive_from_worktree() for cross-directory archiving
- loop.sh: replace branch checkout with validation (worktree is pre-checked-out)
- agents/planner.md: accept absolute path prefix for worktree .loop/ writes
- skills/run/SKILL.md: full rewrite — worktree creation in Phase 2, launch in
  Phase 3, archive on completion, .active-worktree tracking file
- skills/stories/SKILL.md: worktree-aware, defer to /run for full flow

Bump to 0.12.0.
2026-04-02 11:21:17 -04:00
344b179b4d feat: support parallel loops with per-project tmux session names
The tmux session name is now derived from the project directory name
(e.g., agent-loop-server, agent-loop-webapp). This allows running
multiple loops in parallel on different projects without collisions.

Previously hardcoded to "agent-loop", which meant launching a second
loop would kill the first project's tmux session.
2026-04-02 10:54:22 -04:00
b516492a91 fix: install Stop hook once at loop startup, not per-iteration
Per-iteration install/remove had a race condition: settings.local.json
was written immediately before CC started, and CC could read the old
file (without the hook) on the first iteration.

Now the hook is installed once when loop.sh starts and removed on exit.
The AGENT_LOOP_ACTIVE env var guard ensures it only fires for CC sessions
spawned by the loop, so keeping it installed the whole time is safe.
2026-04-02 10:51:48 -04:00
a1a3dfbd63 fix: use env var instead of tmux check for Stop hook scoping
The tmux display-message approach had edge cases: it could succeed outside
tmux, fail on first iteration, or behave differently depending on tmux
socket state.

Replace with AGENT_LOOP_ACTIVE env var exported by loop.sh. CC sessions
spawned by the loop inherit it; interactive CC sessions don't. Simple,
no external dependencies, no race conditions.
2026-04-02 10:42:46 -04:00
71b00cf11f feat: auto-update harness files when plugin version changes
setup.sh now stamps .harness-version in .loop/ at scaffold time. On each
/agent-loop:run, Phase 1 compares the installed harness version against
the plugin version and auto-updates lib/, prompts/, and loop.sh if stale.
Run state (prd.json, contracts, config.json) is preserved.

Also adds setup.sh --update mode for refreshing harness files without
re-scaffolding. Bump to 0.10.0.
2026-04-02 09:02:41 -04:00
ad58a49182 feat: auto-archive completed runs before starting new features
When /agent-loop:run detects a previous run with all stories passed (or the
feature branch deleted after merge), it archives the old artifacts and resets
.loop/ automatically — no more manual rm -rf .loop.

- Add archive_and_reset() for on-demand archiving from skills
- Add runs.log index tracking all archived runs
- Update /run and /stories skills to detect completed runs
- setup.sh archives instead of hard-failing when prd.json exists
- Bump version to 0.9.0
2026-04-02 07:40:07 -04:00
50e62ca979 fix: correct URLs, author name, and clean up stale hook
- Revert plugin/README/CONTRIBUTING URLs to git.jagfly.com (not on GitHub yet)
- Fix LICENSE copyright to Sheldon Finlay
- Remove leftover Stop hook from settings.local.json
2026-03-27 19:00:26 -04:00
978783d1be feat: US-004 - Update plugin URLs from jagfly.com to GitHub
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 18:44:59 -04:00
b3d263258a fix: critical bugs, stale refs, README rewrite, security fixes
- Fix evaluator bypass on last story (moved completion check)
- Fix all stale command name references across README, loop.sh, skills, plugin.json
- Fix explore evaluator false rejects (.loop/ files are expected)
- Fix stderr capture order in headless mode
- Fix shell injection risk in hooks.sh python fallback
- Remove .DS_Store from tracking
- Rewrite README to match current architecture (single entry point, tmux, optional tools)
- Add XcodeBuildMCP and iOS simulator MCP to optional tools docs
2026-03-27 14:58:01 -04:00
a2b4369035 feat: launch execution in tmux, orchestrator monitors progress 2026-03-27 11:48:15 -04:00
9508ad20b6 fix: rename init to setup to avoid built-in /init conflict 2026-03-27 10:01:50 -04:00
2a78915dcf feat: single entry point /agent-loop:run handles setup, planning, and execution 2026-03-27 09:53:52 -04:00
381741509d fix: rename generate to stories to avoid autocomplete issues 2026-03-27 09:49:10 -04:00
8c4e123976 fix: rename plan skill to generate to avoid name collision with built-in /plan 2026-03-27 09:39:13 -04:00
e9d87fa6a1 chore: bump to 0.3.0 2026-03-27 09:28:06 -04:00
db0bce03ec fix: bump version to 0.2.0 to force cache refresh 2026-03-27 08:18:44 -04:00
17e5eb707f feat: agent loop harness with Claude Code plugin support
Generator-evaluator architecture with iterative context-reset for
long-running coding tasks. Ships as a Claude Code plugin — install
with /plugin and use /agent-loop:init, /agent-loop:plan, /agent-loop:run.
2026-03-27 08:03:18 -04:00