Claude Code Plus gives Claude a work plan, so that Claude does not lose track of unfinished work when you switch topics before the work is done, or when compaction summarizes older turns. Claude starts a plan when there is work to track and updates it as you talk. Each piece of work is a numbered row in the plan.
The plan is stored in a file outside the conversation, and Claude gets its open rows every turn. Agent Plus, a separate extension installed along with this one, shows the plan in a view beside the Claude Code panel.
Agent Plus's Conversations tab in the VS Code panel lists running Claude Code conversations in this window's workspace folders. Stopped conversations also appear if their plan still has open rows and was written in the last 7 days. A row that waits for your answer carries a question; the question appears under its conversation, and an answer entered in the Answer view next to the Conversations tab goes into that conversation's message input.
Requires Anthropic's Claude Code extension, Agent Plus and VS Code 1.96 or later. The work plan also needs Python 3.7 or later. On Windows without Python, the extension offers to download it from python.org (11 MB).
The work plan on the left of the Claude Code panel:
Claude starts a plan when you bring up work it should track, or when you ask for one.
If a conversation runs long without a plan, Claude gets a one-time suggestion to start one (see Settings for what counts as long).
Rows have numbers such as 1, 2 and 2.1. You can answer several rows in one message, in any order:
2.1: not now
3: go ahead
A row's number is its position in the plan file, so it does not change: finishing row 2 leaves a gap instead of renumbering the rows after it. A child row such as 2.1 is work that has to be done before its parent can be finished.
| State | Meaning |
|---|---|
discussing |
Raised, not agreed yet. |
todo |
Agreed, not started. |
doing |
Being worked on now. |
waiting |
Started, but held up by something outside the conversation, such as you, a build or CI run, a reviewer or another conversation. |
parked |
Left for later, with the reason; still open. |
done |
Finished. |
dropped |
Decided against, with the reason. |
Work you ask Claude to do now goes straight to doing. Work Claude suggests on its own starts as discussing and becomes todo only when you agree.
The extension registers a Claude Code plugin whose hooks hand the plan to Claude on each turn and around compactions. Its skill holds the rules Claude follows to keep the plan up to date.
- The plugin's skill description loads in every session at about 110 tokens.
- With a plan, every turn carries its open rows: the whole block, with the instructions, on the first turn and the first after each compaction; a short head when a row has changed; one line when none has. Rows that are
doingand questions to you carry their notes; other rows show their title only. A finished row can be included when a row under it is still open. The block is cut to fit 6,000 characters, and a last line says how many open rows were left out. See What it costs in tokens. - Before an automatic compaction, Claude is asked to bring the rows it is working on up to date. After compaction, it is asked to read the plan file before anything else.
Each conversation has one file, named by session ID, under ~/.claude/plugins/data/agent-work-plan-claude-code-extras/.
Claude writes the file through a small command shipped with the plugin. To correct a plan by hand, open its file from the view's title-bar button or a row's context menu.
See How the work plan works for the hooks, thresholds and measurements.
Search for Claude Code Plus in the Extensions view, or run
code --install-extension xnervwang.claude-code-plus. Anthropic's Claude Code extension and
Agent Plus install as dependencies.
If you have Work Plan for Claude Code (xnervwang.claude-code-extras), update it to its last version, which installs Claude Code Plus (xnervwang.claude-code-plus); you can then uninstall the old extension. While an earlier version of the old extension is installed, Claude Code Plus does nothing except show a warning when you run a command, because both extensions would patch the same Claude Code files. If you uninstall an earlier version of the old extension, VS Code runs its uninstall step on the next start: it copies plans to ~/.claude/agent-work-plan-plans-<time>/, then unregisters the plugin. Within half a minute, Claude Code Plus registers the plugin again and copies the plans back. On its first start, Claude Code Plus copies claudeCodeWorkPlan.* and claudeCodeExtras.* settings to claudeCodePlus.*, except those kept in a remote machine's own settings file, which you rename by hand. On each start, Claude Code Plus copies pins and session colors from the old extension's storage unless it already has its own. Install Claude Code Plus before uninstalling the old extension, since VS Code deletes that storage when it finishes removing the old extension at its next start.
The extension works by editing files inside the installed Claude Code extension. Reload the
VS Code window twice after installing. Run Claude Code Plus: Show Status for the patch
status. In a Remote SSH window, install on the remote.
Verified against Claude Code 2.1.322.
| Feature | What it shows | Where it appears |
|---|---|---|
| Timestamps | Times from the transcript on every message and reply block, with start→result on tool calls; Claude Code's own message times are hidden while these are on. |
Messages, reply blocks, tool calls |
| Your time zone for Claude | When Claude runs on a machine in another time zone, as with Remote SSH, it is told yours, so it gives you times in your zone. | Claude's context |
| Reply figures | 2m10s · ctx 33% · cost $0.42 · opus-5 high shows turn duration, context-window use, running spend, model and effort. |
Each reply |
| Sub-agent tags and filters | Tag each sub-agent's messages with its task, such as #look up tomorrow's weather, and filter to the main thread or one sub-agent. |
Tags on messages; filter in the footer |
| Conversation navigation | Find your messages by time and first words or find compaction points; filter, click to scroll, step with arrows or , and ., or jump to the top or bottom. |
Right edge of the panel |
| Focus view button | Toggle Claude Code's own Focus view; while it is on and Claude works, the working line shows the latest tool call and elapsed time, such as Bash running for 2m55s (since 11:11:18). |
Footer button; working line |
| Context meter | Keep the meter visible, outline it when 15% of the window remains, and rest the pointer on it for two seconds for a breakdown by category, memory files and custom agents, with what the work plan has added to the context. | Panel's context meter |
| Open sessions | The conversations open in this window, in an editor tab or in the sidebar while it is shown, most recently active first, each with the status dot the session list gives it; click one to switch to it. | Top of the session list |
| Open in a tab or the sidebar | New in tab and New in sidebar replace the New session button. A closed conversation's right-click menu offers Resume in tab and Resume in sidebar instead of Resume session; an open one keeps Switch to session. These do not change claudeCode.preferredLocation; the Claude button at the right of the editor tabs still opens where that setting says. |
Session list |
| Delete archived conversations | Delete session… in an archived conversation's right-click menu permanently deletes it from disk once you confirm: its transcripts, sub-agent conversations, saved tool outputs, file checkpoints (Claude Code's copies, not your files), debug log and work plan. A conversation open in a tab or the sidebar, or still running, is left alone. | Archived sessions in the session list |
| Section and session ID on hover | Hovering over a conversation shows its session ID and where it sits in the list below Open sessions: its group, Ungrouped or Archived sessions. Rows in Open sessions show the same. | Session list |
| Search by session ID | The search box also finds a conversation by part of its session ID, such as 69f9: four or more characters, using only 0-9, a-f and hyphens. Shorter searches, and ones with other characters, match titles and branches only. |
Session list |
| RECENTLY CLOSED | The conversations whose Claude Code editor tabs you closed in this workspace, most recently closed first; the list is kept across reloads. Click one to open it again. The section starts collapsed. Open conversations are not listed, and up to claudeCodePlus.recentClosedSessions are shown (10 by default). |
Session list, directly above Open sessions |
| Session dates | Adds the dates of the first and last messages after Claude Code's last-active time: 11d becomes 11d · 09/05→09/16. |
Session list |
| Pinned conversations | Click the pin at the start of a session-list row to keep that conversation from Claude Code's transcript cleanup (cleanupPeriodDays) and out of Archived sessions, as long as a window keeps connecting to its machine (see Known limits). |
Session list |
| Text colors | Right-click a conversation and choose Text color to give its title one of the colors of Claude Code's /color. The color shows wherever the conversation is listed. |
Session list |
| Background sessions left out | The list skips sessions started with claude --bg or claude -p, and empty transcripts. Turn off claudeCodePlus.hideBackgroundSessions to see them. |
Session list |
| Chimes | A short sound when a turn finishes, permission is requested or Claude asks a question, played on the machine showing the panel; mute it in the footer. | Footer; machine showing the panel |
| Background sessions | This conversation's claude --bg sessions, each state in its own colour and counted at the top, with what each waits for, its result, and the attach and logs commands. |
Agents button in the footer and the agent map it opens |
| Scheduled prompts | See timers this conversation set through Claude Code's scheduled tasks, with each schedule, last-fired time and prompt. | Agents button in the footer and the agent map it opens |
| Background commands | See a count such as 1 task while a background build, test run or sleep timer runs, with the list one click away. |
Footer |
| Tabs back after a restart | Claude Code tabs that were open when the window closed but that VS Code did not restore, as can happen after the window lost its remote connection, are opened again when it starts. Tabs you closed while connected stay closed. | Editor tabs |
| Status dots | A Claude Code tab's logo shows a green dot while Claude works, where Claude Code shows none, and a red one instead of Claude Code's orange when it finished while you were away. Work a conversation left running after its turn counts as working too: a claude --bg session or claude -p worker it started, or a shell it detached with setsid or nohup (read from /proc, so on Linux). The session list uses the same green and red. |
Editor tabs, session list |
| Steward | Tick other Claude Code conversations in the Steward panel, from any VS Code window on this machine, and the conversation in front becomes their steward. The panel lists the conversations open in your VS Code windows, one group per window. A steward's tab and session list row read "Steward of N conversations" (or "Steward of all conversations"), or the name you gave it, followed by a bell. Each message you send the steward comes with what each of them is doing. Tick All, including new ones and it manages every conversation listed and each one opened later, except other stewards; while that is ticked, no row can be unticked. Start a message with @ and a conversation's name to have the steward pass it on. Their questions come back to you word for word, and the steward is told when one of them needs you or finishes something it is waiting for. Conversation names in its replies are links that open the conversation in whatever window has it. Replies that are only [[quiet]] or a dash are hidden, and so is the folded row of the message they answer. |
Steward panel, at the bottom of the window; the steward conversation |
| Token mode | Agent Plus's agentPlus.tokenMode, chosen from its entry in the status bar, decides which of the work plan, the time-zone note and the brief add to Claude's context; each one's own setting applies only in Custom. See What it costs in tokens. |
Status bar (Agent Plus) |
| Session information | See the session ID, Claude's process ID, starting directory, transcript location and size, and the token mode; click a value to copy it. | Footer button |
| Feature | Interface features | Essential features | All features | Custom |
|---|---|---|---|---|
| Work plan | Off, plugin not loaded | On | On | claudeCodePlus.workPlan |
| Time zone | Off | On | On | claudeCodePlus.tellClaudeYourTimeZone |
| Conversation brief | Off | Off | On | claudeCodePlus.conversationBrief |
Claude Code Plus follows Agent Plus's agentPlus.tokenMode setting, which defaults to All features. Outside Custom, the three settings in the table's Custom column have no effect, and changing modes leaves their values as they are. Changing one of those settings outside Custom shows a notice with a Switch to Custom button.
In Interface features, Claude Code does not load the work plan plugin, just as when you run Claude Code Plus: Stop Loading the Work Plan Plugin. Choosing another mode loads it again unless you stopped loading it yourself. Changes to plugin loading and the work plan skill in Claude Code's list of skills apply only to conversations started after the mode change.
In a running conversation, a mode change applies from the next message to work plan injection and reminders, conversation brief requests, and the time zone. Claude Code Plus: Show Status shows the mode and which of the three features run. The information button in the footer of a Claude Code conversation names the mode.
The tables below show the text Claude Code Plus adds to what Claude Code sends the model. All of it comes from the work plan plugin Claude Code Plus registers with Claude Code; what Claude Code Plus draws in VS Code sends nothing to the model. The exception is the steward notice, which the extension posts to the steward's inbox. Text added to a conversation stays in context and goes with every later model call until compaction replaces the conversation with a summary. A token is about four characters of English.
| What | When | At most | Turned off by |
|---|---|---|---|
| The work plan | Each message, while the conversation's plan has a row that is not done or dropped. The whole block, with what the states mean and how to change a row, on the conversation's first message and the first after each compaction; a short head in its place otherwise; one line when no row has changed since the message before |
6,000 characters, the brief included; the one line is about 160 characters and the plan's path | claudeCodePlus.workPlan |
| The steward's list | Each message in a conversation that manages others in the Steward panel: one line per conversation, and what changed since its previous message | About 150 characters, and about 170 more per conversation it manages with a 40-character title, at most 30 of them | Unticking them in the Steward panel |
| What | When | At most | Turned off by |
|---|---|---|---|
| End-of-turn reminders | At the end of a turn that left rows doing, asked you something without putting the question on a row, or changed things without reading or updating the plan |
About 2,400 characters and the paths of the plan and of the row command, when every reminder and both of the brief's requests come at once | claudeCodePlus.workPlan |
| The brief's requests | At the end of a turn: the status once per turn, after a turn that did work; the summary when there is none, after a top-level row was added, removed or closed, and after a compaction | Included in the end-of-turn reminders | claudeCodePlus.conversationBrief |
No row doing |
At most once per turn, when the main thread has made three tool calls or changed two things besides the plan and no row is doing |
About 430 characters, and the plan's path and the row command's path twice each | claudeCodePlus.workPlan |
| Before a compaction | At 170k, 180k and 195k tokens of a 200K window, or 960k, 970k and 995k of a 1M window, once each between compactions, while a row is doing; said once more at the end of the turn if the plan was not written |
About 540 characters, and the plan's path and the row command's path once each | claudeCodePlus.workPlan; claudeCodePlus.workPlanQuietWhenReplyMatches |
| After a compaction | Once per compaction | About 950 characters, the plan's path, and the path of its closed rows when it has any | claudeCodePlus.workPlan; claudeCodePlus.workPlanQuietWhenReplyMatches |
| The offer of a plan | Once, in a conversation with no plan, after your third message and a turn of 25 tool calls | About 390 characters and the plan's path | claudeCodePlus.workPlan; claudeCodePlus.workPlanOfferMinTurns, claudeCodePlus.workPlanOfferMinToolCalls |
| A write to the plan, refused | When Claude writes or edits the plan file with a row description longer than the view shows, or a question that asks more than one thing | About 450 characters | claudeCodePlus.workPlan |
| A steward notice | When a conversation a steward manages starts waiting for you, has a new question for you, or finishes a turn while the steward's work plan names it, at most once a minute for each steward. If the steward is idle, the notice starts a turn | About 210 characters, and about 100 more per conversation it names with a 40-character title | Unticking them in the Steward panel |
| Your time zone | When the panel reads in another time zone than this machine's: on the conversation's first message and after each compaction, then when either side's date turns over, the offset changes, or the context has grown by 100k tokens | About 300 characters | claudeCodePlus.tellClaudeYourTimeZone |
- The work plan is cut at 6,000 characters by the plugin. The reminders have no cut: each is fixed text with at most six row titles of 60 characters.
- Rows closed more than a day ago are moved out of the plan file to
closed/<session ID>.jsonbeside it, so reading the plan after a compaction costs less too; Agent Plus's views read both files.
| What | When | At most | Turned off by |
|---|---|---|---|
| The work plan skill in Claude Code's list of skills | Every call | Its name and a 573-character description, about 110 tokens | Claude Code Plus: Stop Loading the Work Plan Plugin, or the Interface features token mode |
- Everything Claude Code Plus and Agent Plus draw in VS Code.
- An answer you give in Agent Plus's Answer view is typed into the conversation and sent as your message, as if you had typed it there.
- The context meter's breakdown shows, for the conversation in front, how many times the work plan was added since the last compaction, how many characters that came to, and about what share of the context in use.
Measured on 2026-11-11 on one machine.
| What | Typical | How it was measured |
|---|---|---|
| The work plan, whole block | Median 2,246 characters, 90th percentile 4,720 | The 41 Claude Code plans written on that machine in the 14 days before; each was copied and put through the work plan plugin's hook that adds the plan to a message, once |
| The work plan, short head | Median 1,102 characters, 90th percentile 3,576 | The same plans |
| The work plan, one line | 220 characters with a 60-character path | The same plans |
| Messages whose plan is unchanged since the message before | 48% | 8,587 messages with the plan in 63 Claude Code conversations over the same 14 days, counted as unchanged when only how long a row had been in its state differed; counted by build/plan-injection-stats.js in Agent Plus's repository |
Open Claude Code Plus: Settings for all 37 settings. Most take effect without a reload. Installing or upgrading the patch needs one.
Work plan settings
| Setting | Default | What it does |
|---|---|---|
claudeCodePlus.workPlan |
on | Turns the work plan on or off in Custom. When off, Claude is told nothing about plans and cannot write one. |
claudeCodePlus.workPlanOfferMinTurns |
3 | Messages you must have sent before a conversation without a plan is offered one. |
claudeCodePlus.workPlanOfferMinToolCalls |
25 | Tool calls one turn must make before that offer. |
claudeCodePlus.workPlanQuietWhenReplyMatches |
empty | A regular expression tested on the latest reply. If it matches, the prompts before and after compaction are not sent. Use it for conversations that relay another model's replies word for word. When empty, it never matches. |
claudeCodePlus.conversationBrief |
on | In Custom, each conversation is asked to keep a brief: a summary, and where it stands now. Clicking the conversation in Agent Plus's Conversations panel then shows the brief instead of going to the conversation. |
To turn off
| What | How |
|---|---|
| Timestamps, reply figures and sub-agent tags | Set claudeCodePlus.enabled to off. Every other addition has its own claudeCodePlus.show.* setting. The patch stays and its scripts keep running. |
| Everything added to Claude's context | Choose Interface features in Agent Plus's token mode entry in the status bar. |
| Your time zone in Claude's context | Choose a token mode without it, or in Custom set claudeCodePlus.tellClaudeYourTimeZone to off. |
| Work plan plugin, skill description included | Run Claude Code Plus: Stop Loading the Work Plan Plugin. |
| Reopening Claude Code tabs VS Code did not restore | Set claudeCodePlus.reopenDroppedTabs to off. |
| Pins on the session list | Set claudeCodePlus.sessionPins to off. Pinned conversations are then cleaned up and archived as usual. |
| Patch and restore Claude Code's files | Run Claude Code Plus: Remove from Claude Code (restore original files), or uninstall. |
Message appearance: claudeCodePlus.userMessageColor and claudeCodePlus.userMessageEdge.
| Command | What it does |
|---|---|
Claude Code Plus: Install the Work Plan Plugin for Claude Code |
Register the plugin again. |
Claude Code Plus: Stop Loading the Work Plan Plugin |
Remove the plugin from Claude Code's settings. |
Claude Code Plus: Settings |
Open this extension's settings. |
Claude Code Plus: Toggle On/Off |
Toggle the timestamps, reply figures and sub-agent tags. |
Claude Code Plus: Turn On |
Show them. |
Claude Code Plus: Turn Off |
Hide them. |
Claude Code Plus: Remove from Claude Code (restore original files) |
Restore Claude Code's files. |
Claude Code Plus: Show Status |
Show patch status and what was patched. |
Claude Code Plus: Show How Long Opening a Panel Took |
Show recorded panel-opening times. |
- A plan file is deleted once its conversation's transcript is gone and the file has not been written for a week. Claude Code removes old transcripts, apart from those of conversations pinned on the session list.
- Uninstalling tries to copy plans to
~/.claude/agent-work-plan-plans-<timestamp>/before unregistering the plugin, which deletes its data directory. Uninstalling continues if the copy fails, so keep your own copy of a plan that matters. - Disabling the extension leaves the patch in place. Run
Claude Code Plus: Remove from Claude Code (restore original files)first. - After you reload a window that lost its remote connection, the remote machine keeps the Claude Code processes from before the reload running for five minutes, then stops them. A Claude Code tab that VS Code did not restore, and whose conversation is still running there, opens only then, about five minutes after the reload. If Claude was writing a reply in it, the reply stops at that point; what it had written so far stays in the conversation.
- If you close a Claude Code tab while the window cannot reach its remote machine, the tab opens again the next time the window starts, because the close could not be recorded. Close it again once connected.
- A yellow circle with an exclamation mark at the panel's top right means a Claude Code build changed something the patch relies on, and some panel features are not working.
- To protect a pinned conversation, the extension moves its files' modification time forward once they are old enough for the cleanup. The row still shows when the conversation was last active, but the list sorts it by the moved time. Uninstalling the extension removes the pins; the conversations stay, and the cleanup treats them as usual again.
- A pin protects a conversation only while some VS Code window with this extension connects to the machine that holds its transcript, and stays open for at least a minute, at least once every
claudeCodePlus.sessionPinsMarginDaysdays (14 by default, and never more than half ofcleanupPeriodDays). The folder the window has open does not matter: each window refreshes every pinned conversation on that machine a minute after it starts and every 30 minutes while it stays open. After a longer gap, Claude Code's cleanup can delete pinned conversations the next time Claude Code runs on that machine, in a terminal or as a background session. - Pins are kept on the machine that holds the transcripts. Pins on your computer do not protect a remote machine's conversations, or the other way round; a remote machine's pins are refreshed only by windows connected to it.
- Something a steward passes to another conversation arrives there as a message from another session, which Claude Code never counts as your consent: an approval has to be given in that conversation itself.
- Steward notices go to the steward's inbox socket, which Claude Code documents for scripts but not the line it reads; they are not sent on native Windows, where that socket needs a token only the session holds.
- Editor-tab panels that stay blank in every window after running version 1.0.8 or earlier of the old extension: quit VS Code and delete the
CacheStoragefolders underWebStoragein VS Code's data folder (~/Library/Application Support/Codeon macOS,%APPDATA%\Codeon Windows,~/.config/Codeon Linux).
See CONTRIBUTING.md for the layout, checks, and verified-build records.
BSD 3-Clause.
