diff --git a/core/http/react-ui/src/pages/AgentJobDetails.jsx b/core/http/react-ui/src/pages/AgentJobDetails.jsx
index e4386ce12..52854a4d4 100644
--- a/core/http/react-ui/src/pages/AgentJobDetails.jsx
+++ b/core/http/react-ui/src/pages/AgentJobDetails.jsx
@@ -2,6 +2,7 @@ import { useState, useEffect, useRef } from 'react'
import { useParams, useNavigate, useOutletContext } from 'react-router-dom'
import { agentJobsApi } from '../utils/api'
import LoadingSpinner from '../components/LoadingSpinner'
+import PageHeader from '../components/PageHeader'
const traceColors = {
reasoning: { bg: 'rgba(99,102,241,0.1)', border: 'rgba(99,102,241,0.3)', icon: 'fa-brain', color: 'var(--color-primary)' },
@@ -178,22 +179,22 @@ export default function AgentJobDetails() {
return (
-
-
-
Job Details
-
Live status and reasoning traces
-
-
- {(job.status === 'running' || job.status === 'pending') && (
-
-
+
+ }
+ />
{/* Status Card */}
diff --git a/core/http/react-ui/src/pages/AgentJobs.jsx b/core/http/react-ui/src/pages/AgentJobs.jsx
index 8b9d9b3eb..907f5e81d 100644
--- a/core/http/react-ui/src/pages/AgentJobs.jsx
+++ b/core/http/react-ui/src/pages/AgentJobs.jsx
@@ -6,6 +6,7 @@ import { useModels } from '../hooks/useModels'
import { useAuth } from '../context/AuthContext'
import { useUserMap } from '../hooks/useUserMap'
import LoadingSpinner from '../components/LoadingSpinner'
+import PageHeader from '../components/PageHeader'
import { fileToBase64 } from '../utils/api'
import Modal from '../components/Modal'
import UserGroupSection from '../components/UserGroupSection'
@@ -216,10 +217,7 @@ export default function AgentJobs() {
if (!loading && models.length === 0) {
return (
-
-
Agent Jobs
-
Manage agent tasks and automated workflows
-
+
No Models Installed
@@ -243,10 +241,7 @@ export default function AgentJobs() {
if (!loading && models.length > 0 && !hasMCPModels && tasks.length === 0) {
return (
-
-
Agent Jobs
-
Manage agent tasks and automated workflows
-
+
MCP Not Configured
@@ -276,15 +271,15 @@ export default function AgentJobs() {
return (
-
-
-
Agent Jobs
-
Manage agent tasks and automated workflows
-
-
navigate('/app/agent-jobs/tasks/new')}>
- New Task
-
-
+
navigate('/app/agent-jobs/tasks/new')}>
+ New Task
+
+ }
+ />
setActiveTab('tasks')}>
diff --git a/core/http/react-ui/src/pages/AgentStatus.jsx b/core/http/react-ui/src/pages/AgentStatus.jsx
index b58b6790d..c3acf0bec 100644
--- a/core/http/react-ui/src/pages/AgentStatus.jsx
+++ b/core/http/react-ui/src/pages/AgentStatus.jsx
@@ -2,6 +2,7 @@ import { useState, useEffect, useCallback } from 'react'
import { useParams, useNavigate, useOutletContext, useSearchParams } from 'react-router-dom'
import { agentsApi } from '../utils/api'
import { apiUrl } from '../utils/basePath'
+import PageHeader from '../components/PageHeader'
function ObservableSummary({ observable }) {
const creation = observable?.creation || {}
@@ -352,29 +353,26 @@ export default function AgentStatus() {
.as-status-value { font-size: 1rem; font-weight: 600; color: var(--color-text-primary); }
`}
-
-
-
-
- {name} — Status
-
-
Agent observables and activity history
-
-
- navigate(`/app/agents/${encodeURIComponent(name)}/chat${userId ? `?user_id=${encodeURIComponent(userId)}` : ''}`)}>
- Chat
-
- navigate(`/app/agents/${encodeURIComponent(name)}/edit${userId ? `?user_id=${encodeURIComponent(userId)}` : ''}`)}>
- Edit
-
-
- Refresh
-
-
- Clear
-
-
-
+ {name} — Status>}
+ supporting="Agent observables and activity history"
+ actions={
+
+ navigate(`/app/agents/${encodeURIComponent(name)}/chat${userId ? `?user_id=${encodeURIComponent(userId)}` : ''}`)}>
+ Chat
+
+ navigate(`/app/agents/${encodeURIComponent(name)}/edit${userId ? `?user_id=${encodeURIComponent(userId)}` : ''}`)}>
+ Edit
+
+
+ Refresh
+
+
+ Clear
+
+
+ }
+ />
{/* Status summary */}
{status && (
diff --git a/core/http/react-ui/src/pages/AgentTaskDetails.jsx b/core/http/react-ui/src/pages/AgentTaskDetails.jsx
index 722c8c3a1..c07ddfd6f 100644
--- a/core/http/react-ui/src/pages/AgentTaskDetails.jsx
+++ b/core/http/react-ui/src/pages/AgentTaskDetails.jsx
@@ -3,6 +3,7 @@ import { useParams, useNavigate, useOutletContext, useLocation } from 'react-rou
import { agentJobsApi } from '../utils/api'
import { basePath } from '../utils/basePath'
import ModelSelector from '../components/ModelSelector'
+import PageHeader from '../components/PageHeader'
import { CAP_CHAT } from '../utils/capabilities'
import LoadingSpinner from '../components/LoadingSpinner'
@@ -165,20 +166,20 @@ export default function AgentTaskDetails() {
if (!isNew && !isEdit) {
return (
-
-
-
{task.name || 'Task Details'}
- {task.description &&
{task.description}
}
-
-
- navigate(`/app/agent-jobs/tasks/${id}/edit`)}>
- Edit
-
- navigate('/app/agent-jobs')}>
- Back
-
-
-
+
+ navigate(`/app/agent-jobs/tasks/${id}/edit`)}>
+ Edit
+
+ navigate('/app/agent-jobs')}>
+ Back
+
+
+ }
+ />
{/* Task Info */}
@@ -307,12 +308,14 @@ export default function AgentTaskDetails() {
// Edit/Create form
return (
-
-
{isNew ? 'Create Task' : 'Edit Task'}
- navigate('/app/agent-jobs')}>
- Back
-
-
+
navigate('/app/agent-jobs')}>
+ Back
+
+ }
+ />
+ }
+ />
{loading ? (
diff --git a/core/http/react-ui/src/pages/AudioTransform.jsx b/core/http/react-ui/src/pages/AudioTransform.jsx
index 98526751d..fca38329e 100644
--- a/core/http/react-ui/src/pages/AudioTransform.jsx
+++ b/core/http/react-ui/src/pages/AudioTransform.jsx
@@ -1,6 +1,7 @@
import { useState, useEffect, useRef } from 'react'
import { useParams, useOutletContext } from 'react-router-dom'
import ModelSelector from '../components/ModelSelector'
+import PageHeader from '../components/PageHeader'
import { CAP_AUDIO_TRANSFORM } from '../utils/capabilities'
import LoadingSpinner from '../components/LoadingSpinner'
import ErrorWithTraceLink from '../components/ErrorWithTraceLink'
@@ -166,9 +167,7 @@ export default function AudioTransform() {
return (
-
-
Audio Transform
-
+
Audio Transform>} />