Missions → Ideas → Works — Product Spec
Status: Draft v6 · Owner: Product (Ruslan) · Date: 2026-05-24 Audience: Product, Design, Engineering (frontend + backend + AI), AI Chat, Docs Internal codename (legacy): "AI Generated Works" / "Workshop" Related code today:
work_proposalsentity,apps/api/src/work-proposals/*,packages/agent/src/user-research/*- Work Agent settings:
apps/api/src/work-agent/*,apps/web/src/components/settings/WorkAgentSettings.tsx,apps/web/src/app/[locale]/(dashboard)/settings/work-agent/page.tsx,apps/web/src/lib/api/work-agent.ts,apps/web/src/app/actions/settings/work-agent.ts - Budgets:
apps/api/src/budgets/*,packages/agent/src/entities/work-budget.entity.ts,packages/agent/src/entities/usage-ledger-entry.entity.ts,packages/agent/src/entities/plugin-usage-event.entity.ts - Templates:
apps/web/src/app/[locale]/(dashboard)/templates/page.tsx,apps/web/src/components/templates/TemplatesCatalog.tsx
Scope of this document: product behavior — concepts, UX, UI, flows, states, naming, AI Chat surface, dashboard surface. Implementation details are referenced where they constrain product behavior. The detailed phased execution plan lives in the sibling PLAN doc.
Hard rule: This entire feature is an extension. Nothing currently shipping is being removed, rewritten, or significantly changed. The existing Work Agent settings page, the existing
work_proposalspipeline, the existingwork_budgetsinfra, the existing templates page, the existing/works/newpage, and all existing creation entry points all stay; we add new surfaces and entities on top, and reuse the existing primitives as the plumbing underneath. Anywhere this spec proposes a change to existing UI, the change is additive (new section, new filter, new switch) or a rename of copy only — never a deletion of code paths. This rule is enforced project-wide by Workspace AGENTS.md NN #20 ("Feature/UX requests are ADDITIVE by default") — added 2026-05-24 in response to operator feedback during v3 iteration.
What changed v5 → v6 (this turn): Six deferred items pulled INTO v1 (operator-confirmed). All additive, none replace existing surfaces.
- Mission Template manifest — full schema defined at
.works/mission.yml(NOT at repo root — operator: "keep it under .works folder so humans also can review or build templates"). Schema v1 covers: requiredname/description/defaultPrompt; optionaldefaults(type, cadence, outstandingIdeasCap, autoBuildWorks, guardrails, budget); optionalrecommendedWorkTemplates; optionalkb(seedPaths, citationPolicy). Full schema in §7.5.- Failed-Idea handling —
Retrybutton on FAILED Ideas (manual re-queue) + configurable auto-retry policy in Work Agent settings (system-classifies transient errors; user setsmaxAutoRetries+backoffSeconds+exponentialBackoffFactor). Error message rendered inline on the Idea card (was just a status pill). See §3.9.- Mission detail page extras — adds (a) activity timeline component (vertical log of ticks / generations / builds / completions), and (b) spend-over-time chart (small line chart of monthly spend toward cap). Both live below the existing live-runs + Ideas + Works lists. See §4.3.
- Account-wide budget roll-up tile on Dashboard — 6th stats tile showing total month-to-date spend across all Works + Ideas + Missions vs. global cap. New tile order:
[Missions] [Ideas] [Works] [Items] [Sites] [Spend]. See §5.1.- Re-build this DONE Idea — explicit action on done Ideas (visible when Done filter chip is on). Creates a fresh
WorkAgentGoalagainst the same Idea description; the new Work is created independent of the original. See §3.9.- Mission Clone (Full Fork) — new action on Mission Cards + Mission detail page. Clones metadata + KB contents + all Ideas (as new PENDING) + Works as read-only references panel. New Mission gets a fresh
<slug>-missionrepo seeded with the source's KB. See §4.4.What changed v4 → v5 (last turn): Four open architecture decisions resolved after a deep code-review pass against the live
C:/Coding/Ever Works/Code/platformcodebase. No product behavior changes — only implementation routing decisions that the PLAN now reflects concretely. Cross-referenced from spec §10.6:
- AI Chat tool surfaces — BOTH. Phase 9 ships Mission/Idea verbs to both the web-side in-app chat (
apps/web/src/lib/ai/tools/— adds tool() definitions alongside the existingsuggestWorks/webSearch/getUserInfo) AND the MCP server (apps/mcp/src/openapi-tools/whitelist.ts— adds WHITELIST entries so external MCP clients like Claude Desktop / Cursor can drive Missions and Ideas). The MCP route is cheap because the new API endpoints already get@ApiOperationdecorators from NestJS Swagger.- Mission repo placement — same org/account as the user's existing
<slug>-dataWork repos. Mission repo scaffolder reusesgitFacade.createRepository()(canonical signature atpackages/agent/src/ever-works-providers/ever-works-git.provider.ts:97); zero new config or destination logic.- Mission Template catalog source — same pattern as Work Templates today (curated catalog +
+ Add custom Mission Template). Phase 8 reuses whatever sources the Work Templates list; smallest divergence.- Mission detail page Live Run — renders a list of all in-flight runs for this Mission's child Ideas (one row per Idea-in-flight, each with its own
<LiveRun />and<LogList />). Most informative for a Mission that may have several Ideas building concurrently.What changed v3 → v4 (last turn):
- The unified
+ Newpage lives at a NEW route/new, not at/works/new. The existing/works/newpage and its content are completely untouched — same URL, same content, same labels, same flow. The new/newpage is built fresh and reuses (not modifies) the existing three Work-creation block component. The sidebar+ New Work→+ Newbutton now routes to/new. Direct deep-links to/works/newcontinue to work as today.- On
/new, the three Work-creation blocks render with the "Work" suffix labels (Create Work with AI / Create Work Manually / Import Existing Work) — that's a render-time label set passed as props to the existing block component. On/works/newthe labels stay exactly as today. No existing page label changes.What changed v2 → v3:
- New §4.0 documents the global
+ Newentry page (sidebar button renamed from+ New Workto+ New). This is the one main path for creating anything — Mission, Idea, or Work — via a large prompt + chips, with AI Chat hidden until the user submits. (v4: this page lives at/new, NOT/works/new.) "One main path" does NOT mean "only path": every existing creation entry point stays, per NN #20.- The
+ New Missionbutton on/missionspage is preserved (small, top-right) as one of the additional paths. The large prompt + Type switch on/missionspage that v2 §4.1 proposed is dropped — it was a v2 spec-draft addition that the operator retired before it shipped, redirecting that surface to the new+ Newpage. The page-level Cards list itself is unchanged from v2.- The
+ Addbutton on/ideaspage stays (inline, fast path for atomic Ideas). The page is unchanged from v2.- The existing 3 Work-creation blocks on
/works/new(Create with AI / Create Manually / Import Existing) are preserved with no changes. The new/newpage reuses the same component to render parallel blocks below the prompt input (v4: with "Work" suffix labels on the/newrendering only).- AI Chat sidebar is hidden on the
+ Newpage until the user submits; on submit, the chat appears and Canvas opens with whatever the AI inferred (Work, Idea, or Mission, based on the selected chip and prompt content).
0. TL;DR
We are introducing two new first-class concepts in the platform and renaming/reshaping the existing "Work Proposals" surface so the three together form one coherent lifecycle:
Mission → (continuously generates) → Ideas → (one-time, 1:1) → Works (self-updating)
ambitious atomic deployed output
ongoing one-shot scheduled refresh
- Missions — new sidebar item. The most ambitious, long-running unit: a Goal or Project that continuously spawns Ideas (e.g. "Build Ever Works product", "Run the best cats business worldwide").
- Ideas — promote the existing in-dashboard "Work Proposals" surface into a full sidebar item with its own page. An Idea is atomic and one-shot: 1 Idea → 1 Work. After the Work is built, the Idea is marked Done (hidden in UI, kept in DB for stats).
- Works — unchanged in concept (the actual self-updating deployed output: directory, blog, website, etc.). What changes is how a Work can come into being:
- Directly (existing path — user creates Work manually or via wizard).
- From an Idea (new — Idea → Work, 1:1).
- From a Mission (new — Mission → Ideas → Works, fan-out + continuous).
Sidebar (final IA):
Dashboard
Missions ← NEW
Ideas ← existing "Work Proposals" promoted to its own page
Works ← existing
...
The product brand metaphor — "The Workshop for AI" — stays at the brand/tagline level only. There is no sidebar item called "Workshop" and no DB concept called "Workshop". The whole product is the workshop; Missions, Ideas, and Works are what you do inside it. See Naming decisions for the full rationale.
1. The Three Concepts
1.1 Work (existing, unchanged in nature)
A Work is the existing top-level unit in Ever Works — a directory, blog, website, landing site, etc. — that is self-updating on a schedule. Owns its own templates, generation pipelines, deploy targets. See docs/specs/architecture/* and the existing Works surfaces.
What changes for Works in this spec: only the origin of a Work. A Work can now be created from an Idea (and transitively from a Mission), in addition to all existing creation paths. No change to the Work entity's runtime behavior.
1.2 Idea (existing concept, promoted)
An Idea is an atomic, one-shot proposal to build a single Work.
- Cardinality: 1 Idea → 1 Work. Always. [Erratum 2026-07-19: superseded by the domain-model review's ADR-009 ruling — 1 Idea → 0..N Works. The authoritative link set lives in the
idea_workstable;acceptedWorkIdremains as the denormalized primary/most-recent pointer. See the domain-model-evolution spec.] If the build pipeline happens to spawn more than one Work from an Idea, that's a harmless bonus, not a requirement, and it doesn't change the conceptual mapping. - Lifetime: one-shot. Once the Idea is built into a Work, the Idea is Done — soft-hidden from the active UI list but kept in the DB so it remains available for stats, audit, and future re-build / re-suggest logic.
- Content shape:
- Title — short name, AI-generated from the prompt body when the Idea is created (whether the source is auto-suggested, user-typed, or Mission-spawned). Editable in UI later.
- Details — the actual prompt body / description that will feed the Work generation pipeline.
- Plus the existing structured suggestions the current
WorkProposalentity already carries (suggested categories, fields, recommended plugins, reasoning, etc.).
- Sources (extending the existing
WorkProposalSourceenum):AUTO_SIGNUP— initial seed from sign-up profile (existing)USER_REFRESH— user clicked "Suggest more" (existing)DISCOVER(existing)SCHEDULED— auto-generated by the "Auto-generate Ideas" loop (existing in enum; this spec wires the user-facing switch)USER_MANUAL— NEW — user typed it via the "+ Add" / quick-input boxMISSION— NEW — generated by a Mission
- States (extending
WorkProposalStatus):PENDING— visible, not yet acted onQUEUED— NEW — user explicitly queued for build (one-shot, manual flow). See §3.2.BUILDING— NEW (or surface existing in-flight state) — Work generation in progressACCEPTED/DONE— Work built,acceptedWorkIdset, hidden from active listDISMISSED— user dismissed (existing)FAILED— NEW — build failed; surface error so user can retry
1.3 Mission (NEW)
A Mission is the most ambitious unit: a Goal or Project that continuously drives Idea generation and (via Ideas) Work creation.
- Cardinality: 1 Mission → many Ideas → many Works.
- Lifetime: ongoing. A Mission can be:
- One-shot — user pushes it forward manually; when satisfied, marks it Complete. Nothing scheduled.
- Scheduled — runs on a cadence (e.g. daily), each tick: generate new Ideas + (optionally) auto-build them into Works.
- Content shape:
- Title — short name, AI-generated from the Mission prompt, editable.
- Description — the user's prompt / Goal definition (e.g. "Build Ever Works product").
- Type / mode —
one-shotvsscheduled(the "Type" switch on the Missions page input — see §4.1). - Schedule (only when scheduled) — cadence definition (cron-like, same model as scheduled Works updates).
- Auto-build Works — per-Mission toggle: should every Idea this Mission spawns be auto-built into a Work, or just queued for user review?
- Outstanding-Ideas cap — per-Mission soft cap on how many
PENDING/QUEUEDIdeas this Mission can have at any time. Default20. Special valueUnlimitedlets the Mission build out a roadmap as long as it wants. The default lives in Settings (see §6.1) and is editable per-Mission. While at or above the cap, scheduled ticks SKIP the generation step and emit an "at cap, skipping" event into the Mission activity log. - Mission Template (optional) — a Mission can be scaffolded from a Mission Template (see §8 — Mission Templates). When set, the Mission carries
missionTemplateRepo(e.g.ever-works/p2p-marketplace-mission-template) and a generated/owned Mission repo (e.g.ever-works/<slug>-mission) used to store the Mission's running KB, plans, logs, and any docs the agent accumulates. Missions without a Template still get their own Mission repo (scaffolded from a generic baseline) so the agent always has a place to persist state. - Linked children:
Idea[], transitivelyWork[]. Each child Work owned by this Mission has its own Work repo (existing concept) plus its data repo is linked back to the parent Mission repo for cross-reference.
- States:
ACTIVE— running (whether one-shot in-progress or scheduled and ticking)PAUSED— user paused; no new Ideas generatedCOMPLETED— user marked done; archived but visible in historyFAILED— generation loop hit a fatal error
- Examples (verbatim from spec discussion):
- "Build Ever Works product" (Mission) → spawns Ideas like "Build a website for Ever Works", "Build a blog for Ever Works", "Open-source Ever Works on GitHub and mirror to GitLab", etc. → each becomes a Work.
- "Run the best business related to cats, worldwide" (Mission) → spawns many Ideas continuously, executes them as Works, drops some, generates more, keeps improving.
2. Lifecycle Diagram
2.1 Lifecycle and origin paths
2.2 Sidebar IA after this change
Dashboard
Missions ← NEW
Ideas ← NEW (was "Work Proposals" on dashboard only)
Works ← existing
Items ← existing
Websites ← existing
... (settings, etc.)
2.3 Relationship summary table
| Concept | Cardinality below | Lifetime | Schedule? | Soft-hides when done? |
|---|---|---|---|---|
| Mission | 1 → many Ideas | Ongoing (until user completes) | Optional (one-shot or scheduled) | No — visible with COMPLETED status |
| Idea | 1 → 1 Work | One-shot | No (built once) | Yes — DB-retained for stats |
| Work | leaf | Continuous (self-updating) | Yes (the existing Work scheduler) | N/A |
3. Ideas — Page, Dashboard Block, and Behaviors
3.1 Surfaces
- Dashboard block — preview only, max 3 Ideas, with
View all (N)link to the full page (mirrors the existing "Works" preview pattern). - Full page —
/ideas, sidebar-linked, full-screen list.
3.2 Renames and copy changes (Dashboard + page)
| Where | Old copy | New copy |
|---|---|---|
| Dashboard block heading | Ideas for you, {username} / Ideas for you | Ideas |
| Action button (per card) | Use this idea | Build |
| Refresh button | Suggest more ideas | Suggest more |
| Dashboard Works block heading | Recent Works | Works |
i18n keys to update (current locations in apps/web/messages/en.json ≈ lines 493–518, 681):
proposals.header.title→"Ideas"proposals.header.titleWithName→"Ideas"(drop the{username}variant; keep key for back-compat or remove if safe — see Implementation notes)proposals.actions.accept→"Build"proposals.actions.refresh→"Suggest more"- Dashboard recent-works heading key (around
.recent) →"Works"
All other locales (
ar,bg,de,es, …) need parallel updates. Do not skip locales — half-translated surfaces ship to all users.
3.3 "Suggest more" — additive, not regenerative
- Clicking Suggest more must ADD new Ideas to the list. It must not replace, regenerate, or duplicate.
- "Not duplicate" = the AI MUST be aware of the user's existing Ideas (pending, queued, building, AND done, AND dismissed) when generating new ones. Concretely: pass the existing Idea titles + slugs + short descriptions into the generation prompt as both:
- a "do not re-suggest these" exclusion list (to prevent literal dupes), AND
- a "this is the user's history — use it as context for what they're interested in / have already explored / have rejected" signal (so suggestions improve over time rather than churning around the same patterns).
- Done Ideas are first-class context, not just exclusion. The user's words: "when AI generate new ideas, it should see all past ideas, including those that already DONE and use that knowledge when generate new ideas."
- Source for added Ideas:
USER_REFRESH.
3.4 Quick-add input (NEW)
Above the Ideas list, on both the Dashboard block and the /ideas page, render a + Add button (or inline input). Click → modal/inline form:
- One field: Idea description (the prompt body — same content as today's "Goal" field in Settings).
- Continue → server:
- Persists Idea with
source = USER_MANUAL,status = QUEUED(manually queued). - AI generates a short Title from the description (same titler used for Mission-spawned and auto-generated Ideas — one shared service).
- If
Auto-build Worksis ON → enqueue build immediately. If OFF → staysQUEUEDfor user to explicitly click Build.
- Persists Idea with
The user's words: "basically it's just ability for user to add his own ideas and let system build those (as Work). But the key here is that such Idea is built end-to-end one time and next only results of it remain visible — Work." — meaning even for the user-added case, after the Work is built the Idea goes
DONEand disappears from the active list.
3.5 Ordering on /ideas page
Always order Ideas as:
- Queue first —
QUEUEDandBUILDING(in queue position / start-time order). - Ready next —
PENDING(suggested but not yet acted on), most-recently-generated first. - (
DONE/DISMISSEDhidden from the active list. Optional filter chip to surface them; out of scope for v1 unless trivial.) - (
FAILEDshould be surfaced near the top of Queue with a retry affordance — out-of-band, not buried.)
3.6 Two toggles above the list
Above the list (both Dashboard block and /ideas page) render two switches:
| Switch | Purpose | When ON | When OFF | Settings gear |
|---|---|---|---|---|
| Auto-generate Ideas | Continuous background suggestion loop. Idea source = SCHEDULED. | New Ideas trickle into the list automatically on the configured cadence. | No background generation; user must click "Suggest more" or "+ Add". | ⚙ links to the relevant subset of the Work Agent settings — only the fields that govern the Idea-generation loop. |
| Auto-build Works | Auto-convert each new Idea → Work, no manual click. | Every newly created Idea (regardless of source) is immediately queued for build → BUILDING → DONE. | Ideas stay PENDING until user clicks Build. | ⚙ links to the subset of Work Agent settings that govern the Idea→Work build loop (target template, default config, etc.). |
Both gears deep-link into the existing Work Agent settings page, scrolled/anchored to the relevant section. We are not duplicating the settings — only surfacing a curated entry-point. See Implementation notes for the settings subset.
Per-Mission overrides: a Mission can override these globally-defaulted switches for the Ideas it spawns (so a single Mission can be auto-build even if the global default is off).
3.7 Done-Idea handling
- "Done" =
status = ACCEPTEDANDacceptedWorkId IS NOT NULL. - UI: filter out from the default Ideas list everywhere (Dashboard block,
/ideaspage). - DB: retain forever. Used for:
- Total Ideas stat on Dashboard (counts all Ideas regardless of status — see §5.1).
- Future "Re-build" / "Re-suggest" / "Similar Ideas" features.
- Avoiding duplicate suggestions (see §3.3).
- On the resulting Work card, surface a back-link "From Idea:
" (small affordance — out of scope to design here, but the data join is Work.id → WorkProposal.acceptedWorkId).
3.8a Failure handling, retry, and re-build (NEW in v6)
Failed-Idea inline error detail
When an Idea ends with status='FAILED', the Idea Card MUST render the failure reason inline (not just a "Failed" status pill). UI:
- Truncated error message (≤200 chars) below the title, in a muted danger-color block.
- "Show details" affordance to expand to the full error if it was longer.
- This is in addition to the existing
Retryaction (below).
The error message is persisted on the WorkProposal row (new column failureMessage — added in PLAN Phase 0). The Goal-completion handler (Decision A3) sets it when transitioning Idea → FAILED.
Manual Retry button
Visible on every Idea Card whose status='FAILED'. Click → calls POST /me/work-proposals/:id/retry (new endpoint added in Phase 1):
- Re-validates the Idea exists and is currently FAILED.
- Transitions Idea → QUEUED.
- Creates a new
WorkAgentGoal(same shape as the original build — see Decision A3 build flow). - Returns the updated Idea + new Goal id.
Auto-retry policy (configured in Work Agent settings)
The platform classifies transient errors (network timeout, 429 rate-limit, 5xx upstream, plugin-internal timeouts) — list maintained in code, NOT user-configurable (Decision: simpler UI, predictable behavior). When a Goal fails with a transient error:
- If retries-attempted-so-far <
maxAutoRetries(user setting, default2, range0–5), the Goal-completion handler waitsbackoffSeconds * (exponentialBackoffFactor ^ attempts)(defaults:60+2.0→ 60s, 120s, 240s), then re-queues the Goal automatically. - Idea status stays
BUILDINGacross auto-retries (not flickering to FAILED then QUEUED). - On final failure (non-transient OR transient with exhausted retries), Idea → FAILED,
failureMessageset, user notified per their notification preferences.
User settings for this loop live in the Work Agent settings page (§6.4 below).
Re-build this DONE Idea
Action on an Idea whose status='ACCEPTED' (Done). Visible only when the Show done filter chip on /ideas is active (since Done Ideas are hidden by default — see §3.7).
- Endpoint:
POST /me/work-proposals/:id/rebuild. New endpoint (Phase 1). - Behavior: creates a fresh
WorkAgentGoalagainst the same Idea description, producing a NEW Work — independent of the Idea's existingacceptedWorkId(which stays pointing at the original Work). - The Idea's status transitions: ACCEPTED → BUILDING → ACCEPTED (with
acceptedWorkIdre-pointed at the new Work). The original Work is NOT deleted (per NN #20) — the user can keep, delete, or repurpose it independently. - Optional: the rebuild endpoint accepts a
keepOriginalLink: trueflag that, when set, creates a newWorkProposalrow (a clone of the Idea, status=PENDING) for the rebuild target rather than re-pointing the original Idea. v1 defaults to re-point; v2 may flip the default.
3.8 AI Chat control (mandatory)
All Idea operations must be reachable from the existing in-app AI Chat. Verbs the chat AI must understand and execute (via tool-call to the same APIs the UI uses):
- "list my ideas" / "show my ideas" (with optional status filter)
- "add a new idea:
" → createsUSER_MANUALIdea - "build this idea" / "build idea <title|id>" → queues for build
- "dismiss idea <title|id>"
- "remove idea <title|id>" (alias for dismiss; clarify if ambiguous)
- "enable / disable auto-build"
- "enable / disable auto-generate ideas"
- "suggest more ideas"
- "show my done ideas from this week" (read-only over the retained-but-hidden set)
Implementation: expose the existing REST endpoints under /api/work-proposals/* as MCP / agent tools. The chat AI is just another client — no separate logic.
4. Missions — Entry Points, Pages, and Behaviors
4.0 The unified + New page (NEW in v3, route corrected in v4 — the one main path for creating anything)
Sidebar button + New Work is renamed to + New. Clicking it opens a new route /new — a brand-new page, NOT the existing /works/new.
Route clarity (v4). Two distinct routes coexist:
/works/new— UNCHANGED from today. Specifically for creating Works. Three creation blocks (Create with AI / Create Manually / Import Existing) with their existing labels. No edits./new— NEW page. The unified entry. Large prompt + chips at the top, three blocks below. Sidebar+ Newroutes here.Existing deep-links / bookmarks to
/works/newkeep working as today. Internal navigation that currently uses/works/new(e.g. any in-app button that says "create a Work") keeps using/works/new. The two pages happen to render some of the same building blocks (the three Work-creation block component is shared) but are distinct routes with distinct contents.
4.0.1 Page layout (top → bottom)
┌──────────────────────────────────────────────────────────────────────────┐
│ What do you want to build? │
│ ┌────────────────────────────────────────────────────────────────┐ → │
│ │ e.g. "Landing page for my fintech startup with hero, pricing" │ │
│ │ [+] [🎤] 0/5000 │ │
│ └────────────────────────────────────────────────────────────────┘ │
│ │
│ [Mission] [Idea] [Website] [Landing Page] [Blog] [Directory] [Awesome] │ ← chips
│ │
│ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐ │
│ │ Create Work │ │ Create Work │ │ Import │ │
│ │ with AI │ │ Manually │ │ Existing Work │ │
│ └────────────────┘ └────────────────┘ └────────────────┘ │ ← EXISTING blocks, preserved
└──────────────────────────────────────────────────────────────────────────┘
4.0.2 Chips — ordering and meaning
In this exact order (operator-specified):
Mission · Idea · Website · Landing Page · Blog · Directory · Awesome Repo
MissionandIdeaare level-of-ambition chips — they tell the system "treat my prompt as a Mission" or "treat my prompt as an Idea."Website,Landing Page,Blog,Directory,Awesome Repoare Work-Type chips (existing) — they tell the system "create a Work of this type."- If the user picks no chip, the AI infers the level from the prompt text (short atomic ask → Work or Idea; ambitious ongoing goal → Mission).
- If the user picks a chip, that chip's intent takes precedence over AI inference.
4.0.3 AI Chat visibility on the + New page
- Hidden until the user submits — the page is the entry input; showing the chat too creates two competing inputs.
- Appears on submit — the prompt text is sent as the user's first message in the chat thread; the chat then drives the create flow (Mission, Idea, or Work as appropriate); the Canvas opens with the newly-created object.
4.0.4 The three creation blocks below — reused component, surface-specific labels
The block component that today renders the three Work-creation cards on /works/new (Create with AI / Create Manually / Import Existing) is reused on the new /new page, rendering parallel cards below the prompt input.
| Where | Label set |
|---|---|
/works/new (existing — unchanged) | Create with AI · Create Manually · Import Existing |
/new (new — v4) | Create Work with AI · Create Work Manually · Import Existing Work |
The "Work" suffix on the /new rendering disambiguates the cards from the unified prompt at top (which can create anything — Mission, Idea, or Work). On /works/new, where the page is already Work-only, the existing labels need no suffix.
Implementation: the block component takes a labelSet?: 'work-only' | 'unified' prop; /works/new omits it (defaults to today's behavior), /new passes unified. Zero change to /works/new.
Click destinations of each card are identical on both pages — they go to whichever sub-flow that card has always gone to. The blocks are shortcuts to existing flows, not new flows.
4.0.5 Submit flow
User types in the prompt + (optionally) picks a chip + clicks arrow:
- AI Chat side-panel appears.
- The prompt is posted into the chat as the user's first message.
- Based on chip and prompt content, the chat calls the appropriate create-tool:
missions.create,ideas.create, or the existing Work creation flow. - Canvas opens with the newly-created object's detail page (Mission detail / Idea detail or Work view) — same Canvas surface used elsewhere.
- The chat continues working in the background — user can navigate away.
4.0.6 Other entry points are PRESERVED (additional paths)
Per NN #20, the + New page is the one main path, not the only path. Every existing or new-in-this-spec entry point continues to work:
+ New Missionbutton (small, top-right of/missionspage) — see §4.1.+ Addbutton on/ideaspage and Dashboard Ideas block (inline modal) — see §3.4.- Direct routes from chat:
missions.create,ideas.createchat verbs. - Mission Templates page — "Use this Template" button on a Mission Template Card (§7).
- Existing
/works/newthree creation blocks — see §4.0.4 above.
None of these is removed. The unified + New page is added on top as the recommended-but-not-required entry.
4.1 /missions page layout
v3 note: the large prompt + Type switch that v2 proposed at the top of this page is dropped — operator redirected that surface to the new
+ Newpage (§4.0). All other v2 content for/missionsstays.
Top to bottom:
- Header row with a small
+ New Missionbutton top-right.- Behavior: routes to
/new?type=missionwith theMissionchip pre-selected and (if cursor-focused) the prompt input ready to type into. - Discoverability affordance — a user landing on
/missionsshould be able to create a Mission from where they are without hunting for the sidebar+ New. - This is one of the "additional paths" per §4.0.6.
- Behavior: routes to
- Missions list — Card grid (visual treatment mirrors the Ideas Cards on
/ideas).- Each Card shows: Title, short description preview, status pill (
Active/Paused/Completed/Failed), counts (N Ideas · M Works). - Clock icon on the Card if the Mission is
Scheduled. No icon ifOne-shot(user-driven). (Same clock-icon visual language already used on scheduled Works Cards — reuse the component.) - Click on a Mission Card → navigates to the Mission page (§4.3).
- Each Card shows: Title, short description preview, status pill (
4.2 Mission create flow (via either the unified + New or the + New Mission page button)
Both entry points end up in the same create flow:
- Prompt + chip/intent → AI Chat picks up the message.
- AI Chat calls
missions.createtool with{ instruction, type?, scheduled? }. - Server: shared titler generates a short title from the prompt; (Phase 8) optionally scaffolds a Mission repo from a Mission Template; persists Mission row; if
one-shot, runs first tick immediately. - Canvas opens the new Mission's detail page (§4.3) — same UX as opening any other surface in Canvas.
- From there the AI continues to operate on the Mission, and the user can navigate away (back to
/missions, or anywhere) without interrupting.
Why post-into-chat rather than a silent backend call: this preserves the conversational thread, lets the user follow up ("actually, only generate Ideas about kittens, not cats"), and reuses the existing chat-driven UX pattern.