* [aidan] feat/schedule-list: lazy-load list view via scroll sentinel
* [aidan] feat/missed-runs: launch toast with per-workflow counts and pan-to-card
* [aidan] fix/dashboard-tethers: keep watching line anchored on canvas zoom
* [aidan] feat/scheduled-tasks: review missed runs at launch instead of auto-firing on_missed
* [aidan] refactor/workflow-cards: use radius and status design tokens, polish card chrome
* [aidan] ux/agent-card: keep convert-to-workflow visible during runs with mid-turn toast
* [aidan] ux/mcp-bubble: drop redundant verb label when a workflow label is shown
* [aidan] chore/backend: remove stale explanatory comments
* [aidan] fix/workflows-hub: load workflows on hub mount so calendar fills at launch
* [aidan] feat/workflows: generate title, description, step labels at convert time
* [aidan] fix/tidy-layout: include workflows hub in tidy and fit-to-view
* [aidan] feat/schedule-list: window long list via measured-height virtualizer
* [aidan] ux/workflows-hub: remove time-saved badge from calendar header
* [aidan] fix/types: add missing semantic-type labels and drop stray fade arg
* [aidan] feat/workflow-suggest: nudge user to convert repeatable chat to workflow
Add SuggestConvertToWorkflow MCP tool that agents call at the end of a task
when they've completed something worth repeating (daily report, weekly check,
recurring data pull). Frontend detects the tool call and glows the "Convert to
workflow" button 3 times to draw the eye. When user clicks it, the suggested
cadence (e.g. "every weekday at 9am") is stored in the draft and seeded into
the scheduling agent's first prompt, so the agent can act on the suggestion
rather than asking the user again.
Tool is never auto-called — agents decide when a task is genuinely repeatable
(not debugging, creative work, one-off lookup). Tool description emphasizes
sparse, high-confidence use only (once per session max).
Files changed:
- backend/apps/agents/schedule_mcp_server.py: add SuggestConvertToWorkflow tool
- frontend/src/shared/mcpToolMeta.ts: add label for new tool
- frontend/src/app/pages/Dashboard/cards/AgentCard.tsx: detect suggestion in
session messages, show+glow "Convert to workflow" button, pass cadence to draft
- frontend/src/shared/state/workflowsSlice.ts: add suggested_cadence field to
Workflow interface
- frontend/src/app/pages/Workflows/SchedulingView.tsx: seed scheduling agent
prompt with suggested cadence hint
* [aidan] feat/agent-scheduling: route recurring asks through native workflows, deny claude cron skill
* [aidan] feat/workflow-convert: in-chat convert popup and auto-open scheduled workflow card
* [aidan] feat/workflow-auto-naming: auto-generate workflow titles from steps
Generate a title + description from a workflow's steps (one aux call,
reused for step labels) whenever it is still auto_named, so a workflow
built in the Edit Agent names itself on commit instead of staying
"New workflow". A manual rename sets auto_named=False and is never
overwritten. Stream the aux call (non-streaming drops content on some
9router lanes) and fall back to a step-derived title when the model is
unavailable.
* [aidan] feat/workflows: hide unsaved new workflows until first save
A brand-new "+ New" workflow is created with unsaved=true and kept out
of the hub's scheduled/unscheduled lists while the user is still building
it in the Edit Agent. The first commit (Save) clears the flag and the
workflow appears. Every other create path stays visible immediately.
* [aidan] ux/workflows: remove redundant save workflow button
The Edit Agent already has Discard/Save controls in its strip, so the
header "Save Workflow" button was a duplicate save path. Remove it and
its pulse/edit-session-id wiring; the model/time subtitle stays.
* [aidan] ux/workflows: animate title on auto-rename
Wrap the workflow card title in the same Typewriter the chat card uses,
so when the auto-generated name replaces the placeholder after Save it
retypes letter-by-letter. Gated on a real (non-placeholder) title so it
never animates on mount or for already-named workflows.
* [aidan] ux/workflows: animate sidebar title on auto-rename
Wrap the calendar hub's sidebar row title in the same Typewriter the
workflow card uses, so a title that auto-renames retypes letter-by-letter
in the sidebar too. Extract the placeholder/isRealTitle guard into the
shared workflowVisuals so the card and sidebar stay in sync.