DocsGetting started

Configuration

Configuration is JSON, in at most two files you'll ever edit:

shipped defaults
   ↓  merged under
~/.config/podcode/config.json     global — everything you run
   ↓  merged under
<workspace>/.podcode/config.json  project — this repository only

Later layers win for scalar values. Arrays concatenate rather than replace — that is the one merge rule worth memorising, because it is the source of the most common configuration surprise: a harness declared in both layers arrives with its chain doubled. Declare each chain in exactly one layer.

The keys

Every capability in these docs is one of these:

KeyWhat it configuresPage
agentCustom agents, and overrides on built-in onesAgents
harnessNamed agent chainsHarnesses
permissionProject-wide permission rulesPermissions
memoryThe embedder and retrieval settingsMemory
providerPer-provider settings and model registry patchesProviders
plugin, plugin_configPlugin registrationPlugins
commandSlash-command templates
instructionsExtra files folded into the system prompt

The workspace trust boundary

.podcode/config.json ships inside the repository. For a repository you just cloned, that file is written by whoever wrote the repository — so the keys that grant code execution, redirect credentials, or claim operator identity are stripped from the project layer before it merges, and are honoured only from your own global config:

plugin, plugin_autodiscover, plugin_config, agent, agent_autodiscover, operator_uid, and — inside provider — api_key, base_url, env, and npm.

Two dual-use keys are kept but reduced: slash-command templates from a project keep their text with inline shell expansion disarmed, and provider keeps its models registry patches while losing the four sub-keys above.

Editing

Podcode reads config at server start and caches it per workspace. Settings writes are applied live; hand-edits to config.json want a restart:

Shell
podcode

A malformed config is not silently half-applied — if the merged result fails validation, the shipped defaults are used and the reason is written to the log.

Next

  • Agents — the first thing most people configure.
  • Harnesses — and the second.