Mirrors ~/.pi/agent/ as the authoritative copy. models.json becomes
models.json.template with ${ZENMUX_API_KEY} substituted; the real value stays
in secrets/zenmux.env, which is untracked and enforced by the pre-commit guard.
Excluded with rationale: auth.json, trust.json, models-store.json, sessions/,
herdr-agent-state.ts (installer-managed, overwritten on reinstall) and the
third-party skills under ~/.agents/skills.
Recorded during migration: the configured fallback model zenmux/x-ai/grok-4.6 is
absent from models.json, so pi falls back to an undeclared custom model id with
no context window, cost table or thinkingLevelMap. Fixing that is a behaviour
change and is deferred rather than folded into this zero-change migration.
3.0 KiB
Pi User-Level Runtime Configuration
Authoritative copy of the user-global Pi configuration that lives at
~/.pi/agent/ on the host. Scenario-specific configuration lives in
../scenarios/.
Deploy with:
../scripts/deploy-runtime.sh # dry run
../scripts/deploy-runtime.sh --apply
Contents
| Path | Live target | Notes |
|---|---|---|
agent/settings.json |
~/.pi/agent/settings.json |
No credentials. |
agent/models.json.template |
~/.pi/agent/models.json |
Rendered; ${ZENMUX_API_KEY} comes from ../secrets/zenmux.env. Mode 0600. |
agent/extensions/pi-memo-trust.ts |
~/.pi/agent/extensions/ |
Grants project trust to the memo-inbox workspace only. |
agent/prompts/*.md |
~/.pi/agent/prompts/ |
Interactive prompt templates. Gateways pass --no-prompt-templates, so these are for human use only. |
Deliberately not tracked
| Path | Why |
|---|---|
~/.pi/agent/auth.json |
OAuth/API credential store. Empty on this host but still excluded on principle. |
~/.pi/agent/trust.json |
Host-local trust decisions; machine state, not configuration. |
~/.pi/agent/models-store.json |
Downloaded model catalogue cache; regenerated by pi update --models. |
~/.pi/agent/sessions/ |
Conversation history. |
~/.pi/agent/extensions/herdr-agent-state.ts |
Installed and overwritten by herdr (HERDR_INTEGRATION_ID=pi). Managing it here would fight the installer. It is inert unless HERDR_ENV=1, but it is still loaded and parsed on every pi start, which is one reason every scenario must pass --no-extensions. |
~/.agents/skills/{find-skills,modsearch,summarize} |
Third-party skills installed by other tooling. Not authored here. They leak into any scenario that omits --no-skills — see ../docs/isolation-baseline.md. |
Observations recorded during migration (2026-08-27)
-
The fallback model is not declared.
models.jsoncontains onlyopenai/gpt-5.6-luna, while the Curator service is configured withCURATOR_PI_FALLBACK_MODEL=zenmux/x-ai/grok-4.6. Pi therefore emitsModel not found … Using custom model idon every fallback, and the fallback runs without a declared context window, cost table orthinkingLevelMap. Cost and token accounting for fallback turns is consequently unavailable. Adding the model is a behaviour change and is therefore not part of the zero-change migration; it is tracked as a follow-up. -
settings.jsonsetsdefaultProvider: zenmux,defaultModel: openai/gpt-5.6-luna,defaultThinkingLevel: high. Gateways override all three on the command line, so these only affect interactive use. -
settings.jsoncarries nocompactionblock, so the defaults apply (enabled: true,reserveTokens: 16384,keepRecentTokens: 20000). With a 1,050,000-token context window auto-compaction effectively never fires; each gateway must rotate sessions itself. -
trust.jsontrusts only/home/claw/pi-workspaces/memo-inbox. The Curator workspace is not trusted and relies on--approveper run.