Incremental roadmap from the current baseline to the shipped PRD.
How to use this file:
- Keep items small enough to land in a focused PR.
- Treat this file as a roadmap and progress tracker, not a changelog.
- Prefer adding new items next to the closest related step instead of appending unrelated backlog at the bottom.
- Keep sections ordered by dependency: durable facts and execution before projection surfaces that depend on them.
- When an item is done, change
[ ]to[x]and append the landing commit hash or hashes. - Write the capability that should exist or now exists, not migration wording like "replace", "remove", or "rename" unless that action is itself the remaining work.
- If the design changes, rewrite affected items to the new steady-state plan instead of leaving stale unchecked items from the old plan.
- If an item starts reading like a subsystem instead of a step, split it before implementation.
- For any big lift or unclear design, add a POC step immediately before the production implementation step.
- Use POC steps to validate shape, constraints, and UX without prematurely locking the final architecture.
- Bootstrap the Electrobun desktop app around a pi-backed host/runtime instead of a standalone shell. Commit(s):
c118be7 - Add provider auth/settings support with local key storage and OAuth-backed access. Commit(s):
c118be7,6d757dc - Add the artifact projection panel in the desktop workbench. Commit(s):
1d9bc05,6d757dc - Add workspace-scoped prompt history recall in the composer. Commit(s):
cb1b7f1 - Add multi-session workspace navigation and session switching/resume support. Commit(s):
b22a0c6,df1a7df
Workflow-inspector UI work remains explicitly out of scope for this section and stays under section 17.
- Build a POC session overlay document and validate how it can sit above pi session data. Commit(s):
c432f4e - Persist a minimal structured session overlay root above pi session data. Commit(s):
b510857,fff54d7 - Add
surfacePiSessionIdlinkage on turns so orchestrator-surface and handler-thread turns use one model. Commit(s):fff54d7,f53c9b8 - Persist handler-thread records with title, objective, objective state, backing pi session id, and derived workflow-run linkage. Commit(s):
fff54d7,f53c9b8 - Support workflow-run records that allow many runs under one handler thread. Commit(s):
f53c9b8,43a26cb - Persist workflow-run product-binding records with run id, workflow name, workflow source, runnable entry path plus saved-entry linkage when relevant, projected product status, Smithers reconnect/attention cursors, summary, and timestamps while keeping raw Smithers execution facts authoritative in Smithers. Commit(s):
8f0e4ec - Persist artifact references independently from transcript parsing at thread, workflow-run, and command scope. Commit(s):
fff54d7 - Store artifacts under the configured artifact directory as per-session files, with mutable artifacts
directly under
<artifactDir>/<sessionId>/, immutable artifacts under<artifactDir>/<sessionId>/immutable/, exact stored filenames, immutable metadata, refreshed file-backed byte/digest facts, and no reliance on OS-level file flags for immutability. - Persist ordered update and conclusion episode records each time a handler thread reports to the orchestrator, while preserving earlier episodes for later follow-up turns. Commit(s):
d323012 - Persist session wait state as a frontier-level summary derived from surface, workflow, request-user-input, and session wait projection. Commit(s):
fff54d7,f53c9b8,43a26cb - Drive structured session state only from explicit runtime producers or tool events. Commit(s):
fff54d7,59fc34e,43a26cb - Reconstruct workspace and session summaries from structured state on app load. Commit(s):
b510857,fff54d7 - Build a POC Codex-like live tool projection stream for one surface, covering tool item start, streamed argument snapshots, command output deltas, structured file-change patch snapshots, approval or wait state, final command facts, and renderer recovery after reload.
- Persist and render live tool projection across native direct tools, thread-control tools,
extension loading,
execute_typescript, command-familyexec_commandsurfaces such assvvyx ..., and the adopted Smithers-native handler tools without introducing a workflow-specific rendering or recovery path.
- Build a POC
execute_typescriptruntime with compile or typecheck-before-run diagnostics and the adopted TypeScript input/output contract. Commit(s):76cc8f3,b41e5e6 - Expose the resolved
execute_typescriptruntime surface with no globalsvvyclient and no injectedapiobject. - Persist each attempted snippet as a file-backed artifact before execution, with SQLite metadata and path indexing. Commit(s):
76cc8f3,fff54d7 - Route the top-level
execute_typescriptaction through the same approval-boundary path as other approval-gated native actions before executing submitted code. - Generate actor-specific
execute_typescriptdeclarations containing only the current actor's loaded TypeScript-enabledsvvyxextension clients underextensions["<id>"], plus only those extensions' command map types. - Make
incur/clientimportable inexecute_typescriptsnippets for public Incur types andClient.ClientError. - Run a simple composed scripted task through
execute_typescript. Commit(s):76cc8f3 - Build a POC artifact and tracing pipeline for code-mode execution. Commit(s):
76cc8f3 - Capture code-mode logs and nested command traces as artifacts and structured command records. Commit(s):
76cc8f3,fe53a3b,59fc34e - Keep thread orchestration, thread handling, extension loading, and request-user-input as small
svvy-native control surfaces while exposing Smithers workflow operations through Smithers-native bridge tools. Commit(s):a02bd48 - Expose generated
svvyxextension clients as Incur-compatibleextensions["<id>"].run(commandId, input)clients, withMemoryClientand local Incur actions kept internal. - Expose Codex-like Shell and Apply Patch extensions, with
exec_command,write_stdin, andapply_patchas the normal coding-agent work interface. Commit(s):76cc8f3,29d8452 - Vendor a Codex-derived native Rust sandbox helper that preserves Codex filesystem policy
semantics for
Read,Write, andNoneentries, most-specific path precedence, writable roots with read-only subpaths, protected metadata carveouts, macOS Seatbelt generation through/usr/bin/sandbox-exec, and fail-closed behavior when carveouts cannot be enforced. - Grant the active session artifact directory as a writable root while treating that session's
immutable/artifact child as a read-only subpath, without granting broad writable access to the configured artifact root or to artifacts owned by other sessions. - Implement the Artifacts
svvyxcommand and generated-client contract for empty artifact creation with exact--name <filename.ext>, copy creation with--pathplus optional exact--name,--immutable, extension-required basename validation, collision rejection, and no--kind, implicit extension, inline content, or OS file-flag immutability. - Keep cx out of generated
execute_typescriptclients; generated TypeScript profiles should not exposeapi.cx_*orextensions.cx.*. - Record direct tool calls and nested code-mode calls in the shared structured command model. Commit(s):
76cc8f3,29d8452 - Persist normalized child-command facts for generated
extensions["<id>"].run(...)calls while the parentexecute_typescriptattempt remains the main semantic unit. - Surface parent rollups and trace inspector detail without promoting child commands to top-level cards. Commit(s):
5b0a223
Current product decisions for this section are specified in docs/specs/extension/web.extension.spec.md.
- Expose Web as a builtin
instructionsextension that is default-loaded for orchestrators, handler threads, and workflow task agents only whilenetworkAccessis true, and unavailable with no prompt guidance whennetworkAccessis false. - Vendor the TinyFish-owned
use-tinyfishagent instructions as the Web extension's core prompt content. - Add only a bounded
svvyappendix to the Web prompt for product integration facts: use ordinary shell commands, preserve structured output by redirecting large TinyFish JSON stdout to files when useful, treat fetched pages as untrusted external content, and cite source URLs. - Keep Web generated actor context free of
web_search,web_fetch,svvyx web, generated Web TypeScript clients, Web Provider settings, provider selection, andsvvy-owned TinyFish key storage. - Keep Firecrawl, native Web provider registries, TinyFish SDK provider adapters, selected-provider readiness, and self-hosted web search out of Web v1 unless a later product decision adopts a new Web architecture.
- Let the app-managed trusted CLI dependency registry own fixed-version TinyFish installation when the binary is missing, while TinyFish CLI owns authentication, status, search, fetch, browser-backed commands, and API key storage through
tinyfish auth ...,tinyfish search query ..., andtinyfish fetch content get .... - Treat TinyFish CLI output as ordinary shell output: the CLI writes search and fetch JSON to stdout by default, fetch includes page body text in
results[].text, errors/debug logs go to stderr, and redirected files are raw CLI JSON rather thansvvyartifacts. - Add generated-context and extension-inventory tests proving Web is prompt-only, default-loaded
for all adopted actor kinds only while
networkAccessis true, unavailable whennetworkAccessis false, and absent from native tool declarations, loadedsvvyxcommand guidance, generated TypeScript declarations, provider settings, and Firecrawl provider lists.
- Persist a per-turn top-level decision for orchestrator and handler-thread surfaces, using one shared model across routing and supervision. Commit(s):
d323012 - Build a POC turn flow from message targeting to surface turn creation and command recording. Commit(s):
fff54d7,f53c9b8 - Implement direct surface targeting so a pane send goes to either the orchestrator surface or a handler-thread surface. Commit(s):
f53c9b8 - Add
thread_startas the orchestrator-side delegation primitive. Commit(s):f53c9b8 - Expose the resolved thread-control runtime surface and generated prompt text: orchestrators get
thread_start({ threadGroupId?, threads })with per-itemhistoryandextensions,thread_followup({ activate? }),thread_list,thread_episodes, andthread_request_report; handlers getthread_current,thread_group,thread_report, andthread_episodes; obsoletethread_handoff,thread_handoffs,thread_resume, and single-objectivethread_startshapes are absent from agent-facing prompts and tool schemas. - Implement minimal orchestrator routing for local reply, local
execute_typescript, clarification, andthread_start. Commit(s):d323012 - Re-enter orchestrator control from durable handler-thread episodes, using durable thread objective state plus the latest episode instead of raw transcript scanning. Commit(s):
d323012,fdaf460
- Build a POC handler-thread spawn flow with objective handoff and a dedicated backing pi session. Commit(s):
f53c9b8 - Persist handler-thread objective state separately from handler activity, workflow activity, waits, and repair context, without flattening workflow failure or cancellation into thread objective conclusion. Commit(s):
f53c9b8,fdaf460,a02bd48 - Let handler threads receive direct user messages through the same surface model as the orchestrator. Commit(s):
f53c9b8 - Make handler-thread clarification, waiting, and resume happen inside the thread itself instead of bouncing through the orchestrator by default. Commit(s):
f53c9b8 - Keep handed-back handler threads directly interactive for follow-up chat without forcing a new thread. Commit(s):
ba5c3f0 - Let a concluded handler objective move back to active through explicit orchestrator re-engagement with
thread_followup({ activate: true }), preserving handler and workflow activity as derived facts. Commit(s):f53c9b8,a02bd48 - Preserve earlier thread episodes when the same thread later returns control again. Commit(s):
d323012 - Allow the orchestrator to inspect a handler thread on demand without making that the default reconciliation path. Commit(s):
ba5c3f0 - Make
thread_reportthe explicit handler-thread episode and conclusion path so ordinary handler replies stay interactive and multi-turn. Commit(s):fdaf460 - Load the orchestrator and handler-thread instructions through pi's true
systemPromptchannel before sending each real user message. Commit(s):8a41d08 - Surface the active system prompt as a collapsible transcript item while keeping committed conversation history in pi session history rather than role-labelled prompt reconstruction. Commit(s):
8a41d08 - Slice generated capability declarations by actor so the orchestrator prompt receives only orchestrator-callable tools while handler-thread prompts receive only handler-callable tools. Commit(s):
a02bd48 - Teach the orchestrator prompt that workflow actions require delegation into a handler thread instead of exposing
smithers_*directly in the orchestrator API block. Commit(s):a02bd48 - Teach handler-thread prompts that the orchestrator owns delegation and reconciliation while omitting orchestrator-only tool declarations such as
thread_startunless nested delegation is explicitly adopted. Commit(s):a02bd48
- Define the packaged-app Smithers runtime boundary so shipped product workflows are configured saved or artifact entries under
.svvy/rather than repo-rootworkflows/authoring assets. Commit(s):a02bd48 - Build handler-thread supervision for Smithers runs started from explicit runnable entries, with deterministic test workflows registered only inside tests. Commit(s):
a02bd48 - Define the workflow-run request envelope from a handler thread to Smithers. Commit(s):
f53c9b8 - Persist workflow-run supervision metadata for svvy product binding and projection, including Smithers run id, product attention kind, reconnect cursor, handler-attention delivery state, and lineage reference, as soon as the supervising handler thread has a concrete Smithers run id. Commit(s):
a02bd48 - Build a POC one-task workflow under a handler thread that returns to the thread and then emits a conclusion episode. Commit(s):
f8557d9 - Let handler threads call the generated per-workflow Smithers run-launch surface through the Bun bridge for both new and resumed runs. Commit(s):
4674e67 - Extend the Smithers-native supervision surface beyond the shipped Step 5 handler-thread/runtime coverage for blocker diagnosis, approvals, signals, cancellation, node detail, artifacts, transcripts, event history, frames, and DevTools inspection, focusing on the remaining operator-only and richer troubleshooting controls. Commit(s):
f8557d9 - Define workflow task agents as a lower-level Smithers agent kind distinct from orchestrator and handler-thread surfaces. Commit(s):
a02bd48 - Adopt PI-backed svvy workflow task agents with a dedicated task prompt, task-local prompt-only cx CLI guidance, direct tools, and
execute_typescriptfor typed composition. Commit(s):a02bd48 - Keep Smithers workflow approval gates and hijack as Smithers runtime or operator controls around workflow task agents rather than exposing them as ordinary task-agent tools. Commit(s):
a02bd48 - Build workflow task execution that runs the svvy workflow-task PI configuration with task-local prompt-only cx CLI guidance, direct tools, and code mode. Commit(s):
a02bd48 - Wake the supervising handler thread in a background turn only when a workflow run reaches a terminal outcome, an actionable wait, a continuation boundary, or a supervision fault that requires handler judgment, while keeping duplicate terminal reconciliation idempotent after a valid handoff. Commit(s):
a02bd48 - Support multiple workflow runs under one handler thread. Commit(s):
f53c9b8,43a26cb - Derive active and latest workflow summaries from workflow-run state without a persisted thread-level latest pointer. Commit(s):
a02bd48 - Persist durable reconnect cursors plus pending-versus-delivered handler-attention state on workflow runs so restart recovery and wake-up dedupe do not depend on process memory. Commit(s):
2f874a7 - Emit explicit Smithers bridge lifecycle events for workflow projection, reconnect bootstrap, and handler-attention delivery. Commit(s):
2f874a7 - Bootstrap workflow supervision from durable run state on session restore, rebuilding runtime ownership from workflow-run records and replaying only undelivered handler attention. Commit(s):
2f874a7 - Keep
thread_report, Smithers read APIs, selectors, and renderer reads free of lifecycle repair writes. Commit(s):2f874a7 - Guarantee that a workflow-run failure or cancellation remains handler-owned repair context until explicit user-directed closure or conclusion. Commit(s):
a02bd48 - Derive workflow-run execution status, wait kind, heartbeat, finished timestamp, and summary from Smithers durable run state for runtime policy, handler tools, and workspace read models, while keeping
workflow_runas the svvy ownership, cursor, attention, and product-link binding row. Commit(s): 59d7daf01f
- Define the generated workflow-authoring contract plus curated Smithers authoring guide and example bundle injected into every handler-thread context. Commit(s):
0b2d1ff - Build an end-to-end handler-thread flow that checks direct work, saved runnable entries, and reusable assets, then authors and runs a short-lived workflow artifact when needed. Commit(s):
dc1da8c - Persist every authored short-lived workflow under
.svvy/artifacts/workflows/<artifact_workflow_id>/withdefinitions/,prompts/,components/,entries/, andmetadata.json. Commit(s):dc1da8c - Define the saved workflow library layout under
.svvy/workflows/definitions/,.svvy/workflows/prompts/,.svvy/workflows/components/, and.svvy/workflows/entries/. Commit(s):37afcb3,4515233 - Define the discovery metadata contract compiled from JSDoc headers in
tsortsxfiles and frontmatter inmdxprompt files. Commit(s):37afcb3,4515233 - Expose saved workflow asset metadata through the Workflows library read model and handler-readable file paths. Commit(s):
4515233 - Expose workflow-agent model choices, provider readiness, and supported reasoning values through the handler-only
workflow_list_modelsauthoring tool backed by pi-normalized model metadata. Commit(s):4515233 - Build a POC saved definition plus saved entry that are reused by a new short-lived artifact entry with different prompts or config bound at authoring time. Commit(s):
37afcb3 - Keep authored workflows artifact-only by default until the handler explicitly writes reusable files into
.svvy/workflows/. Commit(s):0b2d1ff - Run automatic saved-workflow validation after direct
writeoreditoperations under.svvy/workflows/..., surfacing diagnostics through structured command records. Commit(s):0b2d1ff - Surface all runnable saved and artifact entries through
smithers_list_workflowsandsmithers_run_workflow({ workflowId, input, runId? }), withsmithers_list_workflowsreturning each entry's explicit launch contract,workflowId,label,summary,sourceScope,entryPath, grouped asset refs, derivedassetPaths, andworkflowIdfilter support rather than relying on inferred import graphs. Commit(s):4515233,dc1da8c - Persist workflow agent files as ordinary saved workflow components that handlers discover by path and inspect through file reads. Commit(s):
4515233
- Model Project CI authoring guidance as the handler-available builtin
project-ciextension. Commit(s):2a5dbbe - Use
load_extension({ extensionId: "project-ci" })for handler-side Project CI authoring guidance and store the resulting generated agent context binding. Commit(s):2a5dbbe - Extend
thread_startso the orchestrator can create a handler withproject-ciloaded through extension overrides. Commit(s):2a5dbbe - Make Project CI configuration happen organically through normal handler-thread work, with the
project-ciextension loaded when CI authoring guidance is needed, instead of a setup launcher or CI-specific runtime. Commit(s):2a5dbbe - Define the conventional Project CI saved-workflow layout under
.svvy/workflows/{definitions,prompts,components,entries}/ci/, without implying a shipped or auto-created default CI entry. Commit(s):2a5dbbe - Extend runnable workflow entry discovery with optional
productKindandresultSchemametadata. Commit(s):2a5dbbe - Validate a saved Project CI entry under the conventional
.svvy/workflows/entries/ci/project-ci.tsxpath that declaresproductKind = "project-ci"and returns output that validates against its declared CI result schema. Commit(s):2a5dbbe - Persist
ci_runandci_check_resultrecords only from terminal Smithers runs launched from declared Project CI entries. Commit(s):2a5dbbe - Record CI check results with stable check ids, kind, status, required flag, command, exit code, summary, timestamps, and linked artifacts. Commit(s):
2a5dbbe - Treat invalid CI result output as a CI workflow troubleshooting state instead of parsing logs, node outputs, final prose, or command names. Commit(s):
2a5dbbe - Derive Project CI run/check read models through idempotent reconciliation over durable Smithers result facts and durable
svvyworkflow ownership facts, with terminal events, monitor reconnect, and app restart recovery all triggering the same derivation instead of relying on process-local terminal output memory or copied svvy output fields. Commit(s): a82abd62bc - Record missing durable Smithers terminal result output for a declared Project CI entry as a durable svvy projection failure or troubleshooting state instead of silently skipping CI projection. Commit(s): a82abd62bc
- Let normal handler threads discover and run configured Project CI entries without loading the
project-ciextension, while usingload_extension({ extensionId: "project-ci" })before configuring or modifying CI. Commit(s):2a5dbbe - Render
not configured,configured,running,passed,failed,blocked, andcancelledProject CI states in a dedicated CI status surface or panel. Commit(s):ee850fd - Surface the latest Project CI outcome as routing input for orchestrator and handler decisions without making CI a native control tool. Commit(s):
2a5dbbe
Current product decisions for this section are specified in docs/specs/workspace-navigation-core-projection.spec.md.
- Drive the session sidebar entirely from durable workspace session summaries. Commit(s):
9a21f87,b0ee858 - Define the stored shape for pinned and archived sessions, including the default collapsed state for the single Archived group. Commit(s):
3855fe4 - Persist pinned and archived session state. Commit(s):
3855fe4 - Render pinned sessions at the top of the active session list. Commit(s):
3855fe4 - Render archived sessions inside one Archived group in the session sidebar. Commit(s):
3855fe4 - Persist the Archived group collapsed state per workspace. Commit(s):
3855fe4 - Add session row actions for pin, unpin, archive, and unarchive. Commit(s):
3855fe4 - Keep durable unread state session-level with sidebar timestamp dots, focus-to-read clearing, and session row context-menu actions for mark read or unread, pin, rename, archive, and confirmed delete; pane unread treatment, when present, reads from the same session metadata.
- Join session summaries, focused panel, and panel-to-surface bindings in one workspace-shell read model without depending on a global active surface. Commit(s):
9a21f87,b0ee858 - Split workspace-summary updates from live surface transcript updates in the renderer runtime. Commit(s):
9a21f87,b0ee858 - Manage open live surfaces in a shared registry keyed by
surfacePiSessionId. Commit(s):9a21f87,b0ee858 - Give each live surface its own prompt lock, model state, reasoning state, and cancellation lifecycle. Commit(s):
9a21f87,b0ee858 - Render handler-thread and workflow-run rows from structured state in the workspace shell while keeping lifecycle subtitles, running indicators, open-pane treatment, and compact context rails local to the owning row. Commit(s):
ba5c3f0,9a21f87,b0ee858 - Show thread objective, objective state, latest workflow-run summary, and row-local derived blocked reason in panel-local thread views. Commit(s):
ba5c3f0,9a21f87,b0ee858 - Render the latest thread episode for an inspected thread while preserving earlier episodes in thread history. Commit(s):
ba5c3f0,9a21f87,b0ee858 - Render thread- and workflow-run-linked artifacts before relying on transcript reconstruction. Commit(s):
3855fe4 - Render the latest Project CI summary block for the focused surface or inspected thread. Commit(s):
3855fe4 - Restore focused panel, panel-to-surface bindings, and inspector selection after restart. Commit(s):
3855fe4 - Keep open workspaces as left-aligned, horizontally scrollable, draggable app-chrome tabs with durable user-defined tab order, compact icon controls, >0-only colored status count badges, a svvy-owned default workspace runtime when no user workspace tabs restore, exactly one
Open Workspacepane as each new default workspace tab's first surface, current-tabOpen Workspace,New Tabas a new default workspace tab with no durable layout slots, andOpen Workspace in New Tabas picker-backed user workspace tab creation; duplicate same-cwd tabs are separate chrome views over the same backend workspace runtime, session catalog, durable workspace state, live surface registry, queues, threads, workflow runs, app logs, and durable layout slots keyed by(workspaceId, layoutId), while each tab stores only its selected active layout id. - Route all workspace-scoped backend requests and renderer sync events through explicit
workspaceIdinstead of process-global cwd, active workspace, focused tab, or active runtime; keep app-global settings on separate app-global APIs, and require explicitworkspaceIdfor workspace-affecting settings plus generated agent-context projections and Workflows library operations.
Current product decisions for this section are specified in docs/specs/command-palette.spec.md.
- Define the product-owned command/action registry shape, including stable ids, labels, aliases, categories, availability, shortcuts, and typed execution targets. Commit(s):
cb319ac - Define the shared VS Code-style palette shell where
Cmd+Shift+Popens with>prefilled andCmd+Popens the same input without a prefix. Commit(s):cb319ac - Define
>as the live command-mode prefix for session, surface, Project CI, handler-thread, workflow-inspector, Dockview panel, settings, Agents profile, and future product actions. Commit(s):cb319ac - Define unprefixed
Cmd+Pbehavior as file quick-open search with placeholder or no-op behavior until file-tree, editor, syntax-highlighting, typecheck, and diagnostics surfaces exist. Commit(s):cb319ac - Adopt
cmdk-svas the Svelte command palette UI primitive while keeping product routing and command semantics owned bysvvy. Commit(s):cb319ac - Build a POC command palette over static product actions. Commit(s):
cb319ac - Expose session creation, open/switch, pin, unpin, archive, and unarchive actions through the palette. Commit(s):
cb319ac - Show unified
Open Sessionresults for orchestrator, handler-thread, and workflow task-agent projection categories with visible kind badges. Commit(s):12d89d8 - Route unmatched non-empty command-mode text after
>into a New orchestrator initial prompt through the normal orchestrator turn model. Commit(s):cb319ac - Add keyboard shortcut handling for
Cmd+Shift+P,Cmd+P, Enter, and command-paletteCmd+Enterplacement once Dockview layout exists. Commit(s):cb319ac - Add tests for shortcut dispatch, command matching, action routing, disabled or hidden availability, and unmatched prompt-session creation. Commit(s):
cb319ac - Keep a product-owned shortcut registry with stable action ids, labels, platform chords, compact and readable display strings, scopes, input-typing policy, availability, and command-palette or tooltip metadata.
- Use TanStack Hotkeys as the renderer shortcut dispatch primitive for palette, quick-open, sidebar shell actions, dialog-local actions, pane placement, and future focused-pane actions.
Current product decisions for this section are specified in docs/specs/pane-layout.spec.md.
- Add
dockview-coreas the workspace layout engine and mount one Dockview workbench instance from the Svelte renderer. - Build the Svelte renderer adapter for Dockview content, tabs, header actions, context menu items, tab-group chips, watermark, and unavailable-surface panels.
- Persist Dockview serialized layout state plus svvy panel metadata, including panel-to-surface bindings, panel-local state, chrome state, restore state, and minimum panel policy.
- Persist fixed user workspace layout slots
A,B, andCkeyed by(workspaceId, layoutId), with the selected slot autosaved on pane changes and empty slots rendered as muted but selectable controls pinned at the far right of workspace chrome; keep default workspace tab pane changes ephemeral and initialize every new default workspace tab with exactly oneOpen Workspacepane. - Keep panel-to-surface bindings separate from live surface runtime state.
- Support Dockview split, splitter resize, close, tab placement, panel and group drag placement, root-edge placement, edge groups, floating groups, and popout groups through svvy placement commands.
- Configure Dockview drag/drop overlays and
dndEdges, with svvy policy enforced throughonWillShowOverlay,onWillDrop,onDidDrop, andonUnhandledDragOverEvent. - Manage explicit open and close semantics for live surfaces independently from Dockview panel focus.
- Allow the same interactive surface to be opened in more than one Dockview panel at once.
- Keep one underlying live surface controller per
surfacePiSessionIdregardless of panel count. - Persist Dockview layout JSON, panel occupancy, panel-local state, tab-group state, edge-group state, floating/popout state, and panel metadata across app restart.
- Restore the focused Dockview panel on app restart.
- Show exact Dockview panel-location indicators in the sidebar for open surfaces, including tab, edge-group, floating, and popout locations.
- Show a clear highlight for the currently focused Dockview panel surface.
- Define the stored shape for compact thread and workflow-run surfaces inside the workspace shell.
- Render compact thread cards in the workspace shell timeline.
- Render compact workflow-run cards in the workspace shell timeline.
- Open a selected handler-thread surface in a chosen Dockview panel as a fully interactive surface.
- Keep duplicated panel views of the same surface synchronized while allowing independent scroll position.
- Define the stored shape for pi-backed agent profile settings used by orchestrator and handler surfaces. Commit(s):
8e19462 - Keep agent profiles separate from session-local extension loading so Project CI uses normal handler-thread execution plus the handler-available
project-ciextension. Commit(s):2a5dbbe - Seed initial app-wide values for the default orchestrator profile, the
threadHandlerprofile, and internal title-naming settings. Commit(s):8e19462,354db28 - Build a POC settings model for editing app-wide agent profile defaults. Commit(s):
8e19462 - Persist app-wide agent profile settings. Commit(s):
8e19462 - Build a POC New orchestrator creation flow with profile-backed orchestrator selection. Commit(s):
8e19462 - Persist the orchestrator profile snapshot and prompt selection used by created sessions. Commit(s):
8e19462 - Persist per-session orchestrator profile overrides. Commit(s):
8e19462 - Persist and deliver handler start history mode for delegated handler threads, defaulting
thread_start.threads[].historytoisolatedand supporting explicitforkedstarts only for conservative continuity cases where the user asks for current conversation context, unresolved design nuance cannot be captured in durable files or a compact objective, or multiple approaches must start from the exact same conversational point. - Persist handler creation-time extension-state overrides for delegated handler threads as partial overrides over the
threadHandlerprofile. - Keep the Agents sidebar pane between Logs and Extensions, with orchestrator profiles plus the
threadHandlerspecial profile owned there instead of in General settings. Commit(s):2b97c46648,b714aa26f9 - Drive the New orchestrator picker order, profile-specific command palette actions, and surface profile badges from Agents-pane orchestrator profile order. Commit(s):
2b97c46648,031510ba2b - Keep the default orchestrator profile locked, first, non-draggable, non-deletable, and editable for settings. Commit(s):
2b97c46648,b714aa26f9 - Keep the
threadHandlerspecial profile available for delegated handler-thread surfaces. Commit(s):2b97c46648,b714aa26f9 - Show the current focused-surface agent profile summary in pane chrome. Commit(s):
8e19462 - Use TanStack Form for complex agent profile, provider key, and app-preference settings forms, including direct-save semantics, validation, dirty state, reset/cancel, pending submit state, async save errors, and pi-normalized provider/model/reasoning constraints.
- Expose workflow-agent profiles in the Agents pane and keep extension-provided profile surfaces as future work without coupling shipped product workflow runtime to repo-root
workflows/. - Define handler guidance for reusable workflow-agent components without coupling shipped product workflow runtime to repo-root
workflows/.
- Define the stored title states for top-level sessions and handler threads. Commit(s):
b510857,fe53a3b - Add internal pi-backed title-naming settings for one-shot top-level session naming rather than a Smithers workflow agent. Commit(s):
354db28 - Seed the internal title-naming settings to
openai-codex/gpt-5.4-miniwith low reasoning effort and treat its settings prompt as the only naming instruction, without exposing title naming as a special profile. Commit(s):354db28 - Build a POC event-driven title-generation flow that starts a durable one-shot naming job concurrently with the first real top-level user turn without waiting for the orchestrator response. Commit(s):
354db28 - Use the first live composer draft or first submitted user message as the provisional visible session title until the namer-generated title lands. Commit(s):
5378dcb - Persist generated top-level session titles, title-generation lifecycle state, and the first-turn trigger so app restart cannot duplicate or lose title generation. Commit(s):
354db28 - Block manual session rename while a title-generation job is pending or running, then release the lock after success, failure, or cancellation. Commit(s):
354db28 - Freeze auto-titling after manual rename or after the first successful generated title. Commit(s):
354db28 - Generate handler-thread titles with the same internal title-naming settings used for top-level sessions, using the orchestrator-supplied
thread_startobjective as the naming input, while keeping workflow-run labels derived from the workflow's own name or entry metadata instead of adding a separate workflow-run title. Commit(s):4d74c78
- Define the stored shape for composer file and folder mention links.
- Build a POC
@autocomplete picker over indexed workspace files and folders. - Keep selected
@mentions as normal inline composer text. - Render picker, dropped, and pasted files as removable chip-only composer attachments without mutating textarea text.
- Store file, folder, and image attachments for composer and transcript rendering, pass attachment paths through tagged agent-facing metadata without visible transcript prose, send images to pi as image content blocks, and warn when model metadata does not list image input.
- Save composer draft text and chip-only attachments live as durable surface state that survives closing the surface and app restart. Commit(s):
5378dcb - Serialize inline mentions into the outgoing user message as normal workspace path links.
- Render sent mentions in the transcript as actionable workspace links that reveal files, open folders, and visibly mark missing paths.
- Keep mentions agent-neutral: no prompt injection, no eager file reads, no folder expansion, and no special context-target resolution.
Current product decisions for this section are specified in docs/specs/queued-messages.spec.md.
- Persist durable surface queue items as structured surface-local product state keyed by
workspaceSessionId,surfacePiSessionId, optionalthreadId, kind, and FIFO queue position. - When a composer submits to an active orchestrator or handler-thread surface, queue the message for that same surface instead of steering the current turn, interrupting tool work, starting a concurrent turn, or retargeting to the focused panel.
- Deliver queued messages as the next real pi user message after the owning surface prompt lock releases, creating a normal turn record and preserving prompt history as a single queue-time submission.
- Project blocked queue items near the owning surface composer, including count, order, remove, restore-to-composer, delivery failure, and duplicated-panel consistency, while idle-surface items first appear as pending or active work after atomic claim.
- Restore queued messages after app restart without transcript inference and resume delivery only after the owning surface runtime and prompt lock state are reconstructed.
- Claim queued messages atomically through one shared queue runner per
surfacePiSessionIdand prevent duplicated panes or tabs from starting duplicate backend queue drains. Commit(s):45bdbe8b46 - Land idle-surface queue-manager claim before renderer-visible queued state so idle sends and idle agent context refreshes first appear as pending or active surface work.
- Keep queued-message drag reorder previews local until drop, persist only final changed order, and skip no-op durable reorder writes. Commit(s):
98c73ecbb6 - Represent handler reports as durable episode records that schedule typed
thread_reportorchestrator reconciliation notifications; notification dismissal does not roll back the episode or return a handler tool error. Commit(s): 7739c2c824 - Represent generated agent context refresh as typed surface queue work, apply it before later prompt-bearing items, and expose queued, cancel, retry, and out-of-date recovery UI. Commit(s): 61ba639d6a
- Let committed user transcript messages enter composer edit mode with a visible selected-message indicator and a draft-replacement warning, then resend by moving the same pi surface back to the original message's parent state before continuing from the edited user message. Commit(s):
5378dcb
Current product decisions for this section are specified in docs/specs/extensions-and-tools.spec.md, docs/specs/extension/extension_managing.extension.spec.md, docs/specs/extension/svvyx-incur-runtime.spec.md, docs/specs/structured-session-state.spec.md, docs/specs/queued-messages.spec.md, and docs/specs/project-ci.spec.md.
- Define builtin extensions for Shell, Apply Patch, Execute TypeScript, Extension Loading, Extension Managing, cx, Smithers, Web, Git, GitHub, External Instructions, Artifacts, Request User Input, and Project CI with default usage states for each adopted agent family. Commit(s):
673837a - Load base orchestrator, handler, and workflow-task guidance through builtin
base-*instruction extensions, with orchestrators aware that workflow action normally delegates into handlers, handlers default-loaded with Smithers supervision tools, and workflow task agents keeping Smithers and handler controls unavailable by default. Commit(s):673837a - Define available extensions as the on-demand product-knowledge and capability layer for specialized handler work. Commit(s):
2a5dbbe - Render loaded and available extension bindings in surface metadata so users can see when extensions such as
project-ciare active. Commit(s):2a5dbbe - Store app-wide agent profiles, extension usage selections, generated agent-context aggregate references, extension context fingerprints, and app-global extension activation metadata. Commit(s):
118fd39c9f - Add an
Extensionssidebar surface belowAgents, with builtin, user, and external-instruction records that manage reusable prompt material and capabilities rather than exposing one raw system-prompt textarea. Commit(s):118fd39c9f - Represent common, orchestrator, handler-thread, and workflow task-agent base prompts as builtin instruction-only extensions (
base-common,base-orchestrator,base-handler, andbase-workflow-task) with normal Extensions-pane editing, reset, generated-context preview, fingerprinting, and profile usage-state controls. - Seed builtin extension records for base actor instructions, code navigation, handler-only Smithers supervision, workflow task boundaries, Web, Git, GitHub, Artifacts, Request User Input, and Project CI, with per-agent usage states, non-deletable builtin rows, app-global scope, and extension reset behavior. Commit(s):
118fd39c9f - Render generated agent-context previews for orchestrator, handler, and workflow task-agent actors, linking loaded and available extension rows back to their extension records and showing generated prompt,
svvyxguidance, native schemas, and TypeScript declaration previews. Commit(s):118fd39c9f - Implement the stable app-owned
svvyx <extension-id> ...dispatcher that resolves extension current builds, imports default-exported Incur CLIs, invokescli.servewith invocation-local explicit env, records command facts, and treats extension usage state as generated guidance/client visibility rather than shell impossibility. - Store user-named Extension Managing snapshots plus durable generated agent context bindings and agent context fingerprints so historical sessions, handler threads, and workflow task-agent attempts remain inspectable after app restart.
- Add automatic generated agent context update projection for existing orchestrator and handler-thread surfaces, including grouped semantic diff details on queued, applied, failed, cancelled, and out-of-date states.
- Route
thread_startextension overrides and handler-sideload_extensionthrough generated agent context bindings while preserving durable loaded and available extension ids on each affected surface.
Current product decisions for this section are specified in docs/specs/ambient-agent-resources-baseline.spec.md.
- Add provider-neutral Ambient Agent Resources settings that default behavior-changing coding-agent host resources off, preserve visible runtime standards, and let the user opt in by host, workspace, target agent/profile configuration, category, and source for extensions/packages, skills, prompt templates, commands, hooks, UI resources, provider/model adapters, credentials, and execution-policy resources.
- Implement the pi adapter so orchestrator, handler-thread, and workflow task-agent loaders preserve
AGENTS.md/CLAUDE.md, ignoreSYSTEM.md/APPEND_SYSTEM.md, and load extensions, skills, prompt templates, themes, package resources, slash commands, hooks, provider adapters, and related settings only when enabled for the exact target agent/profile configuration, category, and source. - Reflect enabled ambient callable resources in actor-specific generated API declarations, enabled prompt-affecting resources in generated agent context previews and agent context fingerprints, and enabled command resources in product command routing without hidden tools or invisible prompt mutation.
Current product decisions for this section are specified in docs/specs/snippets.spec.md.
- Add the Snippets pane with managed
svvysnippets, read-only discovered Markdown snippets, source badges, previews, open-external-editor actions, and managed snippet create/edit/rename/delete controls. - Add composer
@picker Snippet results with argument fields, mention chips, explicit expand-to-text behavior, and clean prompt-text expansion before sending to pi. - Persist sent Snippet provenance in product metadata while keeping the agent-facing message as ordinary prompt text.
- Keep pi, Claude, Codex, plugin, MCP, and host slash-command expansion disabled so Snippets never grant tools, alter generated agent context, mount commands, or change execution policy.
Current product decisions for this section are specified in docs/specs/workflow-inspector.spec.md.
- Define the tree-first workflow-inspector surface model, including run header state, selected node, expanded nodes, live-versus-historical mode, and Dockview panel binding. Commit(s):
ba56647 - Build a POC static inspector over one completed workflow run using a React-DevTools-like tree instead of a graph layout. Commit(s):
ba56647 - Render workflow root, sequence, parallel, loop, conditional, approval, task-agent, script, Project CI check, wait, retry, and terminal-result rows, with Project CI rows shown only for runs backed by declared Project CI entries. Commit(s):
ba56647 - Show launch arguments and node props in the selected-node inspector for workflow containers, executable tasks, approvals, and Project CI checks. Commit(s):
ba56647 - Render pending, running, waiting, retrying, completed, failed, cancelled, and skipped states clearly on rows, including collapsed-parent indicators for failed or waiting descendants. Commit(s):
ba56647 - Add search, keyboard navigation, row selection, expand/collapse, auto-expansion of active or failed paths, and preservation of user-collapsed paths during live updates. Commit(s):
ba56647 - Show selected-node details for status, objective or label, latest output, partial output, related artifacts, workflow agent, task attempt, command linkage, worktree, timing, and wait reason. Commit(s):
625cab4 - Add inspector tabs for output, diff, logs, transcript, command, events, and raw JSON when those data sources exist for the selected node. Commit(s):
ba56647 - Stream live Smithers snapshot and delta updates into the tree while a workflow is running, including latest activity previews for active leaf rows. Commit(s):
625cab4 - Add historical frame inspection with a scrubber and return-to-live behavior without making rewind or replay a default control. Commit(s):
ba56647 - Open a selected task-agent session, command record, artifact, Project CI check, or owning handler thread from the workflow inspector into another chosen Dockview panel. Commit(s):
625cab4 - Keep completed workflow inspectors available as durable historical Dockview panel surfaces after completion and app restart. Commit(s):
ba56647
Current product decisions for workspace-runtime restart and crash recovery are specified in docs/specs/workspace-runtime-recovery.spec.md.
- Build a POC restart or resume flow that restores multiple open surfaces and panel bindings from durable state. Commit(s):
7f84f06 - Complete one workspace-runtime recovery coordinator with durable scheduler records, transactional claims, Smithers-first projection bootstrap, per-surface queue, thread report notification, and report request recovery, typed queued initial handler starts, typed queued workflow-attention wake-ups, title job recovery, Project CI projection recovery, and backend-owned recovery events/logs; the scheduler and coordinator are in place, with remaining work focused on full app-log projection and broader restart integration coverage.
- Restore pending request-user-input clarification and waiting state after app restart. Commit(s):
7f84f06 - Restore active workflow-run state after app restart. Commit(s):
7f84f06 - Restore pending handler attention queues and per-surface prompt-lock state after app restart. Commit(s):
7f84f06 - Add integration tests that exercise the real pi-backed runtime seam for direct work. Commit(s):
b0ee858 - Expand from the current real embedded-runtime supervision coverage in
src/bun/smithers-runtime/manager.test.tsandsrc/bun/smithers-tools.test.tsto full pi-backed handler-thread delegation and workflow-run supervision. Commit(s):f8557d9,b0ee858,55963d9,097ae47 - Add integration tests that exercise restart and resume behavior across workspace state, live surface state, and panel bindings. Commit(s):
7f84f06
Current product decisions for this section are specified in docs/specs/context-budget-observability.spec.md.
- Define the context-budget metric as an explicit percentage of the active model's max context for orchestrator surfaces, handler-thread surfaces, and workflow task-agent attempts. Landed in
8d3e362. - Define neutral, orange, and red thresholds for that metric: neutral below 40%, orange from 40% through 59%, and red from 60%, with orange marking the conservative context-degradation warning band and red marking the zone where summarization, handoff, or a fresh surface should be considered. Landed in
8d3e362. - Build a POC full-width focused-surface context bar below the composer for orchestrator and handler-thread panes. Landed in
8d3e362. - Render the focused-surface context bar beneath the text input for orchestrator and handler-thread panes. Landed in
8d3e362. - Build a POC compact bottom-edge context indicator for open unfocused orchestrator and handler-thread panes. Landed in
8d3e362. - Render bottom-edge context indicators on open unfocused orchestrator and handler-thread panes. Landed in
8d3e362. - Render context bars on focused handler-thread panes and workflow task-agent attempt summaries. Landed in
8d3e362.
This UI should land first as a read-only workflow-library browser with an external-editor handoff. Full in-app source editing, syntax highlighting, inline diagnostics, and file-tree integration remain later editor-surface work.
- Render a save shortcut in relevant thread or workflow surfaces that sends a predefined save request prompt to the handler. Commit(s):
0b2d1ff - Persist the user's preferred external editor in settings and use it for open-in-editor actions from source-backed product surfaces. Commit(s):
ab00e2c - Define the read-only Workflows library surface with external-editor handoff instead of requiring in-app editor primitives. Commit(s):
ab00e2c - Define the workspace read model for saved workflow assets and artifact workflows. Commit(s):
ab00e2c - Render a Workflows library surface with separate definitions, prompts, components, entries, and artifact workflow groupings. Commit(s):
ab00e2c - Show saved asset title, summary, kind, path, source preview, validation status, and diagnostics in the Workflows library surface. Commit(s):
ab00e2c - Add open-in-editor actions for saved workflow source files and artifact workflow source files. Commit(s):
ab00e2c - Allow deleting a saved workflow definition, prompt, component, or entry from the library without deleting historical artifact workflows that previously used it. Commit(s):
ab00e2c - Keep the sidebar Workflows entry pointed at the Workflows library surface for saved workflow assets and artifact workflow groups. Commit(s):
118fd39c9f
Current product decisions for this section are specified in docs/specs/app-logs.spec.md.
- Build a workspace-scoped app log store with structured info, warning, and error entries, monotonic sequence numbers, unread counts, seen state, bounded retention, SQLite persistence, and secret redaction. Commit(s):
dab04ac. - Expose app log read, summary, mark-seen, and live-update contracts through the Bun bridge and renderer runtime without polling. Commit(s):
dab04ac. - Route production product observability through one app logger without depending on Electrobun browser-tools telemetry. Commit(s):
dab04ac. - Emit targeted app logs for app lifecycle, provider auth, RPC failures, sessions, title generation, surfaces, prompts, handler threads, Smithers workflow supervision, saved workflow validation, direct tools,
execute_typescript, artifacts, Project CI projection, external editor handoff, and renderer bridge issues. Commit(s):dab04ac. - Add a
Logssidebar button directly above the workflow library entry with compact action-worthy unread badges for warning and error app logs, without surfacing info-only unread logs as sidebar badges. Commit(s):dab04ac. - Render a dense app logs pane with level filters, source filtering, search, mark-all-read, live tail behavior, expandable details, stack traces, and links to related sessions, threads, workflow runs, commands, workflow task attempts, and artifacts where available. Commit(s):
dab04ac. - Render the app logs row list with TanStack Virtual, preserving variable-height expanded rows, stable row identity, scroll anchors, older-page loading, Live/Frozen tail behavior, and the
New logsaffordance across filtering, search, expansion, and live updates. Commit(s):ed7e6ea88e. - Add store, RPC, renderer, sidebar, pane, redaction, and representative integration tests for app logs. Commit(s):
dab04ac.