Skip to content

Project model sheets that override the global sheet #34

Description

@thisguymartin

Problem

setup-pstack writes one global model sheet per harness, so every repository gets the same role assignments. A repository cannot choose its own models. For example, you cannot keep a client repository on subscription lanes while a personal repository uses gateway lanes such as OpenRouter.

Upstream does not support this either. Cursor pstack writes one global rule, ~/.cursor/rules/pstack-models.mdc. open-pstack writes to the harness config home (CLAUDE_CONFIG_DIR or CODEX_HOME, else ~/.claude or ~/.codex) and never reads a sheet from the repository. Project sheets are a pstack-flex divergence and need an entry in UPSTREAM-FLEX.md.

Change

A project sheet, when present, replaces the global sheet for that project. Without one, the global sheet applies.

Parent Global sheet Project sheet
Claude Code ~/.claude/pstack-models.md <project root>/.claude/pstack-models.md
Codex ~/.codex/pstack-models.md <project root>/.codex/pstack-models.md
OpenCode ~/.config/opencode/pstack-models.md <project root>/.opencode/pstack-models.md
  • The project root is the parent directory of git rev-parse --path-format=absolute --git-common-dir, so all worktrees of a repository share one project sheet. Outside a git repository there is no project sheet.
  • The parent harness checks for the project sheet once, before the first configured role launches. If the file exists, it is the sheet for the whole run, even when the global sheet is already loaded into context. Children never look for a sheet themselves.
  • The sheets are never merged role by role. Every sheet carries every documented role, so the one in use always has an answer.
  • When reporting a panel, the parent says which sheet it used.
  • setup-pstack asks on each run whether to write the global sheet or the project sheet. A new project sheet starts from the current global assignments, and every choice is probed before it is written, the same as the global sheet.
  • A project sheet stays on the machine. setup-pstack adds it to .git/info/exclude and never commits it. Deleting the file returns the project to the global sheet.

Out of scope

Model matrix changes and role defaults. #29 bundles the sheet scope with GPT-6.1 Sol and an architect default; this issue covers the sheet scope only. PR #30 implements it for Claude Code and Codex. OpenCode depends on #33.

Done when

  • bash scripts/check.sh passes, and the static invariants cover the three project sheet paths and the replace-not-merge rule.
  • From the installed candidate in Claude Code, Codex, and OpenCode, each of these passes live:
    • The scope question appears.
    • A project sheet is written and listed in .git/info/exclude.
    • A role assigned differently in the two sheets dispatches from the project sheet.
    • After the project sheet is deleted, the same role dispatches from the global sheet.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions