The new page-load code checks `/api/running` endpoint to determine if an agent is active and sets `isLoading = true` to make the stop button visible.
factglobal2026-02-13T10:17
🏷️
kill button
entityglobal2026-02-13T10:17
🏷️
running agents section
entityglobal2026-02-13T10:17
📌
Running agents section displays a red pulsing dot with agent count, list entries showing which chat each agent belongs to, and kill buttons for individual agents.
factglobal2026-02-13T10:17
🏷️
live events component
entityglobal2026-02-13T10:17
🏷️
Artifacts tab
entityglobal2026-02-13T10:17
🏷️
Console tab
entityglobal2026-02-13T10:17
🏷️
Jobs tab
entityglobal2026-02-13T10:17
🏷️
right-hand slideover
entityglobal2026-02-13T10:17
🏷️
running agents view
entityglobal2026-02-13T10:17
🔷
Running agents view will be placed in the right-hand slideover panel at the bottom, below the Jobs/Console/Artifacts tabs, to match the live events component on the left sidebar.
decisionglobal2026-02-13T10:17
🏷️
AgentRegistry
entityglobal2026-02-13T10:17
📌
AgentRegistry should directly associate a specific chat or context with an agent.
factglobal2026-02-13T10:17
🏷️
chat input
entityglobal2026-02-13T10:17
🏷️
stop button
entityglobal2026-02-13T10:17
📌
The stop button in chat input disappeared and needs to be restored by hard refreshing the page.
factglobal2026-02-13T10:17
🏷️
hard refresh
entityglobal2026-02-13T10:11
⭐
User should perform a hard refresh (Cmd+Shift+R) to see UI updates.
preferenceglobal2026-02-13T10:11
🏷️
APPS
entityglobal2026-02-13T10:11
📌
A red '1 running' badge with 'Kill All' button appears in the sidebar between Settings and APPS after ~3 seconds.
factglobal2026-02-13T10:11
🏷️
JS polling code
entityglobal2026-02-13T10:11
🏷️
HTML element
entityglobal2026-02-13T10:11
📌
HTML element and JS polling code are both included in the served page.
factglobal2026-02-13T10:11
🏷️
templates
entityglobal2026-02-13T10:06
🔷
Updated templates are available after refresh.
decisionglobal2026-02-13T10:06
🏷️
Kill All button
entityglobal2026-02-13T10:06
🏷️
sidebar
entityglobal2026-02-13T10:06
📌
A red '1 running' indicator with 'Kill All' button now appears in the sidebar to show running agents.
factglobal2026-02-13T10:06
🔷
Removed the aggressive terminate/2 callback to fix the issue.
decisionglobal2026-02-13T10:06
🏷️
WebSocket
entityglobal2026-02-13T10:06
🏷️
Phoenix channels
entityglobal2026-02-13T10:06
🏷️
terminate/2 callback
entityglobal2026-02-13T10:06
📌
The terminate/2 callback was causing mystery stops by terminating on WebSocket heartbeat timeouts and reconnects, not just page reloads, killing running agents mid-tool-call.
factglobal2026-02-13T10:06
🏷️
EventChannel.terminate/2
entityglobal2026-02-13T09:44
💭
The missing piece was EventChannel.terminate/2 not killing orphaned agents; this fix addresses the scenario where tool results restart loops after page reload or stop.
reflectionglobal2026-02-13T09:44
🏷️
AgentRegistry.kill_chat
entityglobal2026-02-13T09:44
🏷️
Process.exit
entityglobal2026-02-13T09:44
📌
Page reload or WebSocket disconnect now terminates the channel, which calls AgentRegistry.kill_chat and kills both wrapper and GenServer processes with Process.exit(:kill).
factglobal2026-02-13T09:44
🏷️
/api/running/kill/:chat_id
entityglobal2026-02-13T09:44
🏷️
/api/running
entityglobal2026-02-13T09:44
🔷
Implemented three API endpoints for agent control: GET /api/running to list agents, POST /api/running/kill/:chat_id to kill single agent, and POST /api/running/kill to kill all agents.
decisionglobal2026-02-13T09:44
🏷️
EventChannel
entityglobal2026-02-13T09:44
📌
EventChannel.terminate/2 kills all spawned agents when page reloads or WebSocket disconnects, preventing orphaned processes.
factglobal2026-02-13T09:44
🏷️
Vulcan.AgentRegistry
entityglobal2026-02-13T09:44
📌
Vulcan.AgentRegistry tracks chat_id, wrapper_pid, and agent_genserver_pid to manage agent lifecycle.
factglobal2026-02-13T09:44
🏷️
node
entityglobal2026-02-13T09:38
📌
All JavaScript validated with node --check across affected pages with no errors.