Skip to main content

Settings

The CLI, the VS Code extension and the Desktop app read the same settings files, so a change you make in one applies in the others. This page covers where settings live, how they combine, and what each one does.

Models, API keys and subscriptions have their own page. See Providers.

Where settings live

ScopeLocationApplies toGood for
User~/.abacusai/config.jsonYou, in every project on your machineYour defaults: model, notifications, updates
Workspace<project>/.abacusai/config.jsonEveryone who opens that projectTeam rules: permissions, timeouts, project providers. Commit it to share.
Settings fileAny JSON file passed with abacusai --settings <file>One CLI sessionCI jobs and scripts
EnvironmentABACUS_* variablesThe current shell or containerQuick overrides, CI
VS CodeabacusAgent.* in the VS Code settings editorThe extension onlyEditor options such as panel position and inline diffs

Both config.json files use the same keys. A key that is missing from one file inherits its value from the layer below.

Precedence

When the same setting is defined in more than one place, the higher layer wins:

  1. Environment variables
  2. CLI flags such as --model
  3. Files passed with --settings
  4. Workspace config.json
  5. User config.json
  6. Built-in defaults

Objects merge key by key. Lists replace the lower layer whole. That matters for permission rules: a workspace allow list replaces your user allow list instead of adding to it. The /permissions view tells you when a list is being replaced this way.

Change a setting

In the CLI

Run /settings inside a session. Use Tab to switch between your user settings and the workspace settings.

KeyAction
Move between settings
Change a toggle or a choice
EnterEdit a number, or open a picker
TabSwitch between the user and workspace scope
rReset the setting in this scope so it inherits again
EscClose

Each row shows where its value comes from: user, workspace, env, override (a --settings file or a CLI flag) or default. A value that comes from env or override cannot be edited here, because the file would not win. Each row also says when a change takes effect: immediately, on your next conversation, or after a restart.

In VS Code

Click the gear icon at the top of the Abacus AI panel. The settings page opens as an editor tab.

The Abacus Settings page in VS Code, showing the General and Agent sections
SectionWhat you find there
AccountWho you are signed in as, your organization, this month's credit usage
GeneralNotifications, panel position
AgentAGENTS.md loading, default model, default permission mode, use my own API keys, local only mode, and the link to Local LLM providers
MCP ServersAdd, edit and remove servers. See MCP configuration.
SkillsInstalled skills and the marketplace. See Skills.

Settings that the CLI shares are written to your user config.json, so the CLI picks them up too.

By hand

Open either config.json in an editor. It is plain JSON.

{
"permissionMode": "ACCEPTEDITS",
"notifications": "sound",
"autoLoadAgentsMd": true,
"permissions": {
"allow": ["Bash(npm test *)", "Bash(git log *)"],
"deny": ["Read(.env)"]
}
}

To set a default model, pick it in /settings or in the extension rather than typing an id. The picker writes the right value for you.

Settings reference

All keys go in config.json. The CLI column is the label you see in /settings, and the VS Code column is the id in VS Code's settings editor. A blank cell means that surface does not show the setting.

KeyCLIVS CodeDefaultWhat it does
modelDefault modelabacusAgent.defaultModelAbacus.AI defaultModel that new conversations start on
smallModelAux modelunsetModel used for chat titles and summaries
permissionModeDefault modeabacusAgent.defaultPermissionModeNormalMode a session starts in. See Permission modes. Restart to apply.
permissions/permissionsunsetAllow, ask and deny rules. See Permission rules.
autoLoadAgentsMdLoad AGENTS.mdabacusAgent.autoLoadAgentsMdonSend your project's AGENTS.md at the start of each conversation
notificationsNotificationsabacusAgent.notificationsfullHow you are told a task finished while the window is unfocused: full, sound or off
useOwnApiKeysUse my own API keysabacusAgent.useOwnApiKeysoffBill supported Abacus.AI models to your own API key instead of credits. See Providers.
localOnlyLocal only modeabacusAgent.localOnlyoffShow local models and local chats only. See Providers.
compressToolOutputCompress tool outputoffShrink command output and file reads before they reach the model
loadExternalMcpConfigsExternal MCP configsabacusAgent.loadExternalMcpConfigsoffAlso read MCP servers from Cursor, VS Code, Claude Desktop and Windsurf. Restart to apply.
toolTimeoutMsTool timeout120 sHow long any single tool may run, from 1 to 600 seconds
bashToolTimeoutMsBash timeout120 sDefault timeout for shell commands
autoUpdateUpdatesautoauto installs and relaunches, prompt asks first, off only tells you an update exists. User scope only.
updateChannelUpdate channelstablelatest for stable releases or canary for the newest build. User scope only.
providers/providersLocal LLM providersunsetYour own model providers. See Providers.

