Changelog
What's new
Recent user-facing changes to pm7Code. Newest first.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.)
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.
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).
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.
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.)
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.