diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9407156..272a9f4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,6 +8,14 @@ new version heading in the same commit.
## [Unreleased]
+## [0.224.0] — 2026-07-16
+### Added
+- **"Activity" shortcut in the per-session Operations menu.** The session activity trail side panel
+ (objects the run opened + their live status, v0.221.0) was only reachable from the Sessions list rows.
+ Added it as the top item of the terminal-view **Operations** dropdown (`OperationsMenu`), so while
+ you're watching a live run you can open the trail in one click. Threaded a new `onActivity` callback
+ through `SessionOps` to `setInspect`, opening the same `SessionActivity` panel.
+
## [0.223.0] — 2026-07-16
### Added
- **"Operations" menu on every session terminal.** A new dropdown pinned top-right of the live terminal,
diff --git a/package-lock.json b/package-lock.json
index b327315..e498f1d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "agent-os",
- "version": "0.223.0",
+ "version": "0.224.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "agent-os",
- "version": "0.223.0",
+ "version": "0.224.0",
"license": "MIT",
"bin": {
"agent-os": "bin/agent-os"
diff --git a/package.json b/package.json
index 80bbd58..207163b 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "agent-os",
- "version": "0.223.0",
+ "version": "0.224.0",
"description": "A generic, governed operating system for running autonomous agents safely across brands. Ships with a local web console.",
"license": "MIT",
"type": "commonjs",
diff --git a/web/src/App.tsx b/web/src/App.tsx
index 8f40c89..29ba1dd 100644
--- a/web/src/App.tsx
+++ b/web/src/App.tsx
@@ -2382,6 +2382,7 @@ type SessionOps = {
onStop: (id: string) => void
onDelete: (id: string, tmux: string) => void
onTransfer: (id: string, toMemberId: string) => void
+ onActivity: (s: Session) => void
}
/** The per-session "Operations" dropdown pinned top-right of the live terminal, next to Files. One menu
@@ -2393,7 +2394,7 @@ type SessionOps = {
* - Stop / Delete — halt or remove the session.
* Each item mirrors the gating of its tab-strip/card counterpart. */
function OperationsMenu({ session, ops, onReload }: { session: Session; ops: SessionOps; onReload: () => void }) {
- const { members, me, onOpen, onStop, onDelete, onTransfer } = ops
+ const { members, me, onOpen, onStop, onDelete, onTransfer, onActivity } = ops
const canTransfer = me.role === 'owner' || me.role === 'admin' || session.runAs === me.id
const transferTargets = canTransfer ? members.filter((m) => m.id !== session.runAs) : []
return (
@@ -2402,13 +2403,22 @@ function OperationsMenu({ session, ops, onReload }: { session: Session; ops: Ses
render={
}
/>
+ {/* Activity — open the trail side panel (objects this session opened + their live status). */}
+ onActivity(session)}>
+
+
+ Activity
+ what this session opened · objects & live status
+
+
+
{session.resumable && (
@@ -2772,7 +2782,7 @@ function SessionsPage({
s.tmux === selected.tmux)} tmux={selected.tmux} onActivity={onActivity}
- ops={{ members, me, onOpen, onStop, onDelete, onTransfer }} />
+ ops={{ members, me, onOpen, onStop, onDelete, onTransfer, onActivity: setInspect }} />
)
}