This file documents the current Todo Cockpit feature set as implemented in the extension today.
It is not a roadmap and it is not meant to preserve older behavior. Where README wording, help copy, old notes, or earlier mental models differ from the live implementation, this file treats the implementation and localized UI strings as the source of truth.
Source basis used for this document:
- README.md top-level Copilot Cockpit workflow and MCP guidance
- How To / Help copy in src/i18n.ts and src/cockpitWebviewStrings.ts
- Board defaults, normalization, and semantic validation in src/cockpitBoard.ts
- Todo lifecycle, recurring-task card syncing, and filter persistence in src/cockpitBoardManager.ts
- Todo board/editor UI in src/cockpitWebview.ts and src/cockpitWebviewStrings.ts
- Todo host actions in src/todoCockpitActionHandler.ts
- Routing-card logic in src/cockpitRouting.ts
- MCP tool registration and dispatch in src/server.ts
Todo Cockpit is the repo-local planning, review, and approval surface inside Copilot Cockpit.
It is intentionally separate from scheduled execution:
- Todo cards are planning and coordination artifacts.
- Scheduled tasks are execution artifacts.
- Jobs are ordered multi-step execution workflows.
- Research profiles are bounded optimization loops.
The intended flow is Todo first, scheduled execution second. Users and agents can capture work on a card, comment on it, label it, move it through review, and only then hand it off into downstream execution.
Todo Cockpit is local-first and repo-scoped.
- Workspace scheduler state lives in
.vscode/scheduler.jsonand.vscode/scheduler.private.json. - Todo Cockpit state belongs to the private workspace state, not the shared task file.
- In
copilotCockpit.storageMode=sqlite, the runtime authority can move into.vscode/copilot-cockpit.db, while the extension still keeps compatibility JSON mirrors and a workspace migration journal. - The extension bootstraps repo-local ignore rules so private cockpit state, prompt backups, uploads, and support files do not leak accidentally.
- The design assumption remains local, repo-scoped, and primarily single-user.
This boundary matters because a todo can outlive a linked task, a task can exist without replacing the todo that produced it, and recurring scheduled work can keep its own persistent board history card.
When the board is first created, it is seeded with named sections.
Default visible working sections:
- Unsorted
- Bugs
- Features
- Ops/DevOps
- Marketing/Growth
- Automation
- Future
System sections:
- Recurring Tasks
- Archive: Completed
- Archive: Rejected
Important structure rules:
- Unsorted is guaranteed to exist.
- The archive sections are guaranteed to exist.
- The Recurring Tasks section is a dedicated system section for recurring scheduled-task history cards.
- Archive sections are protected from normal rename, delete, and reorder flows.
- Recurring-task cards are hidden by default unless the user enables
showRecurringTasks. - If a non-archive section is deleted, its cards are reassigned to a fallback section.
- Section order is persisted.
- Section add and rename flows reject names that collide with protected routing flag semantics such as deprecated or protected token names.
Each todo card can carry:
- Stable todo ID
- Title
- Optional description
- Section ID
- Manual order within a section
- Priority
- Optional due date/time
- Workflow status
- Labels
- Flags
- Comment history
- Optional linked task ID
- Optional task snapshot for scheduled-task history cards
- Optional session ID
- Archived state
- Optional archive outcome
- Created timestamp
- Updated timestamp
- Approved timestamp
- Completed timestamp
- Rejected timestamp
- Archived timestamp
Comment records carry:
- Comment ID
- Author
- Body
- Optional comment labels
- Source type
- Sequence number
- Created timestamp
Supported comment sources:
- human-form
- bot-mcp
- bot-manual
- system-event
Todo Cockpit distinguishes labels from flags deliberately.
Labels:
- Multi-value
- Categorization and workflow metadata
- Rendered as pill-shaped chips
- Managed through a shared label catalog with optional colors
Flags:
- Routing and review-state markers
- Usually a small explicit set per card
- Rendered as squared chips
- Managed through a shared flag catalog with optional colors
Important behavioral rules:
- Most handoff flows should use one explicit review-state flag such as
needs-user-revieworneeds-bot-review. - Live scheduled cards use the built-in
ON-SCHEDULE-LISTflag. labels,flags, andcomments[].labelsare distinct surfaces.- Routing-card queries match canonical workflow flags only; actionable user comments remain context, not routing state.
- Deleting a shared label or flag definition also strips it from existing cards.
- Built-in protected flags cannot be deleted.
Supported todo statuses:
- active
- completed
- rejected
Supported active workflow flags:
- new
- needs-bot-review
- needs-user-review
- ready
- ON-SCHEDULE-LIST
- FINAL-USER-CHECK
Supported archive outcomes:
- completed-successfully
- rejected
The current workflow is:
- A new card normally starts as
active. - The live handoff state is represented by one canonical workflow flag on active cards.
Approvemoves the card to thereadyworkflow flag and stampsapprovedAt.- Creating or linking a live scheduled task moves the card to
ON-SCHEDULE-LIST. Final AcceptorComplete & Archivearchives the card ascompleted-successfully.- A final review handoff can use
FINAL-USER-CHECKbefore archival. Declineor the archive path ofDeletearchives the card asrejected.Restorecan reopen an archived card.- Permanent purge is a separate destructive removal path.
Workflow side effects include:
- System-event comments are appended for important transitions.
- Finalized cards move to
Archive: Completed. - Rejected cards move to
Archive: Rejected. - Archived cards become review-oriented instead of normal active-edit items.
Examples of system-generated workflow comments:
- Approved and marked ready for follow-up.
- Completed and moved to the completed archive.
- Rejected and moved to the rejected archive.
Supported priorities:
- none
- low
- medium
- high
- urgent
Priority is both metadata and a visual signal.
For scheduled-task history cards, priority can be derived automatically from the next execution time:
- urgent when due very soon
- high when due within a few hours
- medium when due within roughly a day
- low otherwise
Todo Cockpit supports both management and review directly in the board surface.
The board can render in:
- Board view
- List view
Board view emphasizes sections as columns. List view emphasizes compact scanning of grouped cards. The selected view mode is persisted in board filters.
The board has a persisted filter state with a collapsible filter bar.
Supported filter fields:
- Search text
- Section
- Label
- Flag
- Priority
- Status
- Archive outcome
- Sort by
- Sort direction
- View mode
- Show archived
- Show recurring tasks
- Hide card details
Search intent is broad discovery across:
- Title
- Description
- Labels
- Comments
Supported sort keys:
- manual
- dueAt
- priority
- updatedAt
- createdAt
Supported sort directions:
- asc
- desc
Archived cards are hidden by default.
Users can enable archived visibility to:
- Review completed work
- Review rejected work
- Inspect history and outcomes
Recurring scheduled-task history cards are also hidden by default and are revealed with the showRecurringTasks toggle.
The hideCardDetails toggle suppresses longer previews such as descriptions and latest comments for denser scanning.
The board supports:
- Add section
- Rename section
- Delete section
- Move section left
- Move section right
- Drag-reorder section
- Collapse section
- Expand section
Archive sections stay protected from normal destructive or reorder flows.
The board supports pointer-driven drag behavior for cards and sections.
Supported drag behaviors:
- Reorder cards within a section
- Move cards across sections
- Reorder sections
Notable implementation characteristics:
- Cards use custom drag-start handling instead of raw browser drag behavior.
- Interactive controls are excluded from drag start.
- Pointer drag state suppresses accidental text selection while dragging.
The board includes:
- Per-section collapse state
- A column-width slider
- Board summary and count information
- Per-section card counts
This makes the board both a work surface and a lightweight dashboard.
Cards surface compact metadata in both board and list renderers.
Displayed cues include:
- Title
- Priority label
- Status label
- Due date when present
- Archive outcome when archived
- Flag chips
- A subset of label chips for compact display
- Description preview
- Latest comment preview
- Linked-task indication
- Missing-linked-task warning when the referenced task no longer exists in the task list
The board also exposes compact actions such as edit, delete, decline, restore, and completion-oriented controls depending on state.
Todo Cockpit has a dedicated editor flow for both create and edit operations.
The editor supports:
- Title
- Description
- Due date
- Priority
- Section
- Linked task
- Labels
- Flags
The editor includes a comment history panel and inline add-comment flow.
Comment capabilities:
- View existing comments in sequence order
- Add a new comment
- Preserve provenance through author and source fields
- Attach labels to comments when needed
Comments are the coordination log for feedback, approvals, bot notes, and workflow transitions.
The editor includes an Upload Files flow.
Current behavior:
- Opens a file picker from the host side
- Copies selected files into
.vscode/cockpit-input-uploads - Ensures the private config ignore rules cover that folder
- Inserts workspace-local relative paths back into the todo description
This keeps the todo self-contained without storing outside absolute file paths.
Each card can reference a linked scheduled task.
Linked-task capabilities:
- Select a task from the current task list
- Clear the link
- Show when no task is linked yet
- Warn when the linked task is missing from the current task list
Label capabilities in the editor include:
- Add labels by typing
- Add labels with Enter or the add button
- Show label chips on the card
- Suggest reusable labels
- Save shared label definitions with color
- Edit shared label definitions
- Delete shared label definitions
Todo label suggestions merge board-owned label knowledge with reusable task-derived labels surfaced in the UI.
Flag capabilities in the editor include:
- Set the current card flags
- Clear flags
- Add a new flag definition
- Save shared flag definitions with color
- Edit shared flag definitions
- Delete shared flag definitions when not protected
- Pick from the saved flag palette
Available actions vary by card state, but the editor and board flow together expose:
- Create Todo
- Save Todo
- Add Comment
- Create Task Draft
- Approve
- Final Accept
- Complete & Archive
- Decline
- Restore
- Delete Todo
- Back to Cockpit
Important behavior:
- Archived cards are not normal active-edit records.
Restoreis the supported reopen path.Deletein the normal board flow presents archive-reject versus permanent-delete choices rather than silently hard-deleting.
Creating a todo can include more than a title.
A new card may include:
- Title
- Description
- Section
- Priority
- Labels
- Flags
- Initial comment
- Initial comment author
- Initial comment source
- Initial workflow status
- Linked task ID
- Session ID
Creation behavior:
- Blank titles normalize to
Untitled todoin the lower-level board API. - Creating a card directly in
readystampsapprovedAtimmediately. - If the new card would be hidden by the current filters, the action handler can reveal it by clearing conflicting filters.
- After create, the board UI refreshes and returns to the board tab.
Approve moves a non-archived card from active to ready.
Side effects:
statusbecomesreadyapprovedAtis set- A system comment is appended
Finalize archives the card as completed-successfully.
Side effects:
archivedbecomes truearchiveOutcomebecomescompleted-successfullystatusbecomescompletedcompletedAtandarchivedAtare stamped- The card moves to
Archive: Completed - A system comment is appended
Decline archives the card as rejected.
Side effects:
archivedbecomes truearchiveOutcomebecomesrejectedstatusbecomesrejectedrejectedAtandarchivedAtare stamped- The card moves to
Archive: Rejected - A system comment is appended
Delete is not the same as permanent removal.
- The normal delete flow can reject and archive the card.
- Permanent purge removes the card from the board entirely.
- Purge is the only fully destructive removal path.
- Tombstones are retained so stale writes cannot resurrect a purged card.
Restore reopens an archived card instead of creating a replacement card.
This matters because the board preserves the same card identity and history instead of duplicating work during closeout or review loops.
Todo Cockpit is aware of scheduled tasks, but it does not collapse them into the same artifact model.
Recurring scheduled tasks can keep one persistent history card in the dedicated Recurring Tasks section.
Current behavior:
cockpit_seed_todos_from_tasksand the board sync logic ensure recurring tasks have linked history cards.- The created recurring card uses the recurring system section rather than
Unsorted. - The card stores a task snapshot and records future schedule, prompt, model, and label changes through system comments.
- The card is labeled with
scheduled-taskandrecurring-task. - The card keeps the built-in system flag
ON-SCHEDULE-LIST. - The card can include a system comment for an existing task error.
One-time tasks do not stay in the recurring history section.
When a linked recurring task becomes one-time:
- The card is moved out of
Recurring Tasks - The card is kept as the linked planning record
- The
recurring-tasklabel is dropped - The scheduled-task flag pair is preserved as appropriate for the live scheduled item
- A system comment explains the transition
The board can surface scheduled-task context without treating scheduled tasks as replacements for todos.
The practical split is:
- Todo stays the planning and approval record.
- The scheduled task stays the execution record.
- Recurring tasks get persistent history cards.
- One-time work usually stays linked to its originating todo.
Todo Cockpit can generate a downstream scheduled task draft directly from a card.
Current Create Task Draft behavior:
- Uses the todo title as the task name
- Uses the todo description as the task description
- Builds an inline prompt from the todo content
- Includes recent coordination comments in the generated prompt
- Uses the default cron expression
0 9 * * 1-5 - Creates the task disabled by default
- Creates the task as one-time by default
- Preserves existing todo labels and adds
from-todo-cockpit - Writes the created task ID back to the todo
- Switches the UI to the task list and focuses the new task
Generated prompt structure currently includes:
- A task goal line
- An optional context block from the description
- A recent coordination block from recent comments
- A final instruction to produce the approved execution artifact and keep unresolved questions explicit
The Create Task tab is downstream from Todo Cockpit, not a replacement for it.
It is used when the user already knows the execution unit they want to schedule.
Relevant Create Task capabilities include:
- Task name and labels
- Prompt source selection
- Inline prompt editing or template selection
- Skill insertion
- Cron preset and raw cron editing
- Friendly schedule builder
- Agent and model selection
- Scope, jitter, Run First, One-Time, and chat session options
- Create, Save, New, and Test Prompt actions
The built-in help still positions the intended order as Todo first, Create Task second.
The help surface and README already capture the broad mental model correctly:
- Todo Cockpit is the communication and approval hub.
- Tasks are downstream execution units.
- Jobs and research are separate orchestration surfaces.
- MCP is optional but powerful.
- Storage stays repo-local and private by default.
Implementation-aligned clarifications that matter here:
- The current workflow is
Approve -> ready -> Final Accept / Complete & Archive -> completed-successfully archive. Declineand the reject branch ofDeletearchive a card as rejected.Restoreis a first-class reopen path.- Recurring scheduled work is represented through a dedicated hidden recurring section, not only by seeding cards into
Unsorted.
Copilot Cockpit bundles an embedded MCP server, but Todo Cockpit MCP tools are opt-in per workspace.
Important facts:
- The runtime server is bundled with the extension.
- Workspace MCP setup does not point directly at the installed extension every time.
- The workspace entry points to a stable repo-local launcher in
.vscode/copilot-cockpit-support/mcp/launcher.js. - That launcher resolves the currently installed Copilot Cockpit runtime.
- This stable launcher path allows unreloaded VS Code windows to keep starting MCP services across extension updates.
Recommended setup path:
- Open the workspace in VS Code.
- Open Copilot Cockpit.
- Go to
How To Use. - Click
Set Up MCP.
Alternative path:
- Run
Copilot Cockpit: Set Up Workspace MCP.
What setup does:
- Ensures
.vscodeexists - Ensures the repo-local MCP support directory exists
- Writes or refreshes
.vscode/copilot-cockpit-support/mcp/launcher.js - Writes or refreshes the corresponding launcher state file
- Creates
.vscode/mcp.jsonif missing - Merges or repairs the
schedulerserver entry if the file already exists - Preserves unrelated MCP server entries already present in the file
- Backs up invalid JSON before repairing it
Expected generated scheduler entry shape:
{
"servers": {
"scheduler": {
"type": "stdio",
"command": "node",
"args": [
"<absolute workspace path>/.vscode/copilot-cockpit-support/mcp/launcher.js"
]
}
}
}Practical checks:
.vscode/mcp.jsonexistsservers.schedulerexiststypeisstdiocommandisnodeargs[0]points at the repo-local launcher path- The launcher and launcher state files actually exist
Secret-handling guidance:
- Do not put live third-party secrets directly into
.vscode/mcp.json - Use top-level
inputswithpromptStringandpassword: true - Reference them via
${input:NAME}placeholders
The current Todo Cockpit MCP tools exposed by the server are:
cockpit_get_boardcockpit_list_todoscockpit_get_todocockpit_list_routing_cardscockpit_create_todocockpit_add_todo_commentcockpit_approve_todocockpit_finalize_todocockpit_reject_todocockpit_update_todocockpit_closeout_todocockpit_delete_todocockpit_move_todocockpit_set_filterscockpit_seed_todos_from_taskscockpit_save_label_definitioncockpit_delete_label_definitioncockpit_save_flag_definitioncockpit_delete_flag_definition
What these cover:
- Reading the full board
- Reading cards by list or detail
- Reading routing-relevant cards without scanning the full board payload
- Creating cards
- Updating cards
- Appending comments
- Moving cards
- Approving, finalizing, rejecting, and closeout flows
- Updating persisted filters
- Seeding recurring-task history cards from tasks
- Managing shared label and flag palettes
Important limitation of the current MCP surface:
- Section add, rename, delete, and reorder flows exist in the UI and host action layer, but they are not part of the currently registered Todo Cockpit MCP tools.
Several semantics are easy to misuse if you treat the tool names too casually.
cockpit_delete_todoarchives a card via the reject path in the MCP server. It is not the permanent purge path.cockpit_closeout_todois the deterministic handoff helper for execution results. It can update status and flags, add one summary comment, respect missing sections, and clear stale linked task IDs when the scheduler task no longer exists.cockpit_list_routing_cardsis the preferred routing preflight surface because it matches labels, flags, and actionable user-comment labels case-insensitively.- Requested closeout sections are validated. If the preferred section does not exist, the card stays where it is and the response reports that fact.
- Closeout does not recreate missing cards.
An implementation-aligned workflow looks like this:
- Capture work in Todo Cockpit.
- Add context in the description, comments, and uploaded workspace-local inputs if needed.
- Categorize with labels and set an explicit review-state flag when handoff matters.
- Move the card into the appropriate section.
- Approve it when the plan is ready.
- Either create a downstream task draft, keep it active for more review, or finalize it into the completed archive.
- Use deterministic MCP closeout when execution has happened elsewhere and the board needs a verified summary update.
- Do not treat todo cards and scheduled tasks as interchangeable records.
- Do not assume all task-linked cards live under
Unsorted; recurring scheduled work has a dedicated hidden section. - Do not use labels as a substitute for review-state or routing flags.
- Do not collapse
labels,flags, andcomments[].labelsinto one bucket. - Do not assume
cockpit_delete_todois a hard delete. - Do not recreate a missing card during closeout; use the existing originating card or stop.
- Do not patch
.vscode/scheduler.private.jsondirectly unless you are on an explicit last-resort recovery path.
Todo Cockpit currently provides:
- A repo-local board for planning, review, and approval
- A dedicated todo editor with comments, uploads, labels, flags, due dates, sections, and task links
- Board and list views with filters, sorting, visibility toggles, counts, drag-drop, and section controls
- A staged approval and archive workflow with restore and purge distinctions
- Persistent recurring-task history cards for recurring scheduled work
- Downstream task-draft generation from approved planning context
- An opt-in MCP surface for agent-driven inspection, routing, closeout, and mutation
That makes Todo Cockpit the human-and-agent coordination layer, while scheduled execution remains a separate downstream step by design.