An interactive attention map inside BB. Open Work Map in the sidebar, or /plugins/work-map/map.
A slim toolbar keeps filters, search, creation and view controls together. The Overview and Heat switch sits with the view controls; on the narrowest screens it keeps its icons and drops its labels. The unfiltered view is called All work, leaving Overview to name the layout. Filter chips appear above 1360px of map width; narrower views use a picker with waiting and ready counts beside it. Small screens wrap into compact rows. Refresh shows the last update time on hover or keyboard focus, including an accessible description. The caption reports only the current item count or layout state, replacing the repeated heading and gesture hint. On the smallest screens, zoom buttons and a reset arrow remain available while the slider and percentage readout are hidden.
This package is distributed from Git. The npm private flag prevents accidental npm publication; BB can build the source during a Git installation.
Install from the public release:
bb plugin install 'git:https://github.com/joozio/bb-plugin-work-map.git@^0.1.0'After installation, bb plugin update work-map checks for compatible releases.
Focus and activity are independent. Pinned sessions stay prominent even when idle. A green top bar means an agent is working; a coral ring and larger type mean focus. Successful unread responses use a filled blue Ready to read badge with a message icon; unread session and task cards also have a blue edge and light tint. They are notifications, not an inferred request for review. Waiting for you includes explicit input requests, failed runs, tasks in Review and due follow-ups. Ready to read is a separate filter and includes a review task when it also has an unread attached response.
Input requests have the strongest amber badge, failed runs have an error accent, and Needs review uses a restrained amber outline. Project containers keep neutral fills and gain a restrained blue border when they contain unread results, with specific counts such as 2 need review · 1 ready to read; the child task carries the emphasis. Reading a successful result clears only that unread cue. It does not complete a task or remove its Review state. Focus and a running-agent bar can coexist with either kind of attention.
Collapsed Overview fits the available width and height. Larger windows show more areas and sessions; smaller windows keep fewer whole cards instead of scrolling the map. The center gets the most room, with nearby work and smaller cards along the sides. Projects show only the task cards that fit, with an overflow count when some are hidden or Explore tasks when none fit. The caption reports the visible count; Show all opens the full list. Expanded details, drafts, chat and filtered lists can still scroll. Short, narrow windows use a filter picker so every view remains reachable. If other controls leave too little room for a card, the caption directs you to Show all.
Central and focused cards use their extra room for information. Sessions show longer latest-response excerpts and related task keys when available. Tasks show their next step, distinct status summary, priority and session count. Central projects show a longer lead-task summary and their highest-ranked children. Small cards shed details before text becomes cramped; opening them still reveals the full context. Quiet cards omit the repeated Inactive badge; their activity age and focus ring remain, and external waiting reasons stay visible. Visible session cards fetch excerpts in batches of up to 16, including those added by zooming out. A missing excerpt leaves the title and state rather than a placeholder sentence. Collapsed excerpts never acknowledge results.
Two layouts share the map. Overview is the default and arranges work around a central priority. Heat fills the map with a squarified treemap: one area per project, one for standalone sessions, and tiles for their work. Every tile has one pull score: what it needs, times its priority, times how near its date is, more when it is in focus. What it needs is its own multiplier: an explicit input request or a failed run pulls three times a review, a result to read and a running agent sit under a review, quiet work keeps a little. Priority multiplies rather than adds: urgent is nearly two and a half times medium, high is over one and a half, low and unset are well under. Date nearness peaks at today and holds for the first week past due, then eases to 85% at two weeks. A date more than two weeks past has slipped: it adds no urgency at all, whatever the count of days, so the task ranks by its priority and what it needs alone, and its label reads slipped 21d instead of a count of days late. Dates ahead climb from a month out through a week, three days and tomorrow. Undated tasks use creation age as a modest factor, climbing slowly at 30, 60 and 90 days and never reaching the pull of a date this week; routine edits do not reset that age. An input request or a failed run is current whatever its date says. Size follows pull on a curve, so inside an area the hottest tile is several times the coldest while every tile still meets the readable minimum, and a Now tile is the biggest of its area.
Colour is one of three tiers with absolute caps, not a gradient, so the map can be read without a legend: red is now, amber is next, grey is later. Now holds at most five tiles on the whole map (a third of the tiles when there are fewer than fifteen, never none), filled in order: the work you put in focus, then a request for your hands or a failed run, then dates that are current (due today, tomorrow, or late by a week at most) by priority, then the highest pull. Next holds at most eight more: due within the week or late within the fortnight, then high or urgent priority, then what follows by pull. Everything else is Later: a neutral card with no fill and dimmer text, sized by pull, and most of the map. Closed and snoozed work is always Later. Equal pulls break by the nearer date, then by key. The first three Now tiles carry a 1, 2 or 3 ahead of their key. Now is red with white bold text; Next is a soft orange-amber, clearly lighter than Now, with dark ink, mixed so it never reads olive on a dark theme; the light theme runs the same two hues on white. Every coloured tile says why in words in its label row, so the colour has no hidden cause: due tomorrow · high, 2d late · medium, slipped 21d · high, in focus, needs your input, 40d old · high. Medium, high and urgent are named wherever they drove the colour; low and unset stay silent. When the label row is too narrow for the whole reason it falls back to the same words shortened (tmrw · high, slip 21d · high), then to the date alone, and the key is never cut; the tooltip and the accessible description keep the full reason, which also names the tier (Now, 1 of 3: due tomorrow · high). A Later tile shows the plain date label, and a slipped one shows it quiet and italic. An area's size follows the tiers: each tile lends the area its size through its tier, in full for Now and barely for Later, so an area of slipped work shrinks and one holding Now tiles grows, within the readable floors; the area header wears a swatch of its hottest tier, and Now and Next tint the area's edge. A date has no edge or hatch of its own. A recurring task with a current due date uses that date and ignores its original creation date. Planned dates follow the same curve but say Planned or past plan. Invalid or missing timing never invents an age. Labels explain the driver: Due in 3d, Due today, 2d late, slipped 21d or 90d old. Dates use local calendar days, including across daylight-saving changes.
What the work needs no longer colours the tile. It is the small marker ahead of the key (gold for a review or follow-up, blue for a result to read, green for a running agent) and the words on the tile. A request for your input and a failed run keep their shape on any tier: a ring in their own hue and a glyph ahead of the key, ! and ✕. Explicit input requests, failed runs and focus remain strong signals in the score itself. Standalone sessions retain their attention and current-wait ranking. Your layout choice survives a reload, and the lightest areas keep a minimum share. Expanded areas use readable cards in rank order rather than proportional tile sizes.
The strip above Heat separately counts work that needs you, unread results, running agents, dates overdue by at most two weeks, and undated tasks at least 30 days old. When any date has slipped, a chip beside the counts reads N slipped dates and switches on tidy mode, the housekeeping tool: every tile that has not slipped dims, every slipped task is drawn on its own (the quiet pile opens for them), slipped tiles grow to make room, and each slipped tile with the room wears a date-fix row in its footer with four one-click fixes: Today, +1 week, +1 month, No date. The fixes count on the local calendar (+1 month is the same day next month, clamped to that month's last day). A narrower tile stacks the four two by two; one too small for even that opens its area, where every card has the row. Inside an open area a slipped card's fix row replaces its act row while tidy mode is on. Each fix writes only the task's due date through Tasks, leaves the description, status and labels untouched, lands in Settled today as Date moved to 2026-10-08 · was 2026-09-10 (or Date cleared), and has the same Undo as every other act; a fix that would not change the date writes nothing and says so on the card. Tidy mode lives only in this session: Escape leaves it (after stepping back from a task and its area), so does the chip, so does leaving Heat. Area headers count work that needs you and running agents, in the same words. An area narrower than 200 pixels drops those counts but keeps a compact orchestrator line, such as orchestrator · 2/3, so it still says who has taken the area. A bigger tile shows more of the work: after its label row and title it carries the reason row, then the ask, what needs to be done, taken from the task itself, best source first: the latest comment that starts with Needs you:, else a NEXT STEP or NEXT ACTION line in the description (when that line is only a heading, the line after it), else a Why: line, else the first sentence or two of the description, cut at two sentences and 280 characters; then one line of context (sessions attached, agent running, waiting on). Rows are budgeted in whole lines from the tile's height, so the text fills the tile and nothing is cut mid-line; a tile under 90 pixels wide keeps its title and drops the ask. Size earns its space by content: the Now tiles together take at most 28% of the map (every Now tile shrunk by one factor until they fit, never under 40%), any tile drawn far taller than its words gives the room back to its neighbours (never under half its pull), and a Now tile stays at least a tenth heavier than any other tile of its area. The room given back goes to the Next tiles and to the areas that were squeezed beside the hot ones. Below the strip sits one legend row: three chips (Now, Next, Later), then the four shape signals (Needs your input, Run failed, Agent working, In focus) and one sentence, Red = now, at most 5 · Amber = next · Grey = later · The tile says why. The legend's tooltip spells the fill order out, and Heat has no second legend in the footer. Current review waits remain available in accessible descriptions, measured from the current In Review transition in Tasks' system history. Follow-up waits use CHECK AFTER; session requests use the requesting session's attention time. These waits do not replace task due dates or creation age as the main Heat driver. Unknown waits stay unlabelled. A running agent keeps the green outline, and focus keeps the coral ring; nothing else rings a tile. A task marked done or canceled reads as closed even while an agent is still attached, as an area orchestrator stays attached to tasks its children closed: it is quiet, says done or canceled, has no running outline and is not counted as running. It keeps its place in an open area until the area collapses. Undated tasks aged 30 days or more say so in their label. Titles beginning with a recognised action verb move that verb beside the key. Quiet sessions collapse into an "N agents finished" tile; quiet tasks beyond the first four can also group. Tasks due within three days, overdue by at most three days, and undated tasks aged at least 30 days stay individually visible and contribute their full weight to the project; a quiet task whose date has slipped groups like any other quiet task, except in tidy mode. An area's share of the map is capped by what its tiles can use, so a single heavy task cannot flood the map; the capped area still stays the largest. A tile too small for its key and one title line is never drawn as a blank sliver: each area folds such tiles into one quiet +N more tile carrying their combined weight, with their keys in its tooltip. It opens the project's card grid; in Sessions, which has no grid, it opens the heaviest folded session in place. Opening an area reveals all its tasks as a flow of compact cards, each as tall as what it says (up to three title lines, the ask up to three, the agent's latest word, the facts) and no taller, in columns chosen from the width alone (about 250 pixels each, never under 150); the area body scrolls past what fits. The cards are ordered by priority first, urgent, high, medium, then low and unset, closed work last, and by pull within a priority; when more than one priority is present a small label (Urgent, High, Medium, Low / none, Closed) sits before each run, so the hottest colour can sit under a higher priority and still be read. An open area grows with its card count, and stops growing where a neighbour that could show its name would lose it. Opening the task picker scrolls the cards rather than narrowing them, so their act labels stay; the pick list shows whole rows, with a visible scrollbar and a fade while more rows wait below. Heat already holds every area, so Show all stays out of it. With no projects and no sessions at all, the map says No open work yet. Create a project or start a session. While it loads, the map, its counts and the layout toggle wait for both the tasks and the stored layout, so a stored Heat choice never shows Overview first; Overview's footer legend appears only in Overview, including during a search started from Heat.
Clicking expands in place. The area grows, its neighbours compress without leaving their strips, and the clicked tile grows inside the area with the usual details, actions and native chat. An open card's coloured cover stays as tall as its text; the details take the rest of the card, and with chat open the live session fills that remainder so the reply editor stays in view. If the reply editor takes Escape for itself and leaves the page with no focus, focus moves to Back to summary, so the next Escape still steps back. Positions stay fixed while something is expanded and re-rank on collapse. Escape steps from the task to its area, then back to the map. Heat arranges the whole map, so it applies to Overview with no search running; choosing Heat from a filter or a search returns the whole map, while a search or another filter keeps the ranked list and leaves Heat selected. Zoom rests in Heat: its buttons and slider are disabled with the note Zoom applies to Overview and read 100%, since the treemap already fits every area and ignores zoom; rotation stays paused. Focus, pins, drag-to-focus, area tools, new sessions and settlement are unchanged. Below 720 pixels the areas stack as readable bands and the map scrolls instead of squarifying into slivers. There an open area lists its cards one under another at the height of what they say, with their act rows always in view (no pointer to hover with), and its header drops Open in side pane, which has nowhere to open on a phone. Card acts, bulk acts and picker rows are at least 36 pixels tall there and 24 on larger screens; a card's rows are budgeted from its measured act row, so taller buttons take room from the text rather than pushing it out. A session tile too narrow for the word running shows only its green dot, and a card too narrow for agent running does the same.
An expanded area's tiles become a grid of cards in rank order, row by row, so each task is readable and actionable. Once a card opens, the rest squarify around its details. Each card keeps its key and timing label, two lines of title, one line of the agent's latest text or the task's next step, then priority, connected sessions and dependencies. A state the marker already names is not repeated on every card. Rows use whole lines from the card's real height; a third title line appears when room is left.
Every card in an expanded area offers three acts without opening it. The acts appear while the pointer is over the card or keyboard focus is inside it (Tab reaches them; they are in the accessibility tree throughout), floating over the card's foot; on a touch screen with no pointer to hover with they stay in view under every card. In tidy mode a slipped card's date-fix row is never hidden. The act row has one of three shapes, chosen from the card's width so neighbours match and no label is ever cut short: every label, only Agent decides labelled beside the Done and Snooze icons, or three icons with their names as tooltips and accessible labels. Agent decides (deciding on its own) hands that one task to an agent: Work Map records the handover as a comment in your name, moves the task out of Review, and dispatches it on a Tasks preset with a fixed brief. That brief tells the agent it owns the decision, to read the task and its comments, do the work, record the decision and its evidence on the task and close it, and it names the limits that stop it: anything irreversible, anything that publishes or sends outward in your name, anything needing a credential or device only you have, and anything that would ship in your name or voice, which includes approving, closing or signing off a post, draft, email, social or product copy. On that last limit the agent still reviews what it can, leaving its notes, the edits it proposes and the risks it sees as a task comment. On any of them it moves the task back to Review with one line saying which limit it hit. Done is the settlement the expanded details already use, so it lands in Settled today with the same Undo. Snooze hides the task from what needs you for 7 days and changes nothing in Tasks: Work Map keeps a snoozed-until date in its own storage, so the task loses its review, follow-up and unread standing, scores and folds as quiet, and its tile and card say how long the snooze has left instead of the due date. A request for input or a failed run on the task still surfaces, and a running agent still shows as working. The snooze ends on its own when the date passes; nothing is written to end it. Snooze asks for no confirmation, because it is reversible and touches nothing in Tasks; it lands in Settled today with an Undo that clears it. A task already snoozed cannot be snoozed again.
An act that cannot run stays on the card, disabled, and says why instead of disappearing: a task whose project is not linked to a BB project has nowhere to start an agent, and a task an agent already holds cannot be handed over twice. Work Map counts a dispatch seconds old as held, from the task's own live session link and from the click itself, so a second click during the moment before Tasks publishes the new agent cannot double it. Delegation is idempotent per click and per area, so a repeat, a retry or two clicks landing together never start a second agent. When an act does fail, it reports where it was clicked: on that card, announced and dismissible, or in the bulk bar that started the run, with how many tasks the failure left unchanged.
The expanded area's header acts on many at once: Let agents decide all is the one primary act, with Snooze all and Mark all done beside it in that order, so closing everything is never the neighbour of the primary. They cover the whole area or a subset chosen in the picker, which stays shut so the tiles keep their room; the bar shows the count, and a hint appears only once something is picked. Every bulk act confirms first, naming its count, listing each task it will touch, and listing what it leaves out and why: work already closed, work that is not a task, work an agent already holds, and work already snoozed. The confirmation lies over the tiles rather than pushing them, so positions hold while you read; focus rests on the dialog, not on its act, and the close confirmation is styled as the destructive step it is. Snooze all says it hides the tasks from what needs you for 7 days and changes nothing in Tasks, and snoozes them one at a time. The other confirmations say plainly what Undo cannot reverse, an agent that has already begun and a follow-up wired outside Work Map that a close has already fired. A bulk settle stops at its first failure and reports how far it got, leaving the rest untouched.
Letting agents decide a whole area starts one orchestrator, not one agent per task. It is named for its area, Digital Thoughts orchestrator for the Digital Thoughts area, runs on the same Tasks preset, and is attached to every task it covers, so the map and each task show one owner for the work. Its brief tells it to read every task in full before starting anything and to write down what connects them: duplicates, overlaps, what depends on what, and an order that makes the later tasks easier. It then runs each task as a child of itself, spawned under itself and attached to that task, at most three at a time, starting the next when one finishes. The cap is a hard one: before every spawn it lists its own children and waits for one to finish when three are still busy. It reads what each child reports rather than its whole transcript, pushes a short result back once, archives the child, and ends every task in one of two states and nothing between them: done with a decision and its evidence, or back in Review with one comment that starts Needs you: and says in one line what you have to do and why it could not. When every task has an end it leaves exactly one task in Review, Digital Thoughts orchestrator: N done, M need you, whose description is the whole summary: what closed without you, with its evidence, then what needs you grouped by the kind of call it asks for, then its own recommendation. It then archives its remaining children and itself, so nothing it started stays open on your screen. Children work under the same limits it does. The confirmation names the orchestrator, the count, the limit and the review task before any of it starts, and a second click while that area's orchestrator is running opens it rather than starting another.
While an orchestrator runs, its area header says so in place of a thread count, orchestrator · 2 of 3 running, and turns to a warning if it ever has more children busy than its cap. Its cards keep their acts but not the repeated reason, since the header already carries it. The report it leaves is for you: Agent decides is disabled on it, alone or inside a bulk act, so an area cannot be handed to an orchestrator that would start on its own summary.
Opening a task selects the attached session needing input first, then a failed run, unread result, running agent or most recent idle session. That choice stays fixed while reading or chatting, even after a result is acknowledged. You can choose another connected session explicitly; if the chosen connection is removed, the next available attachment is selected. Archived and contributing connections remain available through their labeled rows.
Click a task, session or project to expand where it sits. Neighboring areas shrink to make room, retaining their status colors and showing an overflow count for hidden tasks. A short transition follows the change; reduced motion skips it. The arrangement stays stable while you explore. Projects reveal all open or unreviewed tasks; a task can expand further inside its project. Click again or use Collapse to shrink it. Escape steps from task details to the project, then back to the overview. Open in side pane is an explicit option, with Expand in map to return. Details link to the native task and full BB session, including split view. A successfully loaded session preview marks only the displayed result read; task review remains open until the task itself changes. Errors require an explicit acknowledgment in the summary view.
Session connections follow current task attachments, including links added after a session started. Attached sessions appear within their tasks. Task comments with a recorded agent session provide a separate Commented on task connection, visible in both directions. Comment history does not transfer activity or focus to a task. Archived attachments remain accessible and are labeled. A create or update without an attachment or recorded comment does not identify its originating session in BB, so Work Map cannot infer that connection.
Drag an item into the focus drop target, or use the preview's focus button. Session focus uses native BB pins. Direct task and project focus choices use plugin storage. Tasks also inherit focus from pinned attached sessions; removing a task's focus unpins those sessions in BB. The preview explains this before the action. A focused child keeps its project prominent. Search reaches tasks and sessions beyond the overview. Filters and Show all expose overflow, including additional attention items.
Ranking favors focus and explicit input requests or failures, then unread successful results ahead of routine review/follow-up queues and active agents. A review with a new attached result receives an additional lift. The overview reserves up to two result areas alongside the running agents. Older unread results share the remaining queue space, preserving some quiet work when space allows. The newest result sits near the center; additional results stay in the side columns instead of the outer bands. Zooming out adds more projects and sessions along both sides while preserving the current center. Compact side columns use two columns where space allows. While an area is expanded, positions stay fixed and badges update in place; collapse allows the new ranking to take effect. Urgency, dates, priority and recent changes refine that order. Planning dates are labeled as plans. Backlog dates do not create urgency. Task updates in the last 48 hours show an Updated marker until previewed. Inactive items rotate every 45 seconds when the pointer and keyboard focus are outside the map; rotation pauses during preview, search, filtering and dragging. A button disables rotation, and reduced motion starts with rotation paused. Important items do not rotate out.
Work Map reads and stores data in your BB instance. Tasks, attachments and comment provenance come from the Tasks plugin RPC. Session state comes from BB's live sidebar hook. Session previews are bounded excerpts of BB's latest response, not generated summaries. Expanded previews use BB's native Markdown renderer for tables, lists, links and code. Wide content scrolls within the preview; map cards show short plain-text excerpts or table headings. Responses longer than 6,000 characters show a shortened-response note and retain the full-session link. The cutoff can fall within a table or code block. Task data and attachments refresh every minute while the page is visible; response excerpts refresh every 30 seconds. Comment history for unchanged closed tasks is cached for up to five minutes. Refresh map bypasses both caches. A failed task refresh retains the previous data with an error banner. Missing connection data is reported. If a session preview fails, its card retains the session context; expanded details show the error and a Retry preview button.
Filters, search and Show all use a ranked single-column list. A clicked row expands beneath its heading without changing columns. The order stays fixed while details are open, including in the optional pane. If reading changes an item's status, it stays visible with a note until collapse. Closing reconciles the list and returns keyboard focus to the item or its nearest remaining neighbor.
New session opens BB's native composer inside Work Map. The toolbar starts a standalone session; the button in an expanded task or project starts there with editable context. Task sessions attach through Tasks as soon as BB creates them. Project sessions use the project's linked BB project as the initial selection, without attaching to an arbitrary task. You can change the project, environment, model and permissions before submitting. No agent starts until you submit. Drafts persist per task, project or standalone composer when closed.
After starting, the native live chat replaces the composer in the same area. Messages scroll inside a bounded chat frame, keeping the reply composer and its controls inside the session card. Open full session opens the normal BB session. Escape or Collapse session returns to the area. If task attachment fails, the session remains usable and Retry attachment repairs the link without starting another agent. Work Map stores creation receipts containing request, thread and task identifiers for retries; prompts and attachments remain in BB's native draft and session stores.
Existing sessions have Chat here in their expanded details. It opens BB's native live chat in the same area, with streaming, replies, queue/steer/stop controls and pending input requests supported by that session's provider. For a task with several sessions, choose the connected session first. Back to summary, Escape or re-clicking the expanded item returns to its short preview before collapsing the task or project. The optional side pane can also host the chat. Opening chat creates no session and sends no message; the native composer uses the existing session's permissions and draft store. BB owns read tracking while live chat is open. Archived or unavailable sessions retain the full-session link. The chat scrolls within a bounded area and stays at normal size through map zoom.
An opened task shows the whole task. One action bar sits under the header: Agent decides leads, Done beside it, then Ready for review and Pause here, and a ⋯ menu with Snooze 7d (or Unsnooze), focus, the side pane and the native task; no act appears twice, and the coloured cover keeps only the title and the reason. Below, on a wide panel, two columns. The main column is the work: the ask first, highlighted and labelled by its source (a Needs you: comment, the NEXT STEP or Why: line); when the ask is only the description's own first lines they are drawn once, as its lead, not quoted above it. Then the full description rendered as Markdown (headings, lists, links, code, tables), folded past a sensible height behind Show all. Then the comments, newest first, each with its author, a relative time (exact time on hover), its body as Markdown, long ones clamped behind Show more, and the agent's session a click away; status changes fold behind History. A comment box heads the timeline: it posts a task comment in your name through Tasks, shows it at once, and shows a failure inline with the draft kept. A draft also rides with Agent decides as part of the brief. The side column is the facts and the people: status, priority, the date with "Nd late" or "slipped Nd" and the one-click date fixes under a date that is past, project, created and updated ages, waiting on, labels and attachments, then every session with its state, one click to open, and New session. The side pane and a phone show one column. Markdown from tasks and comments is rendered through React elements only: raw HTML and scripts stay text, and only http, https, mailto and in-app links are followed. Chat here is the primary action for a selected active session; with the chat open the body folds to the ask and the sessions so the chat has the room.
The compact task action row follows the session content. Pause here and Ready for review reveal only the fields needed for that action, then Save and pause or Save review applies it. Cancel or Escape from a text field closes the form without saving and returns focus to its button. Escape in the reviewer dropdown only closes that dropdown. Task done remains one click and ignores unsaved handoff edits. Pause preserves the task status and its reason; review by Me moves it to Review. Review by Someone else needs a name and follow-up date, keeps the task open with a waiting label, and brings it back to Waiting for you when that date arrives. This records the handoff without contacting the reviewer. Task done completes the task. Existing due dates, priority, resources and description history are preserved; the current STATE and lifecycle fields describe the user's action. Tasks records these as user changes.
The checked Archive viewed session option affects only the attached session being viewed. Uncheck it to leave that session open. Standalone sessions have Archive session, also available below newly created chats. Archiving stops running work. Other attached sessions keep their state. BB's archive method includes child sessions and forks, so Work Map keeps a session with children or source forks open and explains why. The task action can still succeed. BB has no atomic archive-only-this-session operation, so this guard is checked immediately before calling archive.
Successful actions contract the expanded area and appear in a compact Settled today strip with Undo. Its × button or Escape closes the strip, leaving a small history button to reopen it. Regular data refreshes keep dismissed receipts closed; a new settlement or error brings the strip back. Where browser-tab storage is available, dismissal is also remembered when the view reloads. Details or History expands the receipt information. Closing never undoes an action or deletes its history. A snooze made in this view appears in the same strip until the view reloads; its Undo clears the snooze and touches nothing in Tasks, and a snooze still running after a reload shows on its tile and card. Pause and review keep the task on the map; closed tasks remain in project history, and any ongoing attached session stays visible. Undo restores the changed task fields and reopens archived sessions. It refuses to overwrite newer task content and does not restart agents, recreate a cleaned environment, or erase Tasks' audit history. Partial failures say which part remains; Undo can restore the completed part. Private recovery receipts store the before/after task fields and archived session identifiers, retaining up to 200 completed receipts plus interrupted actions. Settled today checks the newest 200 receipt keys; older interrupted receipts remain stored but do not appear or reconcile automatically there. Tasks does not support atomic conditional writes; Work Map re-reads before a change, checks the result, and checks owned fields before Undo.
Existing lifecycle blocks keep their owner, progress evidence and date provenance. Older tasks without those fields still need classification by the task's owner or their workflow; a settlement does not infer missing ownership or evidence. Their assessment may report missing lifecycle fields instead of unclassified, without making them eligible for autonomous work.
Zoom ranges from 60% to 160%, using the toolbar buttons, slider, trackpad pinch or Ctrl/Command + wheel over the map. With a map tile focused, Ctrl/Command with +, - or 0 zooms or resets. Zoom changes card layout and content without scaling the whole interface. Zooming in gives fewer cards more room for detail. Zooming out fits more projects and standalone sessions along the sides, up to 32 roots when space allows. Central cards retain useful response or task context; peripheral cards become compact titles and state labels. Project child counts also respect each card's available space. Focus rings, activity bars and attention colors remain visible.
100% restores the default density for the current window and is a snap point, with a short hold when a gesture crosses it. A small 100% ↺ button appears away from actual size. Reset keeps the current inspection open. Away from 100%, the item under the pointer gets the next available slot after the priority card when space allows; scroll compensation keeps the same point in view where the scroll boundaries allow it. While an area is expanded, its root membership and order stay fixed. Zoom changes the detail and project density around it. Native chat, composers, settlement controls and the optional pane stay at normal size. Rotation pauses away from 100%. Zoom never changes focus, acknowledges results, starts sessions or settles work.
Project areas have compact + and ⋯ controls. Add a backlog task, start a session, or connect an existing session through an open task. New tasks and connection pickers open inside the area. New project and Edit project let you choose a name, task prefix (at creation), color, folder and linked BB workspace. The project color is a small identity dot; focus, activity and attention retain their separate colors.
Manage areas opens an optional pane with every project, including empty and hidden ones. Empty areas stay out of Overview unless focused; creating or opening one reveals it for adding work. Hide from Overview changes a Work Map preference only. Search, attention filters, Show all and Manage areas still reach its work. Tasks remain open and agents keep running. Restore brings the area back. Tasks has no project archive or task-move endpoint, so Work Map does not label hiding as archiving or copy tasks between projects.
The UI and agent CLI use the same validated project operations. Project edits check the current metadata before writing, though Tasks has no atomic conditional update. Creation request ids prevent repeated submissions from duplicating confirmed work. A failed request whose outcome cannot be determined requires checking the project before starting a new creation. Local receipts retain request fingerprints and resulting identifiers/metadata, without a second copy of task descriptions. New tasks start in backlog with the supplied text; Work Map does not invent ownership, dates or progress evidence.
Focused cards keep larger titles and more space, including at compact zoom. The center card fills its column instead of shrinking to its text width.
Recent activity also affects proximity. Work active within 24 hours stays out of the outer bands; up to two recently active quiet areas are reserved after pins, explicit input/failure requests, unread results, running agents and one review/follow-up area. Other recent work shares the available slots. Review and due follow-up work also stay out of the outer bands. Project task lists combine priority, dates and recency without reserved recent slots: fresh lower-priority work can precede an old high-priority task, but an overdue urgent task keeps precedence. Activity weight halves every 24 hours, so older quiet work moves outward as newer work arrives. Attention and focus keep their priority even when old. A muted activity age explains the position without claiming an agent is running. Sessions use BB's latest attention timestamp (creation time if unavailable), tasks use their latest update or attached session activity, and projects use the latest activity of any task, including completed ones. Reads, Work Map preview acknowledgments and comment-only contribution links do not supply a new activity timestamp. Empty projects still follow the existing visibility rules. Activity ages on the visible page's minute refresh, even when task loading fails; expanded work keeps its position until collapse.
Commands:
bb work-map status --json
bb work-map project list --json
bb work-map project create --name "Launch" --prefix LAUNCH --folder "Work"
bb work-map project edit LAUNCH --name "Product launch" --color "#8796ab"
bb work-map project hide LAUNCH
bb work-map project restore LAUNCH
bb work-map task create --project LAUNCH --title "Prepare launch brief"
bb work-map attach LAUNCH-1 --thread thr_example
bb work-map project --help
npm test
npm run typecheck
bb plugin build
bb plugin install . --yes
bb plugin reload work-mapRequires BB 0.43 or later, Plugin SDK 0.4.87, and the built-in Tasks plugin. Work Map has no independent external services or background schedules. Sessions submitted through its native composer run through the provider you choose in BB. Disable or remove Work Map to undo installation; existing tasks, sessions and the other plugins remain intact.
See PRIVACY.md for data access, storage and action details, and THIRD_PARTY_NOTICES.md for vendored component notices.