Skip to content

feat: native-first executor backends + hub-and-spoke human gates (v1.6.0)#9

Merged
memorysaver merged 3 commits into
mainfrom
feat/native-first-executor
Jun 10, 2026
Merged

feat: native-first executor backends + hub-and-spoke human gates (v1.6.0)#9
memorysaver merged 3 commits into
mainfrom
feat/native-first-executor

Conversation

@memorysaver

Copy link
Copy Markdown
Owner

Summary

Replaces the B1–B4 executor ladder with named launch modes targeting each host's native parallel-agent machinery, and redesigns human gates as hub-and-spoke (the main agent is the human's console). Every mode keeps the three invariants: per-story context window, AEP-created worktree at .feature-workspaces/<ws>, per-story .dev-workflow/ with the file-based signals protocol as the source of truth.

New launch modes

Mode Backend Lifetime Steering Human gate
claude-team agent teams, teammate per story (standing team: TeamCreate once, spawn/shutdown per tick) session-bound SendMessage teammate→lead HUMAN_GATE: (block-in-place)
claude-bg native background sessions (claude --bg) OS-bound feedback.md + stop/respawn gate-and-park → session resume
codex-subagent multi_agent + shipped aep-builder/aep-evaluator roles (desktop app + CLI) session-bound send_input approval overlay + parent-thread relay
codex-exec headless codex exec --cd workers OS-bound codex exec resume <id> gate-and-park → exec resume
legacy tmux + cmux, preserved verbatim OS-bound tmux send-keys block-in-place via nudge
workflow dynamic-workflow fan-out — now a complete backend session-bound stage boundaries gate-and-park → structured gated result

Behavior change: Claude Code with tmux installed no longer auto-selects tmux — pin with git config aep.executor-backend tmux.

Hub-and-spoke human gates

Workers record gates in signals/needs-human.md + blocked_on: "human". The question flows to the main agent, the human answers there, and the answer is relayed per mode — by push (block-in-place) or by resuming a parked worker into its worktree (gate-and-park). Direct worker surfaces are optional conveniences. This is what elevates workflow mode: build agents return a gated result instead of guessing/stalling; gated stories resume after the human answers.

Also

  • Driver × backend compatibility matrix (session-bound vs OS-bound lifetimes): /loop lead supports teams; cron drivers require OS-bound modes
  • Orphan re-adoption: lead restarts re-spawn workers into existing worktrees instead of failing stories
  • Codex autopilot now supported (in-thread → codex-subagent; cron → codex-exec)
  • Phase 5 evaluator spawn is mode-dispatched (foreground Task subagent / codex exec --cd / tmux split)
  • All AEP commands normalized to canonical /aep-* names across skills, README, docs
  • ADR: docs/decisions/native-first-executor.md; CHANGELOG [1.6.0]; marketplace.json → 1.6.0

Verification

  • Detection dry-run on this host (Claude Code + teams flag + cmux): selects claude-team, confirming tmux demotion
  • Capability probes verified against local CLIs (claude 2.1.170 lacks --bg → probe correctly degrades; codex 0.130.0 multi_agent stable)
  • No stale B1–B4 references outside the legacy-mapping table; no unprefixed AEP commands remain; /loop, /opsx:*, Codex /agent untouched
  • pre-commit skills-build/oxlint/oxfmt green on both commits

🤖 Generated with Claude Code

memorysaver and others added 3 commits June 10, 2026 14:32
Replace the B1-B4 backend ladder with named launch modes targeting each
host's native parallel-agent machinery:

- claude-team: agent teams, one teammate per story in a standing team
  (TeamCreate once; spawn/shutdown teammates per tick), SendMessage
  steering, teammate->lead HUMAN_GATE channel
- claude-bg: native background sessions (claude --bg/attach/logs/stop),
  OS-bound, cron-driver compatible, cwd-enforced worktree
- codex-subagent: multi_agent workers (desktop app + CLI) with shipped
  aep-builder/aep-evaluator roles, send_input steering, native approval
  overlay as human gate
- codex-exec: headless codex exec --cd workers, steerable cross-session
  via codex exec resume; the cron-driver / hard-isolation Codex mode
- legacy: tmux+cmux recipes preserved verbatim, selected only by explicit
  pin (git config aep.executor-backend tmux) or on generic hosts

Cross-mode additions: human-gate protocol (signals/needs-human.md +
blocked_on), orphan re-adoption after lead restarts, driver x backend
compatibility matrix (session-bound vs OS-bound lifetimes), mode-
dispatched evaluator spawn for build Phase 5, mode-dispatched wrap
teardown, autopilot state gains backend/agent_id/last_liveness_hash.

Also normalize all AEP command references to their canonical /aep-*
names (/aep-autopilot, /aep-launch, ...) across skills, README, and docs.

ADR: docs/decisions/native-first-executor.md

Co-Authored-By: Claude Fable 5 <[email protected]>
…e backend

Human gates no longer require the human to visit a worker's control
surface: the main agent is the canonical console. Workers raise gates in
needs-human.md; the orchestrator asks the human in the main session and
relays the answer. Two styles:

- block-in-place (claude-team / codex-subagent / legacy): worker waits,
  answer arrives by push (SendMessage / send_input / nudge)
- gate-and-park (workflow / headless / codex-exec / claude-bg): worker
  commits WIP, records the gate, ends its run cleanly; orchestrator
  resumes a worker into the same worktree with the answer (orphan
  re-adoption recipe + answer)

Gate-and-park elevates the dynamic-workflow fan-out into a complete
backend: build agents return a structured `gated` result instead of
guessing or stalling; the main agent collects gated stories after the
run, asks the human, and resumes them (resumeFromRunId continuation or
re-launch). New "Mode: workflow" recipe in backends.md; the
/aep-dispatch "with workflow" path now creates .feature-workspaces
worktrees and announces gate behavior instead of "no mid-flight
feedback". Direct worker surfaces (teammate pane, claude attach, Codex
threads, tmux attach) remain optional conveniences.

Co-Authored-By: Claude Fable 5 <[email protected]>
@memorysaver memorysaver merged commit 108d4c1 into main Jun 10, 2026
1 check passed
@memorysaver memorysaver deleted the feat/native-first-executor branch June 10, 2026 07:52
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant