Settings
Plexus runs zero-config — every setting has a sensible default, so you only open Settings when you want to change one.
Layered settings
Settings cascade through four layers, broadest to narrowest:
Global → Workspace → Project → Session
Each layer inherits from the one above until you override the value there — a more-specific layer always wins, and if no layer sets a value the built-in default applies. So you set a default once globally, override it for a single workspace, and override it again for one project inside that workspace.
A session inherits its effective values from its owning project. Settings that govern how a session is created or started — Start new sessions automatically, Let the agent work without asking permission — are decided before the session exists, so they always resolve from the project layer, never the session itself.
Settings live inside Plexus (the Settings UI, backed by Plexus's own store). There is no .plexus.toml file to edit. Repo-committed lifecycle hooks are the one exception — those live in .plexus/hooks.json; see Hooks.
The Settings UI
Open global Settings to edit defaults that apply everywhere. Rows are grouped into five pages — General, Agent, Git & PRs, Worktrees & Hooks, and Advanced — plus dedicated pages for Appearance, Git providers, Keybindings, and About, so you can find a setting without scrolling a flat list. Connecting GitHub or Bitbucket lives under Git providers — see Connections.
Within a page, related rows sit under a labelled section — Pull requests, Code review, Fetching and remotes and so on — each with a one-line description of what the group covers. The reference below mirrors those sections exactly.
Every row shows a badge for where its current value comes from: Default, Inherited from a parent layer, or Set here. When a row is set at the layer you're viewing, a reset button (↺) appears next to its control — click it to clear the override and fall back to the inherited or default value.
Looking for the model pickers? There's one next to each AI feature rather than in a single list: Model for the agent and Model for session summaries on Agent, and Model for pull request descriptions, Model for AI code review and Model for commit messages on Git & PRs.
Overriding at a workspace or project
Every scope has its own Settings… entry: a project's is in the ⋯ menu on its sidebar row, and a workspace's is in the workspace menu in the app bar — or, if you set Workspace navigation to All workspaces in the sidebar, in the ⋯ menu on the workspace's own row. At these scopes each section carries its own Override parent settings switch, next to its heading:
- Off — every row in that section is read-only and shows the value it inherits, and from where. This is the default, so a new workspace or project changes nothing.
- On — that section's rows become editable; anything you change is an override applied to this scope and everything inside it.
Sections are independent: turning on Copied files for a project leaves Session folders and Lifecycle hooks inheriting. Turning a switch back off unsets every override in that section at this layer, and leaves the rest of the page alone.
A page that only has a handful of settings at this scope — General and Advanced, where most rows are global-only — keeps a single Override parent settings toggle for the whole page instead. A section disappears entirely when none of its settings can be set at that layer.
The lifecycle-hooks editor at the bottom of Worktrees & Hooks is not governed by the Lifecycle hooks switch — it has its own per-layer inheritance, described in Hooks.
Some settings are global-only — the terminal shell, the agent path, diagnostics, Gravatar avatars, the editor's save mode, and all keybindings — and don't appear on workspace or project pages, because they describe the machine, not a scope. Everything on Appearance goes further: those are per-machine preferences that appear on no workspace or project page at all.
Appearance
Settings → Appearance holds three choices about how Plexus looks and how the sidebar is shaped. Each is a pair of cards with a small diagram of the layout it produces.
Appearance is a per-machine preference. Unlike every other page in Settings it is never inherited by a workspace or project, and it will not appear on a project's own settings page — how Plexus looks on this computer is not a property of your repository. It is also not synced or carried by a backup.
Theme
Dark, Light, or Match system, which is what a new install uses and which follows your operating system's light/dark setting as it changes during the day. The choice applies app-wide, including the Explorer editor and the terminal. The theme button in the app bar is a shortcut that swings between light and dark; this page is where you get back to following the system.
Density
How much a session row says — a layout mode, not a spacing slider.
Normal (the default) gives each session two lines: its name, then the branch it is on and what the agent is doing in words — Working, Needs you, Idle, or Delegating when the agent isn't mid-turn but background subagents are still running. A single icon beside the branch name carries both facts about that branch: its shape marks a branch Plexus did not create, so you can see which sessions Rebase or Squash would be rewriting shared history on, and its colour is the pull-request status — click it to open the pull request.
Compact is one line per session: the name, the coloured activity dot and the pull-request icon. It fits roughly twice as many sessions on screen, which is the point when five to ten are live at once.
You can also switch between them from the app bar, next to the Settings button.
Workspace navigation
Switcher in the header (the default) keeps one workspace active at a time, chosen from the switcher in the app bar. The sidebar is then two levels — projects over sessions — so a project is the first thing you see and a session is one step in. The switcher's menu lists every workspace with its session count and how many are waiting on you.
All workspaces in the sidebar restores the three-level tree: every workspace as a collapsible section, with its projects and their sessions nested inside.
Settings reference
Where you set it is the narrowest layer a setting can change at: Global only means it's a per-machine choice; Global → Project means you set a default globally and can override it per workspace or project (sessions inherit from their project); Per session means it can be tuned for each individual session.
General
Notifications
How Plexus gets your attention when a session needs you.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Desktop notifications | Show an operating-system notification when a session finishes or needs your input | On | Per session |
| Notification sound | Play a sound when a session needs your attention (a preview button lets you test it) | Off | Per session |
Custom sound. By default the chime is synthesized in-app, but you can replace it with your own audio file under global Settings → General → Custom sound (.wav, .mp3, .ogg, .flac, .m4a, and more, up to 5 MB), directly beneath the Notification sound toggle. Plexus copies the file you pick into its own data folder, so it stays on your machine and keeps working even if you move or delete the original; Remove reverts to the built-in chime. This is a machine-wide choice (not per scope), and the per-session Notification sound toggle still decides whether any sound plays.
On Linux, desktop notifications use notify-send — install it if alerts don't appear.
Sessions and files
What Plexus does with a session's folder, and with your edits.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| When you remove a session | What happens to a session's working copy when you remove it: Delete immediately, Archive (keep a restorable copy), or Ask each time. The merged-pull-request cleanup below follows this setting too, but never stops to ask — so Ask each time deletes there | Delete immediately | Global → Project |
| How the editor saves files | Whether the Explorer editor saves only on the save shortcut or auto-saves shortly after you stop typing | Manual (save with Ctrl/⌘+S) | Global only |
Agent
Permissions and startup
How freely the agent runs, and whether sessions start themselves.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Let the agent work without asking permission | Let the agent edit files and run commands without stopping to approve each action | On | Global → Project |
| Start new sessions automatically | Launch the agent as soon as you open a brand-new session instead of waiting for Start | On | Global → Project |
Model and reasoning
Which model your sessions use, and how hard it thinks.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Model for the agent | Which model each session's agent runs with — Haiku (fastest), Sonnet (balanced), or Opus (most capable); Automatic uses the CLI's default. Applies the next time a session starts | Automatic (Claude's default) | Global → Project |
| Agent reasoning effort | How hard the agent thinks before acting — Low (fastest), Medium, High (more thorough) or Very high (slowest); Automatic uses the CLI's default. Applies the next time a session starts | Automatic (Claude's default) | Global → Project |
Input and controls
The compose box and buttons you see while a session runs.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Open the rich input box automatically | Show the larger multi-line compose box automatically on a running session | Off | Global → Project |
| Send with Ctrl+Enter / Cmd+Enter | Whether Ctrl+Enter (Cmd+Enter on Mac) sends your message immediately or just drops it into the input to review first | Off | Global → Project |
| Show the Rewind button | Show the Rewind control on the Agent tab, which rolls the conversation and its file edits back to a checkpoint | On | Global → Project |
Session summary
The sidebar recap that refreshes when the agent stops.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| AI session summary | Show a sidebar with an AI-written summary of each session (each refresh spends one of your plan's turns; the summary is kept fresh incrementally and survives restarts) | Off | Global → Project |
| Model for session summaries | Which model writes the session summary — Haiku (fastest), Sonnet (balanced), or Opus (most capable); Automatic uses the agent's default. Defaults to the fastest model so summaries load sooner | Haiku (fastest) | Global → Project |
This isn't the only place AI session summary can be switched on. Every session has a Summary button whether or not the setting is on, and opening that panel while it's off explains what a summary is and what it costs, with Turn on for <project> and Turn on everywhere — the same setting, written at the project or the global layer, followed by a first summary straight away. See Session summary. Switching it back off is done here.
Git & PRs
Pull requests
How Plexus drafts, tracks, and cleans up after a pull request.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Write pull request descriptions with AI | When you create a pull request, let the agent draft the title and description from your changes | Off | Global → Project |
| Model for pull request descriptions | Which model drafts the pull request title and description; Automatic uses the agent's default | Automatic (Claude's default) | Global → Project |
| Rename sessions to match their pull request | Keep a session's name in step with its pull request title (the underlying git branch keeps its name) | On | Global → Project |
| Resolve PR comments after the agent fixes them | When you send pull request review comments to the agent, resolve those threads on GitHub or Bitbucket as soon as the agent finishes its turn. Resolving is public — the PR's author and other reviewers see it — and it happens when the agent stops, so you still verify the changes and push them yourself | Off | Global → Project |
| Clean up a session when its pull request is merged | Once Plexus notices a session's PR merged, clean that session up without asking, following When you remove a session — and Ask each time deletes here, because nothing is there to answer it. A delete removes the worktree even if it has uncommitted changes, and takes a plexus/… branch Plexus cut if Also delete the local branch was left on the last time you removed a session by hand. A branch that existed before the session is always kept, and only a pull request Plexus saw while it was open qualifies | Off | Global → Project |
Code review
How the agent reviews your changes, and how the review-and-fix cycle behaves.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| AI code-review instructions | The instructions the agent follows when it reviews a session's changes on the Review tab | Senior-engineer prompt | Global → Project |
| Model for AI code review | Which model reviews a session's changes and writes the inline comments; Automatic uses the agent's default | Automatic (Claude's default) | Global → Project |
| Effort for AI code review | How hard the model thinks while reviewing. The review is a single pass that reads a diff and returns comments, so it gains less from a high setting than an agent that plans and edits | Automatic (Claude's default) | Global → Project |
| Review-and-fix round limit | The most times the automatic review-and-fix loop runs before it stops on its own | 10 | Global → Project |
| Review-and-fix agent instructions | What the fix agent is told before the comments themselves. The default keeps it to the comments it was given, so it doesn't wander into unrelated repository chores | Keep to the listed comments | Global → Project |
| Model for the review-and-fix agent | Which model applies the comments during a cycle. This is the expensive half of the cycle, so it is the setting to reach for first if rounds are taking too long | Automatic (Claude's default) | Global → Project |
| Effort for the review-and-fix agent | How hard the fix agent thinks while applying the comments | Automatic (Claude's default) | Global → Project |
| Allow MCP servers in the review-and-fix agent | Start your configured MCP servers for the fix agent. Off by default — they add startup time to every round and applying a review comment rarely needs them | Off | Global → Project |
Commit messages
How the agent writes a message from your staged changes.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| AI commit message instructions | The instructions the agent follows when it writes a commit message from your staged changes (the AI button on the session and project Git tabs) | Imperative-subject prompt | Global → Project |
| Model for commit messages | Which model drafts a commit message from your staged changes; Automatic uses the agent's default | Automatic (Claude's default) | Global → Project |
Fetching and remotes
What Plexus downloads from your remotes, and how often.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Fetch from remotes automatically | Quietly run git fetch in the background so the branch ahead/behind counts and the commit graph in the project Git client stay current. Only downloads — nothing is merged, checked out, or deleted — and pauses while the Plexus window is hidden | On | Global → Project |
| How often to fetch the open Git tab (minutes) | How long to wait between automatic fetches for the project whose Git tab you have open. A minimum, not a deadline: a fetch is skipped while a git operation is already running. 1–1440 minutes | 1 | Global → Project |
| How often to fetch other projects (minutes) | How long to wait between automatic fetches for your other projects. Raise it if you have many projects, large repositories, or a metered connection. 1–1440 minutes | 10 | Global → Project |
| Default Pull action | What a plain click of the Pull button does in the project's Git view: Fetch all (download only), Fast-forward if possible, Fast-forward only, or Rebase | Fast-forward if possible (ff) | Global → Project |
| Suggest a rebase when the base branch moves ahead | Show a badge on a session's Git button counting the commits a rebase onto its base branch would bring in — see Session Git. Plexus reads only the refs it has already fetched, so nothing extra is downloaded | On | Global → Project |
| Fetch the base branch before rebasing or merging | Download the latest base branch from your remote before a session rebase or merge, so the session catches up with work that has landed since it started — see Session Git. Off reshapes onto the copy already on your machine and makes no network request | On | Global → Project |
| Show commit author avatars from Gravatar | Look up commit-author avatars on Gravatar in the project Git client; off shows initials and makes no network requests | On | Global only |
The Default Pull action is also settable from the Pull button's own menu — its Default action picker saves the choice for that project. That same menu carries Fetch automatically, which turns automatic fetching on or off for that one project. Automatic fetching talks only to the git remotes you configured, using the credentials git already has; see Automatic fetching and the Privacy Policy. Suggest a rebase when the base branch moves ahead rides on those same fetches instead of making its own, so with automatic fetching off its count only changes when you fetch by hand. Fetch the base branch before rebasing or merging is the one that does make its own request — turn it off for a project on a metered connection, an offline machine, or a remote that wants to prompt you for credentials. Turning it off never blocks the operation, and neither does a failure: with the setting on, a download that doesn't succeed still lets the rebase or merge run against the last version Plexus fetched, with a warning that the base may be out of date. Show commit author avatars from Gravatar is a per-machine privacy switch: when on, Plexus queries Gravatar with a one-way SHA-256 hash of each commit author's email (never the address itself) and caches the results on disk; turned off, no request is made at all and the graph shows locally-drawn initials instead. See the Privacy Policy.
Connection checks
How Plexus notices that a provider has narrowed what it granted.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Check that provider connections still work | Quietly ask GitHub and Bitbucket whether the permissions they granted Plexus still cover what it needs, and tell you when they don't — see Connections. Off makes no such request and shows no such notice | On | Global only |
| How often to check provider connections (hours) | How long to wait between checks of the same connection. A minimum, not a schedule: Plexus also checks shortly after starting, and straight away when a provider refuses a request. 1–168 hours | 6 | Global only |
Check that provider connections still work is what catches a permission that was withdrawn on the provider's side — the kind of change that otherwise stays invisible until a repository search or a pull request fails. It talks only to GitHub or Bitbucket, from your machine, with the token already stored there. Raise How often to check provider connections (hours) on a metered connection or an account close to its provider's rate limits.
Worktrees & Hooks
Session folders
Where each session gets its own copy of your project.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Where to create session folders | Subfolder under the project root where each session's working copy is created (session name appended) | worktrees | Global → Project |
| Hide session folders from git | Add new session folders to the repo's .gitignore when they're inside the repo so they don't show up as changes | On | Global → Project |
| Default base branch | The base branch preselected in the New session dialog, in both New branch and Existing branch mode. Leave it unset and the default depends on the mode: the branch currently checked out in the project's main working copy when the session cuts a new branch, the repository's trunk (origin/HEAD, usually main) when it starts on an existing branch | (unset — see the description) | Project only |
Copied files
Untracked files like .env that a new session needs.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Copy files into new session folders | Copy the files and folders listed below into each new session's working copy when it's created | On | Global → Project |
| Files and folders to copy | Paths (relative to the project root) copied into each new session's working copy, even if git normally ignores them | .env, .env.local | Global → Project |
Copy files into new session folders + Files and folders to copy are how gitignored files like .env reach a fresh worktree. See Worktrees & environment.
Dev server ports
A unique block of localhost ports per session, so two dev servers never collide.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Assign dev server ports | Give each session its own block of 10 localhost ports, set as PLEXUS_PORT and friends in the environment of the agent, the session's terminal, and every lifecycle script (hook). Off also takes the Open localhost button out of a session's tab strip, immediately and without a restart | On | Global → Project |
| First port | The lowest port Plexus will hand out; 1024–32000 | 20000 | Global → Project |
| Last port | The range's exclusive upper bound: a whole block of 10 has to fit below it, so the default of 32000 hands out ports up to 31999. 1024–32767 | 32000 | Global → Project |
| Extra port variables | Additional environment variable names set to the session's first port, on top of the PLEXUS_PORT* set Plexus always provides. Clear the list to set none. Names starting with PLEXUS_, and ones the toolchain needs (PATH, HOME, SHELL, TERM, the Anthropic credentials), are refused | PORT | Global → Project |
| Write ports to file | A file inside the session's working copy (relative to it, e.g. .env.local) that Plexus keeps a marked block of the same port variables in, for tools that read a file rather than an environment. Empty writes nothing | empty | Global → Project |
Plexus sets these variables; it does not detect your framework or add flags to your commands. A dev server that doesn't read PORT — Vite, Astro, Angular — needs --port $PLEXUS_PORT on its command. See Dev server ports.
Lifecycle hooks
Scripts that run as a session is created, started, or removed.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Stop if a setup step fails | If a Create lifecycle script (hook) exits with an error, stop the rest of the sequence instead of carrying on | On | Global → Project |
| Hook timeout | How long a single lifecycle script may run before it's stopped and counted as failed. Raise it for a legitimately long setup step; 10–3600 seconds | 600 seconds | Global → Project |
| Run scripts committed to the repository | Run the scripts in a project's .plexus/hooks.json alongside the project hooks you set up in Plexus — see Hooks | On | Global → Project |
| How repository hooks combine with yours | The order a project's committed .plexus/hooks.json scripts and its app-managed project hooks run in: Repository hooks first, then your app-managed hooks; Your app-managed hooks first, then the repository's; or Repository hooks only (skip this project's app-managed hooks) | Repository hooks first, then your app-managed hooks (repoFirst) | Global → Project |
Run scripts committed to the repository is not an ordinary row: you flip it inside the hooks panel itself, next to the "Repo hooks active" banner, which appears on a project's Worktrees & Hooks page once that project's repository commits a .plexus/hooks.json — that per-project toggle is the only place it's editable, even though the value it starts from is the built-in default. How repository hooks combine with yours is an ordinary row in this section, at every scope, so you can pick an order before any project has a manifest.
The hooks editor itself sits at the bottom of this section. It keeps its own per-layer inheritance, so the section's Override parent settings switch does not govern it — see Hooks.
Advanced
This page isn't split into sections — most of its rows are per-machine escape hatches you'll rarely touch.
| Setting | What it does | Default | Where you set it |
|---|---|---|---|
| Maximum sessions kept ready | How many recently used sessions stay fully loaded so switching back is instant; past this the least-recently-used idle one is quietly shut down (0 = unlimited) | 8 | Global → Project |
| Terminal shell | The shell Plexus opens for the built-in terminal and in-app installers (Automatic picks the right one for your system, or point at a custom path) | Automatic | Global only |
| Custom shell path | The full path to the shell program to use, applied when Terminal shell is set to Custom | empty | Global only |
| Path to the Claude program | The full path to the claude program; leave blank to let Plexus find it automatically | empty | Global only |
| Diagnostic logging | Write a detailed troubleshooting log to plexus-diag.log in Plexus's data folder (applies live) | Off | Global only |
| Save diagnostics when a session gets stuck | When starting or resuming a session times out or is cancelled, append the recent activity trail to plexus-diag.log so it survives a restart | Off | Global only |
| Delete diagnostic logs after (days) | How many days of plexus-diag.log to keep; older lines are removed each time Plexus starts (0 keeps them forever) | 7 | Global only |
Turning Diagnostic logging on reveals a Reveal log button that opens the folder containing plexus-diag.log.
Beside it — and available whether or not the toggle is on — is Copy session diagnostics. Plexus always keeps the last few hundred lines of session start/stop activity in memory: which stage each start reached, how long each one took, and where it stopped. The button copies them to your clipboard so you can paste them into a bug report. This is the quickest thing to send if a session won't start, and it works even if you only think to look after it happened.
That trail is kept in memory only. Save diagnostics when a session gets stuck is what also writes it to plexus-diag.log when a start or resume times out or is cancelled, so it survives quitting Plexus. It's off by default because it puts repository paths, branch names and worktree folders on your disk; turn it on if you're chasing a session that only wedges occasionally. Diagnostic logging already covers this, so you don't need both.
The log file doesn't grow forever: every time Plexus starts it drops lines older than Delete diagnostic logs after (days), which is 7 by default. Set it to 0 to keep everything — useful when you're capturing a problem that takes weeks to reappear. The change takes effect at the next launch. If you pinned the log somewhere yourself with the PLEXUS_DIAG environment variable, Plexus leaves that file alone.
Session diagnostics contain session ids, stage names, timings, and repository paths — no file contents, prompts, or credentials. Plexus never transmits them on its own: the lines live in memory, and only reach your disk if you turn on one of the two settings above, your clipboard when you press Copy session diagnostics, or us if you attach them to a report yourself in Feedback — which shows you the exact text first.
Keybindings
Every keyboard shortcut is a global-only setting. Mod matches Cmd on macOS and Ctrl on Windows/Linux. Rebind, reset, or unbind each one in the Keybindings panel — see Keyboard shortcuts for the full set and their defaults.