Files
Kai 98635022d0 feat(runtime): track user-level Pi configuration with the provider key templated
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.
2026-08-26 22:52:48 -07:00
..

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)

  1. The fallback model is not declared. models.json contains only openai/gpt-5.6-luna, while the Curator service is configured with CURATOR_PI_FALLBACK_MODEL=zenmux/x-ai/grok-4.6. Pi therefore emits Model not found … Using custom model id on every fallback, and the fallback runs without a declared context window, cost table or thinkingLevelMap. 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.

  2. settings.json sets defaultProvider: zenmux, defaultModel: openai/gpt-5.6-luna, defaultThinkingLevel: high. Gateways override all three on the command line, so these only affect interactive use.

  3. settings.json carries no compaction block, 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.

  4. trust.json trusts only /home/claw/pi-workspaces/memo-inbox. The Curator workspace is not trusted and relies on --approve per run.