A3a/A3b ship a per-agent persona contract that the launcher composes from process.env.MOSAIC_AGENT_CLASS (compose-contract -> readPersonaContractBlock, launch.js). generateAgentEnv already writes MOSAIC_AGENT_CLASS to agents/<name>.env, but start-agent-session.sh only re-exported MOSAIC_AGENT_NAME into the pane snippet — never the class. The pane inherits the tmux SERVER environment, not this script's env nor the systemd unit's EnvironmentFile, so the class set in the .env was invisible in-pane. The launcher then saw an undefined class and silently injected NO persona contract: every fleet agent came up class-less while `fleet ps` reported healthy. The comms block kept working only because it keys on MOSAIC_AGENT_NAME (which IS re-exported). Fix: re-export MOSAIC_AGENT_CLASS into PANE_SHELL_SNIPPET exactly as MOSAIC_AGENT_NAME, %q-quoted (empty/unset class -> '' is a harmless no-op, matching readPersonaContractBlock's empty-class contract). Verified live: a relaunched agent now carries MOSAIC_AGENT_CLASS in its pane env and the matching `# Persona Contract (<class>)` block in its composed prompt. Adds a regression guard to test-start-agent-session.sh asserting the pane snippet exports both MOSAIC_AGENT_NAME and the per-agent MOSAIC_AGENT_CLASS. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
11 KiB
Executable File
11 KiB
Executable File