Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/gentle-shell.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ At 140 columns or wider, fullscreen splits into a live header row over a transcr
✿ Gentle Shell ⟡ ~/work/gentle-pi main ⟡ gpt-5.5 · medium · team ctx ▰▰▰▰▱▱▱▱ 45% ⟡ $9.49 sub
```

The fullscreen sidebar Status card shows a single `Profile` field for the effective repository profile. It uses the same pin precedence as profile routing: a valid clone-local pin wins and appends `(local)`, a valid repository declaration wins and appends `(repo)`, and the globally active profile has no suffix. Invalid, stale, or unreadable pin files are skipped in precedence order: a valid repository declaration may still win after an unusable local pin, and the global profile is used only when neither pin resolves. The shell resolves this state initially, on known in-process invalidations, and through debounced parent-directory watchers, so atomic profile and pin replacements appear without per-frame filesystem or Git resolution. A missing, unreadable, or invalid global profile store leaves the line hidden. The compact bottom bar remains unchanged and does not add a profile segment.

- The header is one row, always visible, and carries only what changes every frame: session identity on the left (brand, cwd, branch, dirty count, model · effort · profile) and the two live counters right-aligned (the context gauge and session cost). It never shows the working/thinking state or extension statuses — those stay in the prompt title and the compact bar. When the terminal is too narrow for everything, segments give way in a fixed order — profile, then effort, then the whole cwd/branch/dirty group — before the counters are touched; below that, only the brand survives, and below that the header renders nothing.
- The right rail scrolls **Status → Changes → TODO**, each an event-driven card that only repaints when its own state changes: a model switch or a cost tick refreshes the header, not the rail. Every card (sidebar or not) paints the same rose frame — the rounded border in the theme's plain border role, the title in the accent role — the look every `CARD_TONE.INFO` card in Gentle Shell uses (warning/error/success cards keep their own tone colors).
- The Status card carries only what an explicit event refreshes: Project (cwd, branch, session name, active profile), Changes, and Integrations (other extensions' statuses). Model, effort, context, cost, and the per-model usage table live in the header instead — the header ticks every frame, so duplicating them in a card would just make that card repaint every frame too.
Expand Down
2 changes: 2 additions & 0 deletions docs/readme-reference.md
Original file line number Diff line number Diff line change
Expand Up @@ -950,6 +950,8 @@ For a given working directory the winner is the local pin, then the repository d

In a pinned repository the pinned profile governs subagent launches: the agents it names take its model and effort, and the agents it omits return to inherit (their own definition, then the default model). The globally active profile and writes made through `/gentle:models` do not reach those launches, which `/gentle:models` reports when it runs inside a pinned repository. `enter` follows the same boundary: inside a pinned repository it re-pins that repository instead of writing the global routing, so the panel's main key can never move another repository's routing. The panel states which layer won, names the file that holds it, and marks the profile with `(pinned)`.

The fullscreen Gentle Shell Status card shows the same effective profile in one `Profile` field: it adds `(local)` when a valid clone-local pin wins, `(repo)` when a valid repository declaration wins, and no suffix for the global active profile. Invalid, stale, or unreadable pins are skipped in precedence order; a valid repository declaration can win after an unusable local pin, and the global profile is used only when neither resolves. An unavailable or invalid global profile store leaves the field hidden. The shell snapshots this state initially and refreshes it on known in-process invalidations or debounced parent-directory watcher events, including atomic replacements; repeated Status/header rendering performs no profile filesystem or Git resolution. The compact bottom bar remains unchanged and does not show this field.

To share a pin, commit the repository declaration. When `.pi/` is ignored, Git cannot re-include a nested file until its parent directories are visible. The panel therefore prints these ordered root `.gitignore` rules, which keep unrelated `.pi` content ignored while making only the declaration committable:

```gitignore
Expand Down
Loading