Changelog

What's new

Recent user-facing changes to pm7Code. Newest first.

  1. Worktree menu: Reset to base

    The worktree status menu replaces Clean up with Reset to {baseBranch}. After confirmation it restores this worktree to the live local base — dropping the topic's commits, tracked edits, and new untracked files while keeping node_modules, .pm7-code, and ignored seeded files. Git keeps a backup ref; the conversation is untouched. Sleeping worktrees are removed from Visualise Worktrees instead.

    Read in the docs →

  2. Gateway dialog and one collecting engine

    Gateway opens as a draggable dialog over the workspace with health alerts, request-share meters, Refresh/Close, and 1/7/30-day data. Desktop and WebApp both ask configured engines (not the laptop shell), pick the longest-collecting engine, and warn when another engine fails or also collects — that history is not included.

    Read in the docs →

  3. Machine-owned agent settings: save safety

    On desktop, opening Agents → General asks the keeper again after the server list exists and re-fills gateway and engine-owned fields from that round. Save refuses if the keeper did not answer or answered after the form was filled — close Settings and reopen instead. Account sync omits engine-owned keys while a keeper is active.

    Read in the docs →

  4. Desktop title bar: memory pill

    The desktop title bar shows live memory as the sum of all Electron processes, with a per-process proof panel on click. The WebApp hides it because a browser cannot measure app memory; the misleading local open-shell counter is gone now that shells run on engines.

    Read in the docs →

  5. Install Status asks each agent engine (Playwright & Remotion)

    Settings → Agents → Agent Browser and Remotion no longer measure or install on the window machine. Install Status lists one row per machine with CLI, npm, and browser-or-runtime badges; Check status on a row runs deep, Check all machines is a shallow overview. Nothing runs when you open the tab. Unreachable engines show an error, not “not installed.” Installs run on that engine on the same PATH as agent CLIs, with readable failure text. Works in the WebApp.

    Read in the docs →

  6. CLI binary card on agent settings tabs

    Each agent tab (e.g. Codex) has a CLI binary block: which binary is on every machine that runs agents, Check version, and update on the machine you choose — not on the window. Same split as Install Status: engine reachable, agent known, binary installed. Shares data with Agents → Versions.

    Read in the docs →

  7. Machine-owned settings: same keeper routing in desktop and WebApp

    Status, read, merge, and adopt for agent engine settings now share one engineConfig lookup in both clients so they cannot disagree about the keeper. An unreachable keeper is an error, not “nobody keeps them.” Two machines both claiming main is reported as a conflict.

    Read in the docs →

  8. CView keeps the agent header when a turn starts with a tool card

    A turn that begins with a tool or card message still shows avatar and agent name. Nested rows inside an Agent group card still hide redundant headers.

  9. Local gateway for Claude, Codex, and Grok + Gateway usage view

    Settings → Agents → General has Local gateway: set address and gateway key, then route Claude, Codex, and/or Grok separately (new sessions only). Optional key from the gateway config on the agent machine; Collect usage + management key feed the Gateway view — open it from the sidebar usage menu. Counts are what this gateway observed, not all pm7-Code traffic.

    Read in the docs →

  10. Agent gateway settings are machine-owned

    Gateway and other agent engine settings belong to the machine that runs agents, not your account. One machine can keep them for all; standalone machines can adopt. The Where these settings live block shows main, member, or standalone.

    Read in the docs →

  11. Files pane: Add to .gitignore

    In a git project, right-click a file or folder for Add to .gitignore — an anchored line in the project root .gitignore. The header notice shows Added or Already in .gitignore and warns when git still tracks the path.

    Read in the docs →

  12. Topic work state: reworded duplicate lines are not re-appended

    When the semantic judge is available, appends to decisions, rejected, progress, or verification can skip a line the record already holds in other words — so the cap does not drop older decisions. On doubt or failure, the line is kept as before.

    Read in the docs →

  13. Background Bash task notifications stay on their tool card

    A completed background Bash (or matching tool) task no longer shows up as a fake subagent message with orange indent. Output lands on the Bash card; Monitor endings are not misclassified as subagent traffic.

  14. Memory conflict and semantic duplicate

    Memory proposals can be judged semantically: covered duplicates are not stored again (card outcome duplicate); conflicts are still saved, linked with contradicts provenance, and shown as conflict with Saved — contradicts an existing memory. Unclear or failed checks still write by default; conflicts do not auto-remove the older item.

    Read in the docs →

  15. Git Diff, Pull, and Auto Update on remote engines

    For projects on another machine's engine or in the WebApp, Show Diff, Pull, Auto Update, Open on GitHub, Copy URL, and Preview Diff run on that project's engine instead of the desktop's local git — fixing false Everything is up to date when the repo lives elsewhere.

    Read in the docs →

  16. Files pane project search

    The magnifying-glass button opens a Search files dialog on the project engine: find file or folder names or text inside files, with match case, whole word, optional subfolders, and type globs. Results use the same right-click menu as the tree; View from a content line opens the file at that line. Stop cancels an in-flight search.

    Read in the docs →

  17. Files pane: context menu for every file action

    A normal click on a file no longer opens anything — only folders expand. Use the context menu for View, Copy path, Get info, and Edit as text. View and Edit share one draggable dialog (read-only View with markdown Preview; Edit saves via the engine with conflict detection).

    Read in the docs →

  18. Files pane filter is client-side at the project root

    The filter field under the Files header now narrows only the loaded names at the project root (case-insensitive), not a recursive engine search. Use Search files for project-wide name or content search.

    Read in the docs →

  19. Bold text stays visible in chat on the WebApp

    Strong and bold text in chat no longer looks washed out when the Light chat font weight is enabled in the WebApp.

  20. Sessions start in repos with no commits yet

    A git repo with no commits no longer fails worktree isolation at session start. The session runs in the project folder with a warning banner; after the first commit the same topic stays in the base and new topics can isolate in a worktree.

    Read in the docs →

  21. Topic work state

    Each topic keeps durable work state — goal, decisions, next steps — so a new session in the same topic receives a bounded summary on its start turn instead of relying on the transcript alone.

    Read in the docs →

  22. Memory engine apply and bilingual recall

    The session engine applies memory proposals even when the Memory panel is closed. The Memory card shows the outcome. Recall matches Dutch and English spellings, and short follow-ups use the topic work state for context.

    Read in the docs →

  23. Clearer Push stop when the base checkout is dirty

    Push can stop at the base stage when uncommitted files there would be overwritten by the merge, with a clearer message and no partial change. When only .pm7-code is involved, the message points at .gitignore and git rm --cached.

    Read in the docs →

  24. Expired sign-in is treated as signed out

    An expired auth token no longer leaves you in a half-logged-in state. The message is: Your sign-in has expired. Sign in again to continue. The Projects sidebar can name an identity failure and offer Sign in again when the server is reachable but cannot verify you.

    Read in the docs →

  25. TopicStartRequest — agent asks to start a topic

    Agents can emit a fenced TopicStartRequest block; pm7Code shows a CView card with Start and Reject (never auto-run). After Start the new topic runs in the background, the prompt leaves immediately, you stay on the source topic, and the card offers Open topic. Optional project, newProject, agent, and waitFor: true for a waiting marker plus the first-turn answer delivered back while a client is open.

    Read in the docs →

  26. Header New Session (+) blocked on unmerged work before the menu

    Clicking the header New Session control (+) now runs the same unmerged-work guard as Start new session here before the menu opens. If blocked, the Unmerged work in this topic dialog appears and the menu stays closed.

    Read in the docs →

  27. Leftover General Assistant sessions hidden and marked like the Assistant topic

    Earlier sessions of the General Assistant topic — same topic slot after Start a New Session in the Assistant column — are hidden from the Projects sidebar by default and show 🤖 instead of the agent icon. Use Show → Assistant to reveal them.

    Read in the docs →

  28. Worktree menu file counts ready when you open it

    The worktree status control refreshes about every ten seconds with the full summary — status plus outgoing and incoming file lists — so the orange and brown count pills are already filled when you click the dot, without waiting for an extra fetch.

    Read in the docs →

  29. Conversation history stays in the project folder for worktree topics

    A topic's durable session mirror always lives under the project folder (.pm7-code/sessions/), not inside its worktree. Releasing or pruning a worktree never drops the conversation; older worktree copies fold back into the project folder when the topic next starts.

    Read in the docs →

  30. Files pane in the right sidebar

    The right sidebar header now has three panes — Assistant, Browser, and Files. Files shows a lazy folder tree of the active project's directory (not the topic worktree), reads via the project engine, and opens files in the preview overlay. Without an active topic, files are not clickable.

    Read in the docs →

  31. Push syncs when behind and offers Resolve with agent on conflict

    When the worktree is behind the base, Push syncs first (snapshotting and restoring uncommitted work on conflict) and only stops on a real merge conflict that names the files. That stop offers Resolve with agent: a task to the topic's own agent to merge the base, resolve by hand, keep your intent, and not push — you push afterwards. While a CORE build runs on the checkout, Push waits for it to finish.

    Read in the docs →

  32. Start new session here blocked on unmerged worktree work

    Replacing a topic in place with Start new session here is refused while the worktree still has work Push would take, or while the engine cannot judge or is unreachable. The dialog title is Unmerged work in this topic; only OK — no Continue anyway. Use Push to master from the worktree menu, or Fork Topic / New topic to start beside it.

    Read in the docs →

  33. Push indicator replaces the agent icon on the topic row

    The orange Push dot now takes the place of the agent icon on the left of the topic row (not a corner badge). The row also gets an orange border — solid when work is pending, dotted when the engine could not judge. Filled dot means Push would take work; hollow ring means unknown, never treated as clean.

    Read in the docs →

  34. Path claims only show up when they overlap

    The permanent Claims in dit project panel is gone from the message area. Claims from other sessions now appear only in the overlap warning strip, which gets a Release button per row. Your own claim can be released from the worktree status menu. Claims are looked up by project, so worktree topics see the same overlap as the base checkout.

    Read in the docs →

  35. Visualise Worktrees from the server menu

    Open Visualise Worktrees from the server menu to see every registered worktree on that engine — one block per base checkout, with workspace project names on that base and a project name on each card. From the project menu the view is scoped to that workspace project; worktrees from other projects in the same folder or without a known topic are counted separately, not silently dropped.

    Read in the docs →

  36. Orange Push dots and Push filter in the Projects sidebar

    Topics with work Push would take show a filled orange dot at the top-left of the row; a hollow ring means the engine could not judge — never treated as clean. The Show menu and filter bar add Push to master as an AND squeeze (Push + 🔔 = waiting topics that also need push). Enabling Push auto-reveals parked topics that still need push.

    Read in the docs →

  37. Active Tab Background colour

    Theme settings now include Active Tab Background — a theme-scoped colour for every window tab. Set it under Settings → Appearance in the colour theme cards.

    Read in the docs →

  38. Title bar picks up tab status when the tab bar is hidden

    When the window tab bar is off, the build and agent-version status pill moves into the title bar so a running build stays visible. The tab switcher there shows the current window-tab title with a chevron instead of the static label TABS.

    Read in the docs →

  39. Unified git-dot colours (project + topic worktree)

    Project and topic worktree status now share one colour scheme: gray while loading, blue spinner during an action, red on git error, brown when behind the reference (pull or sync first), orange for own work not shared yet, green when clean and even. Own work (orange) wins over behind (brown).

    Read in the docs →

  40. Worktree menu redesign

    The worktree status menu header shows the branch plus up to two file-count pills — orange N for own files not in the live base, brown ↓N for files the base has that this worktree lacks. Actions are Sync with {base}, Preview changes, Push to {base}, and Clean up…. When behind-only, Preview shows incoming via Sync. Preview is disabled when the list is empty; Push only when there is own work; Sync and Push are disabled while an agent turn is active.

    Read in the docs →

  41. Push to base: local base is source of truth

    Push treats the local base checkout as source of truth: it pulls/merges origin into the local base first (plain merge, no stash; conflict aborts), then merges the worktree, then best-effort push to origin. A failed push keeps the local merge.

    Read in the docs →

  42. Automatic worktree release on park or archive

    Parked topics, 48h idle sleep, archive, and delete release the worktree automatically only when nothing would be lost — no dirty or untracked files, no commits the base lacks, no differing seeded ignored file such as .env. Otherwise the worktree stays as sleeping and appears under Clean up…. Resuming a released parked topic gets a fresh worktree.

    Read in the docs →

  43. Visualise Worktrees hides equal worktrees by default

    The Worktrees dialog hides live worktrees that are equal to the base by default. Checkbox Ook worktrees gelijk aan de basis tonen reveals them; when some are hidden the UI shows how many. Worktrees without usable git status stay visible.

    Read in the docs →

  44. Worktree status dot + Preview changes

    Isolated sessions show a coloured status dot in the title bar (and CView header) instead of the old ⎇ pill — gray while loading, green when clean and even with the base, orange when dirty or ahead/behind. Click the dot for Sync met the live base branch, Preview changes (git-diff overlay vs merge-base), Mergen naar that base branch, and Opruimen… (Colours and menu labels were refined later the same day — brown/orange scheme; Sync with / Push to / Clean up.)

    Read in the docs →

  45. Click a worktree card to open its topic

    In Visualise Worktrees, live and history cards are clickable when this client knows the session: click jumps to that topic and closes the dialog. Archived topics open as a read-only preview instead of restoring silently. Unknown sessions stay inert.

    Read in the docs →

  46. Hotfix on new topic (every agent)

    When a project's Worktree-isolatie is always, the new topic form offers Hotfix direct in basis so you can skip a worktree from the start — not only when starting a New Session. Hotfix, worktree, claim paths, and intent choices are applied for every agent (Claude, Codex, Pi, and the others).

    Read in the docs →

  47. Visualise Worktrees in the project menu

    Open the project menu (project name in the CView header or title bar) and choose Visualise Worktrees — next to Project Settings, not in the worktree status menu. The Worktrees dialog shows the base checkout, live worktrees as cards (current session highlighted), and landed or discarded entries under Historiek. Works even when the current session has no worktree.

    Read in the docs →

  48. Worktree merge keeps the branch

    After a successful merge the worktree and branch stay: the checkout resets to the new base HEAD so you can land again. Only Opruimen removes a worktree. (Status display later moved to a title-bar dot — see 10 September 2026.)

    Read in the docs →

  49. New Session waits for worktree setting

    Start a New Session stays disabled while the project's worktree isolation setting is still loading, so the Hotfix direct in basis checkbox cannot be missed when it appears a moment later. The Hotfix row is a plain checkbox without a plus icon.

    Read in the docs →

  50. Worktree isolation for writing sessions

    Project settings now include Worktree-isolatie (off, opt-in, or always — default always). Writing sessions get their own git worktree on a pm7/s- branch. New Session can set Hotfix direct in basis or Geïsoleerd werken, plus optional intent and claim paths. Session actions (sync, preview, merge, prune) live in the worktree status control — see docs for current UI.

    Read in the docs →

  51. Path claims across parallel sessions

    Sessions register edit paths with a pm7_claim block so overlapping work is visible early. CView shows an overlap warning strip and a Claims in dit project panel with Release. Optional intent text appears as a coordination banner.

    Read in the docs →

  52. Agents can propose publishing a skill

    When an agent creates or edits a skill, it can propose a publish. CView shows a Skill Publish card with Publish and Reject. pm7Code snapshots the skill at proposal time, so approval publishes that version even if the local cache was rematerialized later. Your account stays the source of truth; if the account copy changed after the proposal, publish is refused until the agent proposes again. The outcome survives a reload — published, rejected, or failed.

    Read in the docs →

  53. Language Directive keeps English technical terms

    Settings → Agents → Prompts → Language Directive still defaults to Dutch on every turn, but established IT terms now stay in English instead of being translated into Dutch calques. Accounts that pinned the older default via Reset to default are upgraded automatically.

    Read in the docs →

  54. Sessions (was Parley)

    The user-facing conversation is now called a Session, with its own PM7 Session ID. Start a new Session replaces Start a new Parley. The technical provider connection behind it is an Agent session.

    Read in the docs →

  55. Settings Backup

    Settings has a Settings Backup section. Set a private Git remote URL; Export Now saves settings to your account first, then commits and pushes every setting, prompt, memory, skill, and theme to that repo. Automatic Backup (on by default when a URL is set) exports shortly after every settings save. Secret findings always block automatic exports — only Export Now can override them with Export anyway. The last automatic backup status is shown on the device.

    Read in the docs →

  56. Prompt files use the project Folder

    Project settings no longer have a separate Home folder. Prompt files live in pm7-Code/ inside the project's Folder — the same directory as the project.

    Read in the docs →

  57. General Assistant can talk about Settings

    The General Assistant now gets a compact per-turn context block for pm7-Code as a product — prompts, protocols, skills, slash commands, themes, colors, and other Settings — as a source map, without shipping secrets. Topic and Project assistants still take priority.

    Read in the docs →

  58. Default agent renamed to pm7

    The built-in pm7Code agent is now labeled pm7 in the UI (previously shown as pm7-Code). Behavior is unchanged — only the display name.

    Read in the docs →

  59. App Themes on the WebApp

    Named look-and-layout profiles let you switch color theme, fonts, panel visibility, and sidebar or Assistant width from Settings → Appearance. Preview a theme with ?theme=<id-or-name> in the URL. The desktop macOS app does not use App Themes.

    Read in the docs →

  60. Assistant column in the right sidebar

    The right sidebar can show an Assistant (General, Project, or Topic scope) or a Browser view. Right-click a topic and choose Use as Assistant to pin it. This is a workspace panel, not a seventh native agent.

    Read in the docs →