Permission modes

The agent asks before it runs tools that change things. The mode decides how much it asks.

ModeWhat happenspermissionMode value
NormalAsks before every edit and commandDEFAULT
Accept editsApplies file edits without asking, still asks for commandsACCEPTEDITS
PlanExplores and writes a plan, then asks you to approve it before making changesPLAN
YoloApproves everything except questions it asks youYOLO

Press Shift+Tab in the CLI to cycle modes for the current session. Press it twice quickly for Yolo. In VS Code, use the mode dropdown next to the send button.

To start in a mode every time, set permissionMode, or pass --permission-mode normal|accept-edits|plan|yolo to the CLI. --auto-accept-edits and --dangerously-skip-permissions are shorthands for Accept edits and Yolo.

Permission rules

Rules decide specific tools before the mode gets a say. They live under permissions in either config.json. Edit them with /permissions in the CLI, or answer "always allow" when the agent asks.

{
"permissions": {
"allow": ["Bash(git log *)", "Bash(npm test *)", "Read"],
"ask": ["Edit(src/generated/**)"],
"deny": ["Read(.env)", "Bash(rm -rf *)"]
}
}
PatternMatches
Bash or Bash(*)Every use of the tool
Bash(git log *)Commands that start with git log
Read(.env), Edit(src/**)File paths, with gitignore-style wildcards
mcp__github__create_issueOne MCP tool, written as mcp__<server>__<tool>

Deny rules are checked first, then ask, then allow. The first match wins. With no match, the mode decides. For one session, --allowed-tools and --disallowed-tools add to the allow and deny lists.

"Always allow" answers are saved to the workspace config.json. Because lists replace rather than merge, keep your shared rules in one scope.

Environment variables

Environment variables override every file. They are handy in CI and containers.

VariableWhat it sets
ABACUS_API_KEYSigns you in without a stored login
ABACUS_MODELThe model, same as model
ABACUS_PERMISSION_MODEnormal, accept-edits, plan or yolo
ABACUS_AUTO_LOAD_AGENTS_MDtrue or false
ABACUS_AUTO_UPDATEauto, prompt or off
ABACUS_TOOL_TIMEOUT_MSTool timeout in milliseconds
ABACUS_BASH_TIMEOUT_MSShell command timeout in milliseconds

API keys for your own providers, such as OPENAI_API_KEY, are covered on the Providers page.

CLI flags

Run abacusai --help for the full list. These flags change settings for one session:

FlagEffect
--model <id>Model for this session
--permission-mode <mode>normal, accept-edits, plan or yolo
--allowed-tools <pattern>Add an allow rule. Repeat for more.
--disallowed-tools <pattern>Add a deny rule. Repeat for more.
--add-dir <path>Let the agent work in another directory too
--no-agents-mdSkip AGENTS.md
--settings <file>Merge a JSON settings file
--mcp-config <file>Add an MCP config file
--print, -pPrint the answer and exit, without the interactive interface

VS Code settings

A few options only make sense in the editor. Find them in VS Code's settings editor under "Abacus", or click "Open settings" at the bottom of the Abacus Settings page.

SettingWhat it does
abacus.viewKindWhere the panel opens: primary sidebar, secondary sidebar, an editor tab, or an editor tab to the side
abacusAgent.inlineDiffEditorShow the agent's edits inline in your file with accept and reject buttons, instead of a two-pane diff
abacusAgent.notificationsSound and popup, sound only, or off
abacusAgent.defaultModelModel for new conversations
abacusAgent.defaultPermissionModeMode new conversations start in

Troubleshooting

A setting does not apply

Open /settings and look at the tag on the row. env or override means an environment variable, a --settings file or a flag is winning. workspace while you edited the user file means the workspace file wins. For lists such as permission rules, remember that the workspace list replaces the user list.

The CLI ignores config.json

A missing comma or bracket makes the whole file unreadable, and the CLI falls back to defaults. Paste the file into any JSON validator to find the spot.

A change did not take effect

permissionMode and loadExternalMcpConfigs apply the next time you start. The model and the timeouts apply to your next conversation. To change the current session, use /model or Shift+Tab.

For further help, reach out at support@abacus.ai.