diff --git a/frontend-web/src/pages/PublicScheduledTaskPage.tsx b/frontend-web/src/pages/PublicScheduledTaskPage.tsx
index dd5570f5..ef623b9d 100644
--- a/frontend-web/src/pages/PublicScheduledTaskPage.tsx
+++ b/frontend-web/src/pages/PublicScheduledTaskPage.tsx
@@ -193,6 +193,19 @@ function formatDate(value?: string | null): string {
return value ? new Date(value).toLocaleString() : "暂无";
}
+/**
+ * Compact "M月D日" badge prefixed to each run title so visually identical
+ * names (the agent often emits the same title every run) become scannable.
+ * Returns empty string for an invalid / missing date so the title falls back
+ * to its bare form instead of rendering "Invalid Date".
+ */
+function formatScheduledDatePrefix(value?: string | null): string {
+ if (!value) return "";
+ const date = new Date(value);
+ if (Number.isNaN(date.getTime())) return "";
+ return `${date.getMonth() + 1}月${date.getDate()}日`;
+}
+
function isMarkdownFile(file: { name: string; kind?: string | null; mime_type?: string | null }): boolean {
const name = file.name.toLowerCase();
return (
@@ -373,6 +386,7 @@ export default function PublicScheduledTaskPage() {
const runTitle = stripTimestampSuffix(
run.result?.title || formatDate(run.scheduled_for),
);
+ const datePrefix = formatScheduledDatePrefix(run.scheduled_for);
const isDeletingThis =
deleteRunMutation.isPending && deleteRunMutation.variables === run.id;
return (
@@ -398,13 +412,18 @@ export default function PublicScheduledTaskPage() {