gentle-pi 2.5.0 → 2.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +139 -30
- package/assets/agents/gentle-ai-worker.md +4 -0
- package/assets/agents/jd-fix-agent.md +18 -0
- package/assets/agents/jd-judge-a.md +1 -1
- package/assets/agents/jd-judge-b.md +1 -1
- package/assets/agents/sdd-apply.md +7 -5
- package/assets/agents/sdd-archive.md +5 -3
- package/assets/agents/sdd-design.md +4 -0
- package/assets/agents/sdd-explore.md +4 -0
- package/assets/agents/sdd-init.md +4 -0
- package/assets/agents/sdd-onboard.md +4 -0
- package/assets/agents/sdd-proposal.md +4 -0
- package/assets/agents/sdd-remediate.md +37 -0
- package/assets/agents/sdd-research.md +26 -3
- package/assets/agents/sdd-spec.md +4 -0
- package/assets/agents/sdd-status.md +9 -75
- package/assets/agents/sdd-sync.md +4 -0
- package/assets/agents/sdd-tasks.md +4 -0
- package/assets/agents/sdd-verify.md +5 -3
- package/assets/chains/sdd-full.chain.md +4 -0
- package/assets/chains/sdd-plan.chain.md +4 -0
- package/assets/chains/sdd-verify.chain.md +4 -0
- package/assets/migrations/managed-assets-v2.5.0.json +7 -0
- package/assets/orchestrator-delegation.md +21 -3
- package/assets/sdd-orchestrator-workflow.md +54 -21
- package/assets/support/sdd-status-contract.md +34 -90
- package/contracts/telemetry/runtime-aggregate-v1.schema.json +67 -0
- package/docs/telemetry.md +57 -1
- package/docs/windows-startup-console-visibility.md +18 -0
- package/extensions/ask-user-choice.ts +143 -15
- package/extensions/codegraph-tools.ts +1 -0
- package/extensions/gentle-agents.ts +795 -50
- package/extensions/gentle-ai.ts +2033 -322
- package/extensions/gentle-shell.ts +145 -42
- package/extensions/gentle-todo.ts +47 -12
- package/extensions/quiet-tools.ts +1 -0
- package/extensions/runtime-metrics.ts +121 -0
- package/extensions/sdd-init.ts +2 -2
- package/extensions/startup-banner.ts +52 -75
- package/lib/agent-profiles.ts +550 -0
- package/lib/agents-completion-delivery.ts +72 -0
- package/lib/agents-config.ts +7 -10
- package/lib/agents-history.ts +9 -1
- package/lib/agents-messaging.ts +187 -0
- package/lib/agents-protocol.ts +77 -5
- package/lib/agents-runner.ts +548 -26
- package/lib/agents-thread-view.ts +57 -0
- package/lib/agents-view-layout.ts +40 -0
- package/lib/agents-view.ts +548 -191
- package/lib/agents-widget.ts +33 -14
- package/lib/gentle-ai-binary.ts +3 -1
- package/lib/gentle-ai-renderer.ts +8 -6
- package/lib/native-review-cli.ts +288 -1
- package/lib/orchestrator-presence.ts +337 -0
- package/lib/profiles-orchestrator.ts +203 -0
- package/lib/review-candidate-view-owner.ts +296 -46
- package/lib/review-candidate-view.ts +30 -20
- package/lib/review-consent-component.ts +247 -0
- package/lib/review-consent-ui.ts +53 -8
- package/lib/review-host-relay.ts +28 -0
- package/lib/review-integration-v2.ts +187 -5
- package/lib/review-last-event-controller.ts +7 -4
- package/lib/review-reminder-receipt.ts +74 -0
- package/lib/review-session-standing-permission.ts +27 -6
- package/lib/runtime-metrics-children.ts +197 -0
- package/lib/runtime-metrics-delivery.ts +68 -0
- package/lib/runtime-metrics-native.ts +174 -0
- package/lib/runtime-metrics-policy.ts +51 -0
- package/lib/runtime-metrics.ts +308 -0
- package/lib/sdd-preflight.ts +362 -81
- package/lib/sdd-research-capabilities.ts +228 -0
- package/lib/sdd-status.ts +29 -7
- package/lib/session-worktree-registry.ts +118 -0
- package/lib/shell-bar.ts +47 -1
- package/lib/shell-card.ts +1 -4
- package/lib/shell-changes-view.ts +362 -37
- package/lib/shell-changes.ts +81 -1
- package/lib/shell-prompt.ts +11 -15
- package/lib/shell-sidebar-banner.ts +11 -0
- package/lib/shell-sidebar-layout.ts +213 -0
- package/lib/shell-sidebar.ts +41 -0
- package/lib/shell-todo.ts +28 -11
- package/lib/telemetry-trigger.ts +2 -0
- package/package.json +6 -3
- package/runtime/gentle-ai-binary.mjs +3 -1
- package/runtime/native-review-cli.mjs +288 -1
- package/runtime/review-integration-v2.mjs +187 -5
- package/runtime/telemetry-trigger.mjs +2 -0
- package/scripts/build-runtime-modules.mjs +9 -1
- package/scripts/check-types.mjs +125 -0
- package/scripts/gentle-ai-installer.mjs +10 -10
- package/scripts/install-gentle-ai.mjs +12 -0
- package/scripts/install-tui-mode-setting.mjs +114 -0
- package/scripts/test-packed-runner.mjs +16 -2
- package/scripts/types-baseline.json +95 -0
- package/scripts/verify-package-files.mjs +4 -2
- package/skills/_shared/review-ledger-contract.md +17 -1
- package/skills/issue-creation/SKILL.md +3 -3
- package/skills/judgment-day/SKILL.md +17 -3
- package/skills/judgment-day/references/prompts-and-formats.md +14 -3
- package/tests/agent-profiles.test.ts +722 -0
- package/tests/agents-completion-delivery.test.ts +94 -0
- package/tests/agents-config.test.ts +62 -0
- package/tests/agents-fake-child.ts +15 -1
- package/tests/agents-grouping.test.ts +179 -0
- package/tests/agents-integration.test.ts +100 -0
- package/tests/agents-messaging.test.ts +94 -0
- package/tests/agents-protocol.test.ts +45 -0
- package/tests/agents-queries.test.ts +190 -0
- package/tests/agents-responsive.test.ts +43 -0
- package/tests/agents-runner.test.ts +571 -14
- package/tests/agents-thread-view.test.ts +45 -0
- package/tests/agents-view.test.ts +476 -65
- package/tests/agents-widget.test.ts +31 -1
- package/tests/artifact-language.test.ts +25 -2
- package/tests/ask-user-choice.test.ts +169 -3
- package/tests/asset-installation-runtime.test.ts +108 -0
- package/tests/autonomous-guard.test.ts +116 -1
- package/tests/codegraph-tools.test.ts +2 -1
- package/tests/delegated-key-learnings-contract.test.ts +1 -1
- package/tests/devbinary/native-review-parity.devtest.ts +2 -0
- package/tests/feature-request-form.test.ts +67 -0
- package/tests/fixtures/agents-messaging-child.mjs +5 -0
- package/tests/fixtures/runtime-metrics-native-batches.json +6 -0
- package/tests/gentle-agents.test.ts +1454 -33
- package/tests/gentle-ai-binary.test.ts +7 -2
- package/tests/gentle-ai-installer.test.ts +47 -47
- package/tests/gentle-ai-renderer.test.ts +38 -0
- package/tests/gentle-ai.test.ts +944 -4
- package/tests/gentle-shell.test.ts +303 -12
- package/tests/gentle-todo.test.ts +54 -10
- package/tests/install-tui-mode-setting.test.ts +324 -0
- package/tests/issue-creation-skill.test.ts +22 -0
- package/tests/model-routing-authority.test.ts +12 -0
- package/tests/native-review-capability-contract.test.ts +23 -1
- package/tests/native-review-cli.test.ts +277 -3
- package/tests/native-review-parity.test.ts +14 -7
- package/tests/native-sdd-attempt-authority.test.ts +7 -2
- package/tests/orchestrator-presence.test.ts +389 -0
- package/tests/package-manifest.test.ts +232 -7
- package/tests/profiles-orchestrator.test.ts +208 -0
- package/tests/quiet-tool-rendering.test.ts +1 -0
- package/tests/rdd-aware-verification-contract.test.ts +10 -0
- package/tests/review-agent-end-preflight.test.ts +332 -24
- package/tests/review-candidate-view.test.ts +304 -6
- package/tests/review-consent-ui.test.ts +352 -0
- package/tests/review-contract-prompt.test.ts +14 -0
- package/tests/review-controller-native-routing.test.ts +563 -3
- package/tests/review-controller.test.ts +1 -1
- package/tests/review-host-relay-restart-parity.test.ts +142 -1
- package/tests/review-host-relay-routing.test.ts +364 -4
- package/tests/review-host-relay.test.ts +29 -0
- package/tests/review-integration-v2-forward.test.ts +44 -0
- package/tests/review-integration-v2.test.ts +164 -0
- package/tests/review-last-event-closure.test.ts +105 -1
- package/tests/review-ledger-contract.test.ts +61 -6
- package/tests/review-reminder-receipt.test.ts +62 -0
- package/tests/review-session-standing-permission-controller.test.ts +52 -4
- package/tests/review-session-standing-permission.test.ts +30 -0
- package/tests/runtime-harness.mjs +447 -39
- package/tests/runtime-metrics-children.test.ts +207 -0
- package/tests/runtime-metrics-delivery.test.ts +85 -0
- package/tests/runtime-metrics-extension.test.ts +196 -0
- package/tests/runtime-metrics-model.test.ts +76 -0
- package/tests/runtime-metrics-native.test.ts +275 -0
- package/tests/runtime-metrics-policy.test.ts +62 -0
- package/tests/runtime-metrics.test.ts +187 -0
- package/tests/sdd-agent-tools.test.ts +10 -1
- package/tests/sdd-execution-routing-contract.test.ts +28 -0
- package/tests/sdd-managed-runtime-settlement.test.ts +331 -0
- package/tests/sdd-native-managed-uptake.test.ts +253 -0
- package/tests/sdd-planning-routing-contract.test.ts +45 -0
- package/tests/sdd-preflight.test.ts +252 -8
- package/tests/sdd-research-capabilities.test.ts +256 -0
- package/tests/sdd-research-live.test.ts +241 -0
- package/tests/sdd-selection-transport.test.ts +504 -0
- package/tests/sdd-status.test.ts +51 -0
- package/tests/session-worktree-registry.test.ts +135 -0
- package/tests/shell-card.test.ts +24 -3
- package/tests/shell-changes-view.test.ts +471 -8
- package/tests/shell-changes.test.ts +168 -0
- package/tests/shell-prompt.test.ts +28 -6
- package/tests/shell-sidebar-banner.test.ts +23 -0
- package/tests/shell-sidebar-layout.test.ts +387 -0
- package/tests/shell-sidebar.test.ts +50 -0
- package/tests/shell-todo.test.ts +100 -11
- package/tests/startup-banner.test.ts +126 -0
- package/tests/telemetry-trigger.test.ts +3 -1
package/README.md
CHANGED
|
@@ -73,18 +73,19 @@ Most coding-agent sessions fail for operational reasons, not model reasons:
|
|
|
73
73
|
| **Configurable startup intro** | Adds a rose/text-logo startup intro, compact runtime panel, color presets, and commands to hide or show the decorative parts. |
|
|
74
74
|
| **Work routing discipline** | Small tasks stay inline. Context-heavy exploration can be delegated. Large or risky changes go through SDD/OpenSpec. |
|
|
75
75
|
| **SDD/OpenSpec assets** | Installs phase agents and chains for `init`, `onboard`, `explore`, `proposal`, `spec`, `design`, `tasks`, `apply`, `verify`, `sync`, and `archive`. |
|
|
76
|
-
| **Lazy SDD preflight** |
|
|
76
|
+
| **Lazy SDD preflight** | Confirms SDD mode, artifact store, delivery strategy, and review budget on the first SDD invocation of every interactive session, including saved preferences; parent dispatch transports the confirmed block to RPC SDD children. |
|
|
77
77
|
| **Subagent orchestration** | Keeps one parent session responsible while child agents explore, implement, test, or review with focused context. |
|
|
78
78
|
| **Strict TDD support** | When project config declares a test command, apply/verify phases must record RED → GREEN → TRIANGULATE → REFACTOR evidence. |
|
|
79
79
|
| **Closed choice prompts** | Per-option hover/click/wheel in fullscreen; keyboard selection in either TUI mode. |
|
|
80
80
|
| **Native pointer regions** | Compose hover, press, click, and wheel behavior around public TUI components. |
|
|
81
|
+
| **Agent overlay close control** | Adds a header close button that adapts to available width. |
|
|
81
82
|
| **Reviewer protection** | Surfaces review workload risk before a task turns into an oversized PR. |
|
|
82
83
|
| **Per-agent model assignment** | Pi-native modal for assigning stronger or cheaper models to specific SDD/custom agents. |
|
|
83
84
|
| **Skill discovery registry** | Maintains `.atl/skill-registry.md` from project and user skills so review/comment/PR workflows do not silently miss the right skill. |
|
|
84
85
|
| **Skill creation workflow** | Provides the `gentle-ai-skill-creator`/`gentle-ai-skill-improver` skills, `/skill-creation` prompt, and packaged style guide for LLM-first skills. |
|
|
85
86
|
| **Delivery skills** | Includes issue-first PRs, chained PRs, work-unit commits, cognitive docs, comment writing, and Judgment Day review. |
|
|
86
87
|
| **Bounded native review** | Freezes one candidate, dispatches only controller-selected lenses, and records native authority. Review outcomes are informational; delivery follows ordinary repository policy. |
|
|
87
|
-
| **Verified native runtime** | Provisions the exact package-local Gentle AI v2.
|
|
88
|
+
| **Verified native runtime** | Provisions the exact package-local Gentle AI v2.8.1 runtime: signed, SHA-256-pinned release archives on Darwin/Linux and a Go SumDB-verified source build on Windows x64/arm64. It validates package-local integrity and rejects PATH, global, sibling, symlink, and mode fallbacks. |
|
|
88
89
|
| **Runtime safety** | Blocks destructive shell commands, asks for confirmation for sensitive operations, and blocks direct read/write/edit access to sensitive paths. |
|
|
89
90
|
|
|
90
91
|
## Native pointer regions
|
|
@@ -109,7 +110,7 @@ Pointer input is fullscreen-only. Regions preserve a consuming child's native re
|
|
|
109
110
|
`Text`, activate on press or wheel, synthesize outside leave events, or alter terminal tracking.
|
|
110
111
|
Callers own keyboard policy, theme state, and business actions.
|
|
111
112
|
|
|
112
|
-
**Migration note:** Do not enable `pi-tool-cards` and `quiet-tools` together: Pi rejects duplicate `bash`, `read`, `edit`, and `write` registrations. Disable or remove the standalone package during migration; gentle-pi does not
|
|
113
|
+
**Migration note:** Do not enable `pi-tool-cards` and `quiet-tools` together: Pi rejects duplicate `bash`, `read`, `edit`, and `write` registrations. Disable or remove the standalone package during migration; gentle-pi does not change those package registrations or delete that repository. The global fullscreen setting described below is a separate install-time change.
|
|
113
114
|
|
|
114
115
|
## Install
|
|
115
116
|
|
|
@@ -117,6 +118,14 @@ Callers own keyboard policy, theme state, and business actions.
|
|
|
117
118
|
pi install npm:gentle-pi@0.14.0
|
|
118
119
|
```
|
|
119
120
|
|
|
121
|
+
### Install-time fullscreen
|
|
122
|
+
|
|
123
|
+
For this release, a successful postinstall in Pi's **global npm-managed** `agent-home/npm/node_modules/gentle-pi` or exact **global Pi Git-managed** `agent-home/git/github.com/Gentleman-Programming/gentle-pi` installation persists `"tuiMode": "fullscreen"` in `agent-home/settings.json`, preserving other settings. Agent home resolves through `GENTLE_PI_AGENT_HOME`, then `PI_CODING_AGENT_DIR`, then `~/.pi/agent`. Use `/settings` to switch back to regular; rerunning a recognized postinstall resets it to fullscreen. Existing project overrides still take precedence.
|
|
124
|
+
|
|
125
|
+
Project-local installs (`pi install -l`), Git installs outside that exact global Pi path, local-path installs, temporary packages, development checkouts, ordinary npm consumers, and pnpm symlink-store packages do **not** receive this change. Updates or installs that do not execute postinstall cannot reassert it; this is not a universal install/update guarantee or a change to historical releases.
|
|
126
|
+
|
|
127
|
+
Malformed/nonobject JSON, symlink/nonregular settings, unsafe paths, or a busy settings lock fail without replacing settings. The installer coordinates with Pi's cooperative settings lock and uses atomic replacement; it does not guarantee safety against noncooperating writers or malicious concurrent directory replacement. Already-fullscreen settings remain byte-identical. Native installation failure leaves settings untouched; `GENTLE_PI_SKIP_GENTLE_AI_INSTALL=1` skips only native provisioning, not the recognized global fullscreen setting.
|
|
128
|
+
|
|
120
129
|
### RDD version policy
|
|
121
130
|
|
|
122
131
|
Native RDD started in `gentle-pi` `v0.15.0` on 2026-07-10 with bounded review transactions. Every release from `v0.15.0` onward is part of the unstable RDD development line. New releases will continue improving RDD until the project declares the line stable. The stable version for normal use without native RDD is the last preceding release, `v0.14.0`.
|
|
@@ -129,7 +138,7 @@ pi install npm:gentle-pi@0.14.0
|
|
|
129
138
|
pi install npm:gentle-pi@latest
|
|
130
139
|
```
|
|
131
140
|
|
|
132
|
-
The latest RDD package installs Gentle AI only into its private `.gentle-ai/` directory. Darwin and Linux use pinned release assets with asset and executable SHA-256 verification (signed archives for stable pins such as the current v2.
|
|
141
|
+
The latest RDD package installs Gentle AI only into its private `.gentle-ai/` directory. Darwin and Linux use pinned release assets with asset and executable SHA-256 verification (signed archives for stable pins such as the current v2.8.1; raw prerelease binaries only under a prerelease pin). Windows x64 and arm64 build the exact `v2.8.1` source tag with a local Go 1.25.10+ toolchain, a sealed Go environment, `GOTOOLCHAIN=local`, and `GOSUMDB=sum.golang.org`; it does not download Go automatically. Windows provenance is Go-toolchain plus SumDB evidence and postinstall tamper detection, **not** Authenticode or protection against a malicious joint binary-and-manifest replacement. Package-private locks coordinate cooperative concurrent or crashed installers; their tombstones fail closed. A malicious same-user process with write access to package-private `node_modules` is outside that protocol because it can already replace package code, binary, or manifest, and portable Node has no pathname-delete CAS. It never uses `PATH` or a global `gentle-ai` installation. For development or offline installs only, set `GENTLE_PI_SKIP_GENTLE_AI_INSTALL=1`; native review operations then fail closed with an actionable `package-local-binary-missing` error. To recover explicitly, if `GENTLE_PI_SKIP_GENTLE_AI_INSTALL` is set, remove or unset it before changing to the installed `gentle-pi` package directory. Then run `node scripts/install-gentle-ai.mjs`. This invokes the package-owned installer without relying on a global binary or npm configuration change. A missing binary can result from skipped lifecycle scripts, but does not prove that lifecycle scripts were disabled.
|
|
133
142
|
|
|
134
143
|
Recommended companion packages:
|
|
135
144
|
|
|
@@ -147,7 +156,7 @@ Then start Pi in a project:
|
|
|
147
156
|
pi
|
|
148
157
|
```
|
|
149
158
|
|
|
150
|
-
`gentle-pi`
|
|
159
|
+
`gentle-pi` installs delegation and review agents at startup. SDD agents, chains, and support are global Pi runtime assets installed on demand, not per-project setup. The first SDD flow in a session runs a one-time SDD preflight for preferences and managed-asset refresh; for natural-language requests, el Gentleman decides when SDD is needed and runs the explicit preflight first.
|
|
151
160
|
|
|
152
161
|
## Quick start
|
|
153
162
|
|
|
@@ -157,8 +166,10 @@ pi
|
|
|
157
166
|
/gentle:sdd-preflight Run or reuse the session SDD preflight explicitly.
|
|
158
167
|
/gentle-sdd-init Create or refresh openspec/config.yaml (openspec/both stores only).
|
|
159
168
|
/gentle:models Assign global model/effort routing to SDD/custom agents.
|
|
169
|
+
/gentle:profiles Create, switch, and manage global agent-model profiles.
|
|
160
170
|
/gentle:persona Switch between gentleman and neutral persona modes.
|
|
161
171
|
/gentle:background-subagents Show or set the managed background-subagents policy, with its deciding source.
|
|
172
|
+
/gentle:review-mode Show or set the receipt-driven development mode (status|enable|disable).
|
|
162
173
|
/gentle:banner Configure startup rose, text logo, and color preset.
|
|
163
174
|
```
|
|
164
175
|
|
|
@@ -283,13 +294,13 @@ flowchart TD
|
|
|
283
294
|
|
|
284
295
|
VALIDATE is informational. Commit, push, PR, and release commands follow ordinary repository policy; RDD never authorizes, rewrites, consumes review state for, or blocks them. Dangerous-command safety and destructive-review consent remain independent.
|
|
285
296
|
|
|
286
|
-
Native contract pairing is exact: this adapter resolves only the integrity-verified package-local Gentle AI v2.
|
|
297
|
+
Native contract pairing is exact: this adapter resolves only the integrity-verified package-local Gentle AI v2.8.1 executable, independently hashes it, then negotiates `gentle-ai.review-integration/v2` outside the repository. Capabilities are cached by that executable digest. Every START, target status, FINALIZE, validate, and BIND-SDD request passes the same contract identifier. Negotiated envelopes decode exactly against the vendored schemas; `recover` routes only the provider-selected `action_disposition`, and optional additions require a future compatible schema/minor that the provider explicitly advertises and the consumer negotiates.
|
|
287
298
|
|
|
288
299
|
Contract `/v2` replaces the Base64 `candidate_diff` reviewer transport of `/v1` with immutable `base_tree`/`candidate_tree` plus an ordered `changed_path_manifest` and never an inline patch. `gentle-pi` negotiates `/v2` only, with no dual-lane fallback; the cutover landed as one atomic commit against gentle-ai v2.2.2 (tracked by the `migrate-review-integration-v2` change), and the `/v1` schemas stay packaged because the `/v2` schemas `$ref` into their fragments. This provider contract version is unrelated to Pi's own internal "compact-v2" review-authority naming used below — the shared digit is coincidental, not a version pairing.
|
|
289
300
|
|
|
290
301
|
Target status owns `current_target`, `unrelated`, `ambiguous`, and `corrupted` applicability and returns one native action. Pi does not reconstruct ordinary authority from provider-private files or choose a lineage from repository-wide history. Restart recovery rebuilds only the derived candidate view from the native Git/content projection, including intended-untracked paths, symlinks, and immutable gitlink identities. Native failure envelopes retain their exact mutation outcome, replayability, required inputs, request digest, and next action. After an unknown or lost mutating result, Pi calls target status before any replay decision and returns only the provider-declared action.
|
|
291
302
|
|
|
292
|
-
Once the pinned gentle-ai runtime (currently v2.
|
|
303
|
+
Once the pinned gentle-ai runtime (currently v2.8.1) has written review authority, rollback MUST preserve every native store and receipt and MUST NOT run a downgraded binary against that repository. Disable the Pi route or roll forward to a compatible authority-aware release instead; deleting authority data or reinstalling an older binary is not a rollback path.
|
|
293
304
|
|
|
294
305
|
### FINALIZE wrapper input
|
|
295
306
|
|
|
@@ -313,6 +324,8 @@ This is the Pi wrapper contract, not the native CLI file contract. The native co
|
|
|
313
324
|
|
|
314
325
|
START derives the complete Git/untracked snapshot, lineage, persisted `low | medium | high` tier, zero/one/four lenses, authored changed lines, and correction budget `min(200, ceil(original_changed_lines / 2))`. Generated `testdata/golden/**` stays in snapshot identity but does not count as authored risk lines.
|
|
315
326
|
|
|
327
|
+
`gentle_review inspect` may stop pre-lineage on the intended-untracked selection, and that stop names its own continuation in `nextStep`. The stop's `expected_untracked_inventory` digest covers untracked path names only (`git ls-files --others --exclude-standard`); nothing is read or hashed at inventory time, and file content is hashed only for the paths actually selected, at candidate freeze. Resolve the stop either with `select-intended-untracked` (empty `intendedUntracked` excludes every eligible path; a subset includes only those paths) or in one call by passing `untrackedScope` to `inspect`: use `"exclude"` without `intendedUntracked`, or `"select"` with it. The retained selection is bound to the resolved native target/candidate and is adopted only by a matching plain START; a fresh inspect invalidates an older pre-lineage selection. To keep a path out of the inventory permanently, ignore it through `.gitignore` or `.git/info/exclude`.
|
|
328
|
+
|
|
316
329
|
Every finding requires `evidence_class`, `causal_disposition`, and concrete changed-hunk, candidate-created-path, differential-test, or before/after proof. Missing IDs are assigned natively and selected-lens results are canonicalized deterministically.
|
|
317
330
|
|
|
318
331
|
Actor output is untrusted data and cannot authorize transitions, fixes, receipts, gates, or delivery.
|
|
@@ -440,7 +453,7 @@ Engram-only mode is different by design: Engram is working memory and does not m
|
|
|
440
453
|
|
|
441
454
|
## SDD preflight and project files
|
|
442
455
|
|
|
443
|
-
`gentle-pi` does not require SDD agents to be copied into every project. The package
|
|
456
|
+
`gentle-pi` does not require SDD agents to be copied into every project. The package installs and refreshes global Pi SDD assets under the Pi agent home on SDD activation, and treats project-local files only as overrides/debug copies. Slash SDD flows such as `/sdd-*`, `/gentle-sdd-init`, and the explicit `/gentle:sdd-preflight` command run a lazy preflight and resolve session-scoped SDD preferences. For natural-language requests, the parent agent decides whether the work should use SDD and must run/reuse `/gentle:sdd-preflight` before continuing.
|
|
444
457
|
|
|
445
458
|
```text
|
|
446
459
|
~/.pi/agent/agents/sdd-*.md
|
|
@@ -448,16 +461,30 @@ Engram-only mode is different by design: Engram is working memory and does not m
|
|
|
448
461
|
~/.pi/agent/gentle-ai/support/strict-tdd*.md
|
|
449
462
|
```
|
|
450
463
|
|
|
451
|
-
|
|
464
|
+
Every new interactive session confirms preflight on its first SDD invocation. Saved preferences and canonical defaults are suggestions: confirm the grouped values or change them. Cancellation leaves preflight unresolved. The parent `subagent_run` boundary enforces this before every shipped SDD child and prepends the exact rendered `## SDD Session Preflight` block through its existing `context`; RPC children consume it and never originate or persist defaults. Missing or malformed transport blocks before spawn. Only a safely distinguishable standalone headless parent retains silent defaults. Session confirmation does not reset project initialization: the cold-start order remains confirmation → `sdd-init` → explore.
|
|
452
465
|
|
|
453
466
|
Canonical values are `auto` execution mode, `openspec` artifact store, `ask-on-risk` delivery strategy, and a `400` changed-line review threshold. The delivery strategy domain is `ask-on-risk`, `auto-chain`, `single-pr`, or `exception-ok`; `chain_strategy` remains deferred until chaining is selected. `exception-ok` requires explicit `size:exception` acceptance and is never inferred. Consent, authorization, security, destructive/publishing, interactive phase approval, and ambiguous-scope gates remain human-controlled.
|
|
454
467
|
|
|
455
|
-
|
|
468
|
+
Startup refreshes only hash-proven delegation and review assets; existing SDD package content is preserved until SDD preflight or an explicit SDD installation command. For the previously unowned `sdd-research.md`, SDD refresh recognizes only the known old content hash (ignoring model/thinking routing), preserves routing, and records ownership. Body-edited or unknown assets remain untouched. Manual refresh uses the same ownership checks, scoped to the selected owner:
|
|
456
469
|
|
|
457
470
|
```text
|
|
471
|
+
/gentle:install-delegation --force
|
|
472
|
+
/gentle:install-review --force
|
|
458
473
|
/gentle:install-sdd --force
|
|
459
474
|
```
|
|
460
475
|
|
|
476
|
+
SDD preflight (including `/gentle-sdd-init`) installs missing SDD agents, chains, and support files and refreshes hash-proven managed SDD copies only. It preserves user edits and project overrides. Applying explicit saved model settings remains a separate, global concern at startup and preflight; the three installer commands do not apply model settings.
|
|
477
|
+
|
|
478
|
+
### Selected research
|
|
479
|
+
|
|
480
|
+
Research capabilities use an explicit package mapping intersected with active Pi tools and the agent's allowlist. Official documentation requires only `fetch_content`; open-web requires all four tools: `web_search`, `source_check`, `fetch_content`, and `get_search_content`. Each must be active and approved/reachable in the child; none is optional. Inventory admission does not prove execution or source-backed evidence. The child receives exact registered names through `--tools` and rechecks its local inventory. SDK-only parent tools are not inherited by a CLI child.
|
|
481
|
+
|
|
482
|
+
Generic MCP and dynamic namespace gateways (including `mcp__context7`) are not method-scoped grants. Context7-only installations remain unavailable through those gateways until a narrow verified route exists; this does not disable supported direct web tools. Explicit source restrictions always apply. Selected supported research must run and record auditable source-backed claims; any selected unavailable or partial class blocks proposal readiness. Bash and invented citations are never fallbacks.
|
|
483
|
+
|
|
484
|
+
This downstream mapping implements the exact Pi grants defined by merged [Gentle AI PR #4420](https://github.com/Gentleman-Programming/gentle-ai/pull/4420) for gentle-ai#3846 and gentle-pi#471. Research admission is enforced locally against active child tools, not through the pinned native binary, so this change does not require a native release or re-pin. The opt-in live integration test verifies actual child tool execution and a source-backed passage independently of inventory checks.
|
|
485
|
+
|
|
486
|
+
Workspace edits do not activate a different installed package path. Activate the updated package separately before expecting these behaviors in new sessions; edited installed assets may still need an explicit human reconciliation.
|
|
487
|
+
|
|
461
488
|
Manual preflight command:
|
|
462
489
|
|
|
463
490
|
```text
|
|
@@ -607,10 +634,75 @@ Config shape (per agent):
|
|
|
607
634
|
|
|
608
635
|
Legacy string entries are still accepted and treated as `model`-only config.
|
|
609
636
|
|
|
637
|
+
## Agent-model profiles
|
|
638
|
+
|
|
639
|
+
```text
|
|
640
|
+
/gentle:profiles
|
|
641
|
+
```
|
|
642
|
+
|
|
643
|
+
Profiles are named, switchable snapshots of the global agent-model routing from `/gentle:models`. The panel fills the terminal, shows the profile list on the left, and a detail pane comparing the selected profile's routing with the currently effective routing, one line per agent in shared columns. Keys:
|
|
644
|
+
|
|
645
|
+
| Key | Action |
|
|
646
|
+
| ------- | ---------------------------------------------------------------------- |
|
|
647
|
+
| `enter` | Apply the selected profile live (writes `models.json`, reconciles agents, sets the orchestrator when the profile defines one). |
|
|
648
|
+
| `c` | Create a new, empty profile. |
|
|
649
|
+
| `s` | Update the selected profile from the current routing (including the orchestrator currently set in `settings.json`). |
|
|
650
|
+
| `d` | Duplicate the selected profile. |
|
|
651
|
+
| `r` | Rename the selected profile (keeps it active if it was active). |
|
|
652
|
+
| `x` | Delete the selected profile (refuses the active profile). |
|
|
653
|
+
| `e` | Export the selected profile to `~/.pi/gentle-ai/profiles.export.json`. |
|
|
654
|
+
| `i` | Import a profile from `~/.pi/gentle-ai/profiles.export.json`. |
|
|
655
|
+
| `j`/`k`, wheel | Scroll the detail pane one line at a time (agents-view style). |
|
|
656
|
+
| `pgup`/`pgdn`, `ctrl+j`/`ctrl+k` | Scroll the detail pane by a page. |
|
|
657
|
+
| `esc` | Close. |
|
|
658
|
+
|
|
659
|
+
Applying a profile writes `~/.pi/gentle-ai/models.json`, then reconciles agent frontmatter and `subagents.json` the same way `/gentle:models` does. The reconciliation happens on the next subagent launch, and that launch still routes with the previous routing — expect one launch of lag after switching. The active profile is persisted so `/gentle:profiles` reopens with the applied profile marked.
|
|
660
|
+
|
|
661
|
+
A profile also carries the orchestrator under the reserved routing key `orchestrator`. Applying a profile that defines it writes `defaultProvider`, `defaultModel`, and `defaultThinkingLevel` to Pi's global `settings.json` (preserving every other key; an unreadable `settings.json` aborts that part and is reported instead of being overwritten). Applying a profile without an `orchestrator` entry never moves the orchestrator, and `s` snapshots the currently effective orchestrator together with the routing. `orchestrator` is reserved: it is not a subagent name, is never written to `subagents.json`, and is not counted as a role.
|
|
662
|
+
|
|
663
|
+
When `profiles.json` is missing, the command seeds one profile named `current` captured from the existing `models.json`, marked active only when `models.json` has routing entries. Profiles or routing entries dropped by normalization are named in a warning instead of being lost silently.
|
|
664
|
+
|
|
665
|
+
Saved globally at:
|
|
666
|
+
|
|
667
|
+
```text
|
|
668
|
+
~/.pi/gentle-ai/profiles.json
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
Store shape:
|
|
672
|
+
|
|
673
|
+
```json
|
|
674
|
+
{
|
|
675
|
+
"kind": "gentle-pi.agent_model_profiles",
|
|
676
|
+
"version": 1,
|
|
677
|
+
"active": "deep-work",
|
|
678
|
+
"profiles": {
|
|
679
|
+
"deep-work": {
|
|
680
|
+
"orchestrator": {
|
|
681
|
+
"model": "anthropic/claude-sonnet-4",
|
|
682
|
+
"thinking": "high"
|
|
683
|
+
},
|
|
684
|
+
"sdd-design": {
|
|
685
|
+
"model": "anthropic/claude-sonnet-4",
|
|
686
|
+
"thinking": "high"
|
|
687
|
+
}
|
|
688
|
+
},
|
|
689
|
+
"current": {}
|
|
690
|
+
}
|
|
691
|
+
}
|
|
692
|
+
```
|
|
693
|
+
|
|
694
|
+
The `profiles` values use the same per-agent shape as `models.json`. Profile names are slugs of 1-64 ASCII characters (letters, numbers, `.`, `_`, `-`, starting with a letter or number); names outside ASCII are rejected, as are the reserved object keys `__proto__`, `constructor`, and `prototype`. A rename or duplicate onto an existing name is refused, renaming the active profile keeps it active, and deleting the active profile is refused. Export and import use a single-profile envelope (`kind: "gentle-pi.agent_model_profile"`, `version: 1`) at `~/.pi/gentle-ai/profiles.export.json`.
|
|
695
|
+
|
|
696
|
+
The store is replaced atomically through a sibling temp file and a rename, so an interrupted write cannot leave truncated JSON behind. Applying a profile writes `profiles.json` first and then materializes routing; if materialization fails, the previous active marker and the previous routing are restored, and anything that could not be restored is named in the warning.
|
|
697
|
+
|
|
610
698
|
## Gentle Shell
|
|
611
699
|
|
|
612
700
|
Gentle Shell is the visual layer gentle-pi puts on top of pi. It follows the Gentle themes: one border language, champagne titles, rose for whatever is alive.
|
|
613
701
|
|
|
702
|
+
In fullscreen at 140 columns or wider, the right sidebar scrolls **✿ Gentle-Pi ✿ → Status → Changes → Agents → TODO** together. The one-line heading is horizontally centered within the usable rail width, with pink flowers and normal white text in the Gentleman themes. Colors follow the active theme; no artwork scaling or custom fonts are used. Narrow/mobile terminals and regular mode retain bottom widgets without the sidebar heading. The original rose and text logo remain in the main chat startup intro.
|
|
703
|
+
|
|
704
|
+
The rail reuses its last frame until something it paints changes, so silent frames stay cheap and live session state still lands on the next frame: a model switch, a new thinking level, context growth, session cost, session name and extension statuses all refresh the Status card without a redraw of the rest of the sidebar.
|
|
705
|
+
|
|
614
706
|
The status bar replaces pi's three-line footer with a single line of segments:
|
|
615
707
|
|
|
616
708
|
```text
|
|
@@ -635,22 +727,27 @@ The prompt wraps pi's editor in a rounded frame with a petal that shows what the
|
|
|
635
727
|
- The hint appears only while the editor is empty.
|
|
636
728
|
- If another extension already installed a custom editor, Gentle Shell leaves it alone.
|
|
637
729
|
|
|
638
|
-
|
|
730
|
+
Changes across this session's registered worktrees show up below the editor and as an aggregate `±N` next to the session branch in the bar:
|
|
639
731
|
|
|
640
732
|
```text
|
|
641
733
|
✎ 3 files · +42 −7 · extensions/gentle-shell.ts, lib/shell-bar.ts, tests/x.test.ts · /gentle:changes
|
|
642
734
|
```
|
|
643
735
|
|
|
644
|
-
-
|
|
736
|
+
- Each registered root shows **all** dirty files: plain `git diff` against HEAD plus untracked files, including edits that predate this session. There are no baselines or file-level attribution filters.
|
|
737
|
+
- The canonical session cwd root is included automatically. Successful standard `read`, `write`, `edit`, `grep`, `find`, and `ls` calls register their target worktree after completion. Failed calls, shell command text, and prose never register roots. Only roots sharing the session's Git common directory are accepted.
|
|
738
|
+
- For opaque shell use or worktrees used earlier, call `session_worktree_register` with `{"path":"/path/to/worktree"}`. Registration is explicit, canonicalized, and deduplicated; unrelated dirty siblings remain invisible without an ignored-roots list.
|
|
739
|
+
- The root registry persists in Pi custom entries (`gentle-pi.session-worktree/v1`). Exit/resume and `/reload` restore the same session UUID; `/tree` keeps roots session-wide. New sessions, `/fork`, and `/clone` ignore inherited registrations with another UUID. Clean roots stay registered but hidden until dirty; missing/prunable roots are skipped safely. Ephemeral `--no-session` runs cannot persist across exit.
|
|
645
740
|
- Counts refresh after every tool call, at the end of each turn, and every 5 seconds in the background, so edits made from nvim or another agent show up without touching pi. `GENTLE_PI_SHELL_CHANGES_WATCH_MS` changes the interval; `off` leaves only the tool-driven refresh. Outside a git repository the widget stays hidden.
|
|
646
741
|
- On narrow terminals the file list is dropped before the summary is truncated.
|
|
647
742
|
|
|
648
|
-
`/gentle:changes` or `alt+g` opens the
|
|
743
|
+
`/gentle:changes` or `alt+g` opens the framed two-pane viewer. Dirty worktrees are accordion groups in the left pane, labeled with branch and directory basename (`detached` when there is no branch). Expand groups to reveal indented changed files; multiple groups can stay expanded. The right pane previews the selected file's lazy-loaded diff, or shows the selected group's full directory and summary. Clean, bare, missing, and prunable roots remain hidden; untracked-only roots are included.
|
|
649
744
|
|
|
650
|
-
- `j`/`k` or
|
|
651
|
-
-
|
|
745
|
+
- `j`/`k` or up/down traverse visible groups and files, keeping the selection in view. On a group, `enter`, space, or right arrow toggles expansion. Left arrow or backspace moves a file selection to its parent, or collapses the selected group. `ctrl+j`/`ctrl+k` or `pgdn`/`pgup` scroll the diff; `esc` or `q` closes the overlay.
|
|
746
|
+
- In fullscreen mode, left-click selects a visible file and loads its diff without opening the editor. Mouse wheels scroll the file list and selected diff independently; hovering does not select or open anything.
|
|
747
|
+
- Opening, pressing `r`, and the background/overlay refresh cadence scan only registered roots. Worktree discovery supplies branch labels, never registration. No changes in registered roots means no widget and an informational notice instead of an overlay.
|
|
748
|
+
- While the overlay is open, git is polled every 2 seconds, so edits made from nvim, another agent, or a checkout show up in place. Expansion and selection stick to the raw worktree root and file path across refreshes; a diff reloads when its counts move.
|
|
652
749
|
- `GENTLE_PI_SHELL_CHANGES_KEY` rebinds the shortcut (pi key syntax, for example `ctrl+shift+g`); `off` disables it. On macOS, `alt+g` needs the terminal to send Option as Meta.
|
|
653
|
-
- `o` (or `enter`) opens the selected file in `$VISUAL` or `$EDITOR
|
|
750
|
+
- On a file row, `o` (or `enter`) opens the selected file in `$VISUAL` or `$EDITOR`, with the selected worktree as the editor's working directory, and returns to pi when the editor exits. Diff lookup and caches are also scoped to that root; identical relative filenames in other worktrees cannot share a diff.
|
|
654
751
|
- Untracked files are diffed against an empty file so new files show their full content.
|
|
655
752
|
|
|
656
753
|
Subscription usage shows in the bar after the cost, and `/gentle:usage` opens a panel with every window per provider:
|
|
@@ -695,12 +792,19 @@ Agent paths follow `GENTLE_PI_AGENT_HOME`, then `PI_CODING_AGENT_DIR`, then `~/.
|
|
|
695
792
|
|
|
696
793
|
Every subagent is its own `pi --mode rpc` child process, so the terminal never runs subagent work: the host reads JSON lines, applies each one as a small delta to a bounded per-task thread, and notifies only the listeners of that task. A task-mode child's question (`ctx.ui.select`, `confirm`, `input`, `editor`) reaches you as an ordinary pi dialog; a background child's question is dismissed. Subagents have no automatic total execution timeout: a long-running child remains live while it continues emitting RPC events. A silent child still times out through the configurable `stall_timeout_ms` watchdog (default four minutes). Closing pi stops the children that are still running.
|
|
697
794
|
|
|
698
|
-
- `subagent_list_agents`, `subagent_run` (`agent`, `task`, `label?`, `context?`, `mode?` task or background), `subagent_status`, `subagent_result`, `subagent_list_tasks`, `subagent_cancel`, `subagent_send_message` (steer a running child), `subagent_continue` (resume a finished task in its own session).
|
|
795
|
+
- `subagent_list_agents`, `subagent_run` (`agent`, `task`, `label?`, `context?`, `workspace_root?`, `mode?` task or background), `subagent_status`, `subagent_result`, `subagent_list_tasks`, `subagent_reply` (one current-session reply to a live child query), `subagent_cancel`, `subagent_send_message` (steer a running child), `subagent_continue` (resume a finished task in its own session).
|
|
796
|
+
- `subagent_run.workspace_root` selects an existing worktree in the session's Git clone. Validation happens before queueing; the child runs at that canonical root. Successful OS spawn registers the root in the originating parent session, including delayed queued launches, even without an active shell listener. Failed spawns do not register. `subagent_continue` retains the previous task's cwd; status and task details expose it.
|
|
699
797
|
- A background task's result comes back to the model as a `gentle-agents.result` message, drawn as a rose card, and starts a new turn when the agent is idle; the model never polls.
|
|
798
|
+
- A configured child can call `subagent_parent_message` with bounded, well-formed Unicode text. Notifications retain their existing admission semantics. A `kind: "query"` waits for one strictly correlated `subagent_reply` for at most 30 seconds; each child has at most four pending queries, and disconnect, timeout, stop, and send failure settle each request once. The current parent session alone can reply. The first admitted task-mode query ends the original tool response while its child keeps running; its eventual non-cancelled completion returns once as a follow-up only if that same session is still active. Channel closure prevents later sends and automatic retry is not provided. Peer transport, offline delivery, retries, and broadcasts are unsupported.
|
|
700
799
|
- The card shows the active session's tasks only: after `/new` or `/resume` the earlier session's tasks leave it and come back with their session. Finished rows stay for one minute (three at most), and the card spends at most a quarter of the terminal (three to eight rows) on tasks; beyond that the rest fold into one `… N more · alt+a to view` line so the editor never leaves the screen. Questions and running work keep their rows first.
|
|
701
|
-
- `/gentle:agents` or `alt+a` opens
|
|
800
|
+
- `/gentle:agents` or `alt+a` opens a full-terminal overlay. At 60+ columns, the split view shows groups/tasks beside the retained semantic thread; uppercase `F` or **Fullscreen** expands that thread. At 12–59 columns, click a current subagent directly to inspect its thread; in All sessions, first select its orchestrator. `Enter`/`Tab` also enter a narrow selection. **Back** or `Escape` returns one level, closing only at the root; **Close** or `q` closes globally without cancelling children. Selection and manual thread scrolling survive Back and resize.
|
|
801
|
+
- Mouse controls take priority over keyboard hints: **Follow** (`f`), **Open session** (`o`), **Stop** (`s`, legacy `c`, owned active tasks only), and **Scope** (`a`). A compact footer's `>` cycles through actions. Scope switches between this session's direct active children and all open orchestrators, including idle ones. Open writes a markdown transcript for `$EDITOR`, not a resumed child session. `j`/`k` move through lists or scroll an expanded thread; `ctrl+j`/`ctrl+k` and Page Down/Up page the thread. In Pi fullscreen mode, the wheel scrolls the viewport under the pointer; regular terminal mode does not capture mouse input. Below 12 columns or three rows, only a bounded Close cell remains; zero-sized terminals render nothing.
|
|
802
|
+
- The thread displays all retained Text, Thinking, Note, and Tool content without an additional presentation cap; existing store limits and truncation markers still apply. Only the selected task is subscribed while the overlay is open.
|
|
803
|
+
- Thread entries are presented as labeled Text, Thinking, Note, or Tool blocks; tool blocks show their status and nonempty output.
|
|
804
|
+
- Current scope has no orchestrator wrapper and excludes every terminal task. All sessions discovers open Pi instances sharing the same agent profile, even across repositories; it does not infer open sessions from retained tasks. Directory headings support left/right and mouse expansion, and cannot stop or open a task. Peer children and their retained threads are read-only: no local stop, editor-open, or continuation routing, and no import into the local task store.
|
|
805
|
+
- Presence refresh is paged while the overlay is open. Graceful shutdown withdraws an instance; after abrupt closure its last heartbeat may remain visible for up to 15 seconds plus the time to complete the next directory refresh. A recent heartbeat is a heuristic, not proof that a process is alive. Same-profile, same-user processes share retained activity text; this is not an authorization channel.
|
|
702
806
|
- `alt+s` confirms stopping the current active or queued subagents owned by the current process. `GENTLE_PI_AGENTS_STOP_KEY` rebinds it; `off` disables it.
|
|
703
|
-
- Finished tasks are written to `~/.pi/agent/gentle-agents/tasks/` (one JSON per task, newest `history_max_tasks` kept, default 200) and come back on demand for `subagent_result
|
|
807
|
+
- Finished tasks are written to `~/.pi/agent/gentle-agents/tasks/` (one JSON per task, newest `history_max_tasks` kept, default 200) and come back on demand for `subagent_result` and `subagent_continue`, never as overlay history. Child sessions live under `~/.pi/agent/gentle-agents/sessions/`.
|
|
704
808
|
- `ctrl+shift+a` collapses the card to its first row (`GENTLE_PI_AGENTS_KEY`), `GENTLE_PI_AGENTS_VIEW_KEY` rebinds the overlay, `GENTLE_PI_AGENTS_PI` overrides the pi command used for children, and `GENTLE_PI_AGENTS=0` disables the tools and the card.
|
|
705
809
|
|
|
706
810
|
### Gentle Todo
|
|
@@ -731,21 +835,26 @@ Set `GENTLE_PI_SHELL=0` to keep pi's built-in footer and editor.
|
|
|
731
835
|
| -------------------------------- | ------------------------------------------------------------------- |
|
|
732
836
|
| `/gentle:status` | Shows package, SDD asset, OpenSpec, and global model config status. |
|
|
733
837
|
| `/gentle:doctor` | Runs read-only diagnostics for SDD assets, model/persona config, memory tools, and safety guards. |
|
|
838
|
+
| `/gentle:sdd-preflight` | Runs or reuses the lazy SDD preflight for this Pi session. |
|
|
734
839
|
| `/gentle:models` | Opens global model + effort assignment UI. Press `x` to export and `r` to restore saved routing. |
|
|
840
|
+
| `/gentle:profiles` | Opens global agent-model profiles: apply live, create, update, duplicate, rename, delete, export, and import. |
|
|
735
841
|
| `/gentle:persona` | Switches global persona mode, with project override support. |
|
|
736
842
|
| `/gentle:background-subagents` | Shows or sets the managed background-subagents policy (`status\|enable\|disable`), naming the source that decided it. |
|
|
737
843
|
| `/gentle:telemetry` | Shows or changes the local Gentle AI telemetry trigger (`status\|enable\|disable\|preview`). |
|
|
844
|
+
| `/gentle:review-mode` | Shows or sets the receipt-driven development mode (`status\|enable\|disable`); user-initiated only, Pi automation never toggles it. |
|
|
738
845
|
| `/gentle:banner` | Configures startup banner rose, text logo, and color preset. |
|
|
739
846
|
| `/gentle:toggle-rose` | Toggles the startup rose. |
|
|
740
847
|
| `/gentle:toggle-text-logo` | Toggles the startup text logo. |
|
|
741
848
|
| `/gentle:banner-color` | Selects a startup banner color preset. |
|
|
742
849
|
| `/gentle-sdd-init` | Initializes or refreshes `openspec/config.yaml` (openspec/both stores only). |
|
|
743
|
-
| `/gentle:install-
|
|
744
|
-
| `/gentle:install-
|
|
850
|
+
| `/gentle:install-delegation` | Installs missing global delegation agents only; `--force` refreshes managed copies. |
|
|
851
|
+
| `/gentle:install-review` | Installs missing global review agents and chains only; `--force` refreshes managed copies. |
|
|
852
|
+
| `/gentle:install-sdd` | Installs missing global SDD agents, chains, and support only, without overwriting files. |
|
|
853
|
+
| `/gentle:install-sdd --force` | Refreshes only managed global SDD assets, preserving user edits and project overrides. |
|
|
745
854
|
| `/skill-registry:refresh` | Regenerates `.atl/skill-registry.md`. |
|
|
746
855
|
| `/skill-creation` | Creates or updates an LLM-first skill using the packaged `gentle-ai-skill-creator` contract and style guide. |
|
|
747
856
|
|
|
748
|
-
|
|
857
|
+
Startup installs and refreshes only delegation and review assets. SDD assets are installed/refreshed on demand; status and doctor report never-installed SDD assets as informational, while missing or stale assets from an existing installation identify their owner-specific repair command. User and project overrides are reported separately from package drift. Package refresh preserves overrides; explicit saved model settings may still update existing SDD or custom-agent routing at startup.
|
|
749
858
|
|
|
750
859
|
### Background subagents policy
|
|
751
860
|
|
|
@@ -770,7 +879,7 @@ Both files use the strict shape `{"schema":"gentle-pi.background-subagents/v1","
|
|
|
770
879
|
|
|
771
880
|
Because the project file outranks the global one, `enable` still writes the global file but reports plainly when a project file keeps the effective policy unchanged. The resolved capability (`ready` or `absent`) reports whether `subagent_run` is actually callable in this session; a policy of `on` with capability `absent` means Gentle Agents is disabled or the retired subagents package is still installed.
|
|
772
881
|
|
|
773
|
-
Startup banner settings
|
|
882
|
+
Startup banner settings remain global in `banner.json` under `GENTLE_PI_CONFIG_HOME` (default `~/.pi/gentle-ai`). Existing `showRose` and `showTextLogo` opt-outs independently control the main startup artwork; both default to enabled. Changes apply on the next session or `/reload`. Color presets are `pink` (default), `cyan`, `yellow`, and `green`. The static sidebar heading is independent of these preferences and follows the active theme.
|
|
774
883
|
|
|
775
884
|
Startup flag:
|
|
776
885
|
|
|
@@ -814,25 +923,25 @@ Memory contract for SDD delegation:
|
|
|
814
923
|
|
|
815
924
|
## Telemetry
|
|
816
925
|
|
|
817
|
-
`gentle-pi`
|
|
926
|
+
`gentle-pi` observes approved sanitized runtime usage fields in memory and asynchronously invokes `gentle-ai telemetry runtime send --json` once per accepted event. It never persists metric data, retries, or waits for delivery in provider callbacks; busy or failed attempts are silently discarded. [gentle-ai](https://github.com/Gentleman-Programming/gentle-ai) owns native delivery and the existing opt-out policy. See [Telemetry](docs/telemetry.md) for fields and source limitations.
|
|
818
927
|
|
|
819
|
-
|
|
928
|
+
Separately, at primary session start (never for a named or SDD sub-agent), Gentle Pi asks the local `gentle-ai` binary to handle its own install/heartbeat telemetry: it spawns `gentle-ai telemetry trigger --json` detached, with a 3 s deadline, discards its output, and never blocks session start or surfaces an error — an older binary without the verb is silently treated as nothing to do. This runs at most once per process.
|
|
820
929
|
|
|
821
930
|
Install counts for `gentle-pi` and `gentle-engram` come from npm download statistics; the package itself never emits an install event.
|
|
822
931
|
|
|
823
932
|
To opt out:
|
|
824
933
|
|
|
825
934
|
- `/gentle:telemetry disable` — asks the local `gentle-ai` binary to disable telemetry (also `status` and `preview` to inspect it without leaving Pi).
|
|
826
|
-
- `DO_NOT_TRACK=1` — Gentle Pi
|
|
935
|
+
- `DO_NOT_TRACK=1` — Gentle Pi suppresses runtime usage telemetry and the install/heartbeat trigger; `gentle-ai` also honors this standard independently.
|
|
827
936
|
- `GENTLE_AI_TELEMETRY=0` — same effect, `gentle-ai`'s own environment switch.
|
|
828
937
|
|
|
829
|
-
`CI=true` also suppresses the trigger, since automated runs are not a real usage signal.
|
|
938
|
+
`CI=true` also suppresses runtime usage telemetry and the trigger, since automated runs are not a real usage signal.
|
|
830
939
|
|
|
831
940
|
## Package contents
|
|
832
941
|
|
|
833
942
|
| Path | Purpose |
|
|
834
943
|
| ------------------------------ | ---------------------------------------------------------------------------------------------------------- |
|
|
835
|
-
| `extensions/gentle-ai.ts` | Injects identity, orchestrates native review authority, refreshes
|
|
944
|
+
| `extensions/gentle-ai.ts` | Injects identity, orchestrates native review authority, refreshes delegation/review assets at startup and SDD on demand, registers commands, applies model/persona config, and enforces runtime safety. |
|
|
836
945
|
| `lib/native-review-cli.ts` | Strict package-local adapter for Gentle AI START, FINALIZE, VALIDATE, SDD binding, and status contracts. |
|
|
837
946
|
| `lib/review-integration-v2.ts` | Strict consumer decoder for negotiated capabilities, operations, target status, projections, repair, and failures against contract `review-integration/v2` (active today). |
|
|
838
947
|
| `lib/review-candidate-view.ts` | Builds immutable changed-scope actor views while preserving full-tree, path, mode, symlink, and index integrity. |
|
|
@@ -842,7 +951,7 @@ To opt out:
|
|
|
842
951
|
| `scripts/gentle-ai-installer.mjs` | Installs signed Darwin/Linux archives or exact Go SumDB-verified Windows source builds into the package-local runtime. |
|
|
843
952
|
| `contracts/review-integration/v1/` | Byte-identical provider schemas and conformance fixtures for contract `review-integration/v1`, hash-checked before packaging; retained on disk permanently because `/v2`'s schemas `$ref` into these fragments. |
|
|
844
953
|
| `contracts/review-integration/v2/` | Byte-identical provider schemas and conformance fixtures for contract `review-integration/v2` (immutable `base_tree`/`candidate_tree`, ordered `changed_path_manifest`, no inline candidate diff), hash-checked before packaging. |
|
|
845
|
-
| `extensions/startup-banner.ts` | Shows and configures the startup intro, color presets, compact runtime panel
|
|
954
|
+
| `extensions/startup-banner.ts` | Shows and configures the startup intro, color presets, and compact runtime panel. |
|
|
846
955
|
| `extensions/sdd-init.ts` | Registers `/gentle-sdd-init` for OpenSpec initialization. |
|
|
847
956
|
| `extensions/skill-registry.ts` | Maintains `.atl/skill-registry.md` from project/user skills and closes file watchers on shutdown. |
|
|
848
957
|
| `assets/orchestrator.md` | Parent-session orchestration contract (always-on core). |
|
|
@@ -850,7 +959,7 @@ To opt out:
|
|
|
850
959
|
| `assets/orchestrator-memory.md` | Lazy-loaded SDD memory phase table, artifact keys, and lifecycle rule. |
|
|
851
960
|
| `assets/orchestrator-skills.md` | Lazy-loaded skill registry fallback semantics and intent-driven skill discovery. |
|
|
852
961
|
| `assets/sdd-orchestrator-workflow.md` | Lazy-loaded SDD workflow surface for the parent orchestrator. |
|
|
853
|
-
| `assets/agents/` | SDD agents installed as global Pi runtime assets. |
|
|
962
|
+
| `assets/agents/` | Delegation, review, and on-demand SDD agents installed as global Pi runtime assets. |
|
|
854
963
|
| `assets/chains/` | SDD chains installed as global Pi runtime assets. |
|
|
855
964
|
| `assets/support/` | Strict TDD support docs for apply/verify phases. |
|
|
856
965
|
| `skills/` | Gentle AI delivery and collaboration skills. |
|
|
@@ -15,6 +15,10 @@ You are the package-owned implementation writer for Gentle AI.
|
|
|
15
15
|
|
|
16
16
|
Use this agent only for scoped implementation work that is too large for the parent to execute inline but does not require SDD or Judgment Day artifact protocols. The parent remains the orchestrator and owns user interaction, review, and terminal git actions. Never delegate or invoke `subagent_*` tools.
|
|
17
17
|
|
|
18
|
+
## Native review boundary
|
|
19
|
+
|
|
20
|
+
The primary parent owns candidate review disposition and lifecycle, including preflight and any explicit candidate-level opt-out. Never search for, request, or invoke review tools, including `gentle_review`. Missing review tools never block this worker's implementation or verification handoff. Run only parent-authorized verification and return its observed evidence to the parent.
|
|
21
|
+
|
|
18
22
|
## Context contract
|
|
19
23
|
|
|
20
24
|
Before repository work:
|
|
@@ -14,6 +14,24 @@ You are the Judgment Day fix agent for Gentle AI.
|
|
|
14
14
|
|
|
15
15
|
Apply surgical fixes for confirmed Judgment Day findings only. Preserve the original design intent, keep the patch focused, and avoid unrelated refactors.
|
|
16
16
|
|
|
17
|
+
## Required dispatch shape
|
|
18
|
+
|
|
19
|
+
The runtime accepts this agent only as one standalone `agent: "jd-fix-agent"` dispatch carrying this exact Markdown shape. Judgment Day is independent: it neither enables nor replaces ordinary review; a separately requested ordinary review remains independent. It requires no graph-v1 or native review lineage. The parent replaces the example ID, frozen ledger hash, row data, and surface with controller-authorized values. The correction batch contains only one round (`1 of 2` or `2 of 2`) and one lowercase SHA-256. The exact frozen finding rows are one JSON object per line, use only the canonical row fields, and exactly match the authorized IDs.
|
|
20
|
+
|
|
21
|
+
```markdown
|
|
22
|
+
## Judgment Day activation
|
|
23
|
+
User explicitly requested Judgment Day.
|
|
24
|
+
## Exact authorized severe IDs
|
|
25
|
+
- `JD-A-001`
|
|
26
|
+
## Judgment Day correction batch
|
|
27
|
+
Round: 1 of 2.
|
|
28
|
+
Frozen ledger SHA-256: `aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa`
|
|
29
|
+
## Exact frozen finding rows
|
|
30
|
+
{"id":"JD-A-001","lens":"judgment-day","location":"path/to/authorized-file.ts:1","severity":"CRITICAL","status_at_freeze":"open","evidence_class":"deterministic","evidence_claim":"Concrete user-impact claim supported by the frozen location."}
|
|
31
|
+
## Allowed edit surfaces
|
|
32
|
+
path/to/authorized-file.ts
|
|
33
|
+
```
|
|
34
|
+
|
|
17
35
|
Rules:
|
|
18
36
|
|
|
19
37
|
- Edit only the files needed to resolve confirmed findings.
|
|
@@ -22,7 +22,7 @@ Rules:
|
|
|
22
22
|
|
|
23
23
|
## Review ledger contract
|
|
24
24
|
|
|
25
|
-
Judgment Day
|
|
25
|
+
Judgment Day is independent: it neither enables nor replaces ordinary review; a separately requested ordinary review remains independent.
|
|
26
26
|
|
|
27
27
|
Judgment Day starts with exactly two blind judges and zero refuters.
|
|
28
28
|
|
|
@@ -22,7 +22,7 @@ Rules:
|
|
|
22
22
|
|
|
23
23
|
## Review ledger contract
|
|
24
24
|
|
|
25
|
-
Judgment Day
|
|
25
|
+
Judgment Day is independent: it neither enables nor replaces ordinary review; a separately requested ordinary review remains independent.
|
|
26
26
|
|
|
27
27
|
Judgment Day starts with exactly two blind judges and zero refuters.
|
|
28
28
|
|
|
@@ -16,6 +16,10 @@ tools:
|
|
|
16
16
|
|
|
17
17
|
You are the SDD apply executor for Gentle AI.
|
|
18
18
|
|
|
19
|
+
## Parent Preflight Transport
|
|
20
|
+
|
|
21
|
+
Consume the exact `## SDD Session Preflight` block from parent-provided context. It is parent authority, not a prompt to infer or persist defaults. If absent or malformed, return `blocked` without phase work. A delegated RPC child never confirms or persists SDD choices.
|
|
22
|
+
|
|
19
23
|
## Skill Resolution Contract
|
|
20
24
|
|
|
21
25
|
Use your assigned executor/phase skill for this SDD phase. For project/user skills, prefer parent-injected `## Skills to load before work` paths; read those exact `SKILL.md` files before work. Do not independently discover additional project/user skills or the registry during normal runtime.
|
|
@@ -42,16 +46,14 @@ Never claim persistence you did not perform.
|
|
|
42
46
|
|
|
43
47
|
## Status and Action Context Guard
|
|
44
48
|
|
|
45
|
-
Before writing code, consume
|
|
49
|
+
Before writing code, consume validated native `gentle-ai.sdd-status` v2 from the parent. If missing, request native read-only status for the selected change and canonical workspace. Never reconstruct readiness locally or from Engram artifacts; native `nextRecommended` and `phaseInstructions` own the route for every store. Reject malformed or unsupported actions before work, without prose inference or fallback.
|
|
46
50
|
|
|
47
|
-
|
|
48
|
-
- `engram` (or `both` without openspec/): search Engram for `sdd/{change}/tasks`, `sdd/{change}/spec`, and `sdd/{change}/design` using the Engram memory tools injected by the memory provider. Proceed with implementation once those artifacts are confirmed present.
|
|
49
|
-
- `none`: there is no persistent backend. Return artifacts inline and ask the user to provide required inputs (tasks, spec, design) or acknowledge that no persistent artifact store is available.
|
|
51
|
+
Read artifacts from the selected backend for implementation context, not as replacement lifecycle authority. Status grants no writes. Explicit continuation may prepare only the exact canonical marker path confirmed by the current human; denial, cancellation, missing UI, and workspace mismatch prohibit mutation. Marker preparation grants no source roots or persistent authority.
|
|
50
52
|
|
|
51
53
|
Stop with `blocked` before editing if:
|
|
52
54
|
|
|
53
55
|
- active change selection is missing or ambiguous;
|
|
54
|
-
-
|
|
56
|
+
- native apply dependency is blocked;
|
|
55
57
|
- required apply artifacts are missing (confirmed by artifact store);
|
|
56
58
|
- `actionContext.mode: workspace-planning` and no `allowedEditRoots` are provided;
|
|
57
59
|
- any target file is outside the authoritative workspace or allowed edit roots.
|
|
@@ -15,6 +15,10 @@ tools:
|
|
|
15
15
|
|
|
16
16
|
You are the SDD archive executor for Gentle AI.
|
|
17
17
|
|
|
18
|
+
## Parent Preflight Transport
|
|
19
|
+
|
|
20
|
+
Consume the exact `## SDD Session Preflight` block from parent-provided context. It is parent authority, not a prompt to infer or persist defaults. If absent or malformed, return `blocked` without phase work. A delegated RPC child never confirms or persists SDD choices.
|
|
21
|
+
|
|
18
22
|
## Skill Resolution Contract
|
|
19
23
|
|
|
20
24
|
Use your assigned executor/phase skill for this SDD phase. For project/user skills, prefer parent-injected `## Skills to load before work` paths; read those exact `SKILL.md` files before work. Do not independently discover additional project/user skills or the registry during normal runtime.
|
|
@@ -43,9 +47,7 @@ Archive a completed SDD change. In file-backed modes, this requires canonical sp
|
|
|
43
47
|
|
|
44
48
|
Before archive work, consume structured SDD status from the parent prompt. If missing, produce the same fields using this lookup order: project override `.pi/gentle-ai/support/sdd-status-contract.md`, then globally installed `~/.pi/agent/gentle-ai/support/sdd-status-contract.md`, then the embedded status contract. Do not use `assets/support/...` as a runtime path; that is only the package source path before installation.
|
|
45
49
|
|
|
46
|
-
|
|
47
|
-
- `engram` (or `both` without openspec/): refer to the Artifact Store Modes section — resolve readiness by checking Engram for `sdd/{change}/verify-report` using the Engram memory tools injected by the memory provider, then record the archive report in Engram without filesystem sync or folder moves.
|
|
48
|
-
- `none`: there is no persistent backend. Return a closure summary inline and ask the user to confirm that verification has passed before proceeding.
|
|
50
|
+
Consume native `gentle-ai.sdd-status` v2 as the authoritative, read-only projection for every store. Do not recompute archive readiness from OpenSpec or Engram artifacts, fabricate status, or use a store-specific bypass. If native status is unavailable, malformed, or ambiguous, stop and report it; only its selected action, dependency, and `actionContext` can authorize archive work.
|
|
49
51
|
|
|
50
52
|
Stop with `blocked` if:
|
|
51
53
|
|
|
@@ -14,6 +14,10 @@ tools:
|
|
|
14
14
|
|
|
15
15
|
You are the SDD design executor for Gentle AI.
|
|
16
16
|
|
|
17
|
+
## Parent Preflight Transport
|
|
18
|
+
|
|
19
|
+
Consume the exact `## SDD Session Preflight` block from parent-provided context. It is parent authority, not a prompt to infer or persist defaults. If absent or malformed, return `blocked` without phase work. A delegated RPC child never confirms or persists SDD choices.
|
|
20
|
+
|
|
17
21
|
## Skill Resolution Contract
|
|
18
22
|
|
|
19
23
|
Use your assigned executor/phase skill for this SDD phase. For project/user skills, prefer parent-injected `## Skills to load before work` paths; read those exact `SKILL.md` files before work. Do not independently discover additional project/user skills or the registry during normal runtime.
|
|
@@ -13,6 +13,10 @@ tools:
|
|
|
13
13
|
|
|
14
14
|
You are the SDD explore executor for Gentle AI.
|
|
15
15
|
|
|
16
|
+
## Parent Preflight Transport
|
|
17
|
+
|
|
18
|
+
Consume the exact `## SDD Session Preflight` block from parent-provided context. It is parent authority, not a prompt to infer or persist defaults. If absent or malformed, return `blocked` without phase work. A delegated RPC child never confirms or persists SDD choices.
|
|
19
|
+
|
|
16
20
|
## Skill Resolution Contract
|
|
17
21
|
|
|
18
22
|
Use your assigned executor/phase skill for this SDD phase. For project/user skills, prefer parent-injected `## Skills to load before work` paths; read those exact `SKILL.md` files before work. Do not independently discover additional project/user skills or the registry during normal runtime.
|
|
@@ -17,6 +17,10 @@ tools:
|
|
|
17
17
|
|
|
18
18
|
You are the SDD init executor for Gentle AI.
|
|
19
19
|
|
|
20
|
+
## Parent Preflight Transport
|
|
21
|
+
|
|
22
|
+
Consume the exact `## SDD Session Preflight` block from parent-provided context. It is parent authority, not a prompt to infer or persist defaults. If absent or malformed, return `blocked` without phase work. A delegated RPC child never confirms or persists SDD choices.
|
|
23
|
+
|
|
20
24
|
## Skill Resolution Contract
|
|
21
25
|
|
|
22
26
|
Use your assigned executor/phase skill for this SDD phase. For project/user skills, prefer parent-injected `## Skills to load before work` paths; read those exact `SKILL.md` files before work. Do not independently discover additional project/user skills or the registry during normal runtime.
|
|
@@ -16,6 +16,10 @@ tools:
|
|
|
16
16
|
|
|
17
17
|
You are the SDD onboard executor for Gentle AI.
|
|
18
18
|
|
|
19
|
+
## Parent Preflight Transport
|
|
20
|
+
|
|
21
|
+
Consume the exact `## SDD Session Preflight` block from parent-provided context. It is parent authority, not a prompt to infer or persist defaults. If absent or malformed, return `blocked` without phase work. A delegated RPC child never confirms or persists SDD choices.
|
|
22
|
+
|
|
19
23
|
## Skill Resolution Contract
|
|
20
24
|
|
|
21
25
|
Use your assigned executor/phase skill for this SDD phase. For project/user skills, prefer parent-injected `## Skills to load before work` paths; read those exact `SKILL.md` files before work. Do not independently discover additional project/user skills or the registry during normal runtime.
|
|
@@ -14,6 +14,10 @@ tools:
|
|
|
14
14
|
|
|
15
15
|
You are the SDD proposal executor for Gentle AI.
|
|
16
16
|
|
|
17
|
+
## Parent Preflight Transport
|
|
18
|
+
|
|
19
|
+
Consume the exact `## SDD Session Preflight` block from parent-provided context. It is parent authority, not a prompt to infer or persist defaults. If absent or malformed, return `blocked` without phase work. A delegated RPC child never confirms or persists SDD choices.
|
|
20
|
+
|
|
17
21
|
## Skill Resolution Contract
|
|
18
22
|
|
|
19
23
|
Use your assigned executor/phase skill for this SDD phase. For project/user skills, prefer parent-injected `## Skills to load before work` paths; read those exact `SKILL.md` files before work. Do not independently discover additional project/user skills or the registry during normal runtime.
|